> On May 16, 2016, at 9:56 AM, Andrew Fish <af...@apple.com> wrote: > >> >> On May 16, 2016, at 6:55 AM, Andrew Fish <af...@apple.com> wrote: >> >> >>> On May 15, 2016, at 11:48 PM, Gao, Liming <liming....@intel.com> wrote: >>> >>> PACKAGES_PATH >> >> It seems to depend on sequence? I'm using master non Windows so running the >> Python directly. I just moved StdLib and MdeModulePkg >> > > Liming, > > I think I figured it out. I was using the wrong path separator. So I was > failing if I had more than one entry in PACKAGES_PATH as that we being > treated as a single filename. > > os.pathsep > The character conventionally used by the operating system to separate search > path components (as in PATH), such as ':' for POSIX or ';'for Windows. Also > available via os.path. >
Liming, The more I think about this issue I don't understand the value in using an OS specific path separator? I don't think it is really solving any problem as ':' and ';' are valid filenames on the Unix side. Having a different path path separator makes it more complex to explain the usage of PACKAGES_PATH, so would it just be easier to standardize on `;` as the separator? I would rather trade ease of use for being pedantically correct. Thanks, Andrew Fish > This was really hard to track down as there is NO error checking of > PACKAGES_PATH. The build should throw and error if the PACKAGES_PATH entries > don't exist. In my case the error would have shown that the file > /Users/andrewfish/work/src/edk2/edk2;/Users/andrewfish/work/src/edk2/edk22 > does not exist, and I would have probably figured out the separator issue. I > think Windows has a lot more restrictions on what a filename can be, but > Linux and Mac are very flexible, so maybe that is why extra error checking is > needed? > > ## convertPackagePath() > # > # Convert path to match workspace. > # > # @param cls The class pointer > # @param Ws The current WORKSPACE > # @param Path Path to be converted to match workspace. > # > @classmethod > def convertPackagePath(cls, Ws, Path): > if str(os.path.normcase (Path)).startswith(Ws): > return os.path.join(Ws, os.path.relpath(Path, Ws)) > return Path > > ## setWs() > # > # set WORKSPACE and PACKAGES_PATH environment > # > # @param cls The class pointer > # @param Ws initialize WORKSPACE variable > # @param PackagesPath initialize PackagesPath variable > # > @classmethod > def setWs(cls, Ws, PackagesPath=None): > cls.WORKSPACE = Ws > if PackagesPath: > cls.PACKAGES_PATH = [cls.convertPackagePath (Ws, > os.path.normpath(Path.strip())) for Path in PackagesPath.split(os.pathsep)] > else: > cls.PACKAGES_PATH = [] > > Thanks, > > Andrew Fish > > >> ~/work/src/edk2/ >> BaseTools >> Conf >> edk2/StdLib >> edk22/MdeModulePkg >> .... >> >> Added !include StdLib/StdLib.inc to edk22/MdeModulePkg/MdeModulePkg.dsc >> >> export WORKSPACE = "/Users/andrewfish/work/src/edk2" >> export PACKAGES_PATH="$WORKSPACE/edk2;$WORKSPACE/edk22" >> >> ~/work/src/edk2(master)>build -p edk22/MdeModulePkg/MdeModulePkg.dsc -a X64 >> -t XCODE5 >>> build -p edk22/MdeModulePkg/MdeModulePkg.dsc -a X64 -t XCODE5 >> Build environment: Darwin-15.3.0-x86_64-i386-64bit >> Build start time: 06:28:48, May.16 2016 >> >> WORKSPACE = /Users/andrewfish/work/src/edk2 >> PACKAGES_PATH = >> /Users/andrewfish/work/src/edk2/edk2;/Users/andrewfish/work/src/edk2/edk22 >> ECP_SOURCE = /Users/andrewfish/work/src/edk2/EdkCompatibilityPkg >> EDK_SOURCE = /Users/andrewfish/work/src/edk2/EdkCompatibilityPkg >> EFI_SOURCE = /Users/andrewfish/work/src/edk2/EdkCompatibilityPkg >> EDK_TOOLS_PATH = /Users/andrewfish/work/src/edk2/BaseTools >> Validate: edk22/MdeModulePkg/MdeModulePkg.dsc | >> /Users/andrewfish/work/src/edk2 | edk22/MdeModulePkg/MdeModulePkg.dsc | >> /Users/andrewfish/work/src/edk2 | | >> Validate: None | None | StdLib/StdLib.inc | >> /Users/andrewfish/work/src/edk2/edk22/MdeModulePkg | | >> Validate: None | None | StdLib/StdLib.inc | /Users/andrewfish/work/src/edk2 >> | | >> >> >> build.py... >> /Users/andrewfish/work/src/edk2/edk22/MdeModulePkg/MdeModulePkg.dsc(27): >> error 000E: File/directory not found in workspace >> StdLib/StdLib.inc is not found in packages path: >> >> /Users/andrewfish/work/src/edk2/edk2;/Users/andrewfish/work/src/edk2/edk22 >> StdLib/StdLib.inc is not found in packages path: >> >> /Users/andrewfish/work/src/edk2/edk2;/Users/andrewfish/work/src/edk2/edk22 >> >> >> I added some debug prints to the Python: >> BaseTools/Source/Python/Common/Misc.py >> >> def Validate(self, Type='', CaseSensitive=True): >> if GlobalData.gCaseInsensitive: >> CaseSensitive = False >> if Type and Type.lower() != self.Type: >> return FILE_TYPE_MISMATCH, '%s (expect %s but got %s)' % >> (self.File, Type, self.Type) >> >> RealFile, RealRoot = RealPath2(self.File, self.Root, self.AlterRoot) >> print "Validate:", RealFile, '|', RealRoot, '|',self.File, >> '|',self.Root, '|', self.AlterRoot, '|' >> if not RealRoot and not RealFile: >> RealFile = self.File >> if self.AlterRoot: >> RealFile = os.path.join(self.AlterRoot, self.File) >> elif self.Root: >> RealFile = os.path.join(self.Root, self.File) >> if len (mws.getPkgPath()) == 0: >> return FILE_NOT_FOUND, os.path.join(self.AlterRoot, RealFile) >> else: >> return FILE_NOT_FOUND, "%s is not found in packages >> path:\n\t%s" % (self.File, '\n\t'.join(mws.getPkgPath())) >> >> >> Thanks, >> >> Andrew Fish >> >> PS I see there are some changes from today >> https://github.com/tianocore/edk2-BaseTools-win32 >> I tried with that version too: >>> build -p edk22/MdeModulePkg/MdeModulePkg.dsc -a X64 -t XCODE5 >> Build environment: Darwin-15.3.0-x86_64-i386-64bit >> Build start time: 06:50:53, May.16 2016 >> >> WORKSPACE = /Users/andrewfish/work/src/edk2 >> PACKAGES_PATH = >> /Users/andrewfish/work/src/edk2/edk2;/Users/andrewfish/work/src/edk2/edk22 >> ECP_SOURCE = /Users/andrewfish/work/src/edk2/EdkCompatibilityPkg >> EDK_SOURCE = /Users/andrewfish/work/src/edk2/EdkCompatibilityPkg >> EFI_SOURCE = /Users/andrewfish/work/src/edk2/EdkCompatibilityPkg >> EDK_TOOLS_PATH = /Users/andrewfish/work/src/edk2/BaseTools >> >> >> build.py... >> /Users/andrewfish/work/src/edk2/edk22/MdeModulePkg/MdeModulePkg.dsc(27): >> error 000E: File/directory not found in workspace >> StdLib/StdLib.inc is not found in packages path: >> >> /Users/andrewfish/work/src/edk2/edk2;/Users/andrewfish/work/src/edk2/edk22 >> StdLib/StdLib.inc is not found in packages path: >> >> /Users/andrewfish/work/src/edk2/edk2;/Users/andrewfish/work/src/edk2/edk22 >> >> - Failed - >> Build end time: 06:50:54, May.16 2016 >> Build total time: 00:00:00 >> >> ~/work/src/edk2(master)>find . -iname StdLib.inc >> ./edk2/StdLib/StdLib.inc >> ~/work/src/edk2(master)>pwd >> /Users/andrewfish/work/src/edk2 >> >> >> >> > > _______________________________________________ > 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