From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2a00:1450:400c:c0c::241; helo=mail-wr0-x241.google.com; envelope-from=paolo.bonzini@gmail.com; receiver=edk2-devel@lists.01.org Received: from mail-wr0-x241.google.com (mail-wr0-x241.google.com [IPv6:2a00:1450:400c:c0c::241]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id E295421106F18 for ; Tue, 19 Jun 2018 23:22:16 -0700 (PDT) Received: by mail-wr0-x241.google.com with SMTP id k16-v6so1956460wro.0 for ; Tue, 19 Jun 2018 23:22:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:openpgp:autocrypt:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=vxtJ0udK6QbcrijlErv1GuNmVap5SVxD+XrDKZw75dE=; b=FB1bvMfuLqFqjy16MvE4fMBAJUYwXnYZ1IAsU+eFBtI2BSUiSuA9dAwTXcbuCEntOJ 6ZEh4NIw0F2atxxY/r0jd7HKz5QMaE3vSv1Rhq0IVBmWx8q4clejMSn5ODc/wsvcjsDm OVU/aaN0fXhAfBZvNq5KkW6xX4kdPPPtL2tFDTiMv07eLsDjomCqWjN0IOu0BxP+HR/p RKr/iWLT6xFZZ4KozFrpX/JBNft6H+g1V0SEVOUzAqzsTeSdh93pgrMIam3zeXRByvMY 8uEayibwdtI3WkkvnYOyODbwYitNcpyfoS7YNkxd7AFnuim/YydPK/VMBKNe0ItXBkWN WA/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:openpgp :autocrypt:message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=vxtJ0udK6QbcrijlErv1GuNmVap5SVxD+XrDKZw75dE=; b=QfDk0vU3kONd9wi1NEPBFwm0qT14w1cW5aMOB+aOX2UBObyZ9KvqZhMzvtbDiZ7Bod B0QWOw+v65I/uZvPFI1vL+GBNQiO9CagisaczlkaIfKuOBSOqtIHlw4flBbGVgMLmkRV bzYw77IUjmgIXYwHCGtt+MyW1eZ4oiPUpKBqHtslJeDk1GEW8tn8YC5Xbyx3UFrEa/xc fxLeP027iGMqD4tGJ14/lNc4YcDnR4z9ajNZim/7jfSfz/TBHGJ620qXSX9kOueeCMGf yeJ1ZhOPDm4O1p+CaPGrKGdTI7qzvJnJ9UY38MAjZGet9TUIKtwn8l4wn47KLgASejcY CxcQ== X-Gm-Message-State: APt69E3MP9BVdTTCcRhySEcNkxdq2MIYVLuDV9AWdEF9wMDvcES22sBx QFizB+ZIW5tYnmyBGGYhh0w= X-Google-Smtp-Source: ADUXVKI/9V6bu5+4IwObSnkuQ+Eme0MhksgzkrEIlVeYK89Ca1gI3PaORoPrCDZZmiNFGEh2IjL1Zg== X-Received: by 2002:adf:c4b6:: with SMTP id m51-v6mr16603901wrf.103.1529475735321; Tue, 19 Jun 2018 23:22:15 -0700 (PDT) Received: from [192.168.10.150] ([82.84.121.233]) by smtp.googlemail.com with ESMTPSA id r5-v6sm1307743wrp.59.2018.06.19.23.22.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 19 Jun 2018 23:22:14 -0700 (PDT) Sender: Paolo Bonzini To: Gary Lin , edk2-devel@lists.01.org Cc: Liming Gao References: <20180201083608.16036-1-glin@suse.com> From: Paolo Bonzini Openpgp: preference=signencrypt Autocrypt: addr=pbonzini@redhat.com; keydata= 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 Message-ID: Date: Wed, 20 Jun 2018 08:22:13 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <20180201083608.16036-1-glin@suse.com> Subject: Re: [PATCH v2 00/20] BaseTools: One step toward python3 X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Jun 2018 06:22:17 -0000 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit On 01/02/2018 09:35, Gary Lin wrote: > v2 changes: > - Rebase to the current git HEAD (821807bcefb9a36e598d71a8004fae5aab2052a0) > - Apply "futurize -f libfuturize.fixes.fix_absolute_import" and > refactor some python scripts to break the circular imports. > > This patch series is also available in > https://github.com/lcp/edk2/tree/python3-futurize-v2 > > Since python2 will be EOL 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. I cannot find any answer to this series. Is there any reason why it wasn't considered? Thanks, Paolo > 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". > > 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 > Cc: Liming Gao > Signed-off-by: Gary Lin > > > Gary Lin (20): > 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: Treat GenFds.py and build.py as python modules > BaseTools: Adopt absolute import for python scripts > BaseTools: Move OverrideAttribs to OptRomInfStatement.py > BaseTools: Move FindExtendTool to GenFdsGlobalVariable.py > BaseTools: Move ImageBinDict to GenFdsGlobalVariable.py > > BaseTools/Bin/CYGWIN_NT-5.1-i686/armcc_wrapper.py | 5 +- > BaseTools/BinWrappers/PosixLike/GenFds | 2 +- > BaseTools/BinWrappers/PosixLike/build | 2 +- > 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 | 98 ++++----- > BaseTools/Source/Python/AutoGen/BuildEngine.py | 38 ++-- > BaseTools/Source/Python/AutoGen/GenC.py | 12 +- > BaseTools/Source/Python/AutoGen/GenDepex.py | 8 +- > BaseTools/Source/Python/AutoGen/GenMake.py | 11 +- > BaseTools/Source/Python/AutoGen/GenPcdDb.py | 149 +++++++------- > BaseTools/Source/Python/AutoGen/GenVar.py | 166 +++++++-------- > BaseTools/Source/Python/AutoGen/IdfClassObject.py | 1 - > BaseTools/Source/Python/AutoGen/InfSectionParser.py | 1 + > BaseTools/Source/Python/AutoGen/StrGather.py | 8 +- > BaseTools/Source/Python/AutoGen/UniClassObject.py | 18 +- > BaseTools/Source/Python/AutoGen/ValidCheckingInfoObject.py | 10 +- > BaseTools/Source/Python/BPDG/BPDG.py | 8 +- > BaseTools/Source/Python/BPDG/GenVpd.py | 28 +-- > BaseTools/Source/Python/Common/DataType.py | 4 +- > BaseTools/Source/Python/Common/Database.py | 8 +- > BaseTools/Source/Python/Common/DecClassObject.py | 56 ++--- > BaseTools/Source/Python/Common/Dictionary.py | 14 +- > BaseTools/Source/Python/Common/DscClassObject.py | 91 +++++---- > BaseTools/Source/Python/Common/EdkIIWorkspace.py | 28 +-- > BaseTools/Source/Python/Common/EdkIIWorkspaceBuild.py | 152 +++++++------- > BaseTools/Source/Python/Common/EdkLogger.py | 3 +- > BaseTools/Source/Python/Common/Expression.py | 86 ++++---- > BaseTools/Source/Python/Common/FdfClassObject.py | 6 +- > BaseTools/Source/Python/Common/FdfParserLite.py | 47 ++--- > BaseTools/Source/Python/Common/InfClassObject.py | 134 ++++++------ > BaseTools/Source/Python/Common/LongFilePathOs.py | 5 +- > BaseTools/Source/Python/Common/MigrationUtilities.py | 4 +- > BaseTools/Source/Python/Common/Misc.py | 79 ++++---- > BaseTools/Source/Python/Common/Parsing.py | 6 +- > BaseTools/Source/Python/Common/RangeExpression.py | 32 +-- > BaseTools/Source/Python/Common/String.py | 16 +- > BaseTools/Source/Python/Common/TargetTxtClassObject.py | 24 ++- > BaseTools/Source/Python/Common/ToolDefClassObject.py | 12 +- > BaseTools/Source/Python/Common/VpdInfoFile.py | 23 ++- > BaseTools/Source/Python/CommonDataClass/ModuleClass.py | 3 +- > BaseTools/Source/Python/CommonDataClass/PackageClass.py | 3 +- > BaseTools/Source/Python/CommonDataClass/PlatformClass.py | 3 +- > BaseTools/Source/Python/Ecc/CParser.py | 178 ++++++++-------- > BaseTools/Source/Python/Ecc/Check.py | 10 +- > BaseTools/Source/Python/Ecc/CodeFragmentCollector.py | 82 ++++---- > BaseTools/Source/Python/Ecc/Configuration.py | 5 +- > BaseTools/Source/Python/Ecc/Database.py | 7 +- > BaseTools/Source/Python/Ecc/Ecc.py | 25 +-- > BaseTools/Source/Python/Ecc/Exception.py | 6 +- > BaseTools/Source/Python/Ecc/FileProfile.py | 5 +- > BaseTools/Source/Python/Ecc/MetaDataParser.py | 8 +- > BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaDataTable.py | 5 +- > BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileParser.py | 44 ++-- > BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileTable.py | 5 +- > BaseTools/Source/Python/Ecc/Xml/XmlRoutines.py | 9 +- > BaseTools/Source/Python/Ecc/c.py | 28 +-- > BaseTools/Source/Python/Eot/CParser.py | 178 ++++++++-------- > BaseTools/Source/Python/Eot/CodeFragmentCollector.py | 72 +++---- > BaseTools/Source/Python/Eot/Eot.py | 15 +- > BaseTools/Source/Python/Eot/FileProfile.py | 3 +- > BaseTools/Source/Python/Eot/FvImage.py | 28 +-- > BaseTools/Source/Python/Eot/InfParserLite.py | 13 +- > BaseTools/Source/Python/Eot/Parser.py | 5 +- > BaseTools/Source/Python/Eot/Report.py | 3 +- > BaseTools/Source/Python/Eot/c.py | 32 +-- > BaseTools/Source/Python/GenFds/AprioriSection.py | 12 +- > BaseTools/Source/Python/GenFds/Capsule.py | 22 +- > BaseTools/Source/Python/GenFds/CapsuleData.py | 11 +- > BaseTools/Source/Python/GenFds/CompressSection.py | 7 +- > BaseTools/Source/Python/GenFds/DataSection.py | 7 +- > BaseTools/Source/Python/GenFds/DepexSection.py | 7 +- > BaseTools/Source/Python/GenFds/EfiSection.py | 13 +- > BaseTools/Source/Python/GenFds/Fd.py | 32 +-- > BaseTools/Source/Python/GenFds/FdfParser.py | 100 ++++----- > BaseTools/Source/Python/GenFds/FfsFileStatement.py | 16 +- > BaseTools/Source/Python/GenFds/FfsInfStatement.py | 35 ++-- > BaseTools/Source/Python/GenFds/Fv.py | 34 ++-- > BaseTools/Source/Python/GenFds/FvImageSection.py | 15 +- > BaseTools/Source/Python/GenFds/GenFds.py | 126 ++---------- > BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py | 108 +++++++++- > BaseTools/Source/Python/GenFds/GuidSection.py | 11 +- > BaseTools/Source/Python/GenFds/OptRomFileStatement.py | 3 +- > BaseTools/Source/Python/GenFds/OptRomInfStatement.py | 30 ++- > BaseTools/Source/Python/GenFds/OptionRom.py | 23 +-- > BaseTools/Source/Python/GenFds/Region.py | 17 +- > BaseTools/Source/Python/GenFds/RuleComplexFile.py | 3 +- > BaseTools/Source/Python/GenFds/RuleSimpleFile.py | 3 +- > BaseTools/Source/Python/GenFds/Section.py | 3 +- > BaseTools/Source/Python/GenFds/UiSection.py | 7 +- > BaseTools/Source/Python/GenFds/VerSection.py | 7 +- > BaseTools/Source/Python/GenFds/Vtf.py | 3 +- > 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/Table/TableDataModel.py | 3 +- > BaseTools/Source/Python/Table/TableDec.py | 3 +- > BaseTools/Source/Python/Table/TableDsc.py | 3 +- > BaseTools/Source/Python/Table/TableEotReport.py | 5 +- > BaseTools/Source/Python/Table/TableFdf.py | 3 +- > BaseTools/Source/Python/Table/TableFile.py | 3 +- > BaseTools/Source/Python/Table/TableFunction.py | 3 +- > BaseTools/Source/Python/Table/TableIdentifier.py | 5 +- > BaseTools/Source/Python/Table/TableInf.py | 3 +- > BaseTools/Source/Python/Table/TablePcd.py | 5 +- > BaseTools/Source/Python/Table/TableQuery.py | 3 +- > BaseTools/Source/Python/Table/TableReport.py | 3 +- > 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 | 6 +- > 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 | 213 ++++++++++---------- > BaseTools/Source/Python/Workspace/InfBuildData.py | 6 +- > BaseTools/Source/Python/Workspace/MetaFileParser.py | 75 +++---- > BaseTools/Source/Python/Workspace/MetaFileTable.py | 15 +- > BaseTools/Source/Python/Workspace/WorkspaceCommon.py | 5 +- > BaseTools/Source/Python/Workspace/WorkspaceDatabase.py | 7 +- > BaseTools/Source/Python/build/BuildReport.py | 19 +- > BaseTools/Source/Python/build/build.py | 38 ++-- > BaseTools/Tests/CheckPythonSyntax.py | 2 +- > BaseTools/Tests/TestTools.py | 13 +- > BaseTools/Tests/TianoCompress.py | 6 +- > BaseTools/gcc/mingw-gcc-build.py | 112 +++++----- > 175 files changed, 2092 insertions(+), 1927 deletions(-) >