On Thu, Jan 25, 2018 at 01:37:39PM +0000, Zhu, Yonghong wrote:
> Hi Gary,
> 
> Thanks for your patches. I am still in evaluating these changes and do some 
> verification for it.
> I still need some more days to give you comment. Thanks.
I forgot to mention my branch in the cover letter.

https://github.com/lcp/edk2/tree/python3-futurize

It would be easier to review/apply patches from a git branch.

Thanks,

Gary Lin

> 
> Best Regards,
> Zhu Yonghong
> 
> 
> -----Original Message-----
> From: Gary Lin [mailto:g...@suse.com] 
> Sent: Friday, January 19, 2018 12:43 PM
> To: edk2-devel@lists.01.org
> Cc: Zhu, Yonghong <yonghong....@intel.com>; Gao, Liming <liming....@intel.com>
> Subject: [PATCH 00/15] BaseTools: One step toward python3
> 
> Since python2 will be EOF in 2020, we start to evaluate the impact of the 
> python2 removal. As expected, OMVF building failed the test. It's actually a 
> task noted in the wiki page:
> 
> https://github.com/tianocore/tianocore.github.io/wiki/Tasks-BaseTools-Python3-Support
> 
> Maybe it's time to convert the python scripts gradully.
> 
> This patchset doesn't make the python scripts in BaseTools compatible with 
> python3 immediately. It aims to do the trivial and safe conversion and 
> replacement to make some statements compatible with both python2 and python3, 
> so we can deal with the difficult cases later.
> 
> With the help of "futurize" from python-future, it's easier to refactor the 
> statements. This patchset is basically equivalent to "futurize -1"
> plus "StringIO.StringIO => io.BytesIO" and minus "fix_absolute_import".
> The reason to skip "fix_absolute_import" is that python2 failed to find some 
> modules after converting to absolute import, and it might take time to figure 
> out a proper fix.
> 
> For the "io.BytesIO" change, it MIGHT introduce slow down to the build time 
> since io.BytesIO is slower than StringIO.StringIO in python2(*).
> For a quick test, I built OVMF with the following command based on
> 8ab0bd2397c9d3922e0c7dbb1aa6f7e08799079f:
> 
> $ rm -rf Build && make -C BaseTools/ clean $ time ./OvmfPkg/build.sh -D 
> SECURE_BOOT_ENABLE \
>                           -D NETWORK_IP6_ENABLE \
>                           -D HTTP_BOOT_ENABLE \
>                           -D TLS_ENABLE
> 
> Before io.BytesIO:
> 
>   Build total time: 00:03:56
>   real    4m22.991s
>   user    3m55.874s
>   sys     0m27.250s
> 
> After io.BytesIO:
> 
>   Build total time: 00:03:57
>   real    4m23.953s
>   user    3m57.526s
>   sys     0m27.192s
> 
> The difference is only 1 second, and I would say the impact is subtle. 
> 
> The next step will be fixing relative import and maybe applying more futurize 
> fixes. We won't get there soon but at least we are moving... 
> 
> (*) 
> https://stackoverflow.com/questions/37462075/confusing-about-stringio-cstringio-and-byteio
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Cc: Yonghong Zhu <yonghong....@intel.com>
> Cc: Liming Gao <liming....@intel.com>
> Signed-off-by: Gary Lin <g...@suse.com>
> 
> Gary Lin (15):
>   BaseTools: Refactor python except statements
>   BaseTools: Refactor python print statements
>   BaseTools: Remove the old python "not-equal"
>   BaseTools: Use the python3-range functions
>   BaseTools: Remove tuple parameter in python scripts
>   BaseTools: Remove the deprecated hash_key()
>   BaseTools: Import reduce() from functools
>   BaseTools: Replace StandardError with Expression
>   BaseTools: Remove types.TypeType
>   BaseTools: Refactor python raise statement
>   BaseTools: Adjust the spaces around commas and colons
>   BaseTools: Migrate to the new octal literal
>   BaseTools: Unify long int and int in python scripts
>   BaseTools: Adjust old python2 idioms
>   BaseTools: Replace StringIO.StringIO with io.BytesIO
> 
>  BaseTools/Bin/CYGWIN_NT-5.1-i686/armcc_wrapper.py                      |   5 
> +-
>  BaseTools/Scripts/BinToPcd.py                                          |  46 
> +++---
>  BaseTools/Scripts/ConvertMasmToNasm.py                                 |   1 
> +
>  BaseTools/Scripts/ConvertUni.py                                        |   5 
> -
>  BaseTools/Scripts/MemoryProfileSymbolGen.py                            |  22 
> +--
>  BaseTools/Scripts/PatchCheck.py                                        |   7 
> +-
>  BaseTools/Scripts/RunMakefile.py                                       |   2 
> +-
>  BaseTools/Scripts/SmiHandlerProfileSymbolGen.py                        |  20 
> +--
>  BaseTools/Scripts/UpdateBuildVersions.py                               |  18 
> +-
>  BaseTools/Source/Python/AutoGen/AutoGen.py                             |  91 
> +++++-----
>  BaseTools/Source/Python/AutoGen/BuildEngine.py                         |  38 
> +++--
>  BaseTools/Source/Python/AutoGen/GenC.py                                |   5 
> +-
>  BaseTools/Source/Python/AutoGen/GenDepex.py                            |   8 
> +-
>  BaseTools/Source/Python/AutoGen/GenMake.py                             |   8 
> +-
>  BaseTools/Source/Python/AutoGen/GenPcdDb.py                            | 142 
> ++++++++--------
>  BaseTools/Source/Python/AutoGen/GenVar.py                              | 165 
> +++++++++----------
>  BaseTools/Source/Python/AutoGen/IdfClassObject.py                      |   1 
> -
>  BaseTools/Source/Python/AutoGen/InfSectionParser.py                    |   1 
> +
>  BaseTools/Source/Python/AutoGen/StrGather.py                           |   5 
> +-
>  BaseTools/Source/Python/AutoGen/UniClassObject.py                      |  18 
> +-
>  BaseTools/Source/Python/AutoGen/ValidCheckingInfoObject.py             |  10 
> +-
>  BaseTools/Source/Python/BPDG/BPDG.py                                   |   3 
> +-
>  BaseTools/Source/Python/BPDG/GenVpd.py                                 |  25 
> +--
>  BaseTools/Source/Python/Common/DataType.py                             |   4 
> +-
>  BaseTools/Source/Python/Common/DecClassObject.py                       |  39 
> ++---
>  BaseTools/Source/Python/Common/Dictionary.py                           |   9 
> +-
>  BaseTools/Source/Python/Common/DscClassObject.py                       |  70 
> ++++----
>  BaseTools/Source/Python/Common/EdkIIWorkspace.py                       |  25 
> +--
>  BaseTools/Source/Python/Common/EdkIIWorkspaceBuild.py                  | 133 
> +++++++--------
>  BaseTools/Source/Python/Common/Expression.py                           |  81 
> ++++-----
>  BaseTools/Source/Python/Common/FdfClassObject.py                       |   1 
> +
>  BaseTools/Source/Python/Common/FdfParserLite.py                        |  47 
> +++---
>  BaseTools/Source/Python/Common/InfClassObject.py                       | 113 
> ++++++-------
>  BaseTools/Source/Python/Common/LongFilePathOs.py                       |   2 
> +-
>  BaseTools/Source/Python/Common/MigrationUtilities.py                   |   1 
> +
>  BaseTools/Source/Python/Common/Misc.py                                 |  70 
> ++++----
>  BaseTools/Source/Python/Common/Parsing.py                              |   1 
> +
>  BaseTools/Source/Python/Common/RangeExpression.py                      |  32 
> ++--
>  BaseTools/Source/Python/Common/String.py                               |   7 
> +-
>  BaseTools/Source/Python/Common/TargetTxtClassObject.py                 |  15 
> +-
>  BaseTools/Source/Python/Common/ToolDefClassObject.py                   |   3 
> +-
>  BaseTools/Source/Python/Common/VpdInfoFile.py                          |  23 
> +--
>  BaseTools/Source/Python/Ecc/CParser.py                                 | 173 
> ++++++++++----------
>  BaseTools/Source/Python/Ecc/Check.py                                   |   1 
> +
>  BaseTools/Source/Python/Ecc/CodeFragmentCollector.py                   |  69 
> ++++----
>  BaseTools/Source/Python/Ecc/Configuration.py                           |   5 
> +-
>  BaseTools/Source/Python/Ecc/Exception.py                               |   3 
> +-
>  BaseTools/Source/Python/Ecc/MetaDataParser.py                          |   3 
> +-
>  BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaDataTable.py         |   5 
> +-
>  BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileParser.py        |  41 
> ++---
>  BaseTools/Source/Python/Ecc/Xml/XmlRoutines.py                         |   9 
> +-
>  BaseTools/Source/Python/Ecc/c.py                                       |  15 
> +-
>  BaseTools/Source/Python/Eot/CParser.py                                 | 173 
> ++++++++++----------
>  BaseTools/Source/Python/Eot/CodeFragmentCollector.py                   |  61 
> +++----
>  BaseTools/Source/Python/Eot/FvImage.py                                 |  17 
> +-
>  BaseTools/Source/Python/Eot/InfParserLite.py                           |   8 
> +-
>  BaseTools/Source/Python/Eot/Parser.py                                  |   2 
> +-
>  BaseTools/Source/Python/Eot/c.py                                       |  23 
> +--
>  BaseTools/Source/Python/GenFds/AprioriSection.py                       |   7 
> +-
>  BaseTools/Source/Python/GenFds/Capsule.py                              |  10 
> +-
>  BaseTools/Source/Python/GenFds/CapsuleData.py                          |   6 
> +-
>  BaseTools/Source/Python/GenFds/EfiSection.py                           |   6 
> +-
>  BaseTools/Source/Python/GenFds/Fd.py                                   |  12 
> +-
>  BaseTools/Source/Python/GenFds/FdfParser.py                            |  43 
> ++---
>  BaseTools/Source/Python/GenFds/FfsFileStatement.py                     |   5 
> +-
>  BaseTools/Source/Python/GenFds/FfsInfStatement.py                      |  16 
> +-
>  BaseTools/Source/Python/GenFds/Fv.py                                   |  13 
> +-
>  BaseTools/Source/Python/GenFds/FvImageSection.py                       |   8 
> +-
>  BaseTools/Source/Python/GenFds/GenFds.py                               |  20 
> ++-
>  BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py                 |  10 
> +-
>  BaseTools/Source/Python/GenFds/OptionRom.py                            |   3 
> -
>  BaseTools/Source/Python/GenFds/Region.py                               |  14 
> +-
>  BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py           |   9 
> +-
>  BaseTools/Source/Python/PatchPcdValue/PatchPcdValue.py                 |   1 
> +
>  BaseTools/Source/Python/Pkcs7Sign/Pkcs7Sign.py                         |  32 
> ++--
>  BaseTools/Source/Python/Rsa2048Sha256Sign/Rsa2048Sha256GenerateKeys.py |  30 
> ++--
>  BaseTools/Source/Python/Rsa2048Sha256Sign/Rsa2048Sha256Sign.py         |  36 
> ++--
>  BaseTools/Source/Python/TargetTool/TargetTool.py                       |  39 
> ++---
>  BaseTools/Source/Python/Trim/Trim.py                                   |  25 
> +--
>  BaseTools/Source/Python/UPT/Core/DependencyRules.py                    |  12 
> +-
>  BaseTools/Source/Python/UPT/Core/DistributionPackageClass.py           |   4 
> +-
>  BaseTools/Source/Python/UPT/Core/FileHook.py                           |   2 
> +-
>  BaseTools/Source/Python/UPT/Core/IpiDb.py                              |   6 
> +-
>  BaseTools/Source/Python/UPT/Core/PackageFile.py                        |  12 
> +-
>  BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py                  |  15 
> +-
>  BaseTools/Source/Python/UPT/GenMetaFile/GenInfFile.py                  |  42 
> ++---
>  BaseTools/Source/Python/UPT/InstallPkg.py                              |   2 
> +-
>  BaseTools/Source/Python/UPT/InventoryWs.py                             |   2 
> +-
>  BaseTools/Source/Python/UPT/Library/CommentParsing.py                  |   5 
> +-
>  BaseTools/Source/Python/UPT/Library/ExpressionValidate.py              |  11 
> +-
>  BaseTools/Source/Python/UPT/Library/Misc.py                            |  11 
> +-
>  BaseTools/Source/Python/UPT/Library/ParserValidate.py                  |   2 
> +-
>  BaseTools/Source/Python/UPT/Library/Parsing.py                         |   3 
> +-
>  BaseTools/Source/Python/UPT/Library/String.py                          |   5 
> +-
>  BaseTools/Source/Python/UPT/Library/UniClassObject.py                  |  20 
> ++-
>  BaseTools/Source/Python/UPT/Library/Xml/XmlRoutines.py                 |   4 
> +-
>  BaseTools/Source/Python/UPT/MkPkg.py                                   |   2 
> +-
>  BaseTools/Source/Python/UPT/Object/Parser/InfBinaryObject.py           |   6 
> +-
>  BaseTools/Source/Python/UPT/Object/Parser/InfDefineObject.py           |   2 
> +-
>  BaseTools/Source/Python/UPT/Object/Parser/InfGuidObject.py             |   4 
> +-
>  BaseTools/Source/Python/UPT/Object/Parser/InfLibraryClassesObject.py   |   2 
> +-
>  BaseTools/Source/Python/UPT/Object/Parser/InfMisc.py                   |   4 
> +-
>  BaseTools/Source/Python/UPT/Object/Parser/InfPackagesObject.py         |   4 
> +-
>  BaseTools/Source/Python/UPT/Object/Parser/InfPcdObject.py              |   4 
> +-
>  BaseTools/Source/Python/UPT/Object/Parser/InfPpiObject.py              |   4 
> +-
>  BaseTools/Source/Python/UPT/Object/Parser/InfProtocolObject.py         |   2 
> +-
>  BaseTools/Source/Python/UPT/Object/Parser/InfSoucesObject.py           |   3 
> +-
>  BaseTools/Source/Python/UPT/Object/Parser/InfUserExtensionObject.py    |   4 
> +-
>  BaseTools/Source/Python/UPT/Parser/DecParserMisc.py                    |   1 
> +
>  BaseTools/Source/Python/UPT/Parser/InfSectionParser.py                 |   3 
> +-
>  BaseTools/Source/Python/UPT/PomAdapter/DecPomAlignment.py              |  57 
> +++----
>  BaseTools/Source/Python/UPT/PomAdapter/InfPomAlignment.py              |   3 
> +-
>  BaseTools/Source/Python/UPT/PomAdapter/InfPomAlignmentMisc.py          |   3 
> +-
>  BaseTools/Source/Python/UPT/ReplacePkg.py                              |   2 
> +-
>  BaseTools/Source/Python/UPT/RmPkg.py                                   |   2 
> +-
>  BaseTools/Source/Python/UPT/TestInstall.py                             |   4 
> +-
>  BaseTools/Source/Python/UPT/UPT.py                                     |   9 
> +-
>  BaseTools/Source/Python/UPT/UnitTest/DecParserTest.py                  |   5 
> +-
>  BaseTools/Source/Python/UPT/UnitTest/InfBinarySectionTest.py           |  10 
> +-
>  BaseTools/Source/Python/UPT/Xml/CommonXml.py                           |   2 
> +-
>  BaseTools/Source/Python/UPT/Xml/IniToXml.py                            |   1 
> +
>  BaseTools/Source/Python/UPT/Xml/XmlParser.py                           |  25 
> +--
>  BaseTools/Source/Python/UPT/Xml/XmlParserMisc.py                       |   3 
> +-
>  BaseTools/Source/Python/Workspace/BuildClassObject.py                  |   2 
> +-
>  BaseTools/Source/Python/Workspace/DecBuildData.py                      |  14 
> +-
>  BaseTools/Source/Python/Workspace/DscBuildData.py                      | 142 
> ++++++++--------
>  BaseTools/Source/Python/Workspace/InfBuildData.py                      |   3 
> +-
>  BaseTools/Source/Python/Workspace/MetaFileParser.py                    |  74 
> +++++----
>  BaseTools/Source/Python/Workspace/MetaFileTable.py                     |  10 
> +-
>  BaseTools/Source/Python/Workspace/WorkspaceCommon.py                   |   2 
> +-
>  BaseTools/Source/Python/build/BuildReport.py                           |  17 
> +-
>  BaseTools/Source/Python/build/build.py                                 |  35 
> ++--
>  BaseTools/Tests/CheckPythonSyntax.py                                   |   2 
> +-
>  BaseTools/Tests/TestTools.py                                           |  13 
> +-
>  BaseTools/Tests/TianoCompress.py                                       |   6 
> +-
>  BaseTools/gcc/mingw-gcc-build.py                                       | 112 
> ++++++-------
>  136 files changed, 1559 insertions(+), 1477 deletions(-)
> 
> --
> 2.15.1
> 
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
> 
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to