- PostbuildList = self.Postbuild.split()\r
- if not os.path.isabs(PostbuildList[0]):\r
- PostbuildList[0] = mws.join(self.WorkspaceDir, PostbuildList[0])\r
- if os.path.isfile(PostbuildList[0]):\r
- self.PostbuildScript = PostbuildList[0]\r
- self.Postbuild = ' '.join(PostbuildList)\r
- self.Postbuild += self.PassCommandOption(self.BuildTargetList, self.ArchList, self.ToolChainList)\r
- else:\r
- EdkLogger.error("Postbuild", POSTBUILD_ERROR, "the postbuild script %s is not exist.\n If you'd like to disable the Postbuild process, please use the format: -D POSTBUILD=\"\" " %(PostbuildList[0]))\r
-\r
- def PassCommandOption(self, BuildTarget, TargetArch, ToolChain):\r
+ PostbuildList = []\r
+ #\r
+ # Evaluate all arguments and convert arguments that are WORKSPACE\r
+ # relative paths to absolute paths. Filter arguments that look like\r
+ # flags or do not follow the file/dir naming rules to avoid false\r
+ # positives on this conversion.\r
+ #\r
+ for Arg in self.Postbuild.split():\r
+ #\r
+ # Do not modify Arg if it looks like a flag or an absolute file path\r
+ #\r
+ if Arg.startswith('-') or os.path.isabs(Arg):\r
+ PostbuildList.append(Arg)\r
+ continue\r
+ #\r
+ # Do not modify Arg if it does not look like a Workspace relative\r
+ # path that starts with a valid package directory name\r
+ #\r
+ if not Arg[0].isalpha() or os.path.dirname(Arg) == '':\r
+ PostbuildList.append(Arg)\r
+ continue\r
+ #\r
+ # If Arg looks like a WORKSPACE relative path, then convert to an\r
+ # absolute path and check to see if the file exists.\r
+ #\r
+ Temp = mws.join(self.WorkspaceDir, Arg)\r
+ if os.path.isfile(Temp):\r
+ Arg = Temp\r
+ PostbuildList.append(Arg)\r
+ self.Postbuild = ' '.join(PostbuildList)\r
+ self.Postbuild += self.PassCommandOption(self.BuildTargetList, self.ArchList, self.ToolChainList, self.PlatformFile, self.Target)\r
+\r
+ def PassCommandOption(self, BuildTarget, TargetArch, ToolChain, PlatformFile, Target):\r