From 41b152c5f6ec3a5a6e51b4f8f0f90291a5895edc Mon Sep 17 00:00:00 2001 From: darylm503 Date: Mon, 3 Oct 2011 18:54:12 +0000 Subject: [PATCH] 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 --- AppPkg/Applications/Python/Efi/config.c | 59 +- AppPkg/Applications/Python/Efi/getpath.c | 788 ++++++++++++++++++ AppPkg/Applications/Python/Efi/getpathp.c | 714 ---------------- AppPkg/Applications/Python/Ia32/pyconfig.h | 96 ++- .../Python/PyMod-2.7.2/Include/fileobject.h | 12 + .../Python/PyMod-2.7.2/Include/osdefs.h | 70 ++ .../Python/PyMod-2.7.2/Include/pyport.h | 13 + .../Python/PyMod-2.7.2/Modules/_sre.c | 9 + .../Python/PyMod-2.7.2/Modules/zlib/zutil.h | 10 + .../Python/PyMod-2.7.2/Objects/longobject.c | 13 +- .../Objects/stringlib/localeutil.h | 13 +- .../Python/PyMod-2.7.2/Python/marshal.c | 20 +- AppPkg/Applications/Python/PythonCore.inf | 365 ++++---- AppPkg/Applications/Python/X64/pyconfig.h | 169 ++-- StdLib/Include/sys/EfiSysCall.h | 2 +- StdLib/Include/unistd.h | 1 + StdLib/LibC/Uefi/Devices/UefiShell/daShell.c | 4 +- StdLib/LibC/Uefi/SysCalls.c | 2 +- StdLib/LibC/Uefi/compat.c | 5 +- StdLib/StdLib.inc | 23 +- 20 files changed, 1328 insertions(+), 1060 deletions(-) create mode 100644 AppPkg/Applications/Python/Efi/getpath.c delete mode 100644 AppPkg/Applications/Python/Efi/getpathp.c create mode 100644 AppPkg/Applications/Python/PyMod-2.7.2/Include/osdefs.h diff --git a/AppPkg/Applications/Python/Efi/config.c b/AppPkg/Applications/Python/Efi/config.c index 52c7795446..98e7e2a31e 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.
+ 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 0000000000..ba837bf522 --- /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.
+ 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 +#include + +#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 \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 \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 [%c]\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 9f78806611..0000000000 --- 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 -#include -#endif - -#ifdef HAVE_SYS_TYPES_H -#include -#endif /* HAVE_SYS_TYPES_H */ - -#ifdef HAVE_SYS_STAT_H -#include -#endif /* HAVE_SYS_STAT_H */ - -#include - -/* 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 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 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 25152ec032..866c0f0b13 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.
+ 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 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 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* */ -#define HAVE_STDARG_PROTOTYPES 1 +#define HAVE_STDARG_PROTOTYPES 1 /* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 +#define HAVE_STDINT_H 1 /* Define to 1 if you have the 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 header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 +#define HAVE_STRING_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_STROPTS_H @@ -762,25 +773,25 @@ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ -#define HAVE_SYS_PARAM_H 1 +#define HAVE_SYS_PARAM_H 1 /* Define to 1 if you have the header file. */ -#define HAVE_SYS_POLL_H 1 +#define HAVE_SYS_POLL_H 1 /* Define to 1 if you have the header file. */ -#define HAVE_SYS_RESOURCE_H 1 +#define HAVE_SYS_RESOURCE_H 1 /* Define to 1 if you have the header file. */ -#define HAVE_SYS_SELECT_H 1 +#define HAVE_SYS_SELECT_H 1 /* Define to 1 if you have the header file. */ -#define HAVE_SYS_SOCKET_H 1 +#define HAVE_SYS_SOCKET_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STATVFS_H /* Define to 1 if you have the header file. */ -#define HAVE_SYS_STAT_H 1 +#define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TERMIO_H @@ -789,10 +800,10 @@ #undef HAVE_SYS_TIMES_H /* Define to 1 if you have the header file. */ -#define HAVE_SYS_TIME_H 1 +#define HAVE_SYS_TIME_H 1 /* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 +#define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the 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 header file. */ -#define HAVE_TERMIOS_H 1 +#define HAVE_TERMIOS_H 1 /* Define to 1 if you have the 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 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 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 and (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 c5d15b1352..f1fdde2449 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.
+ 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 0000000000..4d25a8faa2 --- /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.
+ 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 4c6eef0aef..d1494d3971 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.
+ 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 ec723cc675..3bad9910d2 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.
+ 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 4cee6218b8..46f89878d6 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.
+ 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 1fbc675f13..2552e99ddb 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.
+ 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 25b7f6fbd7..45c980c6a8 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.
+ 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 785f4389ba..153bc13a11 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.
+ 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 31e5442445..d3834ccbfe 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.
# 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 cad7132c8c..41b06827f5 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.
+ 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 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 header file. */ -#undef HAVE_POLL_H +#define HAVE_POLL_H 1 /* Define to 1 if you have the 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 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* */ -#define HAVE_STDARG_PROTOTYPES +#define HAVE_STDARG_PROTOTYPES 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 @@ -756,16 +776,16 @@ #define HAVE_SYS_PARAM_H 1 /* Define to 1 if you have the header file. */ -#undef HAVE_SYS_POLL_H +#define HAVE_SYS_POLL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_RESOURCE_H 1 /* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SELECT_H +#define HAVE_SYS_SELECT_H 1 /* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SOCKET_H +#define HAVE_SYS_SOCKET_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STATVFS_H @@ -851,7 +871,7 @@ #undef HAVE_UNAME /* Define to 1 if you have the 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 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 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 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 does not define. */ -#undef mode_t +//#undef mode_t /* Define to `long int' if does not define. */ -#undef off_t +//#undef off_t /* Define to `int' if 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 does not define. */ -#undef size_t +//#undef size_t /* Define to `int' if does not define. */ -#undef socklen_t +//#undef socklen_t /* Define to `int' if 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 bfbd14e1c5..1d01328609 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 2134f15765..4d738c64b6 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 d0abb8dd5b..de14ef31c5 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 d52249b58b..b5079e2c3a 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 7f250d15ff..8ce4783a6a 100644 --- a/StdLib/LibC/Uefi/compat.c +++ b/StdLib/LibC/Uefi/compat.c @@ -94,6 +94,7 @@ #include #include #include +#include #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 5446ecd35f..c2cf12856b 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.
+# 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 - - -- 2.39.2