[edk2-devel] [PATCH] BaseTools: Normalize case of pathname when evaluating Macros.

Bob Feng bob.c.feng at intel.com
Wed Sep 23 15:45:23 UTC 2020


Yes. this bug only happens on case insensitive file systems.

Thanks,
Bob

From: Andrew Fish <afish at apple.com>
Sent: Wednesday, September 23, 2020 11:31 PM
To: edk2-devel-groups-io <devel at edk2.groups.io>; Feng, Bob C <bob.c.feng at intel.com>
Cc: Liang, MingyueX <mingyuex.liang at intel.com>; Liming Gao <gaoliming at byosoft.com.cn>; Chen, Christine <yuwei.chen at intel.com>
Subject: Re: [edk2-devel] [PATCH] BaseTools: Normalize case of pathname when evaluating Macros.

Bob,

Sorry I was confused by the commit comment `inconsistent path case`. So this was only a bug on case insensitive file systems?

I’m paranoid as macOS support case and case insensitive file systems and we have had a lot of strange bugs in the past.

Thanks,

Andrew Fish


On Sep 23, 2020, at 7:59 AM, Bob Feng <bob.c.feng at intel.com<mailto:bob.c.feng at intel.com>> wrote:

Yes. we did test on Windows and Linux.

From the https://docs.python.org/3/library/os.path.html
os.path.normcase(path)
   Normalize the case of a pathname. On Windows, convert all characters in the pathname to lowercase, and also convert forward slashes to  backward slashes. On other operating systems, return the path unchanged.

Thanks,
Bob
-----Original Message-----
From: Andrew Fish <afish at apple.com<mailto:afish at apple.com>>
Sent: Wednesday, September 23, 2020 10:24 PM
To: devel at edk2.groups.io<mailto:devel at edk2.groups.io>; Feng, Bob C <bob.c.feng at intel.com<mailto:bob.c.feng at intel.com>>
Cc: Liang, MingyueX <mingyuex.liang at intel.com<mailto:mingyuex.liang at intel.com>>; Liming Gao <gaoliming at byosoft.com.cn<mailto:gaoliming at byosoft.com.cn>>; Chen, Christine <yuwei.chen at intel.com<mailto:yuwei.chen at intel.com>>
Subject: Re: [edk2-devel] [PATCH] BaseTools: Normalize case of pathname when evaluating Macros.

Does this work on case sensitive file systems?

On Sep 23, 2020, at 3:58 AM, Bob Feng <bob.c.feng at intel.com<mailto:bob.c.feng at intel.com>> wrote:

From: Mingyue Liang <mingyuex.liang at intel.com<mailto:mingyuex.liang at intel.com>>

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2880

Currently, When doing the Incremental build, the directory macros
extended to absolute path in output Makefile, which is inconsistent
with the output of Clean build.

When we do macro replacement, we can't replace macro due to
inconsistent path case, which results in inconsistent display of
incremental build and clean build in makefile.Therefore, the path is
converted to achieve the correct macro replacement.

Signed-off-by: Mingyue Liang <mingyuex.liang at intel.com<mailto:mingyuex.liang at intel.com>>
Cc: Bob Feng <bob.c.feng at intel.com<mailto:bob.c.feng at intel.com>>
Cc: Liming Gao <gaoliming at byosoft.com.cn<mailto:gaoliming at byosoft.com.cn>>
Cc: Yuwei Chen <yuwei.chen at intel.com<mailto:yuwei.chen at intel.com>>
---
BaseTools/Source/Python/AutoGen/GenMake.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py
b/BaseTools/Source/Python/AutoGen/GenMake.py
index 0314d0ea34..b04d3f5436 100755
--- a/BaseTools/Source/Python/AutoGen/GenMake.py
+++ b/BaseTools/Source/Python/AutoGen/GenMake.py
@@ -786,8 +786,10 @@ cleanlib:

   def ReplaceMacro(self, str):
       for Macro in self.MacroList:
-            if self._AutoGenObject.Macros[Macro] and self._AutoGenObject.Macros[Macro] in str:
-                str = str.replace(self._AutoGenObject.Macros[Macro], '$(' + Macro + ')')
+            if self._AutoGenObject.Macros[Macro] and os.path.normcase(self._AutoGenObject.Macros[Macro]) in os.path.normcase(str):
+                replace_dir = str[os.path.normcase(str).index(os.path.normcase(self._AutoGenObject.Macros[Macro])): os.path.normcase(str).index(
+                    os.path.normcase(self._AutoGenObject.Macros[Macro])) + len(self._AutoGenObject.Macros[Macro])]
+                str = str.replace(replace_dir, '$(' + Macro + ')')
       return str

   def CommandExceedLimit(self):
--
2.28.0.windows.1











-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#65536): https://edk2.groups.io/g/devel/message/65536
Mute This Topic: https://groups.io/mt/77032381/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/edk2-devel-archive/attachments/20200923/6dc9d350/attachment.htm>


More information about the edk2-devel-archive mailing list