summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordarylm503 <darylm503@6f19259b-4bc3-4df7-8a09-765794883524>2011-10-03 18:54:12 +0000
committerdarylm503 <darylm503@6f19259b-4bc3-4df7-8a09-765794883524>2011-10-03 18:54:12 +0000
commit41b152c5f6ec3a5a6e51b4f8f0f90291a5895edc (patch)
treedb28131d5929a4805654a802b64cc0d980b9559e
parent58081f2c64fbc2f89ac5a9b47b2643c280bc8f99 (diff)
downloadedk2-41b152c5f6ec3a5a6e51b4f8f0f90291a5895edc.zip
edk2-41b152c5f6ec3a5a6e51b4f8f0f90291a5895edc.tar.gz
edk2-41b152c5f6ec3a5a6e51b4f8f0f90291a5895edc.tar.bz2
StdLib: Improve robustness of stat() and make basename() a public function.
AppPkg: Refinements to pyconfig.h and port of getpath.c to EDK II. Signed-off-by: darylm503 Reviewed-by: geekboy15a Reviewed-by: jljusten git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12508 6f19259b-4bc3-4df7-8a09-765794883524
-rw-r--r--AppPkg/Applications/Python/Efi/config.c59
-rw-r--r--AppPkg/Applications/Python/Efi/getpath.c788
-rw-r--r--AppPkg/Applications/Python/Efi/getpathp.c714
-rw-r--r--AppPkg/Applications/Python/Ia32/pyconfig.h96
-rw-r--r--AppPkg/Applications/Python/PyMod-2.7.2/Include/fileobject.h12
-rw-r--r--AppPkg/Applications/Python/PyMod-2.7.2/Include/osdefs.h70
-rw-r--r--AppPkg/Applications/Python/PyMod-2.7.2/Include/pyport.h13
-rw-r--r--AppPkg/Applications/Python/PyMod-2.7.2/Modules/_sre.c9
-rw-r--r--AppPkg/Applications/Python/PyMod-2.7.2/Modules/zlib/zutil.h10
-rw-r--r--AppPkg/Applications/Python/PyMod-2.7.2/Objects/longobject.c13
-rw-r--r--AppPkg/Applications/Python/PyMod-2.7.2/Objects/stringlib/localeutil.h13
-rw-r--r--AppPkg/Applications/Python/PyMod-2.7.2/Python/marshal.c20
-rw-r--r--AppPkg/Applications/Python/PythonCore.inf365
-rw-r--r--AppPkg/Applications/Python/X64/pyconfig.h169
-rw-r--r--StdLib/Include/sys/EfiSysCall.h2
-rw-r--r--StdLib/Include/unistd.h1
-rw-r--r--StdLib/LibC/Uefi/Devices/UefiShell/daShell.c4
-rw-r--r--StdLib/LibC/Uefi/SysCalls.c2
-rw-r--r--StdLib/LibC/Uefi/compat.c5
-rw-r--r--StdLib/StdLib.inc23
20 files changed, 1328 insertions, 1060 deletions
diff --git a/AppPkg/Applications/Python/Efi/config.c b/AppPkg/Applications/Python/Efi/config.c
index 52c7795..98e7e2a 100644
--- a/AppPkg/Applications/Python/Efi/config.c
+++ b/AppPkg/Applications/Python/Efi/config.c
@@ -1,4 +1,15 @@
-/* Module configuration */
+/** @file
+ Python Module configuration.
+
+ Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
+ This program and the accompanying materials are licensed and made available under
+ the terms and conditions of the BSD License that accompanies this distribution.
+ The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+**/
/* This file contains the table of built-in modules.
See init_builtin() in import.c. */
@@ -6,9 +17,9 @@
#include "Python.h"
extern void initarray(void);
-//#ifndef MS_WINI64
-//extern void initaudioop(void);
-//#endif
+#ifndef MS_WINI64
+extern void initaudioop(void);
+#endif
extern void initbinascii(void);
extern void initcmath(void);
extern void initerrno(void);
@@ -27,7 +38,7 @@ extern void init_sha256(void);
extern void init_sha512(void);
extern void initstrop(void);
extern void inittime(void);
-//extern void initthread(void);
+extern void initthread(void);
extern void initcStringIO(void);
extern void initcPickle(void);
#ifdef WIN32
@@ -38,23 +49,23 @@ extern void init_codecs(void);
extern void init_weakref(void);
extern void init_hotshot(void);
extern void initxxsubtype(void);
-//extern void initzipimport(void);
+extern void initzipimport(void);
extern void init_random(void);
extern void inititertools(void);
extern void init_collections(void);
extern void init_heapq(void);
extern void init_bisect(void);
extern void init_symtable(void);
-//extern void initmmap(void);
+extern void initmmap(void);
extern void init_csv(void);
extern void init_sre(void);
extern void initparser(void);
-//extern void init_winreg(void);
+extern void init_winreg(void);
extern void init_struct(void);
extern void initdatetime(void);
extern void init_functools(void);
extern void init_json(void);
-//extern void initzlib(void);
+extern void initzlib(void);
extern void init_multibytecodec(void);
extern void init_codecs_cn(void);
@@ -63,8 +74,8 @@ extern void init_codecs_iso2022(void);
extern void init_codecs_jp(void);
extern void init_codecs_kr(void);
extern void init_codecs_tw(void);
-//extern void init_subprocess(void);
-//extern void init_lsprof(void);
+extern void init_subprocess(void);
+extern void init_lsprof(void);
extern void init_ast(void);
extern void init_io(void);
extern void _PyWarnings_Init(void);
@@ -79,16 +90,20 @@ struct _inittab _PyImport_Inittab[] = {
{"array", initarray},
{"_ast", init_ast},
-//#ifdef MS_WINDOWS
-//#ifndef MS_WINI64
-// {"audioop", initaudioop},
-//#endif
-//#endif
+#ifdef MS_WINDOWS
+#ifndef MS_WINI64
+ {"audioop", initaudioop},
+#endif
+#endif
{"binascii", initbinascii},
//{"cmath", initcmath},
{"errno", initerrno},
- {"future_builtins", initfuture_builtins},
+
{"gc", initgc},
+ {"signal", initsignal},
+
+#if 0
+ {"future_builtins", initfuture_builtins},
#ifndef MS_WINI64
{"imageop", initimageop},
#endif
@@ -96,7 +111,6 @@ struct _inittab _PyImport_Inittab[] = {
{"_md5", init_md5},
//{"nt", initnt}, /* Use the NT os functions, not posix */
{"operator", initoperator},
- {"signal", initsignal},
{"_sha", init_sha},
{"_sha256", init_sha256},
{"_sha512", init_sha512},
@@ -127,10 +141,14 @@ struct _inittab _PyImport_Inittab[] = {
//{"mmap", initmmap},
{"_csv", init_csv},
{"_sre", init_sre},
+#endif
+
{"parser", initparser},
+
+#if 0
//{"_winreg", init_winreg},
{"_struct", init_struct},
- //{"datetime", initdatetime},
+ {"datetime", initdatetime},
{"_functools", init_functools},
{"_json", init_json},
@@ -146,6 +164,7 @@ struct _inittab _PyImport_Inittab[] = {
{"_codecs_jp", init_codecs_jp},
{"_codecs_kr", init_codecs_kr},
{"_codecs_tw", init_codecs_tw},
+#endif
/* tools/freeze/makeconfig.py marker for additional "_inittab" entries */
/* -- ADDMODULE MARKER 2 -- */
@@ -153,7 +172,7 @@ struct _inittab _PyImport_Inittab[] = {
/* This module "lives in" with marshal.c */
{"marshal", PyMarshal_Init},
- /* This lives it with import.c */
+ /* This lives in with import.c */
{"imp", initimp},
/* These entries are here for sys.builtin_module_names */
diff --git a/AppPkg/Applications/Python/Efi/getpath.c b/AppPkg/Applications/Python/Efi/getpath.c
new file mode 100644
index 0000000..ba837bf
--- /dev/null
+++ b/AppPkg/Applications/Python/Efi/getpath.c
@@ -0,0 +1,788 @@
+/** @file
+ Return the initial module search path.
+
+ Search in specified locations for the associated Python libraries.
+
+ Py_GetPath returns module_search_path.
+ Py_GetPrefix returns PREFIX
+ Py_GetExec_Prefix returns PREFIX
+ Py_GetProgramFullPath returns the full path to the python executable.
+
+ These are built dynamically so that the proper volume name can be prefixed
+ to the paths.
+
+ For the EDK II, UEFI, implementation of Python, PREFIX and EXEC_PREFIX
+ are set as follows:
+ PREFIX = /Efi/StdLib
+ EXEC_PREFIX = PREFIX
+
+ The following final paths are assumed:
+ /Efi/Tools/Python.efi The Python executable.
+ /Efi/StdLib/lib/python.VERSION The platform independent Python modules.
+ /Efi/StdLib/lib/python.VERSION/dynalib Dynamically loadable Python extension modules.
+
+ Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
+ This program and the accompanying materials are licensed and made available under
+ the terms and conditions of the BSD License that accompanies this distribution.
+ The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+**/
+#include <Python.h>
+#include <osdefs.h>
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* VERSION must be at least two characters long. */
+#ifndef VERSION
+ #define VERSION "27"
+#endif
+
+#ifndef VPATH
+ #define VPATH "."
+#endif
+
+/* Search path entry delimiter */
+#ifdef DELIM
+ #define sDELIM ";"
+#endif
+
+#ifndef PREFIX
+ #define PREFIX "/Efi/StdLib"
+#endif
+
+#ifndef EXEC_PREFIX
+ #define EXEC_PREFIX PREFIX
+#endif
+
+#ifndef LIBPYTHON
+ #define LIBPYTHON "lib/python." VERSION
+#endif
+
+#ifndef PYTHONPATH
+//#define PYTHONPATH PREFIX LIBPYTHON sDELIM \
+// EXEC_PREFIX LIBPYTHON "/lib-dynload"
+ #define PYTHONPATH LIBPYTHON // sDELIM
+// LIBPYTHON "/lib-dynload"
+#endif
+
+#ifndef LANDMARK
+#define LANDMARK "os.py"
+#endif
+
+static char prefix[MAXPATHLEN+1];
+static char exec_prefix[MAXPATHLEN+1];
+static char progpath[MAXPATHLEN+1];
+static char *module_search_path = NULL;
+static char lib_python[] = LIBPYTHON;
+static char volume_name[32] = { 0 };
+
+/** Determine if "ch" is a separator character.
+
+ @param[in] ch The character to test.
+
+ @retval TRUE ch is a separator character.
+ @retval FALSE ch is NOT a separator character.
+**/
+static int
+is_sep(char ch)
+{
+#ifdef ALTSEP
+ return ch == SEP || ch == ALTSEP;
+#else
+ return ch == SEP;
+#endif
+}
+
+/** Reduce a path by its last element.
+
+ The last element (everything to the right of the last separator character)
+ in the path, dir, is removed from the path. Parameter dir is modified in place.
+
+ @param[in,out] dir Pointer to the path to modify.
+**/
+static void
+reduce(char *dir)
+{
+ size_t i = strlen(dir);
+ while (i > 0 && !is_sep(dir[i]))
+ --i;
+ dir[i] = '\0';
+}
+
+/** Does filename point to a file and not directory?
+
+ @param[in] filename The fully qualified path to the object to test.
+
+ @retval 0 Filename was not found, or is a directory.
+ @retval 1 Filename refers to a regular file.
+**/
+static int
+isfile(char *filename)
+{
+ struct stat buf;
+ if (stat(filename, &buf) != 0) {
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d] Not Found: file = \"%s\"\n", __func__, __LINE__, filename);
+ return 0;
+ }
+ //if (!S_ISREG(buf.st_mode))
+ if (S_ISDIR(buf.st_mode)) {
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d] Is DIR: file = \"%s\"\n", __func__, __LINE__, filename);
+ return 0;
+ }
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d] SUCCESS: file = \"%s\"\n", __func__, __LINE__, filename);
+ return 1;
+}
+
+/** Determine if filename refers to a Python module.
+
+ A Python module is indicated if the file exists, or if the file with
+ 'o' or 'c' appended exists.
+
+ @param[in] filename The fully qualified path to the object to test.
+
+ @retval 0
+**/
+static int
+ismodule(char *filename)
+{
+ if (isfile(filename)) {
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: file = \"%s\"\n", __func__, __LINE__, filename);
+ return 1;
+ }
+
+ /* Check for the compiled version of prefix. */
+ if (strlen(filename) < MAXPATHLEN) {
+ strcat(filename, Py_OptimizeFlag ? "o" : "c");
+ if (isfile(filename)) {
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: file = \"%s\"\n", __func__, __LINE__, filename);
+ return 1;
+ }
+ }
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d] FAIL: file = \"%s\"\n", __func__, __LINE__, filename);
+ return 0;
+}
+
+/** Does filename point to a directory?
+
+ @param[in] filename The fully qualified path to the object to test.
+
+ @retval 0 Filename was not found, or is not a regular file.
+ @retval 1 Filename refers to a directory.
+**/
+static int
+isdir(char *filename)
+{
+ struct stat buf;
+
+ if (stat(filename, &buf) != 0)
+ return 0;
+
+ if (!S_ISDIR(buf.st_mode))
+ return 0;
+
+ return 1;
+}
+
+/** Determine if a path is absolute, or not.
+ An absolute path consists of a volume name, "VOL:", followed by a rooted path,
+ "/path/elements". If both of these components are present, the path is absolute.
+
+ Let P be a pointer to the path to test.
+ Let A be a pointer to the first ':' in P.
+ Let B be a pointer to the first '/' or '\\' in P.
+
+ If A and B are not NULL
+ If (A-P+1) == (B-P) then the path is absolute.
+ Otherwise, the path is NOT absolute.
+
+ @param[in] path The path to test.
+
+ @retval -1 Path is absolute but lacking volume name.
+ @retval 0 Path is NOT absolute.
+ @retval 1 Path is absolute.
+*/
+static int
+is_absolute(char *path)
+{
+ char *A;
+ char *B;
+
+ A = strchr(path, ':');
+ B = strpbrk(path, "/\\");
+
+ if(B != NULL) {
+ if(A == NULL) {
+ if(B == path) {
+ return -1;
+ }
+ }
+ else {
+ if(((A - path) + 1) == (B - path)) {
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+
+/** Add a path component, by appending stuff to buffer.
+ buffer must have at least MAXPATHLEN + 1 bytes allocated, and contain a
+ NUL-terminated string with no more than MAXPATHLEN characters (not counting
+ the trailing NUL). It's a fatal error if it contains a string longer than
+ that (callers must be careful!). If these requirements are met, it's
+ guaranteed that buffer will still be a NUL-terminated string with no more
+ than MAXPATHLEN characters at exit. If stuff is too long, only as much of
+ stuff as fits will be appended.
+
+ @param[in,out] buffer The path to be extended.
+ @param[in] stuff The stuff to join onto the path.
+*/
+static void
+joinpath(char *buffer, char *stuff)
+{
+ size_t n, k;
+
+ k = 0;
+ if (is_absolute(stuff) == 1) {
+ n = 0;
+ }
+ else {
+ n = strlen(buffer);
+ if(n == 0) {
+ strncpy(buffer, volume_name, MAXPATHLEN);
+ n = strlen(buffer);
+ }
+ /* We must not use an else clause here because we want to test n again.
+ volume_name may have been empty.
+ */
+ if (n > 0 && n < MAXPATHLEN) {
+ if(!is_sep(buffer[n-1])) {
+ buffer[n++] = SEP;
+ }
+ if(is_sep(stuff[0])) ++stuff;
+ }
+ }
+ if (n > MAXPATHLEN)
+ Py_FatalError("buffer overflow in getpath.c's joinpath()");
+ k = strlen(stuff);
+ if (n + k > MAXPATHLEN)
+ k = MAXPATHLEN - n;
+ strncpy(buffer+n, stuff, k);
+ buffer[n+k] = '\0';
+}
+
+/** Is filename an executable file?
+
+ An executable file:
+ 1) exists
+ 2) is a file, not a directory
+ 3) has a name ending with ".efi"
+ 4) Only has a single '.' in the name.
+
+ If basename(filename) does not contain a '.', append ".efi" to filename
+ If filename ends in ".efi", it is executable, else it isn't.
+
+ This routine is used to when searching for the file named by argv[0].
+ As such, there is no need to search for extensions other than ".efi".
+
+ @param[in] filename The name of the file to test. It may, or may not, have an extension.
+
+ @retval 0 filename already has a path other than ".efi", or it doesn't exist, or is a directory.
+ @retval 1 filename refers to an executable file.
+**/
+static int
+isxfile(char *filename)
+{
+ struct stat buf;
+ char *bn;
+ char *newbn;
+ int bnlen;
+
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d] ENTER: file = \"%s\"\n", __func__, __LINE__, filename);
+ bn = basename(filename); // Separate off the file name component
+ reduce(filename); // and isolate the path component
+ bnlen = strlen(bn);
+ newbn = strrchr(bn, '.'); // Does basename contain a period?
+ if(newbn == NULL) { // Does NOT contain a period.
+ newbn = &bn[bnlen];
+ strncpyX(newbn, ".efi", MAXPATHLEN - bnlen); // append ".efi" to basename
+ bnlen += 4;
+ }
+ else if(strcmp(newbn, ".efi") != 0) {
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: Bad extension\n", __func__, __LINE__);
+ return 0; // File can not be executable.
+ }
+ joinpath(filename, bn); // Stitch path and file name back together
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: file = \"%s\"\n", __func__, __LINE__, filename);
+
+ if (stat(filename, &buf) != 0) { // Now, verify that file exists
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: Does not exist\n", __func__, __LINE__);
+ return 0;
+ }
+ if(S_ISDIR(buf.st_mode)) { // And it is not a directory.
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: Is a directory\n", __func__, __LINE__);
+ return 0;
+ }
+
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d] EXIT: file = \"%s\"\n", __func__, __LINE__, filename);
+ return 1;
+}
+
+/** Copy p into path, ensuring that the result is an absolute path.
+
+ copy_absolute requires that path be allocated at least
+ MAXPATHLEN + 1 bytes and that p be no more than MAXPATHLEN bytes.
+
+ @param[out] path Destination to receive the absolute path.
+ @param[in] p Path to be tested and possibly converted.
+**/
+static void
+copy_absolute(char *path, char *p)
+{
+ if (is_absolute(p) == 1)
+ strcpy(path, p);
+ else {
+ if (!getcwd(path, MAXPATHLEN)) {
+ /* unable to get the current directory */
+ if(volume_name[0] != 0) {
+ strcpy(path, volume_name);
+ joinpath(path, p);
+ }
+ else
+ strcpy(path, p);
+ return;
+ }
+ if (p[0] == '.' && is_sep(p[1]))
+ p += 2;
+ joinpath(path, p);
+ }
+}
+
+/** Modify path so that the result is an absolute path.
+ absolutize() requires that path be allocated at least MAXPATHLEN+1 bytes.
+
+ @param[in,out] path The path to be made absolute.
+*/
+static void
+absolutize(char *path)
+{
+ char buffer[MAXPATHLEN + 1];
+
+ if (is_absolute(path) == 1)
+ return;
+ copy_absolute(buffer, path);
+ strcpy(path, buffer);
+}
+
+/** Extract the volume name from a path.
+
+ @param[out] Dest Pointer to location in which to store the extracted volume name.
+ @param[in] path Pointer to the path to extract the volume name from.
+**/
+static void
+set_volume(char *Dest, char *path)
+{
+ size_t VolLen;
+
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d] ENTER: path = \"%s\"\n", __func__, __LINE__, path);
+ if(is_absolute(path)) {
+ VolLen = strcspn(path, "/\\:");
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: VolLen = %d\n", __func__, __LINE__, VolLen);
+ if((VolLen != 0) && (path[VolLen] == ':')) {
+ (void) strncpyX(Dest, path, VolLen + 1);
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: VolLen = %d, Dest = \"%s\" path = \"%s\"\n",
+ // __func__, __LINE__, VolLen, Dest, path);
+ }
+ }
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d] EXIT: Dest = \"%s\"\n", __func__, __LINE__, Dest);
+}
+
+
+/** Determine paths.
+
+ Two directories must be found, the platform independent directory
+ (prefix), containing the common .py and .pyc files, and the platform
+ dependent directory (exec_prefix), containing the shared library
+ modules. Note that prefix and exec_prefix are the same directory
+ for UEFI installations.
+
+ Separate searches are carried out for prefix and exec_prefix.
+ Each search tries a number of different locations until a ``landmark''
+ file or directory is found. If no prefix or exec_prefix is found, a
+ warning message is issued and the preprocessor defined PREFIX and
+ EXEC_PREFIX are used (even though they may not work); python carries on
+ as best as is possible, but some imports may fail.
+
+ Before any searches are done, the location of the executable is
+ determined. If argv[0] has one or more slashes in it, it is used
+ unchanged. Otherwise, it must have been invoked from the shell's path,
+ so we search %PATH% for the named executable and use that. If the
+ executable was not found on %PATH% (or there was no %PATH% environment
+ variable), the original argv[0] string is used.
+
+ Finally, argv0_path is set to the directory containing the executable
+ (i.e. the last component is stripped).
+
+ With argv0_path in hand, we perform a number of steps. The same steps
+ are performed for prefix and for exec_prefix, but with a different
+ landmark.
+
+ The prefix landmark will always be lib/python.VERSION/os.py and the
+ exec_prefix will always be lib/python.VERSION/dynaload, where VERSION
+ is Python's version number as defined at the beginning of this file.
+
+ First. See if the %PYTHONHOME% environment variable points to the
+ installed location of the Python libraries. If %PYTHONHOME% is set, then
+ it points to prefix and exec_prefix. %PYTHONHOME% can be a single
+ directory, which is used for both, or the prefix and exec_prefix
+ directories separated by the DELIM character.
+
+ Next. Search the directories pointed to by the preprocessor variables
+ PREFIX and EXEC_PREFIX. These paths are prefixed with the volume name
+ extracted from argv0_path. The volume names correspond to the UEFI
+ shell "map" names.
+
+ That's it!
+
+ Well, almost. Once we have determined prefix and exec_prefix, the
+ preprocessor variable PYTHONPATH is used to construct a path. Each
+ relative path on PYTHONPATH is prefixed with prefix. Then the directory
+ containing the shared library modules is appended. The environment
+ variable $PYTHONPATH is inserted in front of it all. Finally, the
+ prefix and exec_prefix globals are tweaked so they reflect the values
+ expected by other code, by stripping the "lib/python$VERSION/..." stuff
+ off. This seems to make more sense given that currently the only
+ known use of sys.prefix and sys.exec_prefix is for the ILU installation
+ process to find the installed Python tree.
+
+ The final, fully resolved, paths should look something like:
+ fs0:/Efi/Tools/python.efi
+ fs0:/Efi/StdLib/lib/python27
+ fs0:/Efi/StdLib/lib/python27/dynaload
+
+**/
+static void
+calculate_path(void)
+{
+ extern char *Py_GetProgramName(void);
+
+ static char delimiter[2] = {DELIM, '\0'};
+ static char separator[2] = {SEP, '\0'};
+ char *pythonpath = PYTHONPATH;
+ char *rtpypath = Py_GETENV("PYTHONPATH");
+ //char *home = Py_GetPythonHome();
+ char *path = getenv("PATH");
+ char *prog = Py_GetProgramName();
+ char argv0_path[MAXPATHLEN+1];
+ char zip_path[MAXPATHLEN+1];
+ //int pfound, efound; /* 1 if found; -1 if found build directory */
+ char *buf;
+ size_t bufsz;
+ size_t prefixsz;
+ char *defpath;
+ //uint32_t nsexeclength = MAXPATHLEN;
+
+ //unixify(path);
+ //unixify(rtpypath);
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]:\nENTER prog=\"%s\"\n path=\"%s\"\n", __func__, __LINE__, prog, path);
+
+
+/* ###########################################################################
+ Determine path to the Python.efi binary.
+ Produces progpath, argv0_path, and volume_name.
+########################################################################### */
+
+ /* If there is no slash in the argv0 path, then we have to
+ * assume python is on the user's $PATH, since there's no
+ * other way to find a directory to start the search from. If
+ * $PATH isn't exported, you lose.
+ */
+ if (strchr(prog, SEP))
+ strncpy(progpath, prog, MAXPATHLEN);
+ else if (path) {
+ while (1) {
+ char *delim = strchr(path, DELIM);
+
+ if (delim) {
+ size_t len = delim - path;
+ if (len > MAXPATHLEN)
+ len = MAXPATHLEN;
+ strncpy(progpath, path, len);
+ *(progpath + len) = '\0';
+ }
+ else
+ strncpy(progpath, path, MAXPATHLEN);
+
+ joinpath(progpath, prog);
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: progpath = \"%s\"\n", __func__, __LINE__, progpath);
+ if (isxfile(progpath))
+ break;
+
+ if (!delim) {
+ progpath[0] = '\0';
+ break;
+ }
+ path = delim + 1;
+ }
+ }
+ else
+ progpath[0] = '\0';
+ if ( (!is_absolute(progpath)) && (progpath[0] != '\0') )
+ absolutize(progpath);
+ strncpy(argv0_path, progpath, MAXPATHLEN);
+ argv0_path[MAXPATHLEN] = '\0';
+ set_volume(volume_name, argv0_path);
+
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: volume_name = \"%s\"\n", __func__, __LINE__, volume_name);
+ reduce(argv0_path);
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: progpath = \"%s\"\n", __func__, __LINE__, progpath);
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: argv0_path = \"%s\"\n", __func__, __LINE__, argv0_path);
+ /* At this point, argv0_path is guaranteed to be less than
+ MAXPATHLEN bytes long.
+ */
+
+/* ###########################################################################
+ Build the FULL prefix string, including volume name.
+ This is the full path to the platform independent libraries.
+########################################################################### */
+
+ //if (!(pfound = search_for_prefix(argv0_path, home))) {
+ // if (!Py_FrozenFlag)
+ // fprintf(stderr,
+ // "Could not find platform independent libraries <prefix>\n");
+ strncpy(prefix, volume_name, MAXPATHLEN);
+ joinpath(prefix, PREFIX);
+ joinpath(prefix, lib_python);
+ //}
+ //else
+ // reduce(prefix);
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: V = \"%s\", Prefix = \"%s\"\n", __func__, __LINE__, volume_name, prefix);
+
+/* ###########################################################################
+ Build the FULL path to the zipped-up Python library.
+########################################################################### */
+
+ strncpy(zip_path, prefix, MAXPATHLEN);
+ zip_path[MAXPATHLEN] = '\0';
+ //if (pfound > 0) { /* Use the reduced prefix returned by Py_GetPrefix() */
+ reduce(zip_path);
+ //reduce(zip_path);
+ //}
+ //else
+ // strncpy(zip_path, PREFIX, MAXPATHLEN);
+ joinpath(zip_path, "python00.zip");
+ bufsz = strlen(zip_path); /* Replace "00" with version */
+ zip_path[bufsz - 6] = VERSION[0];
+ zip_path[bufsz - 5] = VERSION[1];
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: Zip_path = \"%s\"\n", __func__, __LINE__, zip_path);
+
+/* ###########################################################################
+ Build the FULL path to dynamically loadable libraries.
+########################################################################### */
+
+ //if (!(efound = search_for_exec_prefix(argv0_path, home))) {
+ // if (!Py_FrozenFlag)
+ // fprintf(stderr,
+ // "Could not find platform dependent libraries <exec_prefix>\n");
+ strncpy(exec_prefix, volume_name, MAXPATHLEN);
+ joinpath(exec_prefix, EXEC_PREFIX);
+ joinpath(exec_prefix, lib_python);
+ joinpath(exec_prefix, "dynaload");
+ //}
+ /* If we found EXEC_PREFIX do *not* reduce it! (Yet.) */
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: Exec_prefix = \"%s\"\n", __func__, __LINE__, exec_prefix);
+
+ //if ((!pfound || !efound) && !Py_FrozenFlag)
+ // fprintf(stderr,
+ // "Consider setting $PYTHONHOME to <prefix>[%c<exec_prefix>]\n", DELIM);
+
+/* ###########################################################################
+ Build the module search path.
+########################################################################### */
+
+ /* Reduce prefix and exec_prefix to their essence,
+ * e.g. /usr/local/lib/python1.5 is reduced to /usr/local.
+ * If we're loading relative to the build directory,
+ * return the compiled-in defaults instead.
+ */
+ //if (pfound > 0) {
+ reduce(prefix);
+ reduce(prefix);
+ /* The prefix is the root directory, but reduce() chopped
+ * off the "/". */
+ if (!prefix[0]) {
+ strcpy(prefix, volume_name);
+ }
+ bufsz = strlen(prefix);
+ if(prefix[bufsz-1] == ':') {
+ prefix[bufsz] = SEP;
+ prefix[bufsz+1] = 0;
+ }
+ //}
+ //else
+ // strncpy(prefix, PREFIX, MAXPATHLEN);
+
+//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: prefix = \"%s\"\n", __func__, __LINE__, prefix);
+
+ /* Calculate size of return buffer.
+ */
+ defpath = pythonpath;
+ bufsz = 0;
+
+ if (rtpypath)
+ bufsz += strlen(rtpypath) + 1;
+
+ prefixsz = strlen(prefix) + 1;
+
+ while (1) {
+ char *delim = strchr(defpath, DELIM);
+
+ if (is_absolute(defpath) == 0)
+ /* Paths are relative to prefix */
+ bufsz += prefixsz;
+
+ if (delim)
+ bufsz += delim - defpath + 1;
+ else {
+ bufsz += strlen(defpath) + 1;
+ break;
+ }
+ defpath = delim + 1;
+ }
+//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: defpath = \"%s\"\n", __func__, __LINE__, defpath);
+
+ bufsz += strlen(zip_path) + 1;
+ bufsz += strlen(exec_prefix) + 1;
+
+ /* This is the only malloc call in this file */
+ buf = (char *)PyMem_Malloc(bufsz);
+
+ if (buf == NULL) {
+ /* We can't exit, so print a warning and limp along */
+ fprintf(stderr, "Not enough memory for dynamic PYTHONPATH.\n");
+ fprintf(stderr, "Using default static PYTHONPATH.\n");
+ module_search_path = PYTHONPATH;
+ }
+ else {
+ //if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]:\n", __func__, __LINE__);
+ /* Run-time value of $PYTHONPATH goes first */
+ if (rtpypath) {
+ strcpy(buf, rtpypath);
+ strcat(buf, delimiter);
+ }
+ else
+ buf[0] = '\0';
+//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: RTpath = \"%s\"\n", __func__, __LINE__, buf);
+
+ /* Next is the default zip path */
+ strcat(buf, zip_path);
+ strcat(buf, delimiter);
+//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: +Zip = \"%s\"\n", __func__, __LINE__, buf);
+
+ /* Next goes merge of compile-time $PYTHONPATH with
+ * dynamically located prefix.
+ */
+ defpath = pythonpath;
+ while (1) {
+ char *delim = strchr(defpath, DELIM);
+
+ if (is_absolute(defpath) != 1) {
+ strcat(buf, prefix);
+ strcat(buf, separator);
+ }
+
+ if (delim) {
+ size_t len = delim - defpath + 1;
+ size_t end = strlen(buf) + len;
+ strncat(buf, defpath, len);
+ *(buf + end) = '\0';
+ }
+ else {
+ strcat(buf, defpath);
+ break;
+ }
+ defpath = delim + 1;
+ }
+ strcat(buf, delimiter);
+//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: +Merge = \"%s\"\n", __func__, __LINE__, buf);
+
+ /* Finally, on goes the directory for dynamic-load modules */
+ strcat(buf, exec_prefix);
+
+ /* And publish the results */
+ module_search_path = buf;
+//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: module_search_path = \"%s\"\n", __func__, __LINE__, module_search_path);
+ }
+
+ //if (efound > 0) {
+ /* At this point, exec_prefix is set to VOL:/Efi/StdLib/lib/python.27/dynalib.
+ We want to get back to the root value, so we have to remove the final three
+ segments to get VOL:/Efi/StdLib. Because we don't know what VOL is, and
+ EXEC_PREFIX is also indeterminate, we just remove the three final segments.
+ */
+ reduce(exec_prefix);
+ reduce(exec_prefix);
+ reduce(exec_prefix);
+ if (!exec_prefix[0]) {
+ strcpy(exec_prefix, volume_name);
+ }
+ bufsz = strlen(exec_prefix);
+ if(exec_prefix[bufsz-1] == ':') {
+ exec_prefix[bufsz] = SEP;
+ exec_prefix[bufsz+1] = 0;
+ }
+ //}
+ //else
+ // strncpy(exec_prefix, EXEC_PREFIX, MAXPATHLEN);
+ if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: module_search_path = \"%s\"\n", __func__, __LINE__, module_search_path);
+ if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: prefix = \"%s\"\n", __func__, __LINE__, prefix);
+ if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: exec_prefix = \"%s\"\n", __func__, __LINE__, exec_prefix);
+ if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: progpath = \"%s\"\n", __func__, __LINE__, progpath);
+}
+
+
+/* External interface */
+
+char *
+Py_GetPath(void)
+{
+ if (!module_search_path)
+ calculate_path();
+ return module_search_path;
+}
+
+char *
+Py_GetPrefix(void)
+{
+ if (!module_search_path)
+ calculate_path();
+ return prefix;
+}
+
+char *
+Py_GetExecPrefix(void)
+{
+ if (!module_search_path)
+ calculate_path();
+ return exec_prefix;
+}
+
+char *
+Py_GetProgramFullPath(void)
+{
+ if (!module_search_path)
+ calculate_path();
+ return progpath;
+}
+
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/AppPkg/Applications/Python/Efi/getpathp.c b/AppPkg/Applications/Python/Efi/getpathp.c
deleted file mode 100644
index 9f78806..0000000
--- a/AppPkg/Applications/Python/Efi/getpathp.c
+++ /dev/null
@@ -1,714 +0,0 @@
-
-/* Return the initial module search path. */
-/* Used by DOS, OS/2, Windows 3.1, Windows 95/98, Windows NT. */
-
-/* ----------------------------------------------------------------
- PATH RULES FOR WINDOWS:
- This describes how sys.path is formed on Windows. It describes the
- functionality, not the implementation (ie, the order in which these
- are actually fetched is different)
-
- * Python always adds an empty entry at the start, which corresponds
- to the current directory.
-
- * If the PYTHONPATH env. var. exists, its entries are added next.
-
- * We look in the registry for "application paths" - that is, sub-keys
- under the main PythonPath registry key. These are added next (the
- order of sub-key processing is undefined).
- HKEY_CURRENT_USER is searched and added first.
- HKEY_LOCAL_MACHINE is searched and added next.
- (Note that all known installers only use HKLM, so HKCU is typically
- empty)
-
- * We attempt to locate the "Python Home" - if the PYTHONHOME env var
- is set, we believe it. Otherwise, we use the path of our host .EXE's
- to try and locate our "landmark" (lib\\os.py) and deduce our home.
- - If we DO have a Python Home: The relevant sub-directories (Lib,
- plat-win, lib-tk, etc) are based on the Python Home
- - If we DO NOT have a Python Home, the core Python Path is
- loaded from the registry. This is the main PythonPath key,
- and both HKLM and HKCU are combined to form the path)
-
- * Iff - we can not locate the Python Home, have not had a PYTHONPATH
- specified, and can't locate any Registry entries (ie, we have _nothing_
- we can assume is a good path), a default path with relative entries is
- used (eg. .\Lib;.\plat-win, etc)
-
-
- The end result of all this is:
- * When running python.exe, or any other .exe in the main Python directory
- (either an installed version, or directly from the PCbuild directory),
- the core path is deduced, and the core paths in the registry are
- ignored. Other "application paths" in the registry are always read.
-
- * When Python is hosted in another exe (different directory, embedded via
- COM, etc), the Python Home will not be deduced, so the core path from
- the registry is used. Other "application paths" in the registry are
- always read.
-
- * If Python can't find its home and there is no registry (eg, frozen
- exe, some very strange installation setup) you get a path with
- some default, but relative, paths.
-
- ---------------------------------------------------------------- */
-
-
-#include "Python.h"
-#include "osdefs.h"
-
-#ifdef MS_WINDOWS
-#include <windows.h>
-#include <tchar.h>
-#endif
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif /* HAVE_SYS_TYPES_H */
-
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif /* HAVE_SYS_STAT_H */
-
-#include <string.h>
-
-/* Search in some common locations for the associated Python libraries.
- *
- * Py_GetPath() tries to return a sensible Python module search path.
- *
- * The approach is an adaptation for Windows of the strategy used in
- * ../Modules/getpath.c; it uses the Windows Registry as one of its
- * information sources.
- */
-
-#ifndef LANDMARK
-#define LANDMARK "lib\\os.py"
-#endif
-
-static char prefix[MAXPATHLEN+1];
-static char progpath[MAXPATHLEN+1];
-static char dllpath[MAXPATHLEN+1];
-static char *module_search_path = NULL;
-
-
-static int
-is_sep(char ch) /* determine if "ch" is a separator character */
-{
-#ifdef ALTSEP
- return ch == SEP || ch == ALTSEP;
-#else
- return ch == SEP;
-#endif
-}
-
-/* assumes 'dir' null terminated in bounds. Never writes
- beyond existing terminator.
-*/
-static void
-reduce(char *dir)
-{
- size_t i = strlen(dir);
- while (i > 0 && !is_sep(dir[i]))
- --i;
- dir[i] = '\0';
-}
-
-
-static int
-exists(char *filename)
-{
- struct stat buf;
- return stat(filename, &buf) == 0;
-}
-
-/* Assumes 'filename' MAXPATHLEN+1 bytes long -
- may extend 'filename' by one character.
-*/
-static int
-ismodule(char *filename) /* Is module -- check for .pyc/.pyo too */
-{
- if (exists(filename))
- return 1;
-
- /* Check for the compiled version of prefix. */
- if (strlen(filename) < MAXPATHLEN) {
- strcat(filename, Py_OptimizeFlag ? "o" : "c");
- if (exists(filename))
- return 1;
- }
- return 0;
-}
-
-/* Add a path component, by appending stuff to buffer.
- buffer must have at least MAXPATHLEN + 1 bytes allocated, and contain a
- NUL-terminated string with no more than MAXPATHLEN characters (not counting
- the trailing NUL). It's a fatal error if it contains a string longer than
- that (callers must be careful!). If these requirements are met, it's
- guaranteed that buffer will still be a NUL-terminated string with no more
- than MAXPATHLEN characters at exit. If stuff is too long, only as much of
- stuff as fits will be appended.
-*/
-static void
-join(char *buffer, char *stuff)
-{
- size_t n, k;
- if (is_sep(stuff[0]))
- n = 0;
- else {
- n = strlen(buffer);
- if (n > 0 && !is_sep(buffer[n-1]) && n < MAXPATHLEN)
- buffer[n++] = SEP;
- }
- if (n > MAXPATHLEN)
- Py_FatalError("buffer overflow in getpathp.c's joinpath()");
- k = strlen(stuff);
- if (n + k > MAXPATHLEN)
- k = MAXPATHLEN - n;
- strncpy(buffer+n, stuff, k);
- buffer[n+k] = '\0';
-}
-
-/* gotlandmark only called by search_for_prefix, which ensures
- 'prefix' is null terminated in bounds. join() ensures
- 'landmark' can not overflow prefix if too long.
-*/
-static int
-gotlandmark(char *landmark)
-{
- int ok;
- Py_ssize_t n;
-
- n = strlen(prefix);
- join(prefix, landmark);
- ok = ismodule(prefix);
- prefix[n] = '\0';
- return ok;
-}
-
-/* assumes argv0_path is MAXPATHLEN+1 bytes long, already \0 term'd.
- assumption provided by only caller, calculate_path() */
-static int
-search_for_prefix(char *argv0_path, char *landmark)
-{
- /* Search from argv0_path, until landmark is found */
- strcpy(prefix, argv0_path);
- do {
- if (gotlandmark(landmark))
- return 1;
- reduce(prefix);
- } while (prefix[0]);
- return 0;
-}
-
-#ifdef MS_WINDOWS
-#ifdef Py_ENABLE_SHARED
-
-/* a string loaded from the DLL at startup.*/
-extern const char *PyWin_DLLVersionString;
-
-
-/* Load a PYTHONPATH value from the registry.
- Load from either HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER.
-
- Works in both Unicode and 8bit environments. Only uses the
- Ex family of functions so it also works with Windows CE.
-
- Returns NULL, or a pointer that should be freed.
-
- XXX - this code is pretty strange, as it used to also
- work on Win16, where the buffer sizes werent available
- in advance. It could be simplied now Win16/Win32s is dead!
-*/
-
-static char *
-getpythonregpath(HKEY keyBase, int skipcore)
-{
- HKEY newKey = 0;
- DWORD dataSize = 0;
- DWORD numKeys = 0;
- LONG rc;
- char *retval = NULL;
- TCHAR *dataBuf = NULL;
- static const TCHAR keyPrefix[] = _T("Software\\Python\\PythonCore\\");
- static const TCHAR keySuffix[] = _T("\\PythonPath");
- size_t versionLen;
- DWORD index;
- TCHAR *keyBuf = NULL;
- TCHAR *keyBufPtr;
- TCHAR **ppPaths = NULL;
-
- /* Tried to use sysget("winver") but here is too early :-( */
- versionLen = _tcslen(PyWin_DLLVersionString);
- /* Space for all the chars, plus one \0 */
- keyBuf = keyBufPtr = malloc(sizeof(keyPrefix) +
- sizeof(TCHAR)*(versionLen-1) +
- sizeof(keySuffix));
- if (keyBuf==NULL) goto done;
-
- memcpy(keyBufPtr, keyPrefix, sizeof(keyPrefix)-sizeof(TCHAR));
- keyBufPtr += sizeof(keyPrefix)/sizeof(TCHAR) - 1;
- memcpy(keyBufPtr, PyWin_DLLVersionString, versionLen * sizeof(TCHAR));
- keyBufPtr += versionLen;
- /* NULL comes with this one! */
- memcpy(keyBufPtr, keySuffix, sizeof(keySuffix));
- /* Open the root Python key */
- rc=RegOpenKeyEx(keyBase,
- keyBuf, /* subkey */
- 0, /* reserved */
- KEY_READ,
- &newKey);
- if (rc!=ERROR_SUCCESS) goto done;
- /* Find out how big our core buffer is, and how many subkeys we have */
- rc = RegQueryInfoKey(newKey, NULL, NULL, NULL, &numKeys, NULL, NULL,
- NULL, NULL, &dataSize, NULL, NULL);
- if (rc!=ERROR_SUCCESS) goto done;
- if (skipcore) dataSize = 0; /* Only count core ones if we want them! */
- /* Allocate a temp array of char buffers, so we only need to loop
- reading the registry once
- */
- ppPaths = malloc( sizeof(TCHAR *) * numKeys );
- if (ppPaths==NULL) goto done;
- memset(ppPaths, 0, sizeof(TCHAR *) * numKeys);
- /* Loop over all subkeys, allocating a temp sub-buffer. */
- for(index=0;index<numKeys;index++) {
- TCHAR keyBuf[MAX_PATH+1];
- HKEY subKey = 0;
- DWORD reqdSize = MAX_PATH+1;
- /* Get the sub-key name */
- DWORD rc = RegEnumKeyEx(newKey, index, keyBuf, &reqdSize,
- NULL, NULL, NULL, NULL );
- if (rc!=ERROR_SUCCESS) goto done;
- /* Open the sub-key */
- rc=RegOpenKeyEx(newKey,
- keyBuf, /* subkey */
- 0, /* reserved */
- KEY_READ,
- &subKey);
- if (rc!=ERROR_SUCCESS) goto done;
- /* Find the value of the buffer size, malloc, then read it */
- RegQueryValueEx(subKey, NULL, 0, NULL, NULL, &reqdSize);
- if (reqdSize) {
- ppPaths[index] = malloc(reqdSize);
- if (ppPaths[index]) {
- RegQueryValueEx(subKey, NULL, 0, NULL,
- (LPBYTE)ppPaths[index],
- &reqdSize);
- dataSize += reqdSize + 1; /* 1 for the ";" */
- }
- }
- RegCloseKey(subKey);
- }
-
- /* return null if no path to return */
- if (dataSize == 0) goto done;
-
- /* original datasize from RegQueryInfo doesn't include the \0 */
- dataBuf = malloc((dataSize+1) * sizeof(TCHAR));
- if (dataBuf) {
- TCHAR *szCur = dataBuf;
- DWORD reqdSize = dataSize;
- /* Copy our collected strings */
- for (index=0;index<numKeys;index++) {
- if (index > 0) {
- *(szCur++) = _T(';');
- dataSize--;
- }
- if (ppPaths[index]) {
- Py_ssize_t len = _tcslen(ppPaths[index]);
- _tcsncpy(szCur, ppPaths[index], len);
- szCur += len;
- assert(dataSize > (DWORD)len);
- dataSize -= (DWORD)len;
- }
- }
- if (skipcore)
- *szCur = '\0';
- else {
- /* If we have no values, we dont need a ';' */
- if (numKeys) {
- *(szCur++) = _T(';');
- dataSize--;
- }
- /* Now append the core path entries -
- this will include the NULL
- */
- rc = RegQueryValueEx(newKey, NULL, 0, NULL,
- (LPBYTE)szCur, &dataSize);
- }
- /* And set the result - caller must free
- If MBCS, it is fine as is. If Unicode, allocate new
- buffer and convert.
- */
-#ifdef UNICODE
- retval = (char *)malloc(reqdSize+1);
- if (retval)
- WideCharToMultiByte(CP_ACP, 0,
- dataBuf, -1, /* source */
- retval, reqdSize+1, /* dest */
- NULL, NULL);
- free(dataBuf);
-#else
- retval = dataBuf;
-#endif
- }
-done:
- /* Loop freeing my temp buffers */
- if (ppPaths) {
- for(index=0;index<numKeys;index++)
- if (ppPaths[index]) free(ppPaths[index]);
- free(ppPaths);
- }
- if (newKey)
- RegCloseKey(newKey);
- if (keyBuf)
- free(keyBuf);
- return retval;
-}
-#endif /* Py_ENABLE_SHARED */
-#endif /* MS_WINDOWS */
-
-static void
-get_progpath(void)
-{
- extern char *Py_GetProgramName(void);
- char *path = getenv("PATH");
- char *prog = Py_GetProgramName();
-
-#ifdef MS_WINDOWS
- extern HANDLE PyWin_DLLhModule;
-#ifdef UNICODE
- WCHAR wprogpath[MAXPATHLEN+1];
- /* Windows documents that GetModuleFileName() will "truncate",
- but makes no mention of the null terminator. Play it safe.
- PLUS Windows itself defines MAX_PATH as the same, but anyway...
- */
-#ifdef Py_ENABLE_SHARED
- wprogpath[MAXPATHLEN]=_T('\0');
- if (PyWin_DLLhModule &&
- GetModuleFileName(PyWin_DLLhModule, wprogpath, MAXPATHLEN)) {
- WideCharToMultiByte(CP_ACP, 0,
- wprogpath, -1,
- dllpath, MAXPATHLEN+1,
- NULL, NULL);
- }
-#else
- dllpath[0] = 0;
-#endif
- wprogpath[MAXPATHLEN]=_T('\0');
- if (GetModuleFileName(NULL, wprogpath, MAXPATHLEN)) {
- WideCharToMultiByte(CP_ACP, 0,
- wprogpath, -1,
- progpath, MAXPATHLEN+1,
- NULL, NULL);
- return;
- }
-#else
- /* static init of progpath ensures final char remains \0 */
-#ifdef Py_ENABLE_SHARED
- if (PyWin_DLLhModule)
- if (!GetModuleFileName(PyWin_DLLhModule, dllpath, MAXPATHLEN))
- dllpath[0] = 0;
-#else
- dllpath[0] = 0;
-#endif
- if (GetModuleFileName(NULL, progpath, MAXPATHLEN))
- return;
-#endif
-#endif
- if (prog == NULL || *prog == '\0')
- prog = "python";
-
- /* If there is no slash in the argv0 path, then we have to
- * assume python is on the user's $PATH, since there's no
- * other way to find a directory to start the search from. If
- * $PATH isn't exported, you lose.
- */
-#ifdef ALTSEP
- if (strchr(prog, SEP) || strchr(prog, ALTSEP))
-#else
- if (strchr(prog, SEP))
-#endif
- strncpy(progpath, prog, MAXPATHLEN);
- else if (path) {
- while (1) {
- char *delim = strchr(path, DELIM);
-
- if (delim) {
- size_t len = delim - path;
- /* ensure we can't overwrite buffer */
- len = MIN(MAXPATHLEN,len);
- strncpy(progpath, path, len);
- *(progpath + len) = '\0';
- }
- else
- strncpy(progpath, path, MAXPATHLEN);
-
- /* join() is safe for MAXPATHLEN+1 size buffer */
- join(progpath, prog);
- if (exists(progpath))
- break;
-
- if (!delim) {
- progpath[0] = '\0';
- break;
- }
- path = delim + 1;
- }
- }
- else
- progpath[0] = '\0';
-}
-
-static void
-calculate_path(void)
-{
- char argv0_path[MAXPATHLEN+1];
- char *buf;
- size_t bufsz;
- char *pythonhome = Py_GetPythonHome();
- char *envpath = Py_GETENV("PYTHONPATH");
-
-#ifdef MS_WINDOWS
- int skiphome, skipdefault;
- char *machinepath = NULL;
- char *userpath = NULL;
- char zip_path[MAXPATHLEN+1];
- size_t len;
-#endif
-
- get_progpath();
- /* progpath guaranteed \0 terminated in MAXPATH+1 bytes. */
- strcpy(argv0_path, progpath);
- reduce(argv0_path);
- if (pythonhome == NULL || *pythonhome == '\0') {
- if (search_for_prefix(argv0_path, LANDMARK))
- pythonhome = prefix;
- else
- pythonhome = NULL;
- }
- else
- strncpy(prefix, pythonhome, MAXPATHLEN);
-
- if (envpath && *envpath == '\0')
- envpath = NULL;
-
-
-#ifdef MS_WINDOWS
- /* Calculate zip archive path */
- if (dllpath[0]) /* use name of python DLL */
- strncpy(zip_path, dllpath, MAXPATHLEN);
- else /* use name of executable program */
- strncpy(zip_path, progpath, MAXPATHLEN);
- zip_path[MAXPATHLEN] = '\0';
- len = strlen(zip_path);
- if (len > 4) {
- zip_path[len-3] = 'z'; /* change ending to "zip" */
- zip_path[len-2] = 'i';
- zip_path[len-1] = 'p';
- }
- else {
- zip_path[0] = 0;
- }
-
- skiphome = pythonhome==NULL ? 0 : 1;
-#ifdef Py_ENABLE_SHARED
- machinepath = getpythonregpath(HKEY_LOCAL_MACHINE, skiphome);
- userpath = getpythonregpath(HKEY_CURRENT_USER, skiphome);
-#endif
- /* We only use the default relative PYTHONPATH if we havent
- anything better to use! */
- skipdefault = envpath!=NULL || pythonhome!=NULL || \
- machinepath!=NULL || userpath!=NULL;
-#endif
-
- /* We need to construct a path from the following parts.
- (1) the PYTHONPATH environment variable, if set;
- (2) for Win32, the zip archive file path;
- (3) for Win32, the machinepath and userpath, if set;
- (4) the PYTHONPATH config macro, with the leading "."
- of each component replaced with pythonhome, if set;
- (5) the directory containing the executable (argv0_path).
- The length calculation calculates #4 first.
- Extra rules:
- - If PYTHONHOME is set (in any way) item (3) is ignored.
- - If registry values are used, (4) and (5) are ignored.
- */
-
- /* Calculate size of return buffer */
- if (pythonhome != NULL) {
- char *p;
- bufsz = 1;
- for (p = PYTHONPATH; *p; p++) {
- if (*p == DELIM)
- bufsz++; /* number of DELIM plus one */
- }
- bufsz *= strlen(pythonhome);
- }
- else
- bufsz = 0;
- bufsz += strlen(PYTHONPATH) + 1;
- bufsz += strlen(argv0_path) + 1;
-#ifdef MS_WINDOWS
- if (userpath)
- bufsz += strlen(userpath) + 1;
- if (machinepath)
- bufsz += strlen(machinepath) + 1;
- bufsz += strlen(zip_path) + 1;
-#endif
- if (envpath != NULL)
- bufsz += strlen(envpath) + 1;
-
- module_search_path = buf = malloc(bufsz);
- if (buf == NULL) {
- /* We can't exit, so print a warning and limp along */
- fprintf(stderr, "Can't malloc dynamic PYTHONPATH.\n");
- if (envpath) {
- fprintf(stderr, "Using environment $PYTHONPATH.\n");
- module_search_path = envpath;
- }
- else {
- fprintf(stderr, "Using default static path.\n");
- module_search_path = PYTHONPATH;
- }
-#ifdef MS_WINDOWS
- if (machinepath)
- free(machinepath);
- if (userpath)
- free(userpath);
-#endif /* MS_WINDOWS */
- return;
- }
-
- if (envpath) {
- strcpy(buf, envpath);
- buf = strchr(buf, '\0');
- *buf++ = DELIM;
- }
-#ifdef MS_WINDOWS
- if (zip_path[0]) {
- strcpy(buf, zip_path);
- buf = strchr(buf, '\0');
- *buf++ = DELIM;
- }
- if (userpath) {
- strcpy(buf, userpath);
- buf = strchr(buf, '\0');
- *buf++ = DELIM;
- free(userpath);
- }
- if (machinepath) {
- strcpy(buf, machinepath);
- buf = strchr(buf, '\0');
- *buf++ = DELIM;
- free(machinepath);
- }
- if (pythonhome == NULL) {
- if (!skipdefault) {
- strcpy(buf, PYTHONPATH);
- buf = strchr(buf, '\0');
- }
- }
-#else
- if (pythonhome == NULL) {
- strcpy(buf, PYTHONPATH);
- buf = strchr(buf, '\0');
- }
-#endif /* MS_WINDOWS */
- else {
- char *p = PYTHONPATH;
- char *q;
- size_t n;
- for (;;) {
- q = strchr(p, DELIM);
- if (q == NULL)
- n = strlen(p);
- else
- n = q-p;
- if (p[0] == '.' && is_sep(p[1])) {
- strcpy(buf, pythonhome);
- buf = strchr(buf, '\0');
- p++;
- n--;
- }
- strncpy(buf, p, n);
- buf += n;
- if (q == NULL)
- break;
- *buf++ = DELIM;
- p = q+1;
- }
- }
- if (argv0_path) {
- *buf++ = DELIM;
- strcpy(buf, argv0_path);
- buf = strchr(buf, '\0');
- }
- *buf = '\0';
- /* Now to pull one last hack/trick. If sys.prefix is
- empty, then try and find it somewhere on the paths
- we calculated. We scan backwards, as our general policy
- is that Python core directories are at the *end* of
- sys.path. We assume that our "lib" directory is
- on the path, and that our 'prefix' directory is
- the parent of that.
- */
- if (*prefix=='\0') {
- char lookBuf[MAXPATHLEN+1];
- char *look = buf - 1; /* 'buf' is at the end of the buffer */
- while (1) {
- Py_ssize_t nchars;
- char *lookEnd = look;
- /* 'look' will end up one character before the
- start of the path in question - even if this
- is one character before the start of the buffer
- */
- while (look >= module_search_path && *look != DELIM)
- look--;
- nchars = lookEnd-look;
- strncpy(lookBuf, look+1, nchars);
- lookBuf[nchars] = '\0';
- /* Up one level to the parent */
- reduce(lookBuf);
- if (search_for_prefix(lookBuf, LANDMARK)) {
- break;
- }
- /* If we are out of paths to search - give up */
- if (look < module_search_path)
- break;
- look--;
- }
- }
-}
-
-
-/* External interface */
-
-char *
-Py_GetPath(void)
-{
- if (!module_search_path)
- calculate_path();
- return module_search_path;
-}
-
-char *
-Py_GetPrefix(void)
-{
- if (!module_search_path)
- calculate_path();
- return prefix;
-}
-
-char *
-Py_GetExecPrefix(void)
-{
- return Py_GetPrefix();
-}
-
-char *
-Py_GetProgramFullPath(void)
-{
- if (!module_search_path)
- calculate_path();
- return progpath;
-}
diff --git a/AppPkg/Applications/Python/Ia32/pyconfig.h b/AppPkg/Applications/Python/Ia32/pyconfig.h
index 25152ec..866c0f0 100644
--- a/AppPkg/Applications/Python/Ia32/pyconfig.h
+++ b/AppPkg/Applications/Python/Ia32/pyconfig.h
@@ -1,14 +1,25 @@
-/* @file
+/** @file
Manually generated Python Configuration file for EDK II.
-*/
+
+ Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
+ This program and the accompanying materials are licensed and made available under
+ the terms and conditions of the BSD License that accompanies this distribution.
+ The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+**/
#ifndef Py_PYCONFIG_H
#define Py_PYCONFIG_H
-#ifndef PYTHONPATH
-# define PYTHONPATH "/Efi/Python;/Efi/Python/Lib"
-#endif
+#define PLATFORM "UEFI 2.3 Ia32"
+
+//#ifndef PYTHONPATH
+//# define PYTHONPATH "/Efi/StdLib/lib/python.27;/Efi/StdLib/lib/python.27/lib-dynload"
+//#endif
/* Define if building universal (internal helper macro) */
#undef AC_APPLE_UNIVERSAL_BUILD
@@ -278,7 +289,7 @@
#undef HAVE_GETADDRINFO
/* Define to 1 if you have the `getcwd' function. */
-#undef HAVE_GETCWD
+#define HAVE_GETCWD 1
/* Define this if you have flockfile(), getc_unlocked(), and funlockfile() */
#undef HAVE_GETC_UNLOCKED
@@ -392,7 +403,7 @@
#undef HAVE_KQUEUE
/* Define to 1 if you have the <langinfo.h> header file. */
-#define HAVE_LANGINFO_H 1
+#undef HAVE_LANGINFO_H /* non-functional in EFI. */
/* Defined to enable large file support when an off_t is bigger than a long
and long long is available and at least as big as an off_t. You may need to
@@ -623,7 +634,7 @@
#undef HAVE_SETUID
/* Define to 1 if you have the `setvbuf' function. */
-#undef HAVE_SETVBUF
+#define HAVE_SETVBUF 1
/* Define to 1 if you have the <shadow.h> header file. */
#undef HAVE_SHADOW_H
@@ -656,7 +667,7 @@
#undef HAVE_SPAWN_H
/* Define if your compiler provides ssize_t */
-#undef HAVE_SSIZE_T
+#define HAVE_SSIZE_T 1
/* Define to 1 if you have the `statvfs' function. */
#undef HAVE_STATVFS
@@ -669,25 +680,25 @@
/* Define if your compiler supports variable length function prototypes (e.g.
void fprintf(FILE *, char *, ...);) *and* <stdarg.h> */
-#define HAVE_STDARG_PROTOTYPES 1
+#define HAVE_STDARG_PROTOTYPES 1
/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
+#define HAVE_STDINT_H 1
/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
+#define HAVE_STDLIB_H 1
/* Define to 1 if you have the `strdup' function. */
-#define HAVE_STRDUP 1
+#define HAVE_STRDUP 1
/* Define to 1 if you have the `strftime' function. */
-#define HAVE_STRFTIME 1
+#define HAVE_STRFTIME 1
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
+#define HAVE_STRING_H 1
/* Define to 1 if you have the <stropts.h> header file. */
#undef HAVE_STROPTS_H
@@ -762,25 +773,25 @@
#undef HAVE_SYS_NDIR_H
/* Define to 1 if you have the <sys/param.h> header file. */
-#define HAVE_SYS_PARAM_H 1
+#define HAVE_SYS_PARAM_H 1
/* Define to 1 if you have the <sys/poll.h> header file. */
-#define HAVE_SYS_POLL_H 1
+#define HAVE_SYS_POLL_H 1
/* Define to 1 if you have the <sys/resource.h> header file. */
-#define HAVE_SYS_RESOURCE_H 1
+#define HAVE_SYS_RESOURCE_H 1
/* Define to 1 if you have the <sys/select.h> header file. */
-#define HAVE_SYS_SELECT_H 1
+#define HAVE_SYS_SELECT_H 1
/* Define to 1 if you have the <sys/socket.h> header file. */
-#define HAVE_SYS_SOCKET_H 1
+#define HAVE_SYS_SOCKET_H 1
/* Define to 1 if you have the <sys/statvfs.h> header file. */
#undef HAVE_SYS_STATVFS_H
/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
+#define HAVE_SYS_STAT_H 1
/* Define to 1 if you have the <sys/termio.h> header file. */
#undef HAVE_SYS_TERMIO_H
@@ -789,10 +800,10 @@
#undef HAVE_SYS_TIMES_H
/* Define to 1 if you have the <sys/time.h> header file. */
-#define HAVE_SYS_TIME_H 1
+#define HAVE_SYS_TIME_H 1
/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
+#define HAVE_SYS_TYPES_H 1
/* Define to 1 if you have the <sys/un.h> header file. */
#undef HAVE_SYS_UN_H
@@ -810,10 +821,10 @@
#undef HAVE_TCSETPGRP
/* Define to 1 if you have the `tempnam' function. */
-#define HAVE_TEMPNAM 1
+#define HAVE_TEMPNAM 1
/* Define to 1 if you have the <termios.h> header file. */
-#define HAVE_TERMIOS_H 1
+#define HAVE_TERMIOS_H 1
/* Define to 1 if you have the <term.h> header file. */
#undef HAVE_TERM_H
@@ -831,10 +842,10 @@
#undef HAVE_TIMES
/* Define to 1 if you have the `tmpfile' function. */
-#define HAVE_TMPFILE 1
+#define HAVE_TMPFILE 1
/* Define to 1 if you have the `tmpnam' function. */
-#define HAVE_TMPNAM 1
+#define HAVE_TMPNAM 1
/* Define to 1 if you have the `tmpnam_r' function. */
#undef HAVE_TMPNAM_R
@@ -854,13 +865,13 @@
#undef HAVE_UCS4_TCL
/* Define to 1 if the system has the type `uintptr_t'. */
-#define HAVE_UINTPTR_T 1
+#define HAVE_UINTPTR_T 1
/* Define to 1 if you have the `uname' function. */
#undef HAVE_UNAME
/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
+#define HAVE_UNISTD_H 1
/* Define to 1 if you have the `unsetenv' function. */
#undef HAVE_UNSETENV
@@ -868,7 +879,7 @@
/* Define if you have a useable wchar_t type defined in wchar.h; useable means
wchar_t must be an unsigned type with at least 16 bits. (see
Include/unicodeobject.h). */
-#define HAVE_USABLE_WCHAR_T 1
+#define HAVE_USABLE_WCHAR_T 1
/* Define to 1 if you have the <util.h> header file. */
#undef HAVE_UTIL_H
@@ -922,22 +933,22 @@
#undef MVWDELCH_IS_EXPRESSION
/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
+#define PACKAGE_BUGREPORT "edk2-devel@lists.sourceforge.net"
/* Define to the full name of this package. */
-#define PACKAGE_NAME EDK II Python Package
+#define PACKAGE_NAME "EDK II Python Package"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING EDK II Python Package V0.1
+#define PACKAGE_STRING "EDK II Python Package V0.2"
/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME UDK_Python
+#define PACKAGE_TARNAME "EADK_Python"
/* Define to the home page for this package. */
-#define PACKAGE_URL http://edk2.tianocore.org/toolkit/python
+#define PACKAGE_URL "http://edk2.tianocore.org/toolkit/python"
/* Define to the version of this package. */
-#define PACKAGE_VERSION V0.1
+#define PACKAGE_VERSION "V0.2"
/* Define if POSIX semaphores aren't enabled on your system */
#define POSIX_SEMAPHORES_NOT_ENABLED 1
@@ -988,7 +999,7 @@
#define SIZEOF_FLOAT 4
/* The size of `fpos_t', as computed by sizeof. */
-#undef SIZEOF_FPOS_T
+#define SIZEOF_FPOS_T 8
/* The size of `int', as computed by sizeof. */
#define SIZEOF_INT 4
@@ -1006,7 +1017,7 @@
#define SIZEOF_OFF_T 4
/* The size of `pid_t', as computed by sizeof. */
-#undef SIZEOF_PID_T
+#define SIZEOF_PID_T 4
/* The size of `pthread_t', as computed by sizeof. */
#undef SIZEOF_PTHREAD_T
@@ -1033,7 +1044,7 @@
#define SIZEOF__BOOL 1
/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
+#define STDC_HEADERS 1
/* Define if you can safely include both <sys/select.h> and <sys/time.h>
(which you can't on SCO ODT 3.0). */
@@ -1247,11 +1258,4 @@
/* Define to empty if the keyword does not work. */
//#undef volatile
-
-/* Define the macros needed if on a UnixWare 7.x system. */
-#if defined(__USLC__) && defined(__SCO_VERSION__)
-#define STRICT_SYSV_CURSES /* Don't use ncurses extensions */
-#endif
-
#endif /*Py_PYCONFIG_H*/
-
diff --git a/AppPkg/Applications/Python/PyMod-2.7.2/Include/fileobject.h b/AppPkg/Applications/Python/PyMod-2.7.2/Include/fileobject.h
index c5d15b1..f1fdde2 100644
--- a/AppPkg/Applications/Python/PyMod-2.7.2/Include/fileobject.h
+++ b/AppPkg/Applications/Python/PyMod-2.7.2/Include/fileobject.h
@@ -1,3 +1,15 @@
+/** @file
+ File object interface.
+
+ Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
+ This program and the accompanying materials are licensed and made available under
+ the terms and conditions of the BSD License that accompanies this distribution.
+ The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+**/
/* File object interface */
diff --git a/AppPkg/Applications/Python/PyMod-2.7.2/Include/osdefs.h b/AppPkg/Applications/Python/PyMod-2.7.2/Include/osdefs.h
new file mode 100644
index 0000000..4d25a8f
--- /dev/null
+++ b/AppPkg/Applications/Python/PyMod-2.7.2/Include/osdefs.h
@@ -0,0 +1,70 @@
+/** @file
+ Operating system dependencies.
+
+ Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
+ This program and the accompanying materials are licensed and made available under
+ the terms and conditions of the BSD License that accompanies this distribution.
+ The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+**/
+#ifndef Py_OSDEFS_H
+#define Py_OSDEFS_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Mod by chrish: QNX has WATCOM, but isn't DOS */
+#if !defined(__QNX__) && !defined(EFIAPI)
+#if defined(MS_WINDOWS) || defined(__BORLANDC__) || defined(__WATCOMC__) || defined(__DJGPP__) || defined(PYOS_OS2)
+#if defined(PYOS_OS2) && defined(PYCC_GCC)
+#define MAXPATHLEN 260
+#define SEP '/'
+#define ALTSEP '\\'
+#else
+#define SEP '\\'
+#define ALTSEP '/'
+#define MAXPATHLEN 256
+#endif
+#define DELIM ';'
+#endif
+#endif
+
+#ifdef RISCOS
+#define SEP '.'
+#define MAXPATHLEN 256
+#define DELIM ','
+#endif
+
+
+/* Filename separator */
+#ifndef SEP
+#define SEP '/'
+#define ALTSEP '\\'
+#endif
+
+/* Max pathname length */
+#ifndef MAXPATHLEN
+#if defined(PATH_MAX) && PATH_MAX > 1024
+#define MAXPATHLEN PATH_MAX
+#else
+#define MAXPATHLEN 1024
+#endif
+#endif
+
+/* Search path entry delimiter */
+#ifndef DELIM
+ #ifdef EFIAPI
+ #define DELIM ';'
+ #else
+ #define DELIM ':'
+ #endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_OSDEFS_H */
diff --git a/AppPkg/Applications/Python/PyMod-2.7.2/Include/pyport.h b/AppPkg/Applications/Python/PyMod-2.7.2/Include/pyport.h
index 4c6eef0..d1494d3 100644
--- a/AppPkg/Applications/Python/PyMod-2.7.2/Include/pyport.h
+++ b/AppPkg/Applications/Python/PyMod-2.7.2/Include/pyport.h
@@ -1,3 +1,16 @@
+/** @file
+ Symbols and macros to supply platform-independent interfaces to basic
+ C language & library operations whose spellings vary across platforms.
+
+ Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
+ This program and the accompanying materials are licensed and made available under
+ the terms and conditions of the BSD License that accompanies this distribution.
+ The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+**/
#ifndef Py_PYPORT_H
#define Py_PYPORT_H
diff --git a/AppPkg/Applications/Python/PyMod-2.7.2/Modules/_sre.c b/AppPkg/Applications/Python/PyMod-2.7.2/Modules/_sre.c
index ec723cc..3bad991 100644
--- a/AppPkg/Applications/Python/PyMod-2.7.2/Modules/_sre.c
+++ b/AppPkg/Applications/Python/PyMod-2.7.2/Modules/_sre.c
@@ -2,6 +2,15 @@
* Secret Labs' Regular Expression Engine
*
* regular expression matching engine
+
+ Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
+ This program and the accompanying materials are licensed and made available under
+ the terms and conditions of the BSD License that accompanies this distribution.
+ The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
*
* partial history:
* 1999-10-24 fl created (based on existing template matcher code)
diff --git a/AppPkg/Applications/Python/PyMod-2.7.2/Modules/zlib/zutil.h b/AppPkg/Applications/Python/PyMod-2.7.2/Modules/zlib/zutil.h
index 4cee621..46f8987 100644
--- a/AppPkg/Applications/Python/PyMod-2.7.2/Modules/zlib/zutil.h
+++ b/AppPkg/Applications/Python/PyMod-2.7.2/Modules/zlib/zutil.h
@@ -1,4 +1,14 @@
/* zutil.h -- internal interface and configuration of the compression library
+
+ Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
+ This program and the accompanying materials are licensed and made available under
+ the terms and conditions of the BSD License that accompanies this distribution.
+ The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
* Copyright (C) 1995-2005 Jean-loup Gailly.
* For conditions of distribution and use, see copyright notice in zlib.h
*/
diff --git a/AppPkg/Applications/Python/PyMod-2.7.2/Objects/longobject.c b/AppPkg/Applications/Python/PyMod-2.7.2/Objects/longobject.c
index 1fbc675..2552e99 100644
--- a/AppPkg/Applications/Python/PyMod-2.7.2/Objects/longobject.c
+++ b/AppPkg/Applications/Python/PyMod-2.7.2/Objects/longobject.c
@@ -1,4 +1,15 @@
-/* Long (arbitrary precision) integer object implementation */
+/** @file
+ Long (arbitrary precision) integer object implementation.
+
+ Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
+ This program and the accompanying materials are licensed and made available under
+ the terms and conditions of the BSD License that accompanies this distribution.
+ The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+**/
/* XXX The functional organization of this file is terrible */
diff --git a/AppPkg/Applications/Python/PyMod-2.7.2/Objects/stringlib/localeutil.h b/AppPkg/Applications/Python/PyMod-2.7.2/Objects/stringlib/localeutil.h
index 25b7f6f..45c980c 100644
--- a/AppPkg/Applications/Python/PyMod-2.7.2/Objects/stringlib/localeutil.h
+++ b/AppPkg/Applications/Python/PyMod-2.7.2/Objects/stringlib/localeutil.h
@@ -1,4 +1,15 @@
-/* stringlib: locale related helpers implementation */
+/** @file
+ stringlib: locale related helpers implementation.
+
+ Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
+ This program and the accompanying materials are licensed and made available under
+ the terms and conditions of the BSD License that accompanies this distribution.
+ The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+**/
#ifndef STRINGLIB_LOCALEUTIL_H
#define STRINGLIB_LOCALEUTIL_H
diff --git a/AppPkg/Applications/Python/PyMod-2.7.2/Python/marshal.c b/AppPkg/Applications/Python/PyMod-2.7.2/Python/marshal.c
index 785f438..153bc13 100644
--- a/AppPkg/Applications/Python/PyMod-2.7.2/Python/marshal.c
+++ b/AppPkg/Applications/Python/PyMod-2.7.2/Python/marshal.c
@@ -1,8 +1,18 @@
-
-/* Write Python objects to files and read them back.
- This is intended for writing and reading compiled Python code only;
- a true persistent storage facility would be much harder, since
- it would have to take circular links and sharing into account. */
+/** @file
+ Write Python objects to files and read them back.
+ This is intended for writing and reading compiled Python code only;
+ a true persistent storage facility would be much harder, since
+ it would have to take circular links and sharing into account.
+
+ Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
+ This program and the accompanying materials are licensed and made available under
+ the terms and conditions of the BSD License that accompanies this distribution.
+ The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+**/
#define PY_SSIZE_T_CLEAN
diff --git a/AppPkg/Applications/Python/PythonCore.inf b/AppPkg/Applications/Python/PythonCore.inf
index 31e5442..d3834cc 100644
--- a/AppPkg/Applications/Python/PythonCore.inf
+++ b/AppPkg/Applications/Python/PythonCore.inf
@@ -1,8 +1,6 @@
## @file
# PythonCore.inf
#
-# Uses include files from Python-2.7.1/Include
-#
# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
@@ -15,15 +13,16 @@
##
[Defines]
- INF_VERSION = 0x00010006
- BASE_NAME = Python
- FILE_GUID = ca5627c4-51ba-4dcb-ac62-c076ebd37ddb
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 0.1
- ENTRY_POINT = ShellCEntryLib
+ INF_VERSION = 0x00010006
+ BASE_NAME = Python
+ FILE_GUID = ca5627c4-51ba-4dcb-ac62-c076ebd37ddb
+ MODULE_TYPE = UEFI_APPLICATION
+ VERSION_STRING = 0.1
+ ENTRY_POINT = ShellCEntryLib
+ PYTHON_VERSION = 2.7.2
#
-# VALID_ARCHITECTURES = IA32 X64 IPF
+# VALID_ARCHITECTURES = IA32 X64 IPF
#
[Packages]
@@ -41,194 +40,196 @@
DevShell
[Sources]
- Python-2.7.1/Modules/python.c
- Python-2.7.1/Modules/getbuildinfo.c
+#EFI -- EFI specific code
+ Efi/config.c
+ Efi/getpath.c
#Parser
- Python-2.7.1/Parser/acceler.c
- Python-2.7.1/Parser/bitset.c
- Python-2.7.1/Parser/firstsets.c
- Python-2.7.1/Parser/grammar.c
- Python-2.7.1/Parser/grammar1.c
- Python-2.7.1/Parser/listnode.c
- Python-2.7.1/Parser/metagrammar.c
- Python-2.7.1/Parser/myreadline.c
- Python-2.7.1/Parser/node.c
- Python-2.7.1/Parser/parser.c
- Python-2.7.1/Parser/parsetok.c
- Python-2.7.1/Parser/tokenizer.c
+ Python-$(PYTHON_VERSION)/Parser/acceler.c
+ Python-$(PYTHON_VERSION)/Parser/bitset.c
+ Python-$(PYTHON_VERSION)/Parser/firstsets.c
+ Python-$(PYTHON_VERSION)/Parser/grammar.c
+ Python-$(PYTHON_VERSION)/Parser/grammar1.c
+ Python-$(PYTHON_VERSION)/Parser/listnode.c
+ Python-$(PYTHON_VERSION)/Parser/metagrammar.c
+ Python-$(PYTHON_VERSION)/Parser/myreadline.c
+ Python-$(PYTHON_VERSION)/Parser/node.c
+ Python-$(PYTHON_VERSION)/Parser/parser.c
+ Python-$(PYTHON_VERSION)/Parser/parsetok.c
+ Python-$(PYTHON_VERSION)/Parser/tokenizer.c
#Python
- Python-2.7.1/Python/_warnings.c
- Python-2.7.1/Python/asdl.c
- Python-2.7.1/Python/ast.c
- Python-2.7.1/Python/bltinmodule.c
- Python-2.7.1/Python/ceval.c
- Python-2.7.1/Python/codecs.c
- Python-2.7.1/Python/compile.c
- Python-2.7.1/Python/dtoa.c
- Python-2.7.1/Python/dynload_stub.c # Change from dynload_win.c
- Python-2.7.1/Python/errors.c
- Python-2.7.1/Python/formatter_string.c
- Python-2.7.1/Python/formatter_unicode.c
- Python-2.7.1/Python/frozen.c
- Python-2.7.1/Python/future.c
- Python-2.7.1/Python/getargs.c
- Python-2.7.1/Python/getcompiler.c
- Python-2.7.1/Python/getcopyright.c
- Python-2.7.1/Python/getopt.c
- Python-2.7.1/Python/getplatform.c
- Python-2.7.1/Python/getversion.c
- Python-2.7.1/Python/graminit.c
- Python-2.7.1/Python/import.c
- Python-2.7.1/Python/importdl.c
- Python-2.7.1/Python/marshal.c
- Python-2.7.1/Python/modsupport.c
- Python-2.7.1/Python/mysnprintf.c
- Python-2.7.1/Python/mystrtoul.c
- Python-2.7.1/Python/peephole.c
- Python-2.7.1/Python/pyarena.c
- Python-2.7.1/Python/pyctype.c
- Python-2.7.1/Python/pyfpe.c
- Python-2.7.1/Python/pymath.c
- Python-2.7.1/Python/pystate.c
- Python-2.7.1/Python/pystrcmp.c
- Python-2.7.1/Python/pystrtod.c
- Python-2.7.1/Python/Python-ast.c
- Python-2.7.1/Python/pythonrun.c
- Python-2.7.1/Python/structmember.c
- Python-2.7.1/Python/symtable.c
- Python-2.7.1/Python/sysmodule.c
- Python-2.7.1/Python/traceback.c
-# Python-2.7.1/Python/thread.c
+ Python-$(PYTHON_VERSION)/Python/_warnings.c
+ Python-$(PYTHON_VERSION)/Python/asdl.c
+ Python-$(PYTHON_VERSION)/Python/ast.c
+ Python-$(PYTHON_VERSION)/Python/bltinmodule.c
+ Python-$(PYTHON_VERSION)/Python/ceval.c
+ Python-$(PYTHON_VERSION)/Python/codecs.c
+ Python-$(PYTHON_VERSION)/Python/compile.c
+ Python-$(PYTHON_VERSION)/Python/dtoa.c
+ Python-$(PYTHON_VERSION)/Python/dynload_stub.c
+ Python-$(PYTHON_VERSION)/Python/errors.c
+ Python-$(PYTHON_VERSION)/Python/formatter_string.c
+ Python-$(PYTHON_VERSION)/Python/formatter_unicode.c
+ Python-$(PYTHON_VERSION)/Python/frozen.c
+ Python-$(PYTHON_VERSION)/Python/future.c
+ Python-$(PYTHON_VERSION)/Python/getargs.c
+ Python-$(PYTHON_VERSION)/Python/getcompiler.c
+ Python-$(PYTHON_VERSION)/Python/getcopyright.c
+ Python-$(PYTHON_VERSION)/Python/getopt.c
+ Python-$(PYTHON_VERSION)/Python/getplatform.c
+ Python-$(PYTHON_VERSION)/Python/getversion.c
+ Python-$(PYTHON_VERSION)/Python/graminit.c
+ Python-$(PYTHON_VERSION)/Python/import.c
+ Python-$(PYTHON_VERSION)/Python/importdl.c
+ Python-$(PYTHON_VERSION)/Python/marshal.c
+ Python-$(PYTHON_VERSION)/Python/modsupport.c
+ Python-$(PYTHON_VERSION)/Python/mysnprintf.c
+ Python-$(PYTHON_VERSION)/Python/mystrtoul.c
+ Python-$(PYTHON_VERSION)/Python/peephole.c
+ Python-$(PYTHON_VERSION)/Python/pyarena.c
+ Python-$(PYTHON_VERSION)/Python/pyctype.c
+ Python-$(PYTHON_VERSION)/Python/pyfpe.c
+ Python-$(PYTHON_VERSION)/Python/pymath.c
+ Python-$(PYTHON_VERSION)/Python/pystate.c
+ Python-$(PYTHON_VERSION)/Python/pystrcmp.c
+ Python-$(PYTHON_VERSION)/Python/pystrtod.c
+ Python-$(PYTHON_VERSION)/Python/Python-ast.c
+ Python-$(PYTHON_VERSION)/Python/pythonrun.c
+ Python-$(PYTHON_VERSION)/Python/structmember.c
+ Python-$(PYTHON_VERSION)/Python/symtable.c
+ Python-$(PYTHON_VERSION)/Python/sysmodule.c
+ Python-$(PYTHON_VERSION)/Python/traceback.c
+# Python-$(PYTHON_VERSION)/Python/thread.c
#Modules -- See Efi/config.c
- Python-2.7.1/Modules/_bisectmodule.c
- Python-2.7.1/Modules/_codecsmodule.c
- Python-2.7.1/Modules/_collectionsmodule.c
- Python-2.7.1/Modules/_csv.c
- Python-2.7.1/Modules/_functoolsmodule.c
- Python-2.7.1/Modules/_heapqmodule.c
-# Python-2.7.1/Modules/_hotshot.c
- Python-2.7.1/Modules/_json.c
-# Python-2.7.1/Modules/_localemodule.c
-# Python-2.7.1/Modules/_lsprof.c
- Python-2.7.1/Modules/_math.c
- Python-2.7.1/Modules/_randommodule.c
- Python-2.7.1/Modules/_sre.c
- Python-2.7.1/Modules/_struct.c
-# Python-2.7.1/Modules/_weakref.c
- Python-2.7.1/Modules/arraymodule.c
-# Python-2.7.1/Modules/audioop.c
- Python-2.7.1/Modules/binascii.c
- Python-2.7.1/Modules/cPickle.c
- Python-2.7.1/Modules/cStringIO.c
-# Python-2.7.1/Modules/cmathmodule.c
-# Python-2.7.1/Modules/datetimemodule.c
- Python-2.7.1/Modules/errnomodule.c
- Python-2.7.1/Modules/future_builtins.c
- Python-2.7.1/Modules/gcmodule.c
- Python-2.7.1/Modules/imageop.c
- Python-2.7.1/Modules/itertoolsmodule.c
- Python-2.7.1/Modules/mathmodule.c
- Python-2.7.1/Modules/md5.c
- Python-2.7.1/Modules/md5module.c
-# Python-2.7.1/Modules/mmapmodule.c
- Python-2.7.1/Modules/operator.c
- Python-2.7.1/Modules/parsermodule.c
-# Python-2.7.1/Modules/posixmodule.c
- Python-2.7.1/Modules/signalmodule.c
- Python-2.7.1/Modules/shamodule.c
- Python-2.7.1/Modules/sha256module.c
- Python-2.7.1/Modules/sha512module.c
- Python-2.7.1/Modules/stropmodule.c
- Python-2.7.1/Modules/symtablemodule.c
-# Python-2.7.1/Modules/threadmodule.c
- Python-2.7.1/Modules/timemodule.c
- Python-2.7.1/Modules/xxsubtype.c
-# Python-2.7.1/Modules/zipimport.c
-# Python-2.7.1/Modules/zlibmodule.c
+ Python-$(PYTHON_VERSION)/Modules/main.c
+ Python-$(PYTHON_VERSION)/Modules/python.c
+ Python-$(PYTHON_VERSION)/Modules/getbuildinfo.c
+
+# Python-$(PYTHON_VERSION)/Modules/_bisectmodule.c
+# Python-$(PYTHON_VERSION)/Modules/_codecsmodule.c
+# Python-$(PYTHON_VERSION)/Modules/_collectionsmodule.c
+# Python-$(PYTHON_VERSION)/Modules/_csv.c
+# Python-$(PYTHON_VERSION)/Modules/_functoolsmodule.c
+# Python-$(PYTHON_VERSION)/Modules/_heapqmodule.c
+# Python-$(PYTHON_VERSION)/Modules/_json.c
+# Python-$(PYTHON_VERSION)/Modules/_math.c
+# Python-$(PYTHON_VERSION)/Modules/_randommodule.c
+# Python-$(PYTHON_VERSION)/Modules/_sre.c
+# Python-$(PYTHON_VERSION)/Modules/_struct.c
+ Python-$(PYTHON_VERSION)/Modules/arraymodule.c
+ Python-$(PYTHON_VERSION)/Modules/binascii.c
+# Python-$(PYTHON_VERSION)/Modules/cPickle.c
+# Python-$(PYTHON_VERSION)/Modules/cStringIO.c
+ Python-$(PYTHON_VERSION)/Modules/errnomodule.c
+# Python-$(PYTHON_VERSION)/Modules/future_builtins.c
+ Python-$(PYTHON_VERSION)/Modules/gcmodule.c
+# Python-$(PYTHON_VERSION)/Modules/imageop.c
+# Python-$(PYTHON_VERSION)/Modules/itertoolsmodule.c
+# Python-$(PYTHON_VERSION)/Modules/mathmodule.c
+# Python-$(PYTHON_VERSION)/Modules/md5.c
+# Python-$(PYTHON_VERSION)/Modules/md5module.c
+# Python-$(PYTHON_VERSION)/Modules/operator.c
+ Python-$(PYTHON_VERSION)/Modules/parsermodule.c
+ Python-$(PYTHON_VERSION)/Modules/signalmodule.c
+# Python-$(PYTHON_VERSION)/Modules/shamodule.c
+# Python-$(PYTHON_VERSION)/Modules/sha256module.c
+# Python-$(PYTHON_VERSION)/Modules/sha512module.c
+# Python-$(PYTHON_VERSION)/Modules/stropmodule.c
+# Python-$(PYTHON_VERSION)/Modules/symtablemodule.c
+# Python-$(PYTHON_VERSION)/Modules/timemodule.c
+# Python-$(PYTHON_VERSION)/Modules/xxsubtype.c
+
+# Python-$(PYTHON_VERSION)/Modules/_hotshot.c
+# Python-$(PYTHON_VERSION)/Modules/_localemodule.c
+# Python-$(PYTHON_VERSION)/Modules/_lsprof.c
+# Python-$(PYTHON_VERSION)/Modules/_weakref.c
+# Python-$(PYTHON_VERSION)/Modules/audioop.c
+# Python-$(PYTHON_VERSION)/Modules/cmathmodule.c
+# Python-$(PYTHON_VERSION)/Modules/datetimemodule.c
+# Python-$(PYTHON_VERSION)/Modules/mmapmodule.c
+# Python-$(PYTHON_VERSION)/Modules/posixmodule.c
+# Python-$(PYTHON_VERSION)/Modules/rotatingtree.c
+# Python-$(PYTHON_VERSION)/Modules/threadmodule.c
+# Python-$(PYTHON_VERSION)/Modules/zipimport.c
+# Python-$(PYTHON_VERSION)/Modules/zlibmodule.c
#Modules/cjkcodecs
- Python-2.7.1/Modules/cjkcodecs/multibytecodec.c
- Python-2.7.1/Modules/cjkcodecs/_codecs_cn.c
- Python-2.7.1/Modules/cjkcodecs/_codecs_hk.c
- Python-2.7.1/Modules/cjkcodecs/_codecs_iso2022.c
- Python-2.7.1/Modules/cjkcodecs/_codecs_jp.c
- Python-2.7.1/Modules/cjkcodecs/_codecs_kr.c
- Python-2.7.1/Modules/cjkcodecs/_codecs_tw.c
+# Python-$(PYTHON_VERSION)/Modules/cjkcodecs/multibytecodec.c
+# Python-$(PYTHON_VERSION)/Modules/cjkcodecs/_codecs_cn.c
+# Python-$(PYTHON_VERSION)/Modules/cjkcodecs/_codecs_hk.c
+# Python-$(PYTHON_VERSION)/Modules/cjkcodecs/_codecs_iso2022.c
+# Python-$(PYTHON_VERSION)/Modules/cjkcodecs/_codecs_jp.c
+# Python-$(PYTHON_VERSION)/Modules/cjkcodecs/_codecs_kr.c
+# Python-$(PYTHON_VERSION)/Modules/cjkcodecs/_codecs_tw.c
- Python-2.7.1/Modules/main.c
-# Python-2.7.1/Modules/rotatingtree.c
#Modules/_io
- Python-2.7.1/Modules/_io/_iomodule.c
- Python-2.7.1/Modules/_io/bufferedio.c
- Python-2.7.1/Modules/_io/bytesio.c
- Python-2.7.1/Modules/_io/fileio.c
- Python-2.7.1/Modules/_io/iobase.c
- Python-2.7.1/Modules/_io/stringio.c
- Python-2.7.1/Modules/_io/textio.c
+ Python-$(PYTHON_VERSION)/Modules/_io/_iomodule.c
+ Python-$(PYTHON_VERSION)/Modules/_io/bufferedio.c
+ Python-$(PYTHON_VERSION)/Modules/_io/bytesio.c
+ Python-$(PYTHON_VERSION)/Modules/_io/fileio.c
+ Python-$(PYTHON_VERSION)/Modules/_io/iobase.c
+ Python-$(PYTHON_VERSION)/Modules/_io/stringio.c
+ Python-$(PYTHON_VERSION)/Modules/_io/textio.c
#Modules/zlib
-# Python-2.7.1/Modules/zlib/adler32.c
-# Python-2.7.1/Modules/zlib/compress.c
-# Python-2.7.1/Modules/zlib/crc32.c
-# Python-2.7.1/Modules/zlib/deflate.c
-# Python-2.7.1/Modules/zlib/gzio.c
-# Python-2.7.1/Modules/zlib/infback.c
-# Python-2.7.1/Modules/zlib/inffast.c
-# Python-2.7.1/Modules/zlib/inflate.c
-# Python-2.7.1/Modules/zlib/inftrees.c
-# Python-2.7.1/Modules/zlib/trees.c
-# Python-2.7.1/Modules/zlib/uncompr.c
-# Python-2.7.1/Modules/zlib/zutil.c
+# Python-$(PYTHON_VERSION)/Modules/zlib/adler32.c
+# Python-$(PYTHON_VERSION)/Modules/zlib/compress.c
+# Python-$(PYTHON_VERSION)/Modules/zlib/crc32.c
+# Python-$(PYTHON_VERSION)/Modules/zlib/deflate.c
+# Python-$(PYTHON_VERSION)/Modules/zlib/gzio.c
+# Python-$(PYTHON_VERSION)/Modules/zlib/infback.c
+# Python-$(PYTHON_VERSION)/Modules/zlib/inffast.c
+# Python-$(PYTHON_VERSION)/Modules/zlib/inflate.c
+# Python-$(PYTHON_VERSION)/Modules/zlib/inftrees.c
+# Python-$(PYTHON_VERSION)/Modules/zlib/trees.c
+# Python-$(PYTHON_VERSION)/Modules/zlib/uncompr.c
+# Python-$(PYTHON_VERSION)/Modules/zlib/zutil.c
#Objects
- Python-2.7.1/Objects/abstract.c
- Python-2.7.1/Objects/boolobject.c
- Python-2.7.1/Objects/bufferobject.c
- Python-2.7.1/Objects/bytearrayobject.c
- Python-2.7.1/Objects/bytes_methods.c
- Python-2.7.1/Objects/capsule.c
- Python-2.7.1/Objects/cellobject.c
- Python-2.7.1/Objects/classobject.c
- Python-2.7.1/Objects/cobject.c
- Python-2.7.1/Objects/codeobject.c
- Python-2.7.1/Objects/complexobject.c
- Python-2.7.1/Objects/descrobject.c
- Python-2.7.1/Objects/dictobject.c
- Python-2.7.1/Objects/enumobject.c
- Python-2.7.1/Objects/exceptions.c
- Python-2.7.1/Objects/fileobject.c
- Python-2.7.1/Objects/floatobject.c
- Python-2.7.1/Objects/frameobject.c
- Python-2.7.1/Objects/funcobject.c
- Python-2.7.1/Objects/genobject.c
- Python-2.7.1/Objects/intobject.c
- Python-2.7.1/Objects/iterobject.c
- Python-2.7.1/Objects/listobject.c
- Python-2.7.1/Objects/longobject.c
- Python-2.7.1/Objects/memoryobject.c
- Python-2.7.1/Objects/methodobject.c
- Python-2.7.1/Objects/moduleobject.c
- Python-2.7.1/Objects/object.c
- Python-2.7.1/Objects/obmalloc.c
- Python-2.7.1/Objects/rangeobject.c
- Python-2.7.1/Objects/setobject.c
- Python-2.7.1/Objects/sliceobject.c
- Python-2.7.1/Objects/stringobject.c
- Python-2.7.1/Objects/structseq.c
- Python-2.7.1/Objects/tupleobject.c
- Python-2.7.1/Objects/typeobject.c
- Python-2.7.1/Objects/unicodectype.c
- Python-2.7.1/Objects/unicodeobject.c
- Python-2.7.1/Objects/weakrefobject.c
-
-#EFI -- EFI specific code
- Efi/config.c
- Efi/getpathp.c
+ Python-$(PYTHON_VERSION)/Objects/abstract.c
+ Python-$(PYTHON_VERSION)/Objects/boolobject.c
+ Python-$(PYTHON_VERSION)/Objects/bufferobject.c
+ Python-$(PYTHON_VERSION)/Objects/bytearrayobject.c
+ Python-$(PYTHON_VERSION)/Objects/bytes_methods.c
+ Python-$(PYTHON_VERSION)/Objects/capsule.c
+ Python-$(PYTHON_VERSION)/Objects/cellobject.c
+ Python-$(PYTHON_VERSION)/Objects/classobject.c
+ Python-$(PYTHON_VERSION)/Objects/cobject.c
+ Python-$(PYTHON_VERSION)/Objects/codeobject.c
+ Python-$(PYTHON_VERSION)/Objects/complexobject.c
+ Python-$(PYTHON_VERSION)/Objects/descrobject.c
+ Python-$(PYTHON_VERSION)/Objects/dictobject.c
+ Python-$(PYTHON_VERSION)/Objects/enumobject.c
+ Python-$(PYTHON_VERSION)/Objects/exceptions.c
+ Python-$(PYTHON_VERSION)/Objects/fileobject.c
+ Python-$(PYTHON_VERSION)/Objects/floatobject.c
+ Python-$(PYTHON_VERSION)/Objects/frameobject.c
+ Python-$(PYTHON_VERSION)/Objects/funcobject.c
+ Python-$(PYTHON_VERSION)/Objects/genobject.c
+ Python-$(PYTHON_VERSION)/Objects/intobject.c
+ Python-$(PYTHON_VERSION)/Objects/iterobject.c
+ Python-$(PYTHON_VERSION)/Objects/listobject.c
+ Python-$(PYTHON_VERSION)/Objects/longobject.c
+ Python-$(PYTHON_VERSION)/Objects/memoryobject.c
+ Python-$(PYTHON_VERSION)/Objects/methodobject.c
+ Python-$(PYTHON_VERSION)/Objects/moduleobject.c
+ Python-$(PYTHON_VERSION)/Objects/object.c
+ Python-$(PYTHON_VERSION)/Objects/obmalloc.c
+ Python-$(PYTHON_VERSION)/Objects/rangeobject.c
+ Python-$(PYTHON_VERSION)/Objects/setobject.c
+ Python-$(PYTHON_VERSION)/Objects/sliceobject.c
+ Python-$(PYTHON_VERSION)/Objects/stringobject.c
+ Python-$(PYTHON_VERSION)/Objects/structseq.c
+ Python-$(PYTHON_VERSION)/Objects/tupleobject.c
+ Python-$(PYTHON_VERSION)/Objects/typeobject.c
+ Python-$(PYTHON_VERSION)/Objects/unicodectype.c
+ Python-$(PYTHON_VERSION)/Objects/unicodeobject.c
+ Python-$(PYTHON_VERSION)/Objects/weakrefobject.c
[BuildOptions]
- MSFT:*_*_*_CC_FLAGS = /Oi- /wd4018 /wd4054 /wd4055 /wd4101 /wd4131 /wd4152 /wd4204 /wd4210 /wd4244 /wd4267 /wd4305 /wd4310 /wd4389 /wd4701 /wd4702 /wd4706 /I%WORKSPACE%\AppPkg\Applications\Python\Ia32 /I%WORKSPACE%\AppPkg\Applications\Python\Python-2.7.1\Include
+ MSFT:*_*_IA32_CC_FLAGS = /Oi- /wd4018 /wd4054 /wd4055 /wd4101 /wd4131 /wd4152 /wd4204 /wd4210 /wd4244 /wd4267 /wd4305 /wd4310 /wd4389 /wd4701 /wd4702 /wd4706 /I%WORKSPACE%\AppPkg\Applications\Python\Ia32 /I%WORKSPACE%\AppPkg\Applications\Python\Efi /I%WORKSPACE%\AppPkg\Applications\Python\Python-$(PYTHON_VERSION)\Include
+ MSFT:*_*_X64_CC_FLAGS = /Oi- /wd4018 /wd4054 /wd4055 /wd4101 /wd4131 /wd4152 /wd4204 /wd4210 /wd4244 /wd4267 /wd4305 /wd4310 /wd4389 /wd4701 /wd4702 /wd4706 /I%WORKSPACE%\AppPkg\Applications\Python\X64 /I%WORKSPACE%\AppPkg\Applications\Python\Efi /I%WORKSPACE%\AppPkg\Applications\Python\Python-$(PYTHON_VERSION)\Include
GCC:*_*_IPF_SYMRENAME_FLAGS = --redefine-syms=$WORKSPACE/StdLib/GccSymRename.txt
diff --git a/AppPkg/Applications/Python/X64/pyconfig.h b/AppPkg/Applications/Python/X64/pyconfig.h
index cad7132..41b0682 100644
--- a/AppPkg/Applications/Python/X64/pyconfig.h
+++ b/AppPkg/Applications/Python/X64/pyconfig.h
@@ -1,9 +1,25 @@
-/* pyconfig.h.in. Generated from configure.in by autoheader. */
+/** @file
+ Manually generated Python Configuration file for EDK II.
+
+ Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
+ This program and the accompanying materials are licensed and made available under
+ the terms and conditions of the BSD License that accompanies this distribution.
+ The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+**/
#ifndef Py_PYCONFIG_H
#define Py_PYCONFIG_H
+#define PLATFORM "UEFI 2.3 X64"
+
+//#ifndef PYTHONPATH
+//# define PYTHONPATH "/Efi/StdLib/lib/python.27;/Efi/StdLib/lib/python.27/lib-dynload"
+//#endif
/* Define if building universal (internal helper macro) */
#undef AC_APPLE_UNIVERSAL_BUILD
@@ -89,16 +105,16 @@
#undef HAVE_BROKEN_POLL
/* Define if the Posix semaphores do not work on your system */
-#define HAVE_BROKEN_POSIX_SEMAPHORES
+#define HAVE_BROKEN_POSIX_SEMAPHORES 1
/* Define if pthread_sigmask() does not work on your system. */
-#define HAVE_BROKEN_PTHREAD_SIGMASK
+#define HAVE_BROKEN_PTHREAD_SIGMASK 1
/* define to 1 if your sem_getvalue is broken. */
-#undef HAVE_BROKEN_SEM_GETVALUE
+#define HAVE_BROKEN_SEM_GETVALUE 1
/* Define this if you have the type _Bool. */
-#define HAVE_C99_BOOL
+#define HAVE_C99_BOOL 1
/* Define to 1 if you have the `chflags' function. */
#undef HAVE_CHFLAGS
@@ -110,7 +126,7 @@
#undef HAVE_CHROOT
/* Define to 1 if you have the `clock' function. */
-#define HAVE_CLOCK
+#define HAVE_CLOCK 1
/* Define to 1 if you have the `confstr' function. */
#undef HAVE_CONFSTR
@@ -119,7 +135,7 @@
#undef HAVE_CONIO_H
/* Define to 1 if you have the `copysign' function. */
-#define HAVE_COPYSIGN 1
+#undef HAVE_COPYSIGN
/* Define to 1 if you have the `ctermid' function. */
#undef HAVE_CTERMID
@@ -262,17 +278,21 @@
#undef HAVE_GAMMA
/* Define if we can use gcc inline assembler to get and set x87 control word
- */
-#undef HAVE_GCC_ASM_FOR_X87
+*/
+#if defined(__GNUC__)
+ #define HAVE_GCC_ASM_FOR_X87 1
+#else
+ #undef HAVE_GCC_ASM_FOR_X87
+#endif
/* Define if you have the getaddrinfo function. */
#undef HAVE_GETADDRINFO
/* Define to 1 if you have the `getcwd' function. */
-#undef HAVE_GETCWD
+#define HAVE_GETCWD 1
/* Define this if you have flockfile(), getc_unlocked(), and funlockfile() */
-#define HAVE_GETC_UNLOCKED
+#undef HAVE_GETC_UNLOCKED
/* Define to 1 if you have the `getgroups' function. */
#undef HAVE_GETGROUPS
@@ -359,10 +379,10 @@
#undef HAVE_IEEEFP_H
/* Define if you have the 'inet_aton' function. */
-#undef HAVE_INET_ATON
+#define HAVE_INET_ATON 1
/* Define if you have the 'inet_pton' function. */
-#undef HAVE_INET_PTON
+#define HAVE_INET_PTON 1
/* Define to 1 if you have the `initgroups' function. */
#undef HAVE_INITGROUPS
@@ -383,7 +403,7 @@
#undef HAVE_KQUEUE
/* Define to 1 if you have the <langinfo.h> header file. */
-#define HAVE_LANGINFO_H 1
+#undef HAVE_LANGINFO_H /* non-functional in EFI. */
/* Defined to enable large file support when an off_t is bigger than a long
and long long is available and at least as big as an off_t. You may need to
@@ -437,10 +457,10 @@
#undef HAVE_LOG1P
/* Define this if you have the type long double. */
-#define HAVE_LONG_DOUBLE
+#undef HAVE_LONG_DOUBLE
/* Define this if you have the type long long. */
-#define HAVE_LONG_LONG
+#define HAVE_LONG_LONG 1
/* Define to 1 if you have the `lstat' function. */
#define HAVE_LSTAT 1
@@ -497,13 +517,13 @@
#undef HAVE_POLL
/* Define to 1 if you have the <poll.h> header file. */
-#undef HAVE_POLL_H
+#define HAVE_POLL_H 1
/* Define to 1 if you have the <process.h> header file. */
#undef HAVE_PROCESS_H
/* Define if your compiler supports function prototype */
-#define HAVE_PROTOTYPES
+#define HAVE_PROTOTYPES 1
/* Define if you have GNU PTH threads. */
#undef HAVE_PTH
@@ -614,7 +634,7 @@
#undef HAVE_SETUID
/* Define to 1 if you have the `setvbuf' function. */
-#undef HAVE_SETVBUF
+#define HAVE_SETVBUF 1
/* Define to 1 if you have the <shadow.h> header file. */
#undef HAVE_SHADOW_H
@@ -647,7 +667,7 @@
#undef HAVE_SPAWN_H
/* Define if your compiler provides ssize_t */
-#undef HAVE_SSIZE_T
+#define HAVE_SSIZE_T 1
/* Define to 1 if you have the `statvfs' function. */
#undef HAVE_STATVFS
@@ -660,7 +680,7 @@
/* Define if your compiler supports variable length function prototypes (e.g.
void fprintf(FILE *, char *, ...);) *and* <stdarg.h> */
-#define HAVE_STDARG_PROTOTYPES
+#define HAVE_STDARG_PROTOTYPES 1
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
@@ -756,16 +776,16 @@
#define HAVE_SYS_PARAM_H 1
/* Define to 1 if you have the <sys/poll.h> header file. */
-#undef HAVE_SYS_POLL_H
+#define HAVE_SYS_POLL_H 1
/* Define to 1 if you have the <sys/resource.h> header file. */
#define HAVE_SYS_RESOURCE_H 1
/* Define to 1 if you have the <sys/select.h> header file. */
-#undef HAVE_SYS_SELECT_H
+#define HAVE_SYS_SELECT_H 1
/* Define to 1 if you have the <sys/socket.h> header file. */
-#undef HAVE_SYS_SOCKET_H
+#define HAVE_SYS_SOCKET_H 1
/* Define to 1 if you have the <sys/statvfs.h> header file. */
#undef HAVE_SYS_STATVFS_H
@@ -851,7 +871,7 @@
#undef HAVE_UNAME
/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
+#define HAVE_UNISTD_H 1
/* Define to 1 if you have the `unsetenv' function. */
#undef HAVE_UNSETENV
@@ -859,7 +879,7 @@
/* Define if you have a useable wchar_t type defined in wchar.h; useable means
wchar_t must be an unsigned type with at least 16 bits. (see
Include/unicodeobject.h). */
-#define HAVE_USABLE_WCHAR_T
+#define HAVE_USABLE_WCHAR_T 1
/* Define to 1 if you have the <util.h> header file. */
#undef HAVE_UTIL_H
@@ -880,14 +900,14 @@
#undef HAVE_WAITPID
/* Define if the compiler provides a wchar.h header file. */
-#define HAVE_WCHAR_H
+#define HAVE_WCHAR_H 1
/* Define to 1 if you have the `wcscoll' function. */
-#undef HAVE_WCSCOLL
+#define HAVE_WCSCOLL 1
/* Define if tzset() actually switches the local timezone in a meaningful way.
*/
-#define HAVE_WORKING_TZSET
+#undef HAVE_WORKING_TZSET
/* Define if the zlib library has inflateCopy */
#undef HAVE_ZLIB_COPY
@@ -913,25 +933,25 @@
#undef MVWDELCH_IS_EXPRESSION
/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
+#define PACKAGE_BUGREPORT "edk2-devel@lists.sourceforge.net"
/* Define to the full name of this package. */
-#define PACKAGE_NAME EDK II Python Package
+#define PACKAGE_NAME "EDK II Python Package"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING EDK II Python Package V0.1
+#define PACKAGE_STRING "EDK II Python Package V0.2"
/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME UDK_Python
+#define PACKAGE_TARNAME "EADK_Python"
/* Define to the home page for this package. */
-#define PACKAGE_URL http://edk2.tianocore.org/toolkit/python
+#define PACKAGE_URL "http://edk2.tianocore.org/toolkit/python"
/* Define to the version of this package. */
-#undef PACKAGE_VERSION V0.1
+#define PACKAGE_VERSION "V0.2"
/* Define if POSIX semaphores aren't enabled on your system */
-#define POSIX_SEMAPHORES_NOT_ENABLED
+#define POSIX_SEMAPHORES_NOT_ENABLED 1
/* Defined if PTHREAD_SCOPE_SYSTEM supported. */
#undef PTHREAD_SYSTEM_SCHED_SUPPORTED
@@ -940,13 +960,13 @@
#undef PYLONG_BITS_IN_DIGIT
/* Define to printf format modifier for long long type */
-#undef PY_FORMAT_LONG_LONG
+#define PY_FORMAT_LONG_LONG "ll"
/* Define to printf format modifier for Py_ssize_t */
-#undef PY_FORMAT_SIZE_T
+#define PY_FORMAT_SIZE_T "z"
/* Define as the integral type used for Unicode representation. */
-#undef PY_UNICODE_TYPE
+#define PY_UNICODE_TYPE wchar_t
/* Define if you want to build an interpreter with many run-time checks. */
#undef Py_DEBUG
@@ -973,55 +993,59 @@
#undef SIGNED_RIGHT_SHIFT_ZERO_FILLS
/* The size of `double', as computed by sizeof. */
-#undef SIZEOF_DOUBLE
+#define SIZEOF_DOUBLE 8
/* The size of `float', as computed by sizeof. */
-#undef SIZEOF_FLOAT
+#define SIZEOF_FLOAT 4
/* The size of `fpos_t', as computed by sizeof. */
-#undef SIZEOF_FPOS_T
+#define SIZEOF_FPOS_T 8
/* The size of `int', as computed by sizeof. */
-#undef SIZEOF_INT
+#define SIZEOF_INT 4
/* The size of `long', as computed by sizeof. */
-#undef SIZEOF_LONG
+#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
+#define SIZEOF_LONG 4
+#else
+#define SIZEOF_LONG 8
+#endif
/* The size of `long double', as computed by sizeof. */
#undef SIZEOF_LONG_DOUBLE
/* The size of `long long', as computed by sizeof. */
-#undef SIZEOF_LONG_LONG
+#define SIZEOF_LONG_LONG 8
/* The size of `off_t', as computed by sizeof. */
-#undef SIZEOF_OFF_T
+#define SIZEOF_OFF_T 8
/* The size of `pid_t', as computed by sizeof. */
-#undef SIZEOF_PID_T
+#define SIZEOF_PID_T 4
/* The size of `pthread_t', as computed by sizeof. */
#undef SIZEOF_PTHREAD_T
/* The size of `short', as computed by sizeof. */
-#undef SIZEOF_SHORT
+#define SIZEOF_SHORT 2
/* The size of `size_t', as computed by sizeof. */
-#undef SIZEOF_SIZE_T
+#define SIZEOF_SIZE_T 8
/* The size of `time_t', as computed by sizeof. */
-#undef SIZEOF_TIME_T
+#define SIZEOF_TIME_T 4
/* The size of `uintptr_t', as computed by sizeof. */
-#undef SIZEOF_UINTPTR_T
+#define SIZEOF_UINTPTR_T 8
/* The size of `void *', as computed by sizeof. */
-#undef SIZEOF_VOID_P
+#define SIZEOF_VOID_P 8
/* The size of `wchar_t', as computed by sizeof. */
-#undef SIZEOF_WCHAR_T
+#define SIZEOF_WCHAR_T 2
/* The size of `_Bool', as computed by sizeof. */
-#undef SIZEOF__BOOL
+#define SIZEOF__BOOL 1
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
@@ -1190,59 +1214,52 @@
#undef __EXTENSIONS__
/* Define to 'long' if <time.h> doesn't define. */
-#undef clock_t
+//#undef clock_t
/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
+//#undef const
/* Define to `int' if <sys/types.h> doesn't define. */
-#undef gid_t
+//#undef gid_t
/* Define to the type of a signed integer type of width exactly 32 bits if
such a type exists and the standard includes do not define it. */
-#undef int32_t
+//#undef int32_t
/* Define to the type of a signed integer type of width exactly 64 bits if
such a type exists and the standard includes do not define it. */
-#undef int64_t
+//#undef int64_t
/* Define to `int' if <sys/types.h> does not define. */
-#undef mode_t
+//#undef mode_t
/* Define to `long int' if <sys/types.h> does not define. */
-#undef off_t
+//#undef off_t
/* Define to `int' if <sys/types.h> does not define. */
-#undef pid_t
+//#undef pid_t
/* Define to empty if the keyword does not work. */
-#undef signed
+//#undef signed
/* Define to `unsigned int' if <sys/types.h> does not define. */
-#undef size_t
+//#undef size_t
/* Define to `int' if <sys/socket.h> does not define. */
-#undef socklen_t
+//#undef socklen_t
/* Define to `int' if <sys/types.h> doesn't define. */
-#undef uid_t
+//#undef uid_t
/* Define to the type of an unsigned integer type of width exactly 32 bits if
such a type exists and the standard includes do not define it. */
-#undef uint32_t
+//#undef uint32_t
/* Define to the type of an unsigned integer type of width exactly 64 bits if
such a type exists and the standard includes do not define it. */
-#undef uint64_t
+//#undef uint64_t
/* Define to empty if the keyword does not work. */
-#undef volatile
-
-
-/* Define the macros needed if on a UnixWare 7.x system. */
-#if defined(__USLC__) && defined(__SCO_VERSION__)
-#define STRICT_SYSV_CURSES /* Don't use ncurses extensions */
-#endif
+//#undef volatile
#endif /*Py_PYCONFIG_H*/
-
diff --git a/StdLib/Include/sys/EfiSysCall.h b/StdLib/Include/sys/EfiSysCall.h
index bfbd14e..1d01328 100644
--- a/StdLib/Include/sys/EfiSysCall.h
+++ b/StdLib/Include/sys/EfiSysCall.h
@@ -291,7 +291,7 @@ __BEGIN_DECLS
@return
**/
- int stat (const char *, void *);
+ int stat (const char *, struct stat *);
/**
@param[in]
diff --git a/StdLib/Include/unistd.h b/StdLib/Include/unistd.h
index 2134f15..4d738c6 100644
--- a/StdLib/Include/unistd.h
+++ b/StdLib/Include/unistd.h
@@ -39,6 +39,7 @@ pid_t tcgetpgrp(int);
char *getpass(const char *);
int usleep(useconds_t);
unsigned int sleep(unsigned int);
+char *basename(char *path);
// Networking
long gethostid(void);
diff --git a/StdLib/LibC/Uefi/Devices/UefiShell/daShell.c b/StdLib/LibC/Uefi/Devices/UefiShell/daShell.c
index d0abb8d..de14ef3 100644
--- a/StdLib/LibC/Uefi/Devices/UefiShell/daShell.c
+++ b/StdLib/LibC/Uefi/Devices/UefiShell/daShell.c
@@ -304,14 +304,14 @@ da_ShellStat(
}
else {
Status = RETURN_DEVICE_ERROR;
+ errno = EIO;
}
- errno = EFI2errno(Status);
EFIerrno = Status;
if(FileInfo != NULL) {
FreePool(FileInfo); // Release the buffer allocated by the GetInfo function
}
- return errno? -1 : 0;
+ return (Status == RETURN_SUCCESS)? 0 : -1;
}
static
diff --git a/StdLib/LibC/Uefi/SysCalls.c b/StdLib/LibC/Uefi/SysCalls.c
index d52249b..b5079e2 100644
--- a/StdLib/LibC/Uefi/SysCalls.c
+++ b/StdLib/LibC/Uefi/SysCalls.c
@@ -923,7 +923,7 @@ fstat (int fd, struct stat *statbuf)
identify the error.
**/
int
-stat (const char *path, void *statbuf)
+stat (const char *path, struct stat *statbuf)
{
int fd;
int retval = -1;
diff --git a/StdLib/LibC/Uefi/compat.c b/StdLib/LibC/Uefi/compat.c
index 7f250d1..8ce4783 100644
--- a/StdLib/LibC/Uefi/compat.c
+++ b/StdLib/LibC/Uefi/compat.c
@@ -94,6 +94,7 @@
#include <LibConfig.h>
#include <string.h>
#include <fcntl.h>
+#include <sys/syslimits.h>
#ifndef HAVE_GETOPT
char *optarg;
@@ -138,11 +139,7 @@ getopt(int argc, char **argv, char *args)
}
#endif
-#ifdef WIN32
#define ISPATHSEPARATOR(x) ((x == '/') || (x == '\\'))
-#else
-#define ISPATHSEPARATOR(x) (x == '/')
-#endif
#ifndef HAVE_BASENAME
#ifndef PATH_MAX
diff --git a/StdLib/StdLib.inc b/StdLib/StdLib.inc
index 5446ecd..c2cf128 100644
--- a/StdLib/StdLib.inc
+++ b/StdLib/StdLib.inc
@@ -4,6 +4,15 @@
#
# The including DSC file must DEFINE the EMULATE macro if
# the application is to be run in an emulation environment.
+#
+# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
+# This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
################################################################
##########
@@ -53,10 +62,12 @@
!ifndef $(EMULATE)
# Not running in an Emulation Environment
[LibraryClasses.IA32.UEFI_APPLICATION]
- TimerLib|PerformancePkg/Library/DxeTscTimerLib/DxeTscTimerLib.inf
+ TimerLib|MdePkg/Library/BaseTimerLibNullTemplate/BaseTimerLibNullTemplate.inf
+# TimerLib|PerformancePkg/Library/DxeTscTimerLib/DxeTscTimerLib.inf
[LibraryClasses.X64.UEFI_APPLICATION]
- TimerLib|PerformancePkg/Library/DxeTscTimerLib/DxeTscTimerLib.inf
+ TimerLib|MdePkg/Library/BaseTimerLibNullTemplate/BaseTimerLibNullTemplate.inf
+# TimerLib|PerformancePkg/Library/DxeTscTimerLib/DxeTscTimerLib.inf
[LibraryClasses.IPF.UEFI_APPLICATION]
PalLib|MdePkg/Library/UefiPalLib/UefiPalLib.inf
@@ -108,9 +119,9 @@
!ifndef $(EMULATE)
# These Build Options are used when building the Standard Libraries to be run
# on real hardware.
- INTEL:*_*_*_CC_FLAGS = /Qfreestanding
- MSFT:*_*_*_CC_FLAGS = /X /Zc:wchar_t
- GCC:*_*_*_CC_FLAGS = -nostdinc -nostdlib
+ INTEL:*_*_*_CC_FLAGS = /Qfreestanding
+ MSFT:*_*_*_CC_FLAGS = /X /Zc:wchar_t /D NT32dvm
+ GCC:*_*_*_CC_FLAGS = -nostdinc -nostdlib
RVCT:*_*_*_CC_FLAGS = --library_interface=none -J$(WORKSPACE)/StdLib/Include -J$(WORKSPACE)/StdLib/Include/Arm -DNT32dvm
ARMGCC:*_*_*_CC_FLAGS = -nostdinc -nostdlib -Wno-unknown-pragmas -Wno-unused -Wno-format-zero-length -DNT32dvm
@@ -123,5 +134,3 @@
MSFT:*_*_IA32_CC_FLAGS = /Od /D NT32dvm
GCC:*_*_IA32_CC_FLAGS = -O0 -DNT32dvm
!endif
-
-