From d40b2ee60ef161044bcaf05a8b36aa60eac633cc Mon Sep 17 00:00:00 2001 From: lgao4 Date: Wed, 9 Nov 2011 04:32:08 +0000 Subject: [PATCH] =?UTF-8?q?Sync=20BaseTool=20trunk=20(version=20r2397)=20i?= =?UTF-8?q?nto=20EDKII=20BaseTools.=20=20The=20change=20mainly=20includes?= =?UTF-8?q?=201.=20Fix=20the=20issue=20that=20root=20directory=20of=20disk?= =?UTF-8?q?=20can=E2=80=99t=20be=20used=20as=20WORKSPACE.=202.=20Update=20?= =?UTF-8?q?AutoGen=20code=20style=20to=20pass=20C++=20compiler.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lgao4 Reviewed-by: jsu1 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12676 6f19259b-4bc3-4df7-8a09-765794883524 --- BaseTools/Bin/Win32/BPDG.exe | Bin 579301 -> 579301 bytes BaseTools/Bin/Win32/BootSectImage.exe | Bin 434176 -> 434176 bytes BaseTools/Bin/Win32/EfiLdrImage.exe | Bin 421888 -> 421888 bytes BaseTools/Bin/Win32/EfiRom.exe | Bin 446464 -> 446464 bytes BaseTools/Bin/Win32/Fpd2Dsc.exe | Bin 1437217 -> 1437217 bytes BaseTools/Bin/Win32/GenBootSector.exe | Bin 425984 -> 425984 bytes BaseTools/Bin/Win32/GenCrc32.exe | Bin 425984 -> 425984 bytes BaseTools/Bin/Win32/GenDepex.exe | Bin 637593 -> 637593 bytes BaseTools/Bin/Win32/GenFds.exe | Bin 1640544 -> 1640705 bytes BaseTools/Bin/Win32/GenFfs.exe | Bin 430080 -> 430080 bytes BaseTools/Bin/Win32/GenFv.exe | Bin 479232 -> 479232 bytes BaseTools/Bin/Win32/GenFw.exe | Bin 495616 -> 495616 bytes BaseTools/Bin/Win32/GenPage.exe | Bin 421888 -> 421888 bytes BaseTools/Bin/Win32/GenPatchPcdTable.exe | Bin 631597 -> 631597 bytes BaseTools/Bin/Win32/GenSec.exe | Bin 446464 -> 446464 bytes BaseTools/Bin/Win32/GenVtf.exe | Bin 446464 -> 446464 bytes BaseTools/Bin/Win32/LzmaCompress.exe | Bin 397312 -> 397312 bytes BaseTools/Bin/Win32/MigrationMsa2Inf.exe | Bin 1382631 -> 1382631 bytes BaseTools/Bin/Win32/PatchPcdValue.exe | Bin 563443 -> 563443 bytes BaseTools/Bin/Win32/Spd2Dec.exe | Bin 1411218 -> 1411218 bytes BaseTools/Bin/Win32/Split.exe | Bin 425984 -> 425984 bytes BaseTools/Bin/Win32/TargetTool.exe | Bin 585291 -> 585291 bytes BaseTools/Bin/Win32/TianoCompress.exe | Bin 434176 -> 434176 bytes BaseTools/Bin/Win32/Trim.exe | Bin 842815 -> 842815 bytes BaseTools/Bin/Win32/UPT.exe | Bin 2329471 -> 2329549 bytes BaseTools/Bin/Win32/VfrCompile.exe | Bin 1273856 -> 1273856 bytes BaseTools/Bin/Win32/VolInfo.exe | Bin 471040 -> 471040 bytes BaseTools/Bin/Win32/build.exe | Bin 3056838 -> 3057676 bytes BaseTools/Conf/tools_def.template | 44 +++--- .../Source/C/Include/Common/BuildVersion.h | 2 +- BaseTools/Source/Python/AutoGen/AutoGen.py | 22 ++- BaseTools/Source/Python/AutoGen/GenC.py | 25 ++- BaseTools/Source/Python/AutoGen/GenMake.py | 9 +- .../Source/Python/Common/BuildVersion.py | 2 +- .../Source/Python/Common/DecClassObject.py | 88 +++++------ .../Python/Common/DecClassObjectLight.py | 106 ++++++------- .../Source/Python/Common/DscClassObject.py | 66 ++++---- .../Source/Python/Common/InfClassObject.py | 18 +-- .../Python/Common/InfClassObjectLight.py | 146 +++++++++--------- BaseTools/Source/Python/Common/String.py | 54 +++---- BaseTools/Source/Python/Ecc/Check.py | 88 +++++------ BaseTools/Source/Python/Eot/Parser.py | 4 +- BaseTools/Source/Python/GenFds/FdfParser.py | 49 +++--- BaseTools/Source/Python/UPT/Library/String.py | 4 +- .../UPT/Object/Parser/InfDefineObject.py | 1 + 45 files changed, 386 insertions(+), 342 deletions(-) diff --git a/BaseTools/Bin/Win32/BPDG.exe b/BaseTools/Bin/Win32/BPDG.exe index 1628a4f4536593be33f015fc1a5db048718f54f4..b198906dbc04f1c4ab710dcbea9de4ebcef7cde5 100644 GIT binary patch delta 326 zcmaF5R{7~#-+c&Eu?L5dK4HOOZR?D6KRGCqpIc?YW?d&RyY)8PVH%EnaPZxc`s0mWO-SGwE zTLE>D`g<{l8&>f#Fn}-*0|P^Rd~RZ9UVOY>L1pshPrO_}Q`$p+GHwt3$+SKmY=cVG z%b4jrk<3yc8`?D^nSq#PyJjS-MK0K;pZ0q`OwT;VstmHJz5f_15VHX>`}Y209A{YI z-kP3#n!^_Elj$o?a}>dSuwCg4ha@Ay;m&6{?7@;C=Wg#h%Mr*7cgyz27dY~n;8t&s Jy3End3;_Pug3$l~ delta 326 zcmaF5R{7~#;)*b&z_e$En9x@i8!fFb@L*LwtO0VrE`^yk0?N^5##xTtHLWLw_=E5BDj1`F4fS7%I|1pj; zEO2j4Pd?3I3-`(N6{k6h;6B){bcREc5#ey>vmEwdNsx25cb(-3WQMzC`{N57`Al%D Lw?|#(=w=20SaN%9 diff --git a/BaseTools/Bin/Win32/BootSectImage.exe b/BaseTools/Bin/Win32/BootSectImage.exe index 096048f812960588aab9d5fe6ad325c150b2e3bd..7c0278dce719b419905b016fa165a24f60425c0c 100755 GIT binary patch delta 72 zcmZoTAk}a{YQh8NKfAU!K5l)?*!q~M^)YknW0tLtSwAL#gtuQ$WIg&oz-9KAi?b@S co#*nX{N1Zjv|;-iC$<<_M$7G-32fi(0dD;xnE(I) delta 72 zcmZoTAk}a{YQh8NDyLPAk6RxzwmxQReazhYm}To@){hAw;qBKGS&u#t;Ew;k^xo#n cu1mw+j(WU1GjsbIC$<<_MvLv732fi(0U4qqrT_o{ diff --git a/BaseTools/Bin/Win32/EfiLdrImage.exe b/BaseTools/Bin/Win32/EfiLdrImage.exe index 574713ff1ca37c003f21c5e6a8707f6d5715cfc7..a84e8c6be39f83410c37cefacb9c56ca5640eaf0 100755 GIT binary patch delta 72 zcmZp8AldLha>4`Vzq__KK5l)?*!q~M^)YknW0tLtSw9AVgtuQ0WZnBfpd`7*ivK}Ew^(9uzi;Y07lUvVgLXD delta 72 zcmZp8AldLha>4`VDyLPAk6RxzwmxQReazhYm}To@){g-o;qBK0S@%8=cz!qE)&I7w cb6bMchvEg@!P}P@v8Bi|T5RVGVEZl)01X`>E&u=k diff --git a/BaseTools/Bin/Win32/EfiRom.exe b/BaseTools/Bin/Win32/EfiRom.exe index 1b5831ff2b4a89e5080d2cd12639e4e5d619dac8..8b5ff4b4bfdcc2882ec91e2d0129a31065e752cf 100755 GIT binary patch delta 72 zcmV-O0Jr~upc{ao8<6k={kpe-^M&&Ph4TW1^8HOuL8Qr;56iWwO}FH725cz-Ik!=q2Cp-bY9%iK delta 72 zcmZozAlR diff --git a/BaseTools/Bin/Win32/Fpd2Dsc.exe b/BaseTools/Bin/Win32/Fpd2Dsc.exe index d2d509c7609aa6d695bdc48b88ba488d67b41fa8..fdd78439c706c5c6090b4812a4fa9e855ad0cdcf 100755 GIT binary patch delta 902 zcmYLHT}YEr82-L}Q|H{A-#(Abl_g}K25lmwm5CD8un?_bt*i*$a+wzz6qz-;SoP%( zBnTa$P*x0Yyl4zMGzz;AA_&x?q+0$2wI4^CH&!5Z&bx9K&&7Fvp7TD>`})ETU)b?j zTd2t!cGnEwb*hGph1-SGArh=C9B+qc^F-5uq3^xPXkOpY2Z)*@E3a_C$y->lvgqU~ zRAkX9*gG^P%GIcIRO5Y9!cL(jM976H;k6n18WPuz;p(^`L!Ub?DDJqLB8?)QB7?Z& zn!s=do2R_oinn?*i=foz%~Wh&EwOpCE;Y%yG+pdyt0}4DIEE~aaxO)n1X<7s2M^{qY=*W60+?EG{5(2J5D($ViF) zY&T3Tk=ZRc&8G*on5vbOI-i~*o7DLXq8cQhN-Ry{7QX=`D}#Om8T98YzW@U3p4us_ zw23>I77}a|Gp~zG!;v??vwO`P$FK>Pt&0Vkjp0|nhy!L|&VG8c72jSL%fQUgy4X>w zVcj!h)AQJ3F>V%^*m{d`vJv71rgIOl$@4G1+heTg0UmAZY7AdqGnN9+*qSkH)wENd zfyDh0+%HST>a`GQzsDG8veUKi!P!A;8 z#gMA^$dLa3D2P3bKJuWH-2mP-hk{VbmQ0rC5TB%F%f&zE(F7#f4#~sPx&8>pgSqoyQ8Qh<@Hh&T}(ObilKuWzLG!;6{%nXaPRXH Ox&bd{7jY%fbN(+$Q)P<) delta 902 zcmYLHZAep57{1p#_0Db0d*_Kc4JGZW;rsy6Fqu@iM5Jg$64-}rXtqcNB@<0(;BD3q z!SE!3v0?=3kH*LYLfMZflE|V=Z1XE9-IOH%7}ThH-j)0D{5bE|d7tNbJ;6Fpuncr!%LcDv^Xzq_N+-Ti~}5N)n2Qe&T;HPd2w#m*{- zBP({!=H&Uy^_9QMZlvOaGh9A*-ZDxq&2Vo_&^KG7|A;MNPJ+IsFef*KRSM!2Bq&HE zO<~@5H<9i$642ocmpU6ttuD1}btMt2OVfT*3MlEN-%qr;)eJ+SVHl>irNLosbriH- zv-`JnNqXhqdtk-){(&U7LNDmfGt+o8sut^PQflx?a>P=pnSckY8W?o^*~u3@aoBcH+l0p444Rd zPhq)H$fI0{zfn+k3zWm#dw25OCWfI%!^II{55Keg))(Qn2_`@5p3T605uq5woQw$0 zLY{W--#{JMY!=fwO19Q4zBmr?3AT3{8+-o6%X-ApuIQZ8ZDY7&TP%b*kG92N0bg>Z zzVgEGLIJ)d8FEzZhewa${#RNF2PK1+Js^i90|`kfh95vl0PjS5L*y^W`QZa0bH_({7_0wCYy_hjgF<};-5=s3X;@AGPR6sF}FzS zS5y(Lr3R5R-%xpUF7*Z9Uqy#v`me2`n=#cp*N`)&_4*oWiz(~~p{gBSi7$k*<6r|& RZ($wv!i&m992@8<`xpGYX?*|y diff --git a/BaseTools/Bin/Win32/GenBootSector.exe b/BaseTools/Bin/Win32/GenBootSector.exe index 2ed07e3964c3c7adc01fbcbfffcdf4f23f5c86cf..7b640e928368e17f67e210b2c86fed2a18fe2dca 100755 GIT binary patch delta 72 zcmZo@kZNd(2m?@b>3{tb6YXMBPnI)LS#v cyLVdV@i}7F2exl9U^7r;wA}tQkWE?-0OQ{vdjJ3c delta 72 zcmZo@kZNd(D7}*1h)xSPWF&FK^lG cxi&TS>4Q)o$L(7T*bEdIEw(=mWRund0NIuxHvj+t diff --git a/BaseTools/Bin/Win32/GenCrc32.exe b/BaseTools/Bin/Win32/GenCrc32.exe index f76616f1d8a7804471c13edbaa28744bb7b9f6fa..ee7237ad1e796044532949e67b6b33fa55738d27 100755 GIT binary patch delta 72 zcmZo@kZNd{Y4`TV&#j*sTR$_ker9g{%(C?}>%#z$@b>G0tVbURyjZqklJdex c&qV!Z delta 72 zcmZo@kZNdDE0)}s#u=KbqFy=c~c cmp!jaE(*!dShszR5nGHbqs4a40JiV?02k>Zf&c&j diff --git a/BaseTools/Bin/Win32/GenDepex.exe b/BaseTools/Bin/Win32/GenDepex.exe index 4ffd690528221a099e4411c204655578a09bfbda..1143ee73550570c3e72ed8435a70697c1aac50d9 100755 GIT binary patch delta 412 zcmbRFRc+>1wGCVfLSi%0?Pv5SGwonzU;trJhUp*Ha*DHW{=~}_vupciD}_}q9GO5x zJ#S{uoBSq4o%#E&?UTh)jTtQ`d!9dOlih0M zL88qWHQO_47#FSr%WRGc>z*#C&ZG&F+HR}P^j1J!9B2-Q*m}=IeFg>)=3!u9h>y=r z%*>0A*DI(@2DvAG*Y@^63#RRX7R;ef*+Dj&n(9qoE6W15x&4YP3lOtzzaq&wf*XJ&(j=W{o4ypb0j1wGCVfLT|ET?4{c(R_|bDU;trJhUp*Ha*DHW{>00rW4CIvmBK0)4wJkX z`=pt7^(MbbQD-i3S~XcL)tJ#@vRCRf4v_xq-`!;TF4u#C{O{b|z$)tNLwQrm6SncfPh{{@<3uDPZ>QJ;YUgn1Yk7~|J-_OD~-SadDSpW8d(;Nwpz~Z0)nSNs} z=O(z%r%zhPX$zJEd3O5sb(~gU9>|m1CD(I`F@m{ZpP6sqwC8~NXM5cS&K_o%W48-# c;oQswRtj?4_A}c!XF#|hr)R diff --git a/BaseTools/Bin/Win32/GenFds.exe b/BaseTools/Bin/Win32/GenFds.exe index d32f23963e2a8bd657e1f88102a4a6b57013791e..c6cdeb90498111d66337b7c4c93417b90cb4b71b 100755 GIT binary patch delta 12191 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 delta 11914 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 delta 71 zcmV-N0J#5vpc;Un8j#=vfI_N) diff --git a/BaseTools/Bin/Win32/GenFv.exe b/BaseTools/Bin/Win32/GenFv.exe index abf5cbd2238a4119130d6587ecb2b2a15bb41899..a362959994b26101e71ad924b256dbfb791227f1 100755 GIT binary patch delta 72 zcmZozAltA&cESs0=H1&HU$?$yY<)+gtuS+$olnxK&^|E><>Fp c|J{`t`~L7RkK2Cd5}S=IqvdwV4{Xol0Ukml1^@s6 delta 72 zcmZozAltA&cESthMyFMcuUlU;w!UU+ea+nZnq}*2)|VeZ!rQNZWc~U;;A;Qp!+9w; c9e2j7_LeJXsc*k?iOoiq(PF#g2e#+&06>=`u>b%7 diff --git a/BaseTools/Bin/Win32/GenFw.exe b/BaseTools/Bin/Win32/GenFw.exe index 4c0fb41170746b5d7f675a62ccca7cd293ee91d8..5295d76d9c2664ed999e6755c6c7e766d923b41c 100755 GIT binary patch delta 75 zcmZozAlI-!Zo&g**4^71AGbbcY<(<9?jDjGU?au|-be{^G>OUFu f&QHdFXSw>v@b~|XwyS(+Q_*C!*zT#ozC9lRAYUO^ diff --git a/BaseTools/Bin/Win32/GenPage.exe b/BaseTools/Bin/Win32/GenPage.exe index 639b88ad21c1a59279a9e17b5b61ed3a213117a3..24ba6770ac0e0ea169d235c59ae48b15f0db58af 100755 GIT binary patch delta 72 zcmZp8AldLha>4^<*4^71AGbbcY<4`VW~Wt+k6RxzwmxQReazhYm}To@){g-o;qBK0S@%8=*sAz^UH~h< cR diff --git a/BaseTools/Bin/Win32/GenPatchPcdTable.exe b/BaseTools/Bin/Win32/GenPatchPcdTable.exe index 01824c531e36ff53252cea2fe10323424422462d..82f6f56b243f4d2a40713be38466db80f4eaa222 100755 GIT binary patch delta 375 zcmZ2`Ol|EkwGCVf9AY!l?Pv5SGffs!P-TwUwSBXd!YUVzOrU7bo7wXwze!PN{=RGb zWU*9ZM$5@wsnft3TGx2apZp?K1*D;wKW#gI8lzvsqHn77~cwj z#cfOQ5Jvm)%I;SmI4&<-x+0!}07{OeyXHL%Gv^!^QUd+Ph+&K0m}$Y+n+W);1Q!HNNRh{BgVG^ zVDVBXPKN1)pBZI9;_VYYGj5;onTa`*9c2By+q~0f#V~_SYd;vn48$zk55}-w?Eq`# zUL!Pf`n;#C${?-Nk340a2NvEjmw{(`)-zUlu!%j-SlfG^v2E{p#_o9*EdRcrg>U-Z z%^YB3x3g^FNO%Mm2YGgS&NR+Va8FKGo6czqmIL`~d-inBFh(#J?3t4@IPJkakQcTK s%;XGYhPirs#vIPgOkhc{BbDcKT7r2Xw{1_E&p8Dm33AG|MVz{f0Mc!fx&QzG diff --git a/BaseTools/Bin/Win32/GenSec.exe b/BaseTools/Bin/Win32/GenSec.exe index 035dcc6ae58827f7c5592d27fe8be64ddce0326b..9bc9a68451cf43f83af53eb0d7e199d86e6637e3 100755 GIT binary patch delta 72 zcmV-O0Jr~upc{ao8<5}w2D`U`b5IzOb en1xp?NU<5*;C&9KgSV7&2G}0~Ik#<+29rJU+981e delta 72 zcmV-O0Jr~upc{ao8<5}wgF>o-b5SvQM e+usRaLb?soP|Xxw!MBuh2G}0~IJa$*29rGpiy|@r diff --git a/BaseTools/Bin/Win32/GenVtf.exe b/BaseTools/Bin/Win32/GenVtf.exe index ea7ccf135068c55a500125e9ed31c5bd83e0036f..5cf1a0a5d78026e7f092c0e9fb6c040020841267 100755 GIT binary patch delta 72 zcmZozAluUlU;w!UU+ea+nZnq}*2)|U%F!rQMeWbJ(@pcg7;Vf$6e cW9x(XsiIG2&Dmbk%qF1DXtBL@6u??0oF c*YcbCTNIXs_-=2x%qk<#Xt90aC)Rjb0M*pvAZ7((HXvr- z{&X!z(OGtoT2oWK>2cMZDqy9p)tv3E)m%W#4a7V^%nQVPK+M0rwOU}a8Q6F|3+MCG z9X1JQg7j?9*(C6Ag1R)&sIFHVbUy57U;tqr1_p-s_}s+Iy!d#%g39F0pLn^_fT~NJ z1wZfS0IB}Gx1Mc!KC_S#Ge~?2v(U|%9GO7zo;S1SO)s4*q|W?(*Y@f2=L#7!TDD)F zE42OcT;Xqzzz+CnzvsjBiwz>mEIcxL$`kuASYRo!ztJpvAZ7((HXvr- z{&X!z(OGto+IhEmr^i)us(_WYR&%zuR&xO{HxTmxF)tAF0Wtsf)@p&xW?h}CP>froJ|4`C#cKh#MrOo5$5}_pMe2{c^DWN;^T7@GxOr(^$IGJH-F;g>IAAT zaTff%p97?N?^Ct;)AN~yl$b%{Q<#Nr&g3x3i?L6dc~@_G>0BXo<`Sn>)923>GG?@B zzdToH`{lX9-yVS-z`aIj=JbmVBFZd42l!3aYct)h+bAN{1o!-Qe`Zk`Hkkjm7jcR{ v<$ybVd%Te77DlieKrWsxEh1`!a8am;XgS;++pma-`Z2-n+^!`qx|b0E$^ep# diff --git a/BaseTools/Bin/Win32/PatchPcdValue.exe b/BaseTools/Bin/Win32/PatchPcdValue.exe index ed1a92e77464d8915e79b5b3785eebd89aee386a..2cbd95fc63129abadcdf9ce2ab932346184acee5 100755 GIT binary patch delta 253 zcmeyoQR(wWr42t5I5KCX+xNVgJ#R8&qB`^UUE3#XCmJ(aPL5BU#vuljYF*-+nZIAwyPvDTGoJNHb;eZPfxwas0otVKJgyoTLEy=r%*>0A*DI(@-u#J|i^FbJ`_lJ}K+FWh%-ff~XR)6NHj#Uc(9G#?I#`uKCbkQ8 zvH~$15VLO=>f|`X0(a{4XT2P@aMx|u?&An!L^!FlpTnL5=8)|d`Z*@B!cE_vF_oj6 F8356MVW|KB diff --git a/BaseTools/Bin/Win32/Spd2Dec.exe b/BaseTools/Bin/Win32/Spd2Dec.exe index 31b0aae270d192952915454bb8ea2040b218cc35..59b28174c6372cb78c5a1483667a8ce02860d1a6 100755 GIT binary patch delta 720 zcmbOKPrunk-a9AY!l?Pv5SGffs!P-TwUwSBXd!fs};sB*%CUz7hT%Y#Ilu5uJ*zf?(KywJeg0yR<*A2oIm|hCNEfiJ7*TJb2(Uib5vOO^pJC?;Ui%$#bgUs80^|X-c6k(9_{oYiEItnr{ zfUp&B8bvc8mV$$`s#z2% s5I;AI{sJon1>N?qEuwJ{W5K}_-6m>@2#`5#qQAjBP%uoN-!A$Y0KXj?OaK4? delta 720 zcmbOKPrunk-a9B;B??4{c(R!={Kxe=2tNK5;2BPJkb-oD(3 zMR7j|M^23WZ}TR}=@&k-=rAV$<^O+V0b*7lW&>h&Am-Tq|0Ac%BzBOS=H2F}l*tR0-_DuE>s$^N7n-&|ZFMc^yOv(24E-LG85Q-%S^CG3as~iKMUXVyg)&Sol^q^w@(ce z>g51?`F@CH#dNJGAsMijJ)?wz3c=>>i!59{eer1_eUN$EubviCogxf!{#7sjD~^H; z3?MAVz%ZS!RaBgP^Cw;|P{?Q}2yfR;5a}xeTg$yhXy){T*F=;-PM!`76|?EG*F`eG z)^0v{-er34brB`7wVSSs%+*&1#lX3n7MnK-F))BI4+8^3a7lhqs!M9JUO{Ct$QDq% zl(CD>O##~gir?wdIil8J9w=V7$K{9yF(D#zN1kXVSP~S4+con=pE1E>Y`b`os1zG4 zQnp)Eh{iC1)q>(+`q>gXnIsBq(gRb2W-)Kr96ZXH~N( tQXqbA7X1ZQ3JSXIUt2`uAjX1&C%R445)mMC+C+bYd7xmJKEGY`GXP>y7)<~G diff --git a/BaseTools/Bin/Win32/Split.exe b/BaseTools/Bin/Win32/Split.exe index 9ef3e122818d3717ab0d92350b4fb75f8f8dfc51..8bd2ebc48a5925ccd797268ef473585c685d9e75 100755 GIT binary patch delta 72 zcmZo@kZNd{YxnlX&#j*sTR$_ker9g{%(C?}>&FC;@b>44tf~(LqK+J1=Gl?r cy*-4H&HY{D{_QeOY;R;4Ew^(fuzi;Y0N*VjPyhe` delta 72 zcmZo@kZNdD82R@Dar2C))e`HnkX bmYE5v>qK^UZI^Lkdn3zev7Ix4?YlexrE?wm diff --git a/BaseTools/Bin/Win32/TargetTool.exe b/BaseTools/Bin/Win32/TargetTool.exe index 36b1c3e8d26f6359392ffe88d292fe308e17c6fd..776feb588114e118a9a4b0f5a477d88df641605d 100755 GIT binary patch delta 290 zcmX?oNBQ&}-+nZIAwyPvDTGoJNHb;eZPfxwas0otVKJgyoTLElIWcZ~nx~#bvjued&9~?MvS?CDgHl?3j0(cREiVGuV!H<2+^{X4!6> z$9f_kY!UYwp_$W}@3AU_ENa)h#|p%3K+L{f^B%_;7Pt?l|9!+^3wQK(r^g&&j0l%5 ic*0@N0dwE>=TA5SnPHZ1w|~J=$pp7+`+-*+-OKdRQ diff --git a/BaseTools/Bin/Win32/TianoCompress.exe b/BaseTools/Bin/Win32/TianoCompress.exe index 020ed1e50a3085b1d0f3a2eb4a1ffdd4fb9cf807..66b559b58de37fed72069e9657b11b25ff01edd4 100755 GIT binary patch delta 72 zcmZoTAk}a{YQh6%uHD-kAGbbcY<~jG@ c|B3AzCtcR#$=kjqiEWN7qs8{X2DbI`02w$U0ssI2 diff --git a/BaseTools/Bin/Win32/Trim.exe b/BaseTools/Bin/Win32/Trim.exe index 8684aa46b80a68bb943e4f191b200bb45c98bb6d..36e1e7ac614ea72c0558505f10d9490d0841c709 100755 GIT binary patch delta 422 zcmdnL!+8G=;|*L2T4FQO?dL`;60BOuzyQMh3=9m;`MJ6IdHTMY#mRaFmC2hw@p8rN z+TLuU&~Bo@2*ga=O%#}4yygJuozb7nG+l*%m9tAURW0z3C$F zSyjMN*6&%jTfb-9_5iG{b&coz=|9i2gXOj>Twq_V4Hn-V71lld@^5xcke==Tf3xR& z2a7YPwqKoI{Fwuye%5D>H)lDdfmVF;`)o43?;xiPa~e?n+Jl@Q4LCA^;yrI>&zrvN z6Q?@!_g&kkU--mn%xr1qH+|s|PKoVupE;9efld8szvsjBj$SThunX7qa<#AP<=(!o zmuHCsSRNEG+oR6$TxJGyL4MtCdWmNSBg}i-uUzJdWduutePnr+rvl6a`D6Ret32-^ nk|5`A-*BC06C=XaSvPr%;BMW%6>%89Jh delta 422 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 HhWq{>^L7ys diff --git a/BaseTools/Bin/Win32/VfrCompile.exe b/BaseTools/Bin/Win32/VfrCompile.exe index 5647e50a4d348dd8e95db6e8333be088cf9b1a96..a5c25b554ba937ef480eaab0fd61ad01d06f569e 100755 GIT binary patch delta 124 zcmZp8;M?%Pcfto|k=@%HKev8nZ2ipC`kA@)GfV4d*4EE#t)JOjKXbHx=4}1U)%uyc z^)t`b&%B9-Am!V`jd=S^7%jIyOXKZe1Je1qyrRDa#7^^v>aLjKG_QI;!*8A~O6^lJ W_<)!nhy{RH5Qv4gPstF@VFv&~#Wpwq delta 124 zcmZp8;M?%Pcftqe$xf>pKev8nZ2ipC`kA@)GfV4d*4EE#t)JOjKXbHx=4}1U)%uyc z^)t`b&%B9-Am!V`jd=S^7%jFxOXKZe1Je1qyrRDav|KNCPkcYqXKnWN522fm?QWlv W!3V_rKr8^nf

^eM*LK4m$vy>Nyqw diff --git a/BaseTools/Bin/Win32/VolInfo.exe b/BaseTools/Bin/Win32/VolInfo.exe index ef33d1e1d90b1240084a1becc0f8e40e8054eea0..4dc1693ff35bb3d8586fcce065f3003c552dfce5 100755 GIT binary patch delta 92 zcmV-i0Hgna;2eP99FW)p3%j?0+lAW!h1&v!+XIE$1hv}*3E=|^ySKOJ;RU7a5DnXP yA(P?%MXBV0b5BFYrnj8V27DnEPH%P~AU7Z~FflOzLUn0uWFRs#IkzqF2Gc(V)F`0< delta 92 zcmZp8Ak*+bX2K2T4yRR(w_9&Bw%%rHz0KTun`P^5R?deY;qA{KvMzlikQ`Hb$y+Dh wWy-Ftfx87`-fo|Bj;%&f)IYgI!N@|v$iUE$!KpMeCq==?*kZfx2e!-h0MIihXaE2J diff --git a/BaseTools/Bin/Win32/build.exe b/BaseTools/Bin/Win32/build.exe index 16404a22521a6baad48c6e785b7482a662e28978..88069448c4d8a4e63065ffad523a2fabd8c9df87 100755 GIT binary patch delta 25955 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 iz0d@Q?pLE($ -1: - ReservedLine = GetSplitValueList(Line, TAB_COMMENT_EDK_START, 1)[0] + ReservedLine = GetSplitList(Line, TAB_COMMENT_EDK_START, 1)[0] IsFindBlockComment = True if Line.find(TAB_COMMENT_EDK_END) > -1: - Line = ReservedLine + GetSplitValueList(Line, TAB_COMMENT_EDK_END, 1)[1] + Line = ReservedLine + GetSplitList(Line, TAB_COMMENT_EDK_END, 1)[1] ReservedLine = '' IsFindBlockComment = False if IsFindBlockComment: @@ -178,7 +178,7 @@ class Dec(DecObject): Line = CleanString(Line) if Line == '': continue - + # # Find a new section tab # First insert previous section items @@ -197,7 +197,7 @@ class Dec(DecObject): SectionItemList = [] ArchList = [] ThirdList = [] - + CurrentSection = '' LineList = GetSplitValueList(Line[len(TAB_SECTION_START):len(Line) - len(TAB_SECTION_END)], TAB_COMMA_SPLIT) for Item in LineList: @@ -206,7 +206,7 @@ class Dec(DecObject): CurrentSection = ItemList[0] else: if CurrentSection != ItemList[0]: - EdkLogger.error("Parser", PARSER_ERROR, "Different section names '%s' and '%s' are found in one section definition, this is not allowed." % (CurrentSection, ItemList[0]), File=Filename, Line=LineNo, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", PARSER_ERROR, "Different section names '%s' and '%s' are found in one section definition, this is not allowed." % (CurrentSection, ItemList[0]), File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError) if CurrentSection.upper() not in self.KeyList: RaiseParserError(Line, CurrentSection, Filename, '', LineNo) ItemList.append('') @@ -215,18 +215,18 @@ class Dec(DecObject): RaiseParserError(Line, CurrentSection, Filename, '', LineNo) else: if ItemList[1] != '' and ItemList[1].upper() not in ARCH_LIST_FULL: - EdkLogger.error("Parser", PARSER_ERROR, "Invalid Arch definition '%s' found" % ItemList[1], File=Filename, Line=LineNo, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", PARSER_ERROR, "Invalid Arch definition '%s' found" % ItemList[1], File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError) ArchList.append(ItemList[1].upper()) ThirdList.append(ItemList[2]) continue - + # # Not in any defined section # if CurrentSection == TAB_UNKNOWN: ErrorMsg = "%s is not in any defined section" % Line - EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, File=Filename, Line=LineNo, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError) # # Add a section item @@ -234,13 +234,13 @@ class Dec(DecObject): SectionItemList.append([Line, LineNo]) # End of parse #End of For - + # # Insert items data of last section # Model = Section[CurrentSection.upper()] InsertSectionItemsIntoDatabase(self.TblDec, self.FileID, Filename, Model, CurrentSection, SectionItemList, ArchList, ThirdList, IfDefList, self.RecordSet) - + # # Replace all DEFINE macros with its actual values # @@ -255,12 +255,12 @@ class Dec(DecObject): # Init global information for the file # ContainerFile = self.Identification.FileFullPath - + # # Generate Package Header # self.GenPackageHeader(ContainerFile) - + # # Generate Includes # @@ -280,17 +280,17 @@ class Dec(DecObject): # Generate Ppis # self.GenGuidProtocolPpis(DataType.TAB_PPIS, ContainerFile) - + # # Generate LibraryClasses # self.GenLibraryClasses(ContainerFile) - + # # Generate Pcds # self.GenPcds(ContainerFile) - + ## Get Package Header # # Gen Package Header of Dec as = @@ -311,22 +311,22 @@ class Dec(DecObject): SqlCommand = """update %s set Value1 = '%s', Value2 = '%s' where ID = %s""" % (self.TblDec.Table, ConvertToSqlString2(Value1), ConvertToSqlString2(Value2), ID) self.TblDec.Exec(SqlCommand) - + # # Get detailed information # for Arch in self.SupArchList: PackageHeader = PackageHeaderClass() - + PackageHeader.Name = QueryDefinesItem(self.TblDec, TAB_DEC_DEFINES_PACKAGE_NAME, Arch, self.FileID)[0] PackageHeader.Guid = QueryDefinesItem(self.TblDec, TAB_DEC_DEFINES_PACKAGE_GUID, Arch, self.FileID)[0] PackageHeader.Version = QueryDefinesItem(self.TblDec, TAB_DEC_DEFINES_PACKAGE_VERSION, Arch, self.FileID)[0] PackageHeader.FileName = self.Identification.FileName PackageHeader.FullPath = self.Identification.FileFullPath PackageHeader.DecSpecification = QueryDefinesItem(self.TblDec, TAB_DEC_DEFINES_DEC_SPECIFICATION, Arch, self.FileID)[0] - + self.Package.Header[Arch] = PackageHeader - + ## GenIncludes # # Gen Includes of Dec @@ -341,7 +341,7 @@ class Dec(DecObject): # Get all Includes # RecordSet = self.RecordSet[MODEL_EFI_INCLUDE] - + # # Go through each arch # @@ -355,7 +355,7 @@ class Dec(DecObject): Include.FilePath = NormPath(Key) Include.SupArchList = Includes[Key] self.Package.Includes.append(Include) - + ## GenPpis # # Gen Ppis of Dec @@ -370,7 +370,7 @@ class Dec(DecObject): # Get all Items # RecordSet = self.RecordSet[Section[Type.upper()]] - + # # Go through each arch # @@ -383,7 +383,7 @@ class Dec(DecObject): SqlCommand = """update %s set Value1 = '%s', Value2 = '%s' where ID = %s""" % (self.TblDec.Table, ConvertToSqlString2(Name), ConvertToSqlString2(Value), Record[3]) self.TblDec.Exec(SqlCommand) - + ListMember = None if Type == TAB_GUIDS: ListMember = self.Package.GuidDeclarations @@ -391,15 +391,15 @@ class Dec(DecObject): ListMember = self.Package.ProtocolDeclarations elif Type == TAB_PPIS: ListMember = self.Package.PpiDeclarations - + for Key in Lists.keys(): ListClass = GuidProtocolPpiCommonClass() ListClass.CName = Key[0] ListClass.Guid = Key[1] ListClass.SupArchList = Lists[Key] ListMember.append(ListClass) - - + + ## GenLibraryClasses # # Gen LibraryClasses of Dec @@ -414,7 +414,7 @@ class Dec(DecObject): # Get all Guids # RecordSet = self.RecordSet[MODEL_EFI_LIBRARY_CLASS] - + # # Go through each arch # @@ -432,7 +432,7 @@ class Dec(DecObject): where ID = %s""" % (self.TblDec.Table, ConvertToSqlString2(List[0]), ConvertToSqlString2(List[1]), SUP_MODULE_LIST_STRING, Record[3]) self.TblDec.Exec(SqlCommand) - + for Key in LibraryClasses.keys(): LibraryClass = LibraryClassClass() LibraryClass.LibraryClass = Key[0] @@ -440,7 +440,7 @@ class Dec(DecObject): LibraryClass.SupModuleList = SUP_MODULE_LIST LibraryClass.SupArchList = LibraryClasses[Key] self.Package.LibraryClassDeclarations.append(LibraryClass) - + ## GenPcds # # Gen Pcds of Dec @@ -460,7 +460,7 @@ class Dec(DecObject): RecordSet3 = self.RecordSet[MODEL_PCD_FEATURE_FLAG] RecordSet4 = self.RecordSet[MODEL_PCD_DYNAMIC_EX] RecordSet5 = self.RecordSet[MODEL_PCD_DYNAMIC] - + # # Go through each arch # @@ -508,7 +508,7 @@ class Dec(DecObject): Pcd.ItemType = Key[5] Pcd.SupArchList = Pcds[Key] self.Package.PcdDeclarations.append(Pcd) - + ## Show detailed information of Package # # Print all members and their values of Package class @@ -550,14 +550,14 @@ class Dec(DecObject): if __name__ == '__main__': EdkLogger.Initialize() EdkLogger.SetLevel(EdkLogger.DEBUG_0) - + W = os.getenv('WORKSPACE') F = os.path.join(W, 'Nt32Pkg/Nt32Pkg.dec') Db = Database.Database('Dec.db') Db.InitDatabase() - + P = Dec(os.path.normpath(F), True, True, W, Db) P.ShowPackage() - + Db.Close() diff --git a/BaseTools/Source/Python/Common/DecClassObjectLight.py b/BaseTools/Source/Python/Common/DecClassObjectLight.py index cba88b64f2..7fb41a2359 100644 --- a/BaseTools/Source/Python/Common/DecClassObjectLight.py +++ b/BaseTools/Source/Python/Common/DecClassObjectLight.py @@ -75,7 +75,7 @@ class DecObject(object): # @var KeyList: To store value for KeyList, a list for all Keys used in Dec # class Dec(DecObject): - def __init__(self, Filename = None, IsToPackage = False, WorkspaceDir = None, AllGuidVersionDict = None, SupArchList = DataType.ARCH_LIST): + def __init__(self, Filename=None, IsToPackage=False, WorkspaceDir=None, AllGuidVersionDict=None, SupArchList=DataType.ARCH_LIST): self.Identification = IdentificationClass() self.Package = PackageClass() self.UserExtensions = '' @@ -92,23 +92,23 @@ class Dec(DecObject): ] # Upper all KEYs to ignore case sensitive when parsing self.KeyList = map(lambda c: c.upper(), self.KeyList) - + # Init RecordSet - self.RecordSet = {} + self.RecordSet = {} for Key in self.KeyList: self.RecordSet[Section[Key]] = [] - + # Init Comment self.SectionHeaderCommentDict = {} - + # Load Dec file if filename is not None if Filename != None: self.LoadDecFile(Filename) - + # Transfer to Package Object if IsToPackage is True if IsToPackage: self.DecToPackage() - + ## Load Dec file # # Load the file if it exists @@ -121,13 +121,13 @@ class Dec(DecObject): self.Identification.FullPath = Filename (self.Identification.RelaPath, self.Identification.FileName) = os.path.split(Filename) if self.Identification.FullPath.find(self.WorkspaceDir) > -1: - self.Identification.PackagePath = os.path.dirname(self.Identification.FullPath[len(self.WorkspaceDir) + 1:]) - + self.Identification.PackagePath = os.path.dirname(self.Identification.FullPath[len(self.WorkspaceDir) + 1:]) + # Init common datas IfDefList, SectionItemList, CurrentSection, ArchList, ThirdList, IncludeFiles = \ [], [], TAB_UNKNOWN, [], [], [] LineNo = 0 - + # Parse file content IsFindBlockComment = False ReservedLine = '' @@ -136,7 +136,7 @@ class Dec(DecObject): LineNo = LineNo + 1 # Remove comment block if Line.find(TAB_COMMENT_EDK_START) > -1: - ReservedLine = GetSplitValueList(Line, TAB_COMMENT_EDK_START, 1)[0] + ReservedLine = GetSplitList(Line, TAB_COMMENT_EDK_START, 1)[0] if ReservedLine.strip().startswith(TAB_COMMENT_SPLIT): Comment = Comment + Line.strip() + '\n' ReservedLine = '' @@ -147,7 +147,7 @@ class Dec(DecObject): continue if Line.find(TAB_COMMENT_EDK_END) > -1: Comment = Comment + Line[:Line.find(TAB_COMMENT_EDK_END) + len(TAB_COMMENT_EDK_END)] + '\n' - Line = ReservedLine + GetSplitValueList(Line, TAB_COMMENT_EDK_END, 1)[1] + Line = ReservedLine + GetSplitList(Line, TAB_COMMENT_EDK_END, 1)[1] ReservedLine = '' IsFindBlockComment = False if IsFindBlockComment: @@ -160,7 +160,7 @@ class Dec(DecObject): Line = CleanString(Line) if Line == '': continue - + ## Find a new section tab # First insert previous section items # And then parse the content of the new section @@ -173,7 +173,7 @@ class Dec(DecObject): SectionItemList = [] ArchList = [] ThirdList = [] - + CurrentSection = '' LineList = GetSplitValueList(Line[len(TAB_SECTION_START):len(Line) - len(TAB_SECTION_END)], TAB_COMMA_SPLIT) for Item in LineList: @@ -182,7 +182,7 @@ class Dec(DecObject): CurrentSection = ItemList[0] else: if CurrentSection != ItemList[0]: - EdkLogger.error("Parser", PARSER_ERROR, "Different section names '%s' and '%s' are found in one section definition, this is not allowed." % (CurrentSection, ItemList[0]), File=Filename, Line=LineNo, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", PARSER_ERROR, "Different section names '%s' and '%s' are found in one section definition, this is not allowed." % (CurrentSection, ItemList[0]), File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError) if CurrentSection.upper() not in self.KeyList: RaiseParserError(Line, CurrentSection, Filename, '', LineNo) ItemList.append('') @@ -191,28 +191,28 @@ class Dec(DecObject): RaiseParserError(Line, CurrentSection, Filename, '', LineNo) else: if ItemList[1] != '' and ItemList[1].upper() not in ARCH_LIST_FULL: - EdkLogger.error("Parser", PARSER_ERROR, "Invalid Arch definition '%s' found" % ItemList[1], File=Filename, Line=LineNo, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", PARSER_ERROR, "Invalid Arch definition '%s' found" % ItemList[1], File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError) ArchList.append(ItemList[1].upper()) ThirdList.append(ItemList[2]) - + if Comment: if Comment.endswith('\n'): Comment = Comment[:len(Comment) - len('\n')] self.SectionHeaderCommentDict[Section[CurrentSection.upper()]] = Comment Comment = '' continue - + # Not in any defined section if CurrentSection == TAB_UNKNOWN: ErrorMsg = "%s is not in any defined section" % Line - EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, File=Filename, Line=LineNo, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError) # Add a section item SectionItemList.append([Line, LineNo, Comment]) Comment = '' # End of parse #End of For - + # # Insert items data of last section # @@ -229,7 +229,7 @@ class Dec(DecObject): SectionHeaderCommentDict = {} if Package == None: return Dec - + PackageHeader = Package.PackageHeader TmpList = [] if PackageHeader.Name: @@ -243,30 +243,30 @@ class Dec(DecObject): if Package.UserExtensions != None: for Item in Package.UserExtensions.Defines: TmpList.append(Item) - DecList['Defines'] =TmpList + DecList['Defines'] = TmpList if PackageHeader.Description != '': SectionHeaderCommentDict['Defines'] = PackageHeader.Description - + for Item in Package.Includes: Key = 'Includes.' + Item.SupArchList Value = Item.FilePath GenMetaDatSectionItem(Key, Value, DecList) - + for Item in Package.GuidDeclarations: Key = 'Guids.' + Item.SupArchList Value = Item.CName + '=' + Item.Guid GenMetaDatSectionItem(Key, Value, DecList) - + for Item in Package.ProtocolDeclarations: Key = 'Protocols.' + Item.SupArchList Value = Item.CName + '=' + Item.Guid GenMetaDatSectionItem(Key, Value, DecList) - + for Item in Package.PpiDeclarations: Key = 'Ppis.' + Item.SupArchList Value = Item.CName + '=' + Item.Guid GenMetaDatSectionItem(Key, Value, DecList) - + for Item in Package.LibraryClassDeclarations: Key = 'LibraryClasses.' + Item.SupArchList Value = Item.LibraryClass + '|' + Item.RecommendedInstance @@ -297,7 +297,7 @@ class Dec(DecObject): else: Dec = Dec + ' ' + Value + '\n' Dec = Dec + '\n' - + return Dec ## Transfer to Package Object @@ -307,10 +307,10 @@ class Dec(DecObject): def DecToPackage(self): # Init global information for the file ContainerFile = self.Identification.FullPath - + # Generate Package Header self.GenPackageHeader(ContainerFile) - + # Generate Includes # Only for Edk self.GenIncludes(ContainerFile) @@ -323,16 +323,16 @@ class Dec(DecObject): # Generate Ppis self.GenGuidProtocolPpis(DataType.TAB_PPIS, ContainerFile) - + # Generate LibraryClasses self.GenLibraryClasses(ContainerFile) - + # Generate Pcds self.GenPcds(ContainerFile) - + # Init MiscFiles self.GenMiscFiles(ContainerFile) - + ## GenMiscFiles # def GenMiscFiles(self, ContainerFile): @@ -343,7 +343,7 @@ class Dec(DecObject): File.Filename = Item MiscFiles.Files.append(File) self.Package.MiscFiles = MiscFiles - + ## Get Package Header # # Gen Package Header of Dec as = @@ -375,23 +375,23 @@ class Dec(DecObject): PackageHeader.DecSpecification = Value else: OtherDefines.append(Record[0]) - + PackageHeader.FileName = self.Identification.FileName PackageHeader.FullPath = self.Identification.FullPath PackageHeader.RelaPath = self.Identification.RelaPath PackageHeader.PackagePath = self.Identification.PackagePath PackageHeader.ModulePath = self.Identification.ModulePath PackageHeader.CombinePath = os.path.normpath(os.path.join(PackageHeader.PackagePath, PackageHeader.ModulePath, PackageHeader.FileName)) - + if MODEL_META_DATA_HEADER in self.SectionHeaderCommentDict: PackageHeader.Description = self.SectionHeaderCommentDict[MODEL_META_DATA_HEADER] - + self.Package.PackageHeader = PackageHeader UE = UserExtensionsClass() UE.Defines = OtherDefines self.Package.UserExtensions = UE - - + + ## GenIncludes # # Gen Includes of Dec @@ -403,7 +403,7 @@ class Dec(DecObject): Includes = {} # Get all Includes RecordSet = self.RecordSet[MODEL_EFI_INCLUDE] - + # Go through each arch for Record in RecordSet: Arch = Record[1] @@ -412,7 +412,7 @@ class Dec(DecObject): Include.FilePath = NormPath(Key) Include.SupArchList = Arch self.Package.Includes.append(Include) - + ## GenPpis # # Gen Ppis of Dec @@ -425,12 +425,12 @@ class Dec(DecObject): Lists = {} # Get all Items RecordSet = self.RecordSet[Section[Type.upper()]] - + # Go through each arch for Record in RecordSet: Arch = Record[1] (Name, Value) = GetGuidsProtocolsPpisOfDec(Record[0], Type, ContainerFile, Record[2]) - + ListMember = None if Type == TAB_GUIDS: ListMember = self.Package.GuidDeclarations @@ -438,13 +438,13 @@ class Dec(DecObject): ListMember = self.Package.ProtocolDeclarations elif Type == TAB_PPIS: ListMember = self.Package.PpiDeclarations - + ListClass = GuidProtocolPpiCommonClass() ListClass.CName = Name ListClass.Guid = Value ListClass.SupArchList = Arch ListMember.append(ListClass) - + ## GenLibraryClasses # # Gen LibraryClasses of Dec @@ -457,7 +457,7 @@ class Dec(DecObject): LibraryClasses = {} # Get all Guids RecordSet = self.RecordSet[MODEL_EFI_LIBRARY_CLASS] - + # Go through each arch for Record in RecordSet: Arch = Record[1] @@ -469,7 +469,7 @@ class Dec(DecObject): LibraryClass.RecommendedInstance = NormPath(List[1]) LibraryClass.SupArchList = Arch self.Package.LibraryClassDeclarations.append(LibraryClass) - + def AddPcd(self, CName, Token, TokenSpaceGuidCName, DatumType, DefaultValue, ItemType, Arch): Pcd = CommonClass.PcdClass() Pcd.CName = CName @@ -480,7 +480,7 @@ class Dec(DecObject): Pcd.ItemType = ItemType Pcd.SupArchList = Arch self.Package.PcdDeclarations.append(Pcd) - + ## GenPcds # # Gen Pcds of Dec @@ -498,7 +498,7 @@ class Dec(DecObject): RecordSet3 = self.RecordSet[MODEL_PCD_FEATURE_FLAG] RecordSet4 = self.RecordSet[MODEL_PCD_DYNAMIC_EX] RecordSet5 = self.RecordSet[MODEL_PCD_DYNAMIC] - + # Go through each pcd for Record in RecordSet1: Arch = Record[1] @@ -520,7 +520,7 @@ class Dec(DecObject): Arch = Record[1] (TokenGuidCName, TokenName, DefaultValue, DatumType, Token, ItemType) = GetPcdOfDec(Record[0], TAB_PCDS_DYNAMIC, ContainerFile, Record[2]) self.AddPcd(TokenName, Token, TokenGuidCName, DatumType, DefaultValue, ItemType, Arch) - + ## Show detailed information of Package # # Print all members and their values of Package class @@ -533,7 +533,7 @@ class Dec(DecObject): print 'PackagePath =', M.PackageHeader.PackagePath print 'ModulePath =', M.PackageHeader.ModulePath print 'CombinePath =', M.PackageHeader.CombinePath - + print 'BaseName =', M.PackageHeader.Name print 'Guid =', M.PackageHeader.Guid print 'Version =', M.PackageHeader.Version @@ -571,7 +571,7 @@ class Dec(DecObject): if __name__ == '__main__': EdkLogger.Initialize() EdkLogger.SetLevel(EdkLogger.QUIET) - + W = os.getenv('WORKSPACE') F = os.path.join(W, 'MdeModulePkg/MdeModulePkg.dec') diff --git a/BaseTools/Source/Python/Common/DscClassObject.py b/BaseTools/Source/Python/Common/DscClassObject.py index 428f1686b6..3d06288e9a 100644 --- a/BaseTools/Source/Python/Common/DscClassObject.py +++ b/BaseTools/Source/Python/Common/DscClassObject.py @@ -91,7 +91,7 @@ class DscObject(object): class Dsc(DscObject): _NullClassIndex = 0 - def __init__(self, Filename = None, IsToDatabase = False, IsToPlatform = False, WorkspaceDir = None, Database = None): + def __init__(self, Filename=None, IsToDatabase=False, IsToPlatform=False, WorkspaceDir=None, Database=None): self.Identification = Identification() self.Platform = PlatformClass() self.UserExtensions = '' @@ -460,7 +460,7 @@ class Dsc(DscObject): # @param Type: The type of Pcd # @param ContainerFile: The file which describes the pcd, used for error report # - def GenPcds(self, Type = '', ContainerFile = ''): + def GenPcds(self, Type='', ContainerFile=''): Pcds = {} if Type == DataType.TAB_PCDS_PATCHABLE_IN_MODULE: Model = MODEL_PCD_PATCHABLE_IN_MODULE @@ -512,7 +512,7 @@ class Dsc(DscObject): # @param Type: The type of Pcd # @param ContainerFile: The file which describes the pcd, used for error report # - def GenFeatureFlagPcds(self, Type = '', ContainerFile = ''): + def GenFeatureFlagPcds(self, Type='', ContainerFile=''): Pcds = {} if Type == DataType.TAB_PCDS_FEATURE_FLAG: Model = MODEL_PCD_FEATURE_FLAG @@ -562,7 +562,7 @@ class Dsc(DscObject): # @param Type: The type of Pcd # @param ContainerFile: The file which describes the pcd, used for error report # - def GenDynamicDefaultPcds(self, Type = '', ContainerFile = ''): + def GenDynamicDefaultPcds(self, Type='', ContainerFile=''): Pcds = {} SkuInfoList = {} if Type == DataType.TAB_PCDS_DYNAMIC_DEFAULT: @@ -594,20 +594,20 @@ class Dsc(DscObject): if CleanString(NewItem) == '': continue (K1, K2, K3, K4, K5, K6) = GetDynamicDefaultPcd(NewItem, Type, Filename, -1) - MergeArches(Pcds, (K1, K2, K3, K4, K5, K6, IncludeFile[4]), Arch) + MergeArches(Pcds, (K1, K2, K3, K4, K5, K6, IncludeFile[4]), Arch) self.PcdToken[Record[3]] = (K2, K1) for Record in RecordSet: if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON.upper(): (K1, K2, K3, K4, K5, K6) = GetDynamicDefaultPcd(Record[0], Type, ContainerFile, Record[2]) - MergeArches(Pcds, (K1, K2, K3, K4, K5, K6, Record[4]), Arch) + MergeArches(Pcds, (K1, K2, K3, K4, K5, K6, Record[4]), Arch) self.PcdToken[Record[3]] = (K2, K1) for Key in Pcds: (Status, SkuInfoList) = self.GenSkuInfoList(Key[6], self.Platform.SkuInfos.SkuInfoList, '', '', '', '', '', Key[2]) if Status == False: ErrorMsg = "The SKUID '%s' used in section '%s' is not defined in section [SkuIds]" % (SkuInfoList, Type) - EdkLogger.error("DSC File Parser", PARSER_ERROR, ErrorMsg, ContainerFile, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("DSC File Parser", PARSER_ERROR, ErrorMsg, ContainerFile, RaiseError=EdkLogger.IsRaiseError) Pcd = PcdClass(Key[0], '', Key[1], Key[3], Key[4], Key[2], Key[5], [], SkuInfoList, []) Pcd.SupArchList = Pcds[Key] self.Platform.DynamicPcdBuildDefinitions.append(Pcd) @@ -619,7 +619,7 @@ class Dsc(DscObject): # @param Type: The type of Pcd # @param ContainerFile: The file which describes the pcd, used for error report # - def GenDynamicHiiPcds(self, Type = '', ContainerFile = ''): + def GenDynamicHiiPcds(self, Type='', ContainerFile=''): Pcds = {} SkuInfoList = {} if Type == DataType.TAB_PCDS_DYNAMIC_HII: @@ -651,20 +651,20 @@ class Dsc(DscObject): if CleanString(NewItem) == '': continue (K1, K2, K3, K4, K5, K6, K7, K8) = GetDynamicHiiPcd(NewItem, Type, Filename, -1) - MergeArches(Pcds, (K1, K2, K3, K4, K5, K6, K7, K8, IncludeFile[4]), Arch) + MergeArches(Pcds, (K1, K2, K3, K4, K5, K6, K7, K8, IncludeFile[4]), Arch) self.PcdToken[Record[3]] = (K2, K1) for Record in RecordSet: if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON.upper(): (K1, K2, K3, K4, K5, K6, K7, K8) = GetDynamicHiiPcd(Record[0], Type, ContainerFile, Record[2]) - MergeArches(Pcds, (K1, K2, K3, K4, K5, K6, K7, K8, Record[4]), Arch) + MergeArches(Pcds, (K1, K2, K3, K4, K5, K6, K7, K8, Record[4]), Arch) self.PcdToken[Record[3]] = (K2, K1) for Key in Pcds: (Status, SkuInfoList) = self.GenSkuInfoList(Key[8], self.Platform.SkuInfos.SkuInfoList, Key[2], Key[3], Key[4], Key[5], '', '') if Status == False: ErrorMsg = "The SKUID '%s' used in section '%s' is not defined in section [SkuIds]" % (SkuInfoList, Type) - EdkLogger.error("DSC File Parser", PARSER_ERROR, ErrorMsg, ContainerFile, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("DSC File Parser", PARSER_ERROR, ErrorMsg, ContainerFile, RaiseError=EdkLogger.IsRaiseError) Pcd = PcdClass(Key[0], '', Key[1], '', Key[6], Key[5], Key[7], [], SkuInfoList, []) Pcd.SupArchList = Pcds[Key] self.Platform.DynamicPcdBuildDefinitions.append(Pcd) @@ -676,7 +676,7 @@ class Dsc(DscObject): # @param Type: The type of Pcd # @param ContainerFile: The file which describes the pcd, used for error report # - def GenDynamicVpdPcds(self, Type = '', ContainerFile = ''): + def GenDynamicVpdPcds(self, Type='', ContainerFile=''): Pcds = {} SkuInfoList = {} if Type == DataType.TAB_PCDS_DYNAMIC_VPD: @@ -708,20 +708,20 @@ class Dsc(DscObject): if CleanString(NewItem) == '': continue (K1, K2, K3, K4, K5) = GetDynamicVpdPcd(NewItem, Type, Filename, -1) - MergeArches(Pcds, (K1, K2, K3, K4, K5, IncludeFile[4]), Arch) + MergeArches(Pcds, (K1, K2, K3, K4, K5, IncludeFile[4]), Arch) self.PcdToken[Record[3]] = (K2, K1) for Record in RecordSet: if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON.upper(): (K1, K2, K3, K4, K5) = GetDynamicVpdPcd(Record[0], Type, ContainerFile, Record[2]) - MergeArches(Pcds, (K1, K2, K3, K4, K5, Record[4]), Arch) + MergeArches(Pcds, (K1, K2, K3, K4, K5, Record[4]), Arch) self.PcdToken[Record[3]] = (K2, K1) for Key in Pcds: (Status, SkuInfoList) = self.GenSkuInfoList(Key[5], self.Platform.SkuInfos.SkuInfoList, '', '', '', '', Key[2], '') if Status == False: ErrorMsg = "The SKUID '%s' used in section '%s' is not defined in section [SkuIds]" % (SkuInfoList, Type) - EdkLogger.error("DSC File Parser", PARSER_ERROR, ErrorMsg, ContainerFile, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("DSC File Parser", PARSER_ERROR, ErrorMsg, ContainerFile, RaiseError=EdkLogger.IsRaiseError) Pcd = PcdClass(Key[0], '', Key[1], '', Key[3], '', Key[4], [], SkuInfoList, []) Pcd.SupArchList = Pcds[Key] self.Platform.DynamicPcdBuildDefinitions.append(Pcd) @@ -769,7 +769,7 @@ class Dsc(DscObject): SubLibSet = QueryDscItem(self.TblDsc, MODEL_EFI_LIBRARY_CLASS, Record[3], self.FileID) for SubLib in SubLibSet: - Lib.append(TAB_VALUE_SPLIT.join([SubLib[0],SubLib[4]])) + Lib.append(TAB_VALUE_SPLIT.join([SubLib[0], SubLib[4]])) SubBoSet = QueryDscItem(self.TblDsc, MODEL_META_DATA_BUILD_OPTION, Record[3], self.FileID) for SubBo in SubBoSet: @@ -806,7 +806,7 @@ class Dsc(DscObject): # # @retval PlatformModuleClass() A instance for PlatformModuleClass # - def GenComponent(self, Item, ContainerFile, LineNo = -1): + def GenComponent(self, Item, ContainerFile, LineNo= -1): (InfFilename, ExecFilename) = GetExec(Item[0]) LibraryClasses = Item[1] BuildOptions = Item[2] @@ -894,7 +894,7 @@ class Dsc(DscObject): # @retval (False, SkuName) Not found in section SkuId Dsc file # @retval (True, SkuInfoList) Found in section SkuId of Dsc file # - def GenSkuInfoList(self, SkuNameList, SkuInfo, VariableName = '', VariableGuid = '', VariableOffset = '', HiiDefaultValue = '', VpdOffset = '', DefaultValue = ''): + def GenSkuInfoList(self, SkuNameList, SkuInfo, VariableName='', VariableGuid='', VariableOffset='', HiiDefaultValue='', VpdOffset='', DefaultValue=''): SkuNameList = GetSplitValueList(SkuNameList) if SkuNameList == None or SkuNameList == [] or SkuNameList == ['']: SkuNameList = ['DEFAULT'] @@ -964,7 +964,7 @@ class Dsc(DscObject): (Value1, Value2, Value3, Model, StartColumn, EndColumn, Enabled) = ('', '', '', -1, -1, -1, 0) if IfDefList == []: ErrorMsg = 'Not suited conditional statement in file %s' % Filename - EdkLogger.error("DSC File Parser", PARSER_ERROR, ErrorMsg, Filename, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("DSC File Parser", PARSER_ERROR, ErrorMsg, Filename, RaiseError=EdkLogger.IsRaiseError) else: # # Get New Dsc item ID @@ -1046,10 +1046,10 @@ class Dsc(DscObject): # Remove comment block # if Line.find(TAB_COMMENT_EDK_START) > -1: - ReservedLine = GetSplitValueList(Line, TAB_COMMENT_EDK_START, 1)[0] + ReservedLine = GetSplitList(Line, TAB_COMMENT_EDK_START, 1)[0] IsFindBlockComment = True if Line.find(TAB_COMMENT_EDK_END) > -1: - Line = ReservedLine + GetSplitValueList(Line, TAB_COMMENT_EDK_END, 1)[1] + Line = ReservedLine + GetSplitList(Line, TAB_COMMENT_EDK_END, 1)[1] ReservedLine = '' IsFindBlockComment = False if IsFindBlockComment: @@ -1087,7 +1087,7 @@ class Dsc(DscObject): CurrentSection = ItemList[0] else: if CurrentSection != ItemList[0]: - EdkLogger.error("Parser", PARSER_ERROR, "Different section names '%s' and '%s' are found in one section definition, this is not allowed." % (CurrentSection, ItemList[0]), File=Filename, Line=LineNo, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", PARSER_ERROR, "Different section names '%s' and '%s' are found in one section definition, this is not allowed." % (CurrentSection, ItemList[0]), File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError) if CurrentSection.upper() not in self.KeyList: RaiseParserError(Line, CurrentSection, Filename, '', LineNo) CurrentSection = TAB_UNKNOWN @@ -1098,7 +1098,7 @@ class Dsc(DscObject): RaiseParserError(Line, CurrentSection, Filename, '', LineNo) else: if ItemList[1] != '' and ItemList[1].upper() not in ARCH_LIST_FULL: - EdkLogger.error("Parser", PARSER_ERROR, "Invalid Arch definition '%s' found" % ItemList[1], File=Filename, Line=LineNo, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", PARSER_ERROR, "Invalid Arch definition '%s' found" % ItemList[1], File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError) ArchList.append(ItemList[1].upper()) ThirdList.append(ItemList[2]) @@ -1109,7 +1109,7 @@ class Dsc(DscObject): # if CurrentSection == TAB_UNKNOWN: ErrorMsg = "%s is not in any defined section" % Line - EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, File=Filename, Line=LineNo, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError) # # Add a section item @@ -1161,7 +1161,7 @@ class Dsc(DscObject): MODEL_META_DATA_DEFINE) RecordSet = self.TblDsc.Exec(SqlCommand) for Record in RecordSet: - SqlCommand = """Update %s set Enabled = -1 where StartLine >= %s and EndLine <= %s""" %(self.TblDsc.Table, Record[0], Record[1]) + SqlCommand = """Update %s set Enabled = -1 where StartLine >= %s and EndLine <= %s""" % (self.TblDsc.Table, Record[0], Record[1]) self.TblDsc.Exec(SqlCommand) # @@ -1185,8 +1185,8 @@ class Dsc(DscObject): MODEL_META_DATA_DEFINE) RecordSet = self.TblDsc.Exec(SqlCommand) for Record in RecordSet: - SqlCommand = """Update %s set Enabled = -1 where StartLine >= %s and EndLine <= %s""" %(self.TblDsc.Table, Record[0], Record[1]) - EdkLogger.debug(4, "SqlCommand: %s" %SqlCommand) + SqlCommand = """Update %s set Enabled = -1 where StartLine >= %s and EndLine <= %s""" % (self.TblDsc.Table, Record[0], Record[1]) + EdkLogger.debug(4, "SqlCommand: %s" % SqlCommand) self.Cur.execute(SqlCommand) # @@ -1210,13 +1210,13 @@ class Dsc(DscObject): for Record in RecordSet: if Record[0] == MODEL_META_DATA_CONDITIONAL_STATEMENT_IF: if not self.Compare(Record[6], Record[2], Record[3]): - SqlCommand = """Update %s set Enabled = -1 where StartLine >= %s and EndLine <= %s""" %(self.TblDsc.Table, Record[4], Record[5]) + SqlCommand = """Update %s set Enabled = -1 where StartLine >= %s and EndLine <= %s""" % (self.TblDsc.Table, Record[4], Record[5]) self.TblDsc.Exec(SqlCommand) else: DisabledList.append(Record[1]) continue if Record[0] == MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSE and Record[1] in DisabledList: - SqlCommand = """Update %s set Enabled = -1 where StartLine >= %s and EndLine <= %s""" %(self.TblDsc.Table, Record[4], Record[5]) + SqlCommand = """Update %s set Enabled = -1 where StartLine >= %s and EndLine <= %s""" % (self.TblDsc.Table, Record[4], Record[5]) self.TblDsc.Exec(SqlCommand) ## Compare @@ -1227,7 +1227,7 @@ class Dsc(DscObject): # @param Value2: # def Compare(self, Value1, CompareType, Value2): - Command = """Value1 %s Value2""" %CompareType + Command = """Value1 %s Value2""" % CompareType return eval(Command) ## First time to insert records to database @@ -1259,7 +1259,7 @@ class Dsc(DscObject): LineValue, StartLine, EndLine = SectionItem[0], SectionItem[1], SectionItem[1] - EdkLogger.debug(4, "Parsing %s ..." %LineValue) + EdkLogger.debug(4, "Parsing %s ..." % LineValue) # # Parse '!ifdef' # @@ -1337,10 +1337,10 @@ class Dsc(DscObject): Components = [] GetComponent(SectionItemList, Components) for Component in Components: - EdkLogger.debug(4, "Parsing component %s ..." %Component) + EdkLogger.debug(4, "Parsing component %s ..." % Component) DscItmeID = self.TblDsc.Insert(MODEL_META_DATA_COMPONENT, Component[0], '', '', Arch, -1, FileID, StartLine, -1, StartLine, -1, 0) for Item in Component[1]: - List = GetSplitValueList(Item, MaxSplit = 2) + List = GetSplitValueList(Item, MaxSplit=2) LibName, LibIns = '', '' if len(List) == 2: LibName = List[0] diff --git a/BaseTools/Source/Python/Common/InfClassObject.py b/BaseTools/Source/Python/Common/InfClassObject.py index 0f2b5ca47d..7ea0c39297 100644 --- a/BaseTools/Source/Python/Common/InfClassObject.py +++ b/BaseTools/Source/Python/Common/InfClassObject.py @@ -163,7 +163,7 @@ class InfObject(object): # @var KeyList: To store value for KeyList, a list for all Keys used in Inf # class Inf(InfObject): - def __init__(self, Filename = None, IsToDatabase = False, IsToModule = False, WorkspaceDir = None, Database = None, SupArchList = DataType.ARCH_LIST): + def __init__(self, Filename=None, IsToDatabase=False, IsToModule=False, WorkspaceDir=None, Database=None, SupArchList=DataType.ARCH_LIST): self.Identification = Identification() self.Module = ModuleClass() self.UserExtensions = '' @@ -353,10 +353,10 @@ class Inf(InfObject): # Remove comment block # if Line.find(TAB_COMMENT_EDK_START) > -1: - ReservedLine = GetSplitValueList(Line, TAB_COMMENT_EDK_START, 1)[0] + ReservedLine = GetSplitList(Line, TAB_COMMENT_EDK_START, 1)[0] IsFindBlockComment = True if Line.find(TAB_COMMENT_EDK_END) > -1: - Line = ReservedLine + GetSplitValueList(Line, TAB_COMMENT_EDK_END, 1)[1] + Line = ReservedLine + GetSplitList(Line, TAB_COMMENT_EDK_END, 1)[1] ReservedLine = '' IsFindBlockComment = False if IsFindBlockComment: @@ -397,7 +397,7 @@ class Inf(InfObject): CurrentSection = ItemList[0] else: if CurrentSection != ItemList[0]: - EdkLogger.error("Parser", PARSER_ERROR, "Different section names '%s' and '%s' are found in one section definition, this is not allowed." % (CurrentSection, ItemList[0]), File=Filename, Line=LineNo, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", PARSER_ERROR, "Different section names '%s' and '%s' are found in one section definition, this is not allowed." % (CurrentSection, ItemList[0]), File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError) if CurrentSection.upper() not in self.KeyList: RaiseParserError(Line, CurrentSection, Filename, '', LineNo) CurrentSection = TAB_UNKNOWN @@ -408,7 +408,7 @@ class Inf(InfObject): RaiseParserError(Line, CurrentSection, Filename, '', LineNo) else: if ItemList[1] != '' and ItemList[1].upper() not in ARCH_LIST_FULL: - EdkLogger.error("Parser", PARSER_ERROR, "Invalid Arch definition '%s' found" % ItemList[1], File=Filename, Line=LineNo, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", PARSER_ERROR, "Invalid Arch definition '%s' found" % ItemList[1], File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError) ArchList.append(ItemList[1].upper()) ThirdList.append(ItemList[2]) @@ -419,7 +419,7 @@ class Inf(InfObject): # if CurrentSection == TAB_UNKNOWN: ErrorMsg = "%s is not in any defined section" % Line - EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, File=Filename, Line=LineNo, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError) # # Add a section item @@ -497,13 +497,13 @@ class Inf(InfObject): print Item.Name, Item.Value, Item.SupArchList print '\nPcds =', M.PcdCodes for Item in M.PcdCodes: - print '\tCName=',Item.CName, 'TokenSpaceGuidCName=', Item.TokenSpaceGuidCName, 'DefaultValue=', Item.DefaultValue, 'ItemType=', Item.ItemType, Item.SupArchList + print '\tCName=', Item.CName, 'TokenSpaceGuidCName=', Item.TokenSpaceGuidCName, 'DefaultValue=', Item.DefaultValue, 'ItemType=', Item.ItemType, Item.SupArchList print '\nSources =', M.Sources for Source in M.Sources: print Source.SourceFile, 'Fam=', Source.ToolChainFamily, 'Pcd=', Source.FeatureFlag, 'Tag=', Source.TagName, 'ToolCode=', Source.ToolCode, Source.SupArchList print '\nUserExtensions =', M.UserExtensions for UserExtension in M.UserExtensions: - print UserExtension.UserID, UserExtension.Identifier,UserExtension.Content + print UserExtension.UserID, UserExtension.Identifier, UserExtension.Content print '\nGuids =', M.Guids for Item in M.Guids: print Item.CName, Item.SupArchList, Item.FeatureFlag @@ -629,7 +629,7 @@ class Inf(InfObject): if ModuleHeader.ComponentType in gComponentType2ModuleType: ModuleHeader.ModuleType = gComponentType2ModuleType[ModuleHeader.ComponentType] elif ModuleHeader.ComponentType != '': - EdkLogger.error("Parser", PARSER_ERROR, "Unsupported Edk component type [%s]" % ModuleHeader.ComponentType, ExtraData=File, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", PARSER_ERROR, "Unsupported Edk component type [%s]" % ModuleHeader.ComponentType, ExtraData=File, RaiseError=EdkLogger.IsRaiseError) self.Module.Header[Arch] = ModuleHeader diff --git a/BaseTools/Source/Python/Common/InfClassObjectLight.py b/BaseTools/Source/Python/Common/InfClassObjectLight.py index 067bf71008..44f922340b 100644 --- a/BaseTools/Source/Python/Common/InfClassObjectLight.py +++ b/BaseTools/Source/Python/Common/InfClassObjectLight.py @@ -73,7 +73,7 @@ class InfHeader(ModuleHeaderClass): TAB_INF_DEFINES_MODULE_TYPE : "ModuleType", TAB_INF_DEFINES_EFI_SPECIFICATION_VERSION : "UefiSpecificationVersion", TAB_INF_DEFINES_UEFI_SPECIFICATION_VERSION : "UefiSpecificationVersion", - TAB_INF_DEFINES_EDK_RELEASE_VERSION : "EdkReleaseVersion", + TAB_INF_DEFINES_EDK_RELEASE_VERSION : "EdkReleaseVersion", # Optional Fields TAB_INF_DEFINES_INF_VERSION : "InfVersion", @@ -139,34 +139,34 @@ class InfObject(object): # @var KeyList: To store value for KeyList, a list for all Keys used in Inf # class Inf(InfObject): - def __init__(self, Filename = None, IsToModule = False, WorkspaceDir = None, PackageDir = None, SupArchList = DataType.ARCH_LIST): + def __init__(self, Filename=None, IsToModule=False, WorkspaceDir=None, PackageDir=None, SupArchList=DataType.ARCH_LIST): self.Identification = IdentificationClass() self.Module = ModuleClass() self.WorkspaceDir = WorkspaceDir self.PackageDir = PackageDir self.SupArchList = SupArchList - + self.KeyList = [ - TAB_SOURCES, TAB_BUILD_OPTIONS, TAB_BINARIES, TAB_INCLUDES, TAB_GUIDS, - TAB_PROTOCOLS, TAB_PPIS, TAB_LIBRARY_CLASSES, TAB_PACKAGES, TAB_INF_FIXED_PCD, - TAB_INF_PATCH_PCD, TAB_INF_FEATURE_PCD, TAB_INF_PCD, TAB_INF_PCD_EX, + TAB_SOURCES, TAB_BUILD_OPTIONS, TAB_BINARIES, TAB_INCLUDES, TAB_GUIDS, + TAB_PROTOCOLS, TAB_PPIS, TAB_LIBRARY_CLASSES, TAB_PACKAGES, TAB_INF_FIXED_PCD, + TAB_INF_PATCH_PCD, TAB_INF_FEATURE_PCD, TAB_INF_PCD, TAB_INF_PCD_EX, TAB_DEPEX, TAB_INF_DEFINES ] # Upper all KEYs to ignore case sensitive when parsing self.KeyList = map(lambda c: c.upper(), self.KeyList) - + # Init RecordSet - self.RecordSet = {} + self.RecordSet = {} for Key in self.KeyList: self.RecordSet[Section[Key]] = [] - + # Init Comment self.SectionHeaderCommentDict = {} - + # Load Inf file if filename is not None if Filename != None: self.LoadInfFile(Filename) - + # Transfer to Module Object if IsToModule is True if IsToModule: self.InfToModule() @@ -209,16 +209,16 @@ class Inf(InfObject): InfList['Defines'] = TmpList if ModuleHeader.Description != '': SectionHeaderCommentDict['Defines'] = ModuleHeader.Description - + if Module.UserExtensions != None: InfList['BuildOptions'] = Module.UserExtensions.BuildOptions - + for Item in Module.Includes: Key = 'Includes.' + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) Value.append(Item.FilePath) GenMetaDatSectionItem(Key, Value, InfList) - + for Item in Module.LibraryClasses: Key = 'LibraryClasses.' + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) @@ -227,15 +227,15 @@ class Inf(InfObject): NewValue = NewValue + '|' + Item.RecommendedInstance if Item.FeatureFlag: NewValue = NewValue + '|' + Item.FeatureFlag - Value.append(NewValue) + Value.append(NewValue) GenMetaDatSectionItem(Key, Value, InfList) - + for Item in Module.PackageDependencies: Key = 'Packages.' + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) Value.append(Item.FilePath) GenMetaDatSectionItem(Key, Value, InfList) - + for Item in Module.PcdCodes: Key = 'Pcds' + Item.ItemType + '.' + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) @@ -244,7 +244,7 @@ class Inf(InfObject): NewValue = NewValue + '|' + Item.DefaultValue Value.append(NewValue) GenMetaDatSectionItem(Key, Value, InfList) - + for Item in Module.Sources: Key = 'Sources.' + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) @@ -261,40 +261,40 @@ class Inf(InfObject): if Item.HelpText != '': SectionHeaderCommentDict[Key] = Item.HelpText GenMetaDatSectionItem(Key, Value, InfList) - + for Item in Module.Guids: Key = 'Guids.' + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) Value.append(Item.CName) GenMetaDatSectionItem(Key, Value, InfList) - + for Item in Module.Protocols: Key = 'Protocols.' + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) Value.append(Item.CName) GenMetaDatSectionItem(Key, Value, InfList) - + for Item in Module.Ppis: Key = 'Ppis.' + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) Value.append(Item.CName) GenMetaDatSectionItem(Key, Value, InfList) - + if Module.PeiDepex: Key = 'Depex' Value = Module.PeiDepex.Depex GenMetaDatSectionItem(Key, Value, InfList) - + if Module.DxeDepex: Key = 'Depex' Value = Module.DxeDepex.Depex GenMetaDatSectionItem(Key, Value, InfList) - + if Module.SmmDepex: Key = 'Depex' Value = Module.SmmDepex.Depex GenMetaDatSectionItem(Key, Value, InfList) - + for Item in Module.Binaries: Key = 'Binaries.' + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) @@ -318,10 +318,10 @@ class Inf(InfObject): else: Inf = Inf + ' ' + Value + '\n' Inf = Inf + '\n' - + return Inf - - + + ## Transfer to Module Object # # Transfer all contents of an Inf file to a standard Module Object @@ -329,28 +329,28 @@ class Inf(InfObject): def InfToModule(self): # Init global information for the file ContainerFile = self.Identification.FullPath - + # Generate Module Header self.GenModuleHeader(ContainerFile) - + # Generate BuildOptions self.GenBuildOptions(ContainerFile) - + # Generate Includes self.GenIncludes(ContainerFile) - + # Generate LibraryClasses self.GenLibraryClasses(ContainerFile) - + # Generate Packages self.GenPackages(ContainerFile) - + # Generate Pcds self.GenPcds(ContainerFile) - + # Generate Sources self.GenSources(ContainerFile) - + # Generate Guids self.GenGuidProtocolPpis(DataType.TAB_GUIDS, ContainerFile) @@ -359,13 +359,13 @@ class Inf(InfObject): # Generate Ppis self.GenGuidProtocolPpis(DataType.TAB_PPIS, ContainerFile) - + # Generate Depexes self.GenDepexes(ContainerFile) - + # Generate Binaries self.GenBinaries(ContainerFile) - + # Init MiscFiles self.GenMiscFiles(ContainerFile) @@ -386,24 +386,24 @@ class Inf(InfObject): # # @param Filename: Input value for filename of Inf file # - def LoadInfFile(self, Filename): + def LoadInfFile(self, Filename): # Insert a record for file Filename = NormPath(Filename) - + self.Identification.FullPath = Filename (self.Identification.RelaPath, self.Identification.FileName) = os.path.split(Filename) if self.Identification.FullPath.find(self.WorkspaceDir) > -1: - self.Identification.ModulePath = os.path.dirname(self.Identification.FullPath[len(self.WorkspaceDir) + 1:]) + self.Identification.ModulePath = os.path.dirname(self.Identification.FullPath[len(self.WorkspaceDir) + 1:]) if self.PackageDir: self.Identification.PackagePath = self.PackageDir if self.Identification.ModulePath.find(self.PackageDir) == 0: self.Identification.ModulePath = self.Identification.ModulePath[len(self.PackageDir) + 1:] - + # Init common datas IfDefList, SectionItemList, CurrentSection, ArchList, ThirdList, IncludeFiles = \ [], [], TAB_UNKNOWN, [], [], [] LineNo = 0 - + # Parse file content IsFindBlockComment = False ReservedLine = '' @@ -412,7 +412,7 @@ class Inf(InfObject): LineNo = LineNo + 1 # Remove comment block if Line.find(TAB_COMMENT_EDK_START) > -1: - ReservedLine = GetSplitValueList(Line, TAB_COMMENT_EDK_START, 1)[0] + ReservedLine = GetSplitList(Line, TAB_COMMENT_EDK_START, 1)[0] if ReservedLine.strip().startswith(TAB_COMMENT_SPLIT): Comment = Comment + Line.strip() + '\n' ReservedLine = '' @@ -423,20 +423,20 @@ class Inf(InfObject): continue if Line.find(TAB_COMMENT_EDK_END) > -1: Comment = Comment + Line[:Line.find(TAB_COMMENT_EDK_END) + len(TAB_COMMENT_EDK_END)] + '\n' - Line = ReservedLine + GetSplitValueList(Line, TAB_COMMENT_EDK_END, 1)[1] + Line = ReservedLine + GetSplitList(Line, TAB_COMMENT_EDK_END, 1)[1] ReservedLine = '' IsFindBlockComment = False if IsFindBlockComment: Comment = Comment + Line.strip() + '\n' continue - + # Remove comments at tail and remove spaces again if Line.strip().startswith(TAB_COMMENT_SPLIT) or Line.strip().startswith('--/'): Comment = Comment + Line.strip() + '\n' Line = CleanString(Line) if Line == '': continue - + ## Find a new section tab # First insert previous section items # And then parse the content of the new section @@ -446,12 +446,12 @@ class Inf(InfObject): Model = Section[CurrentSection.upper()] # Insert items data of previous section InsertSectionItems(Model, CurrentSection, SectionItemList, ArchList, ThirdList, self.RecordSet) - + # Parse the new section SectionItemList = [] ArchList = [] ThirdList = [] - + CurrentSection = '' LineList = GetSplitValueList(Line[len(TAB_SECTION_START):len(Line) - len(TAB_SECTION_END)], TAB_COMMA_SPLIT) for Item in LineList: @@ -460,7 +460,7 @@ class Inf(InfObject): CurrentSection = ItemList[0] else: if CurrentSection != ItemList[0]: - EdkLogger.error("Parser", PARSER_ERROR, "Different section names '%s' and '%s' are found in one section definition, this is not allowed." % (CurrentSection, ItemList[0]), File=Filename, Line=LineNo, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", PARSER_ERROR, "Different section names '%s' and '%s' are found in one section definition, this is not allowed." % (CurrentSection, ItemList[0]), File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError) if CurrentSection.upper() not in self.KeyList: RaiseParserError(Line, CurrentSection, Filename, '', LineNo) ItemList.append('') @@ -469,7 +469,7 @@ class Inf(InfObject): RaiseParserError(Line, CurrentSection, Filename, '', LineNo) else: if ItemList[1] != '' and ItemList[1].upper() not in ARCH_LIST_FULL: - EdkLogger.error("Parser", PARSER_ERROR, "Invalid Arch definition '%s' found" % ItemList[1], File=Filename, Line=LineNo, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", PARSER_ERROR, "Invalid Arch definition '%s' found" % ItemList[1], File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError) ArchList.append(ItemList[1].upper()) ThirdList.append(ItemList[2]) @@ -479,18 +479,18 @@ class Inf(InfObject): self.SectionHeaderCommentDict[Section[CurrentSection.upper()]] = Comment Comment = '' continue - + # Not in any defined section if CurrentSection == TAB_UNKNOWN: ErrorMsg = "%s is not in any defined section" % Line - EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, File=Filename, Line=LineNo, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, File=Filename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError) # Add a section item SectionItemList.append([Line, LineNo, Comment]) Comment = '' # End of parse #End of For - + # Insert items data of last section Model = Section[CurrentSection.upper()] InsertSectionItems(Model, CurrentSection, SectionItemList, ArchList, ThirdList, self.RecordSet) @@ -510,7 +510,7 @@ class Inf(InfObject): print 'PackagePath =', M.ModuleHeader.PackagePath print 'ModulePath =', M.ModuleHeader.ModulePath print 'CombinePath =', M.ModuleHeader.CombinePath - + print 'BaseName =', M.ModuleHeader.Name print 'Guid =', M.ModuleHeader.Guid print 'Version =', M.ModuleHeader.Version @@ -526,7 +526,7 @@ class Inf(InfObject): print Item.FilePath, Item.SupArchList, Item.FeatureFlag print '\nPcds =' for Item in M.PcdCodes: - print '\tCName=',Item.CName, 'TokenSpaceGuidCName=', Item.TokenSpaceGuidCName, 'DefaultValue=', Item.DefaultValue, 'ItemType=', Item.ItemType, Item.SupArchList + print '\tCName=', Item.CName, 'TokenSpaceGuidCName=', Item.TokenSpaceGuidCName, 'DefaultValue=', Item.DefaultValue, 'ItemType=', Item.ItemType, Item.SupArchList print '\nSources =' for Source in M.Sources: print Source.SourceFile, 'Fam=', Source.ToolChainFamily, 'Pcd=', Source.FeatureFlag, 'Tag=', Source.TagName, 'ToolCode=', Source.ToolCode, Source.SupArchList @@ -562,7 +562,7 @@ class Inf(InfObject): EdkLogger.debug(2, "Generate ModuleHeader ...") # Update all defines item in database RecordSet = self.RecordSet[MODEL_META_DATA_HEADER] - + ModuleHeader = ModuleHeaderClass() ModuleExtern = ModuleExternClass() OtherDefines = [] @@ -614,7 +614,7 @@ class Inf(InfObject): UE = UserExtensionsClass() UE.Defines = OtherDefines self.Module.UserExtensions = UE - + ## GenBuildOptions # # Gen BuildOptions of Inf @@ -633,7 +633,7 @@ class Inf(InfObject): for Record in RecordSet: UE.BuildOptions.append(Record[0]) self.Module.UserExtensions = UE - + ## GenIncludes # # Gen Includes of Inf @@ -653,7 +653,7 @@ class Inf(InfObject): Include.HelpTextList.append(GenerateHelpText(Record[5], '')) self.Module.Includes.append(Include) #self.Module.FileList.extend(GetFiles(os.path.normpath(os.path.join(self.Identification.FileRelativePath, Include.FilePath)), ['CVS', '.svn'])) - + ## GenLibraryClasses # # Get LibraryClass of Inf @@ -667,7 +667,7 @@ class Inf(InfObject): # Get all LibraryClasses RecordSet = self.RecordSet[MODEL_EFI_LIBRARY_CLASS] for Record in RecordSet: - (LibClassName, LibClassIns, Pcd, SupModelList) = GetLibraryClassOfInf([Record[0], Record[4]], ContainerFile, self.WorkspaceDir, Record[2]) + (LibClassName, LibClassIns, Pcd, SupModelList) = GetLibraryClassOfInf([Record[0], Record[4]], ContainerFile, self.WorkspaceDir, Record[2]) LibraryClass = CommonClass.LibraryClassClass() LibraryClass.LibraryClass = LibClassName LibraryClass.RecommendedInstance = LibClassIns @@ -698,7 +698,7 @@ class Inf(InfObject): if GenerateHelpText(Record[5], ''): Package.HelpTextList.append(GenerateHelpText(Record[5], '')) self.Module.PackageDependencies.append(Package) - + def AddPcd(self, CName, TokenSpaceGuidCName, DefaultValue, ItemType, Arch, HelpTextList): Pcd = PcdClass() Pcd.CName = CName @@ -709,7 +709,7 @@ class Inf(InfObject): if GenerateHelpText(HelpTextList, ''): Pcd.HelpTextList.append(GenerateHelpText(HelpTextList, '')) self.Module.PcdCodes.append(Pcd) - + ## GenPcds # # Gen Pcds of Inf @@ -721,14 +721,14 @@ class Inf(InfObject): EdkLogger.debug(2, "Generate %s ..." % TAB_PCDS) Pcds = {} PcdToken = {} - + # Get all Pcds RecordSet1 = self.RecordSet[MODEL_PCD_FIXED_AT_BUILD] RecordSet2 = self.RecordSet[MODEL_PCD_PATCHABLE_IN_MODULE] RecordSet3 = self.RecordSet[MODEL_PCD_FEATURE_FLAG] RecordSet4 = self.RecordSet[MODEL_PCD_DYNAMIC_EX] RecordSet5 = self.RecordSet[MODEL_PCD_DYNAMIC] - + # Go through each arch for Record in RecordSet1: (TokenSpaceGuidCName, TokenName, Value, Type) = GetPcdOfInf(Record[0], TAB_PCDS_FIXED_AT_BUILD, ContainerFile, Record[2]) @@ -745,7 +745,7 @@ class Inf(InfObject): for Record in RecordSet5: (TokenSpaceGuidCName, TokenName, Value, Type) = GetPcdOfInf(Record[0], '', ContainerFile, Record[2]) self.AddPcd(TokenName, TokenSpaceGuidCName, Value, Type, Record[1], Record[5]) - + ## GenSources # # Gen Sources of Inf @@ -756,7 +756,7 @@ class Inf(InfObject): def GenSources(self, ContainerFile): EdkLogger.debug(2, "Generate %s ..." % TAB_SOURCES) Sources = {} - + # Get all Sources RecordSet = self.RecordSet[MODEL_EFI_SOURCE_FILE] for Record in RecordSet: @@ -820,7 +820,7 @@ class Inf(InfObject): def GenBinaries(self, ContainerFile): EdkLogger.debug(2, "Generate %s ..." % TAB_BINARIES) Binaries = {} - + # Get all Guids RecordSet = self.RecordSet[MODEL_EFI_BINARY_FILE] for Record in RecordSet: @@ -830,7 +830,7 @@ class Inf(InfObject): Binary.HelpTextList.append(GenerateHelpText(Record[5], '')) self.Module.Binaries.append(Binary) #self.Module.FileList.append(os.path.normpath(os.path.join(self.Identification.RelaPath, Filename))) - + ## GenGuids # # Gen Guids of Inf @@ -859,7 +859,7 @@ class Inf(InfObject): if GenerateHelpText(Record[5], ''): ListClass.HelpTextList.append(GenerateHelpText(Record[5], '')) ListMember.append(ListClass) - + ## # # This acts like the main() function for the script, unless it is 'import'ed into another @@ -868,10 +868,10 @@ class Inf(InfObject): if __name__ == '__main__': EdkLogger.Initialize() EdkLogger.SetLevel(EdkLogger.QUIET) - + W = os.getenv('WORKSPACE') F = os.path.join(W, 'MdeModulePkg/Application/HelloWorld/HelloWorld.inf') - + P = Inf(os.path.normpath(F), True, W, 'MdeModulePkg') P.ShowModule() print P.ModuleToInf(P.Module) diff --git a/BaseTools/Source/Python/Common/String.py b/BaseTools/Source/Python/Common/String.py index a35f728dc0..0f2a61b1b9 100644 --- a/BaseTools/Source/Python/Common/String.py +++ b/BaseTools/Source/Python/Common/String.py @@ -24,7 +24,7 @@ import GlobalData from BuildToolError import * from CommonDataClass.Exceptions import * -gHexVerPatt = re.compile('0x[a-f0-9]{4}[a-f0-9]{4}$',re.IGNORECASE) +gHexVerPatt = re.compile('0x[a-f0-9]{4}[a-f0-9]{4}$', re.IGNORECASE) gHumanReadableVerPatt = re.compile(r'([1-9][0-9]*|0)\.[0-9]{1,2}$') ## GetSplitValueList @@ -39,7 +39,7 @@ gHumanReadableVerPatt = re.compile(r'([1-9][0-9]*|0)\.[0-9]{1,2}$') # # @retval list() A list for splitted string # -def GetSplitValueList(String, SplitTag = DataType.TAB_VALUE_SPLIT, MaxSplit = -1): +def GetSplitValueList(String, SplitTag=DataType.TAB_VALUE_SPLIT, MaxSplit= -1): ValueList = [] Last = 0 Escaped = False @@ -51,7 +51,7 @@ def GetSplitValueList(String, SplitTag = DataType.TAB_VALUE_SPLIT, MaxSplit = -1 # Found a splitter not in a string, split it if not InString and Char == SplitTag: ValueList.append(String[Last:Index].strip()) - Last = Index+1 + Last = Index + 1 if MaxSplit > 0 and len(ValueList) >= MaxSplit: break @@ -84,7 +84,7 @@ def GetSplitValueList(String, SplitTag = DataType.TAB_VALUE_SPLIT, MaxSplit = -1 # # @retval list() A list for splitted string # -def GetSplitList(String, SplitStr = DataType.TAB_VALUE_SPLIT, MaxSplit = -1): +def GetSplitList(String, SplitStr=DataType.TAB_VALUE_SPLIT, MaxSplit= -1): return map(lambda l: l.strip(), String.split(SplitStr, MaxSplit)) ## MergeArches @@ -235,7 +235,7 @@ def SplitModuleType(Key): # # @retval NewList A new string list whose macros are replaced # -def ReplaceMacros(StringList, MacroDefinitions={}, SelfReplacement = False): +def ReplaceMacros(StringList, MacroDefinitions={}, SelfReplacement=False): NewList = [] for String in StringList: if type(String) == type(''): @@ -289,7 +289,7 @@ def ReplaceMacro(String, MacroDefinitions={}, SelfReplacement=False, RaiseError= # # @retval Path Formatted path # -def NormPath(Path, Defines = {}): +def NormPath(Path, Defines={}): IsRelativePath = False if Path: if Path[0] == '.': @@ -319,7 +319,7 @@ def NormPath(Path, Defines = {}): # # @retval Path Formatted path # -def CleanString(Line, CommentCharacter = DataType.TAB_COMMENT_SPLIT, AllowCppStyleComment=False): +def CleanString(Line, CommentCharacter=DataType.TAB_COMMENT_SPLIT, AllowCppStyleComment=False): # # remove whitespace # @@ -342,19 +342,19 @@ def CleanString(Line, CommentCharacter = DataType.TAB_COMMENT_SPLIT, AllowCppSty elif Line[Index] == CommentCharacter and not InString : Line = Line[0: Index] break - + if CommentInString: Line = Line.replace('"', '') ChIndex = Line.find('#') while ChIndex >= 0: if GlobalData.gIsWindows: - if ChIndex == 0 or Line[ChIndex-1] != '^': + if ChIndex == 0 or Line[ChIndex - 1] != '^': Line = Line[0:ChIndex] + '^' + Line[ChIndex:] ChIndex = Line.find('#', ChIndex + 2) else: ChIndex = Line.find('#', ChIndex + 1) else: - if ChIndex == 0 or Line[ChIndex-1] != '\\': + if ChIndex == 0 or Line[ChIndex - 1] != '\\': Line = Line[0:ChIndex] + '\\' + Line[ChIndex:] ChIndex = Line.find('#', ChIndex + 2) else: @@ -376,7 +376,7 @@ def CleanString(Line, CommentCharacter = DataType.TAB_COMMENT_SPLIT, AllowCppSty # # @retval Path Formatted path # -def CleanString2(Line, CommentCharacter = DataType.TAB_COMMENT_SPLIT, AllowCppStyleComment=False): +def CleanString2(Line, CommentCharacter=DataType.TAB_COMMENT_SPLIT, AllowCppStyleComment=False): # # remove whitespace # @@ -468,7 +468,7 @@ def GetHexVerValue(VerString): if len(Minor) == 1: Minor += '0' DeciValue = (int(Major) << 16) + int(Minor); - return "0x%08x"%DeciValue + return "0x%08x" % DeciValue elif gHexVerPatt.match(VerString): return VerString else: @@ -578,7 +578,7 @@ def PreCheck(FileName, FileContent, SupSectionTag): # if Line.find('$') > -1: if Line.find('$(') < 0 or Line.find(')') < 0: - EdkLogger.error("Parser", FORMAT_INVALID, Line=LineNo, File=FileName, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", FORMAT_INVALID, Line=LineNo, File=FileName, RaiseError=EdkLogger.IsRaiseError) # # Check [] @@ -588,7 +588,7 @@ def PreCheck(FileName, FileContent, SupSectionTag): # Only get one '[' or one ']' # if not (Line.find('[') > -1 and Line.find(']') > -1): - EdkLogger.error("Parser", FORMAT_INVALID, Line=LineNo, File=FileName, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", FORMAT_INVALID, Line=LineNo, File=FileName, RaiseError=EdkLogger.IsRaiseError) # # Regenerate FileContent @@ -596,7 +596,7 @@ def PreCheck(FileName, FileContent, SupSectionTag): NewFileContent = NewFileContent + Line + '\r\n' if IsFailed: - EdkLogger.error("Parser", FORMAT_INVALID, Line=LineNo, File=FileName, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", FORMAT_INVALID, Line=LineNo, File=FileName, RaiseError=EdkLogger.IsRaiseError) return NewFileContent @@ -614,7 +614,7 @@ def PreCheck(FileName, FileContent, SupSectionTag): # # @retval True The file type is correct # -def CheckFileType(CheckFilename, ExtName, ContainerFilename, SectionName, Line, LineNo = -1): +def CheckFileType(CheckFilename, ExtName, ContainerFilename, SectionName, Line, LineNo= -1): if CheckFilename != '' and CheckFilename != None: (Root, Ext) = os.path.splitext(CheckFilename) if Ext.upper() != ExtName.upper(): @@ -623,7 +623,7 @@ def CheckFileType(CheckFilename, ExtName, ContainerFilename, SectionName, Line, LineNo = GetLineNo(ContainerFile, Line) ErrorMsg = "Invalid %s. '%s' is found, but '%s' file is needed" % (SectionName, CheckFilename, ExtName) EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, Line=LineNo, - File=ContainerFilename, RaiseError = EdkLogger.IsRaiseError) + File=ContainerFilename, RaiseError=EdkLogger.IsRaiseError) return True @@ -641,7 +641,7 @@ def CheckFileType(CheckFilename, ExtName, ContainerFilename, SectionName, Line, # # @retval The file full path if the file exists # -def CheckFileExist(WorkspaceDir, CheckFilename, ContainerFilename, SectionName, Line, LineNo = -1): +def CheckFileExist(WorkspaceDir, CheckFilename, ContainerFilename, SectionName, Line, LineNo= -1): CheckFile = '' if CheckFilename != '' and CheckFilename != None: CheckFile = WorkspaceFile(WorkspaceDir, CheckFilename) @@ -651,7 +651,7 @@ def CheckFileExist(WorkspaceDir, CheckFilename, ContainerFilename, SectionName, LineNo = GetLineNo(ContainerFile, Line) ErrorMsg = "Can't find file '%s' defined in section '%s'" % (CheckFile, SectionName) EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, - File=ContainerFilename, Line = LineNo, RaiseError = EdkLogger.IsRaiseError) + File=ContainerFilename, Line=LineNo, RaiseError=EdkLogger.IsRaiseError) return CheckFile @@ -665,7 +665,7 @@ def CheckFileExist(WorkspaceDir, CheckFilename, ContainerFilename, SectionName, # @retval int Index of the line # @retval -1 The line is not found # -def GetLineNo(FileContent, Line, IsIgnoreComment = True): +def GetLineNo(FileContent, Line, IsIgnoreComment=True): LineList = FileContent.splitlines() for Index in range(len(LineList)): if LineList[Index].find(Line) > -1: @@ -688,13 +688,13 @@ def GetLineNo(FileContent, Line, IsIgnoreComment = True): # @param File: File which has the string # @param Format: Correct format # -def RaiseParserError(Line, Section, File, Format = '', LineNo = -1): +def RaiseParserError(Line, Section, File, Format='', LineNo= -1): if LineNo == -1: LineNo = GetLineNo(open(os.path.normpath(File), 'r').read(), Line) ErrorMsg = "Invalid statement '%s' is found in section '%s'" % (Line, Section) if Format != '': Format = "Correct format is " + Format - EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, File=File, Line=LineNo, ExtraData=Format, RaiseError = EdkLogger.IsRaiseError) + EdkLogger.error("Parser", PARSER_ERROR, ErrorMsg, File=File, Line=LineNo, ExtraData=Format, RaiseError=EdkLogger.IsRaiseError) ## WorkspaceFile # @@ -757,10 +757,10 @@ def RemoveBlockComment(Lines): # Remove comment block # if Line.find(DataType.TAB_COMMENT_EDK_START) > -1: - ReservedLine = GetSplitValueList(Line, DataType.TAB_COMMENT_EDK_START, 1)[0] + ReservedLine = GetSplitList(Line, DataType.TAB_COMMENT_EDK_START, 1)[0] IsFindBlockComment = True if Line.find(DataType.TAB_COMMENT_EDK_END) > -1: - Line = ReservedLine + GetSplitValueList(Line, DataType.TAB_COMMENT_EDK_END, 1)[1] + Line = ReservedLine + GetSplitList(Line, DataType.TAB_COMMENT_EDK_END, 1)[1] ReservedLine = '' IsFindBlockComment = False if IsFindBlockComment: @@ -773,7 +773,7 @@ def RemoveBlockComment(Lines): # # Get String of a List # -def GetStringOfList(List, Split = ' '): +def GetStringOfList(List, Split=' '): if type(List) != type([]): return List Str = '' @@ -797,7 +797,7 @@ def GetHelpTextList(HelpTextClassList): def StringToArray(String): if isinstance(String, unicode): - if len(unicode) ==0: + if len(unicode) == 0: return "{0x00, 0x00}" return "{%s, 0x00, 0x00}" % ", ".join(["0x%02x, 0x00" % ord(C) for C in String]) elif String.startswith('L"'): @@ -822,7 +822,7 @@ def StringArrayLength(String): return (len(String) - 2 + 1) else: return len(String.split()) + 1 - + def RemoveDupOption(OptionString, Which="/I", Against=None): OptionList = OptionString.split() ValueList = [] diff --git a/BaseTools/Source/Python/Ecc/Check.py b/BaseTools/Source/Python/Ecc/Check.py index 1e9ce34f8b..cd47b805e5 100644 --- a/BaseTools/Source/Python/Ecc/Check.py +++ b/BaseTools/Source/Python/Ecc/Check.py @@ -59,8 +59,8 @@ class Check(object): for Char in Line: IndexOfChar += 1 if ord(Char) > 126: - OtherMsg = "File %s has Non-ASCII char at line %s column %s" %(Record[1], IndexOfLine, IndexOfChar) - EccGlobalData.gDb.TblReport.Insert(ERROR_GENERAL_CHECK_NON_ACSII, OtherMsg = OtherMsg, BelongsToTable = 'File', BelongsToItem = Record[0]) + OtherMsg = "File %s has Non-ASCII char at line %s column %s" % (Record[1], IndexOfLine, IndexOfChar) + EccGlobalData.gDb.TblReport.Insert(ERROR_GENERAL_CHECK_NON_ACSII, OtherMsg=OtherMsg, BelongsToTable='File', BelongsToItem=Record[0]) # C Function Layout Checking def FunctionLayoutCheck(self): @@ -251,7 +251,7 @@ class Check(object): EdkLogger.quiet("Checking same struct ...") AllStructure = {} for IdentifierTable in EccGlobalData.gIdentifierTableList: - SqlCommand = """select ID, Name, BelongsToFile from %s where Model = %s""" %(IdentifierTable, MODEL_IDENTIFIER_STRUCTURE) + SqlCommand = """select ID, Name, BelongsToFile from %s where Model = %s""" % (IdentifierTable, MODEL_IDENTIFIER_STRUCTURE) RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand) for Record in RecordSet: if Record[1] != '': @@ -265,7 +265,7 @@ class Check(object): if NewRecordSet != []: OtherMsg = "The structure name [%s] is duplicate with the one defined in %s, maybe struct NOT typedefed or the typedef new type NOT used to qualify variables" % (Record[1], NewRecordSet[0][0]) if not EccGlobalData.gException.IsException(ERROR_DECLARATION_DATA_TYPE_CHECK_SAME_STRUCTURE, Record[1]): - EccGlobalData.gDb.TblReport.Insert(ERROR_DECLARATION_DATA_TYPE_CHECK_SAME_STRUCTURE, OtherMsg = OtherMsg, BelongsToTable = IdentifierTable, BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_DECLARATION_DATA_TYPE_CHECK_SAME_STRUCTURE, OtherMsg=OtherMsg, BelongsToTable=IdentifierTable, BelongsToItem=Record[0]) # Check whether Union Type has a 'typedef' and the name is capital def DeclCheckUnionType(self): @@ -365,7 +365,7 @@ class Check(object): if Path.startswith('\\') or Path.startswith('/'): Path = Path[1:] if not EccGlobalData.gException.IsException(ERROR_INCLUDE_FILE_CHECK_NAME, Path): - EccGlobalData.gDb.TblReport.Insert(ERROR_INCLUDE_FILE_CHECK_NAME, OtherMsg = "The file name for [%s] is duplicate" % Path, BelongsToTable = 'File', BelongsToItem = Item[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_INCLUDE_FILE_CHECK_NAME, OtherMsg="The file name for [%s] is duplicate" % Path, BelongsToTable='File', BelongsToItem=Item[0]) # Check whether all include file contents is guarded by a #ifndef statement. def IncludeFileCheckIfndef(self): @@ -526,7 +526,7 @@ class Check(object): LibraryClasses[List[0]].append(Item) if Record[2] != 'BASE' and Record[2] not in SupModType: - EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_2, OtherMsg = "The Library Class '%s' does not specify its supported module types" % (List[0]), BelongsToTable = 'Inf', BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_2, OtherMsg="The Library Class '%s' does not specify its supported module types" % (List[0]), BelongsToTable='Inf', BelongsToItem=Record[0]) SqlCommand = """select A.ID, A.Value1, B.Value2 from Inf as A left join Inf as B where A.Model = %s and B.Value1 = '%s' and B.Model = %s @@ -546,10 +546,10 @@ class Check(object): if Record[1] in LibraryClasses: if Record[2] not in LibraryClasses[Record[1]] and 'BASE' not in RecordDict[Record[1]]: if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_1, Record[1]): - EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_1, OtherMsg = "The type of Library Class [%s] defined in Inf file does not match the type of the module" % (Record[1]), BelongsToTable = 'Inf', BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_1, OtherMsg="The type of Library Class [%s] defined in Inf file does not match the type of the module" % (Record[1]), BelongsToTable='Inf', BelongsToItem=Record[0]) else: if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_1, Record[1]): - EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_1, OtherMsg = "The type of Library Class [%s] defined in Inf file does not match the type of the module" % (Record[1]), BelongsToTable = 'Inf', BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_1, OtherMsg="The type of Library Class [%s] defined in Inf file does not match the type of the module" % (Record[1]), BelongsToTable='Inf', BelongsToItem=Record[0]) # Check whether a Library Instance has been defined for all dependent library classes def MetaDataFileCheckLibraryInstanceDependent(self): @@ -571,7 +571,7 @@ class Check(object): IsFound = True if not IsFound: if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_DEPENDENT, LibraryClass[1]): - EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_DEPENDENT, OtherMsg = "The Library Class [%s] is not specified in '%s'" % (LibraryClass[1], LibraryClass[2]), BelongsToTable = 'Dsc', BelongsToItem = LibraryClass[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_DEPENDENT, OtherMsg="The Library Class [%s] is not specified in '%s'" % (LibraryClass[1], LibraryClass[2]), BelongsToTable='Dsc', BelongsToItem=LibraryClass[0]) # Check whether the Library Instances specified by the LibraryClasses sections are listed in order of dependencies def MetaDataFileCheckLibraryInstanceOrder(self): @@ -587,7 +587,7 @@ class Check(object): RecordSet = EccGlobalData.gDb.TblInf.Exec(SqlCommand) for Record in RecordSet: if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_LIBRARY_NO_USE, Record[1]): - EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_LIBRARY_NO_USE, OtherMsg = "The Library Class [%s] is not used in any platform" % (Record[1]), BelongsToTable = 'Inf', BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_LIBRARY_NO_USE, OtherMsg="The Library Class [%s] is not used in any platform" % (Record[1]), BelongsToTable='Inf', BelongsToItem=Record[0]) # Check whether an Inf file is specified in the FDF file, but not in the Dsc file, then the Inf file must be for a Binary module only def MetaDataFileCheckBinaryInfInFdf(self): @@ -608,9 +608,9 @@ class Check(object): SqlCommand = """select ID from Inf where Model = %s and BelongsToFile = (select ID from File where FullPath like '%s') """ % (MODEL_EFI_SOURCE_FILE, FilePath) NewRecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand) - if NewRecordSet!= []: + if NewRecordSet != []: if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_BINARY_INF_IN_FDF, FilePath): - EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_BINARY_INF_IN_FDF, OtherMsg = "File [%s] defined in FDF file and not in DSC file must be a binary module" % (FilePath), BelongsToTable = 'Fdf', BelongsToItem = FdfID) + EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_BINARY_INF_IN_FDF, OtherMsg="File [%s] defined in FDF file and not in DSC file must be a binary module" % (FilePath), BelongsToTable='Fdf', BelongsToItem=FdfID) # Check whether a PCD is set in a Dsc file or the FDF file, but not in both. def MetaDataFileCheckPcdDuplicate(self): @@ -624,19 +624,19 @@ class Check(object): and A.Enabled > -1 and B.Enabled > -1 group by A.ID - """% (MODEL_PCD, MODEL_META_DATA_HEADER, MODEL_PCD, MODEL_META_DATA_HEADER) + """ % (MODEL_PCD, MODEL_META_DATA_HEADER, MODEL_PCD, MODEL_META_DATA_HEADER) RecordSet = EccGlobalData.gDb.TblDsc.Exec(SqlCommand) for Record in RecordSet: - SqlCommand1 = """select Name from File where ID = %s""" %Record[2] - SqlCommand2 = """select Name from File where ID = %s""" %Record[5] + SqlCommand1 = """select Name from File where ID = %s""" % Record[2] + SqlCommand2 = """select Name from File where ID = %s""" % Record[5] DscFileName = os.path.splitext(EccGlobalData.gDb.TblDsc.Exec(SqlCommand1)[0][0])[0] FdfFileName = os.path.splitext(EccGlobalData.gDb.TblDsc.Exec(SqlCommand2)[0][0])[0] if DscFileName != FdfFileName: continue if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE, Record[1]): - EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE, OtherMsg = "The PCD [%s] is defined in both FDF file and DSC file" % (Record[1]), BelongsToTable = 'Dsc', BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE, OtherMsg="The PCD [%s] is defined in both FDF file and DSC file" % (Record[1]), BelongsToTable='Dsc', BelongsToItem=Record[0]) if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE, Record[3]): - EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE, OtherMsg = "The PCD [%s] is defined in both FDF file and DSC file" % (Record[4]), BelongsToTable = 'Fdf', BelongsToItem = Record[3]) + EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE, OtherMsg="The PCD [%s] is defined in both FDF file and DSC file" % (Record[4]), BelongsToTable='Fdf', BelongsToItem=Record[3]) EdkLogger.quiet("Checking for duplicate PCDs defined in DEC files ...") SqlCommand = """ @@ -650,11 +650,11 @@ class Check(object): and B.Enabled > -1 and A.BelongsToFile = B.BelongsToFile group by A.ID - """% (MODEL_PCD, MODEL_META_DATA_HEADER, MODEL_PCD, MODEL_META_DATA_HEADER) + """ % (MODEL_PCD, MODEL_META_DATA_HEADER, MODEL_PCD, MODEL_META_DATA_HEADER) RecordSet = EccGlobalData.gDb.TblDsc.Exec(SqlCommand) for Record in RecordSet: if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE, Record[1]): - EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE, OtherMsg = "The PCD [%s] is defined duplicated in DEC file" % (Record[1]), BelongsToTable = 'Dec', BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE, OtherMsg="The PCD [%s] is defined duplicated in DEC file" % (Record[1]), BelongsToTable='Dec', BelongsToItem=Record[0]) # Check whether PCD settings in the FDF file can only be related to flash. def MetaDataFileCheckPcdFlash(self): @@ -665,11 +665,11 @@ class Check(object): where A.Model >= %s and Model < %s and A.Enabled > -1 and A.Value2 not like '%%Flash%%' - """% (MODEL_PCD, MODEL_META_DATA_HEADER) + """ % (MODEL_PCD, MODEL_META_DATA_HEADER) RecordSet = EccGlobalData.gDb.TblFdf.Exec(SqlCommand) for Record in RecordSet: if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_PCD_FLASH, Record[1]): - EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_FLASH, OtherMsg = "The PCD [%s] defined in FDF file is not related to Flash" % (Record[1]), BelongsToTable = 'Fdf', BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_FLASH, OtherMsg="The PCD [%s] defined in FDF file is not related to Flash" % (Record[1]), BelongsToTable='Fdf', BelongsToItem=Record[0]) # Check whether PCDs used in Inf files but not specified in Dsc or FDF files def MetaDataFileCheckPcdNoUse(self): @@ -687,11 +687,11 @@ class Check(object): (select Value2 from Fdf as C where C.Model >= %s and C.Model < %s and C.Enabled > -1) - """% (MODEL_PCD, MODEL_META_DATA_HEADER, MODEL_PCD, MODEL_META_DATA_HEADER, MODEL_PCD, MODEL_META_DATA_HEADER) + """ % (MODEL_PCD, MODEL_META_DATA_HEADER, MODEL_PCD, MODEL_META_DATA_HEADER, MODEL_PCD, MODEL_META_DATA_HEADER) RecordSet = EccGlobalData.gDb.TblInf.Exec(SqlCommand) for Record in RecordSet: if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_PCD_NO_USE, Record[1]): - EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_NO_USE, OtherMsg = "The PCD [%s] defined in INF file is not specified in either DSC or FDF files" % (Record[1]), BelongsToTable = 'Inf', BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_NO_USE, OtherMsg="The PCD [%s] defined in INF file is not specified in either DSC or FDF files" % (Record[1]), BelongsToTable='Inf', BelongsToItem=Record[0]) # Check whether having duplicate guids defined for Guid/Protocol/Ppi def MetaDataFileCheckGuidDuplicate(self): @@ -735,7 +735,7 @@ class Check(object): Path = Path.upper().replace('\X64', '').replace('\IA32', '').replace('\EBC', '').replace('\IPF', '').replace('\ARM', '') if Path in InfPathList: if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_MODULE_FILE_NO_USE, Record[2]): - EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_MODULE_FILE_NO_USE, OtherMsg = "The source file [%s] is existing in module directory but it is not described in INF file." % (Record[2]), BelongsToTable = 'File', BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_MODULE_FILE_NO_USE, OtherMsg="The source file [%s] is existing in module directory but it is not described in INF file." % (Record[2]), BelongsToTable='File', BelongsToItem=Record[0]) # Check whether the PCD is correctly used in C function via its type def MetaDataFileCheckPcdType(self): @@ -755,7 +755,7 @@ class Check(object): select ID from File where FullPath in (select B.Path || '\\' || A.Value1 from INF as A, File as B where A.Model = %s and A.BelongsToFile = %s and B.ID = %s and (B.Model = %s or B.Model = %s)) - """ %(MODEL_EFI_SOURCE_FILE, BelongsToFile, BelongsToFile, MODEL_FILE_C, MODEL_FILE_H) + """ % (MODEL_EFI_SOURCE_FILE, BelongsToFile, BelongsToFile, MODEL_FILE_C, MODEL_FILE_H) TableSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand) for Tbl in TableSet: TblName = 'Identifier' + str(Tbl[0]) @@ -768,11 +768,11 @@ class Check(object): FunName = Record[0] if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_PCD_TYPE, FunName): if Model in [MODEL_PCD_FIXED_AT_BUILD] and not FunName.startswith('FixedPcdGet'): - EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_TYPE, OtherMsg = "The pcd '%s' is defined as a FixPcd but now it is called by c function [%s]" % (PcdName, FunName), BelongsToTable = TblName, BelongsToItem = Record[1]) + EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_TYPE, OtherMsg="The pcd '%s' is defined as a FixPcd but now it is called by c function [%s]" % (PcdName, FunName), BelongsToTable=TblName, BelongsToItem=Record[1]) if Model in [MODEL_PCD_FEATURE_FLAG] and (not FunName.startswith('FeaturePcdGet') and not FunName.startswith('FeaturePcdSet')): - EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_TYPE, OtherMsg = "The pcd '%s' is defined as a FeaturePcd but now it is called by c function [%s]" % (PcdName, FunName), BelongsToTable = TblName, BelongsToItem = Record[1]) + EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_TYPE, OtherMsg="The pcd '%s' is defined as a FeaturePcd but now it is called by c function [%s]" % (PcdName, FunName), BelongsToTable=TblName, BelongsToItem=Record[1]) if Model in [MODEL_PCD_PATCHABLE_IN_MODULE] and (not FunName.startswith('PatchablePcdGet') and not FunName.startswith('PatchablePcdSet')): - EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_TYPE, OtherMsg = "The pcd '%s' is defined as a PatchablePcd but now it is called by c function [%s]" % (PcdName, FunName), BelongsToTable = TblName, BelongsToItem = Record[1]) + EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_TYPE, OtherMsg="The pcd '%s' is defined as a PatchablePcd but now it is called by c function [%s]" % (PcdName, FunName), BelongsToTable=TblName, BelongsToItem=Record[1]) #ERROR_META_DATA_FILE_CHECK_PCD_TYPE pass @@ -806,7 +806,7 @@ class Check(object): if InfPath1 and InfPath2: if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_MODULE_FILE_GUID_DUPLICATION, InfPath1): Msg = "The FILE_GUID of INF file [%s] is duplicated with that of %s" % (InfPath1, InfPath2) - EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_MODULE_FILE_GUID_DUPLICATION, OtherMsg = Msg, BelongsToTable = Table.Table, BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_MODULE_FILE_GUID_DUPLICATION, OtherMsg=Msg, BelongsToTable=Table.Table, BelongsToItem=Record[0]) # Check whether these is duplicate Guid/Ppi/Protocol name @@ -822,6 +822,7 @@ class Check(object): select A.ID, A.Value1 from %s as A, %s as B where A.Model = %s and B.Model = %s and A.Value1 = B.Value1 and A.ID <> B.ID + and A.Arch = B.Arch and A.Enabled > -1 and B.Enabled > -1 group by A.ID @@ -829,7 +830,7 @@ class Check(object): RecordSet = Table.Exec(SqlCommand) for Record in RecordSet: if not EccGlobalData.gException.IsException(ErrorID, Record[1]): - EccGlobalData.gDb.TblReport.Insert(ErrorID, OtherMsg = "The %s name [%s] is defined more than one time" % (Name.upper(), Record[1]), BelongsToTable = Table.Table, BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ErrorID, OtherMsg="The %s name [%s] is defined more than one time" % (Name.upper(), Record[1]), BelongsToTable=Table.Table, BelongsToItem=Record[0]) # Check whether these is duplicate Guid/Ppi/Protocol value def CheckGuidProtocolPpiValue(self, ErrorID, Model): @@ -845,12 +846,13 @@ class Check(object): select A.ID, A.Value2 from %s as A, %s as B where A.Model = %s and B.Model = %s and A.Value2 = B.Value2 and A.ID <> B.ID + and A.Arch = B.Arch group by A.ID """ % (Table.Table, Table.Table, Model, Model) RecordSet = Table.Exec(SqlCommand) for Record in RecordSet: if not EccGlobalData.gException.IsException(ErrorID, Record[1]): - EccGlobalData.gDb.TblReport.Insert(ErrorID, OtherMsg = "The %s value [%s] is used more than one time" % (Name.upper(), Record[1]), BelongsToTable = Table.Table, BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ErrorID, OtherMsg="The %s value [%s] is used more than one time" % (Name.upper(), Record[1]), BelongsToTable=Table.Table, BelongsToItem=Record[0]) # Naming Convention Check def NamingConventionCheck(self): @@ -883,7 +885,7 @@ class Check(object): if EccGlobalData.gConfig.NamingConventionCheckDefineStatement == '1' or EccGlobalData.gConfig.NamingConventionCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1': EdkLogger.quiet("Checking naming covention of #define statement ...") - SqlCommand = """select ID, Value from %s where Model = %s""" %(FileTable, MODEL_IDENTIFIER_MACRO_DEFINE) + SqlCommand = """select ID, Value from %s where Model = %s""" % (FileTable, MODEL_IDENTIFIER_MACRO_DEFINE) RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand) for Record in RecordSet: Name = Record[1].strip().split()[1] @@ -891,14 +893,14 @@ class Check(object): Name = Name[0:Name.find('(')] if Name.upper() != Name: if not EccGlobalData.gException.IsException(ERROR_NAMING_CONVENTION_CHECK_DEFINE_STATEMENT, Name): - EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_DEFINE_STATEMENT, OtherMsg = "The #define name [%s] does not follow the rules" % (Name), BelongsToTable = FileTable, BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_DEFINE_STATEMENT, OtherMsg="The #define name [%s] does not follow the rules" % (Name), BelongsToTable=FileTable, BelongsToItem=Record[0]) # Check whether only capital letters are used for typedef declarations def NamingConventionCheckTypedefStatement(self, FileTable): if EccGlobalData.gConfig.NamingConventionCheckTypedefStatement == '1' or EccGlobalData.gConfig.NamingConventionCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1': EdkLogger.quiet("Checking naming covention of #typedef statement ...") - SqlCommand = """select ID, Name from %s where Model = %s""" %(FileTable, MODEL_IDENTIFIER_TYPEDEF) + SqlCommand = """select ID, Name from %s where Model = %s""" % (FileTable, MODEL_IDENTIFIER_TYPEDEF) RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand) for Record in RecordSet: Name = Record[1].strip() @@ -911,20 +913,20 @@ class Check(object): Name = Name.replace('*', '').strip() if Name.upper() != Name: if not EccGlobalData.gException.IsException(ERROR_NAMING_CONVENTION_CHECK_TYPEDEF_STATEMENT, Name): - EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_TYPEDEF_STATEMENT, OtherMsg = "The #typedef name [%s] does not follow the rules" % (Name), BelongsToTable = FileTable, BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_TYPEDEF_STATEMENT, OtherMsg="The #typedef name [%s] does not follow the rules" % (Name), BelongsToTable=FileTable, BelongsToItem=Record[0]) # Check whether the #ifndef at the start of an include file uses both prefix and postfix underscore characters, '_'. def NamingConventionCheckIfndefStatement(self, FileTable): if EccGlobalData.gConfig.NamingConventionCheckTypedefStatement == '1' or EccGlobalData.gConfig.NamingConventionCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1': EdkLogger.quiet("Checking naming covention of #ifndef statement ...") - SqlCommand = """select ID, Value from %s where Model = %s""" %(FileTable, MODEL_IDENTIFIER_MACRO_IFNDEF) + SqlCommand = """select ID, Value from %s where Model = %s""" % (FileTable, MODEL_IDENTIFIER_MACRO_IFNDEF) RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand) for Record in RecordSet: Name = Record[1].replace('#ifndef', '').strip() if Name[0] != '_' or Name[-1] != '_': if not EccGlobalData.gException.IsException(ERROR_NAMING_CONVENTION_CHECK_IFNDEF_STATEMENT, Name): - EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_IFNDEF_STATEMENT, OtherMsg = "The #ifndef name [%s] does not follow the rules" % (Name), BelongsToTable = FileTable, BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_IFNDEF_STATEMENT, OtherMsg="The #ifndef name [%s] does not follow the rules" % (Name), BelongsToTable=FileTable, BelongsToItem=Record[0]) # Rule for path name, variable name and function name # 1. First character should be upper case @@ -940,7 +942,7 @@ class Check(object): for Record in RecordSet: if not Pattern.match(Record[1]): if not EccGlobalData.gException.IsException(ERROR_NAMING_CONVENTION_CHECK_PATH_NAME, Record[1]): - EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_PATH_NAME, OtherMsg = "The file path [%s] does not follow the rules" % (Record[1]), BelongsToTable = 'File', BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_PATH_NAME, OtherMsg="The file path [%s] does not follow the rules" % (Record[1]), BelongsToTable='File', BelongsToItem=Record[0]) # Rule for path name, variable name and function name # 1. First character should be upper case @@ -953,12 +955,12 @@ class Check(object): EdkLogger.quiet("Checking naming covention of variable name ...") Pattern = re.compile(r'^[A-Zgm]+\S*[a-z]\S*$') - SqlCommand = """select ID, Name from %s where Model = %s""" %(FileTable, MODEL_IDENTIFIER_VARIABLE) + SqlCommand = """select ID, Name from %s where Model = %s""" % (FileTable, MODEL_IDENTIFIER_VARIABLE) RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand) for Record in RecordSet: if not Pattern.match(Record[1]): if not EccGlobalData.gException.IsException(ERROR_NAMING_CONVENTION_CHECK_VARIABLE_NAME, Record[1]): - EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_VARIABLE_NAME, OtherMsg = "The variable name [%s] does not follow the rules" % (Record[1]), BelongsToTable = FileTable, BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_VARIABLE_NAME, OtherMsg="The variable name [%s] does not follow the rules" % (Record[1]), BelongsToTable=FileTable, BelongsToItem=Record[0]) # Rule for path name, variable name and function name # 1. First character should be upper case @@ -974,20 +976,20 @@ class Check(object): for Record in RecordSet: if not Pattern.match(Record[1]): if not EccGlobalData.gException.IsException(ERROR_NAMING_CONVENTION_CHECK_FUNCTION_NAME, Record[1]): - EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_FUNCTION_NAME, OtherMsg = "The function name [%s] does not follow the rules" % (Record[1]), BelongsToTable = 'Function', BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_FUNCTION_NAME, OtherMsg="The function name [%s] does not follow the rules" % (Record[1]), BelongsToTable='Function', BelongsToItem=Record[0]) # Check whether NO use short variable name with single character def NamingConventionCheckSingleCharacterVariable(self, FileTable): if EccGlobalData.gConfig.NamingConventionCheckSingleCharacterVariable == '1' or EccGlobalData.gConfig.NamingConventionCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1': EdkLogger.quiet("Checking naming covention of single character variable name ...") - SqlCommand = """select ID, Name from %s where Model = %s""" %(FileTable, MODEL_IDENTIFIER_VARIABLE) + SqlCommand = """select ID, Name from %s where Model = %s""" % (FileTable, MODEL_IDENTIFIER_VARIABLE) RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand) for Record in RecordSet: Variable = Record[1].replace('*', '') if len(Variable) == 1: if not EccGlobalData.gException.IsException(ERROR_NAMING_CONVENTION_CHECK_SINGLE_CHARACTER_VARIABLE, Record[1]): - EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_SINGLE_CHARACTER_VARIABLE, OtherMsg = "The variable name [%s] does not follow the rules" % (Record[1]), BelongsToTable = FileTable, BelongsToItem = Record[0]) + EccGlobalData.gDb.TblReport.Insert(ERROR_NAMING_CONVENTION_CHECK_SINGLE_CHARACTER_VARIABLE, OtherMsg="The variable name [%s] does not follow the rules" % (Record[1]), BelongsToTable=FileTable, BelongsToItem=Record[0]) ## # diff --git a/BaseTools/Source/Python/Eot/Parser.py b/BaseTools/Source/Python/Eot/Parser.py index deea6fb947..5ad00cfbb0 100644 --- a/BaseTools/Source/Python/Eot/Parser.py +++ b/BaseTools/Source/Python/Eot/Parser.py @@ -50,10 +50,10 @@ def PreProcess(Filename, MergeMultipleLines = True, LineNo = -1): Line = Line.strip() # Remove comment block if Line.find(TAB_COMMENT_EDK_START) > -1: - ReservedLine = GetSplitValueList(Line, TAB_COMMENT_EDK_START, 1)[0] + ReservedLine = GetSplitList(Line, TAB_COMMENT_EDK_START, 1)[0] IsFindBlockComment = True if Line.find(TAB_COMMENT_EDK_END) > -1: - Line = ReservedLine + GetSplitValueList(Line, TAB_COMMENT_EDK_END, 1)[1] + Line = ReservedLine + GetSplitList(Line, TAB_COMMENT_EDK_END, 1)[1] ReservedLine = '' IsFindBlockComment = False if IsFindBlockComment: diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py b/BaseTools/Source/Python/GenFds/FdfParser.py index e3a018c66c..358215d662 100644 --- a/BaseTools/Source/Python/GenFds/FdfParser.py +++ b/BaseTools/Source/Python/GenFds/FdfParser.py @@ -1118,6 +1118,34 @@ class FdfParser: def SetFileBufferPos(self, Pos): (self.CurrentLineNumber, self.CurrentOffsetWithinLine) = Pos + ## Preprocess() method + # + # Preprocess comment, conditional directive, include directive, replace macro. + # Exception will be raised if syntax error found + # + # @param self The object pointer + # + def Preprocess(self): + self.__StringToList() + self.PreprocessFile() + self.PreprocessIncludeFile() + self.__StringToList() + self.PreprocessFile() + self.PreprocessConditionalStatement() + self.__StringToList() + for Pos in self.__WipeOffArea: + self.__ReplaceFragment(Pos[0], Pos[1]) + self.Profile.FileLinesList = ["".join(list) for list in self.Profile.FileLinesList] + + while self.__GetDefines(): + pass + + Index = 0 + while Index < len(self.Profile.FileLinesList): + FileLineTuple = GetRealFileLine(self.FileName, Index + 1) + self.Profile.FileLinesList[Index] = self.__ReplaceMacros(self.Profile.FileLinesList[Index], FileLineTuple[0], FileLineTuple[1]) + Index += 1 + ## ParseFile() method # # Parse the file profile buffer to extract fd, fv ... information @@ -1128,26 +1156,7 @@ class FdfParser: def ParseFile(self): try: - self.__StringToList() - self.PreprocessFile() - self.PreprocessIncludeFile() - self.__StringToList() - self.PreprocessFile() - self.PreprocessConditionalStatement() - self.__StringToList() - for Pos in self.__WipeOffArea: - self.__ReplaceFragment(Pos[0], Pos[1]) - self.Profile.FileLinesList = ["".join(list) for list in self.Profile.FileLinesList] - - while self.__GetDefines(): - pass - - Index = 0 - while Index < len(self.Profile.FileLinesList): - FileLineTuple = GetRealFileLine(self.FileName, Index + 1) - self.Profile.FileLinesList[Index] = self.__ReplaceMacros(self.Profile.FileLinesList[Index], FileLineTuple[0], FileLineTuple[1]) - Index += 1 - + self.Preprocess() while self.__GetFd(): pass diff --git a/BaseTools/Source/Python/UPT/Library/String.py b/BaseTools/Source/Python/UPT/Library/String.py index 47301aebb0..526b2e66b4 100644 --- a/BaseTools/Source/Python/UPT/Library/String.py +++ b/BaseTools/Source/Python/UPT/Library/String.py @@ -660,10 +660,10 @@ def RemoveBlockComment(Lines): # Remove comment block # if Line.find(DataType.TAB_COMMENT_EDK1_START) > -1: - ReservedLine = GetSplitValueList(Line, DataType.TAB_COMMENT_EDK1_START, 1)[0] + ReservedLine = GetSplitList(Line, DataType.TAB_COMMENT_EDK1_START, 1)[0] IsFindBlockComment = True if Line.find(DataType.TAB_COMMENT_EDK1_END) > -1: - Line = ReservedLine + GetSplitValueList(Line, DataType.TAB_COMMENT_EDK1_END, 1)[1] + Line = ReservedLine + GetSplitList(Line, DataType.TAB_COMMENT_EDK1_END, 1)[1] ReservedLine = '' IsFindBlockComment = False if IsFindBlockComment: diff --git a/BaseTools/Source/Python/UPT/Object/Parser/InfDefineObject.py b/BaseTools/Source/Python/UPT/Object/Parser/InfDefineObject.py index 7645ba202b..c7883e6980 100644 --- a/BaseTools/Source/Python/UPT/Object/Parser/InfDefineObject.py +++ b/BaseTools/Source/Python/UPT/Object/Parser/InfDefineObject.py @@ -450,6 +450,7 @@ class InfDefSection(InfDefSectionOptionRomInfo): if len(ValueList) == 2: Type = ValueList[1] TypeList = GetSplitValueList(Type, ' ') + TypeList = [Type for Type in TypeList if Type != ''] for Item in TypeList: if Item not in DT.MODULE_LIST: ErrorInInf(ST.ERR_INF_PARSER_DEFINE_FROMAT_INVALID%(Item),