mirror of https://github.com/python/cpython
New batch of patches by Jeff Rush; moved his readme.txt portion here.
This commit is contained in:
parent
cee1dca4e7
commit
a34c31352b
|
@ -63,6 +63,7 @@ extern void inittime();
|
||||||
extern void initthread();
|
extern void initthread();
|
||||||
extern void initcStringIO();
|
extern void initcStringIO();
|
||||||
extern void initcPickle();
|
extern void initcPickle();
|
||||||
|
extern void initpcre();
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
extern void initmsvcrt();
|
extern void initmsvcrt();
|
||||||
#endif
|
#endif
|
||||||
|
@ -113,6 +114,7 @@ struct _inittab _PyImport_Inittab[] = {
|
||||||
#endif
|
#endif
|
||||||
{"cStringIO", initcStringIO},
|
{"cStringIO", initcStringIO},
|
||||||
{"cPickle", initcPickle},
|
{"cPickle", initcPickle},
|
||||||
|
{"pcre", initpcre},
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
{"msvcrt", initmsvcrt},
|
{"msvcrt", initmsvcrt},
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -74,11 +74,6 @@
|
||||||
/* Configuration Options for Finding Modules */
|
/* Configuration Options for Finding Modules */
|
||||||
#define PREFIX ""
|
#define PREFIX ""
|
||||||
#define EXEC_PREFIX ""
|
#define EXEC_PREFIX ""
|
||||||
//#define VPATH "."
|
|
||||||
|
|
||||||
//#define PYTHONPATH PREFIX "/lib/python" VERSION DELIM \
|
|
||||||
// PREFIX "/lib/python" VERSION "/test" DELIM \
|
|
||||||
// EXEC_PREFIX "/lib/python" VERSION "/sharedmodules"
|
|
||||||
|
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
/* 32-Bit IBM VisualAge C/C++ v3.0 for OS/2 */
|
/* 32-Bit IBM VisualAge C/C++ v3.0 for OS/2 */
|
||||||
|
@ -91,7 +86,7 @@
|
||||||
#define PYCC_VACPP /* Define Indicator of C Compiler */
|
#define PYCC_VACPP /* Define Indicator of C Compiler */
|
||||||
|
|
||||||
/* Platform Filesystem */
|
/* Platform Filesystem */
|
||||||
#define PYTHONPATH ".;.\\lib;.\\lib\\plat-os2;.\\lib\\dos_8x3;.\\lib\\lib-tk"
|
#define PYTHONPATH ".;.\\lib;.\\lib\\plat-win;.\\lib\\dos-8x3;.\\lib\\lib-tk"
|
||||||
#define DOSFILESYS /* OS/2 Uses the DOS File Naming Conventions */
|
#define DOSFILESYS /* OS/2 Uses the DOS File Naming Conventions */
|
||||||
/* #define IMPORT_8x3_NAMES */
|
/* #define IMPORT_8x3_NAMES */
|
||||||
|
|
||||||
|
@ -483,7 +478,7 @@
|
||||||
/* #define WITH_READLINE 1 */
|
/* #define WITH_READLINE 1 */
|
||||||
|
|
||||||
/* Define if you have clock. */
|
/* Define if you have clock. */
|
||||||
/* #define HAVE_CLOCK */
|
#define HAVE_CLOCK
|
||||||
|
|
||||||
/* Define if you have ftime. */
|
/* Define if you have ftime. */
|
||||||
#define HAVE_FTIME
|
#define HAVE_FTIME
|
||||||
|
@ -540,7 +535,7 @@
|
||||||
/* #undef HAVE_TCSETPGRP */
|
/* #undef HAVE_TCSETPGRP */
|
||||||
|
|
||||||
/* Define if you have times. */
|
/* Define if you have times. */
|
||||||
/* #undef HAVE_TIMES */
|
#define HAVE_TIMES
|
||||||
|
|
||||||
/* Define if you have uname. */
|
/* Define if you have uname. */
|
||||||
/* #undef HAVE_UNAME */
|
/* #undef HAVE_UNAME */
|
||||||
|
|
|
@ -50,7 +50,11 @@ extern BOOL PyWin_IsWin32s();
|
||||||
|
|
||||||
/* Search in some common locations for the associated Python libraries.
|
/* Search in some common locations for the associated Python libraries.
|
||||||
*
|
*
|
||||||
* This version always returns "" for both prefix and exec_prefix.
|
* 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 can be the same directory,
|
||||||
|
* but for some installations, they are different.
|
||||||
*
|
*
|
||||||
* Py_GetPath() tries to return a sensible Python module search path.
|
* Py_GetPath() tries to return a sensible Python module search path.
|
||||||
*
|
*
|
||||||
|
@ -75,6 +79,7 @@ extern BOOL PyWin_IsWin32s();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static char prefix[MAXPATHLEN+1];
|
static char prefix[MAXPATHLEN+1];
|
||||||
|
static char exec_prefix[MAXPATHLEN+1];
|
||||||
static char progpath[MAXPATHLEN+1];
|
static char progpath[MAXPATHLEN+1];
|
||||||
static char *module_search_path = NULL;
|
static char *module_search_path = NULL;
|
||||||
|
|
||||||
|
@ -345,9 +350,21 @@ calculate_path()
|
||||||
else
|
else
|
||||||
pythonhome = NULL;
|
pythonhome = NULL;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
|
char *delim;
|
||||||
|
|
||||||
strcpy(prefix, pythonhome);
|
strcpy(prefix, pythonhome);
|
||||||
|
|
||||||
|
/* Extract Any Optional Trailing EXEC_PREFIX */
|
||||||
|
/* e.g. PYTHONHOME=<prefix>:<exec_prefix> */
|
||||||
|
delim = strchr(prefix, DELIM);
|
||||||
|
if (delim) {
|
||||||
|
*delim = '\0';
|
||||||
|
strcpy(exec_prefix, delim+1);
|
||||||
|
} else
|
||||||
|
strcpy(exec_prefix, EXEC_PREFIX);
|
||||||
|
}
|
||||||
|
|
||||||
if (envpath && *envpath == '\0')
|
if (envpath && *envpath == '\0')
|
||||||
envpath = NULL;
|
envpath = NULL;
|
||||||
|
|
||||||
|
@ -475,7 +492,10 @@ Py_GetPrefix()
|
||||||
char *
|
char *
|
||||||
Py_GetExecPrefix()
|
Py_GetExecPrefix()
|
||||||
{
|
{
|
||||||
return Py_GetPrefix();
|
if (!module_search_path)
|
||||||
|
calculate_path();
|
||||||
|
|
||||||
|
return exec_prefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
|
|
|
@ -165,6 +165,9 @@ MODULES = \
|
||||||
$(PATHOBJ)\MD5Module.obj \
|
$(PATHOBJ)\MD5Module.obj \
|
||||||
$(PATHOBJ)\NewModule.obj \
|
$(PATHOBJ)\NewModule.obj \
|
||||||
$(PATHOBJ)\Operator.obj \
|
$(PATHOBJ)\Operator.obj \
|
||||||
|
$(PATHOBJ)\PCREModule.obj \
|
||||||
|
$(PATHOBJ)\PyPCRE.obj \
|
||||||
|
$(PATHOBJ)\RotorModule.obj \
|
||||||
$(PATHOBJ)\PosixModule.obj \
|
$(PATHOBJ)\PosixModule.obj \
|
||||||
$(PATHOBJ)\RegexModule.obj \
|
$(PATHOBJ)\RegexModule.obj \
|
||||||
$(PATHOBJ)\RegExpr.obj \
|
$(PATHOBJ)\RegExpr.obj \
|
||||||
|
@ -197,7 +200,7 @@ _BASE = /Q /W2 /I$(PROJINCLUDE)
|
||||||
# /Q = Omit IBM Copyright
|
# /Q = Omit IBM Copyright
|
||||||
# /W2 = Show Warnings/Errors Only
|
# /W2 = Show Warnings/Errors Only
|
||||||
|
|
||||||
_GEN = /G4 /Gm /Gd
|
_GEN = /G4 /Gm /Gd-
|
||||||
# /G4 = Generate Code for 486 (Use 386 for Debugger)
|
# /G4 = Generate Code for 486 (Use 386 for Debugger)
|
||||||
# /Gm = Use Multithread Runtime
|
# /Gm = Use Multithread Runtime
|
||||||
# /Gd = Dynamically Load Runtime
|
# /Gd = Dynamically Load Runtime
|
||||||
|
@ -208,7 +211,8 @@ _OPT = /O /Gl
|
||||||
# /Gu = Advise Linker All Ext Data is ID'd
|
# /Gu = Advise Linker All Ext Data is ID'd
|
||||||
# /Gl = Have Linker Remove Unused Fns
|
# /Gl = Have Linker Remove Unused Fns
|
||||||
|
|
||||||
_DBG = /DHAVE_CONFIG_H /DUSE_SOCKET
|
_DBG = /Wpro- /Ti- /DHAVE_CONFIG_H /DUSE_SOCKET
|
||||||
|
# /Wpro= Generate Compiler Warnings re Missing Prototypes
|
||||||
# /Ti = Embed Debugger/Analyzer Recs
|
# /Ti = Embed Debugger/Analyzer Recs
|
||||||
# /Tm = Enable Debug Memory Fns
|
# /Tm = Enable Debug Memory Fns
|
||||||
# /Tx = Request Full Dump Upon Exception
|
# /Tx = Request Full Dump Upon Exception
|
||||||
|
|
|
@ -0,0 +1,114 @@
|
||||||
|
IBM VisualAge C/C++ for OS/2
|
||||||
|
============================
|
||||||
|
|
||||||
|
To build Python for OS/2, change into ./os2vacpp and issue an 'NMAKE'
|
||||||
|
command. This will build a PYTHON15.DLL containing the set of Python
|
||||||
|
modules listed in config.c and a small PYTHON.EXE to start the
|
||||||
|
interpreter.
|
||||||
|
|
||||||
|
By changing the C compiler flag /Gd- in the makefile to /Gd+, you can
|
||||||
|
reduce the size of these by causing Python to dynamically link to the
|
||||||
|
C runtime DLLs instead of including their bulk in your binaries.
|
||||||
|
However, this means that any system on which you run Python must have
|
||||||
|
the VAC++ compiler installed in order to have those DLLs available.
|
||||||
|
|
||||||
|
During the build process you may see a couple of harmless warnings:
|
||||||
|
|
||||||
|
From the C Compiler, "No function prototype given for XXX", which
|
||||||
|
comes from the use of K&R parameters within Python for portability.
|
||||||
|
|
||||||
|
From the ILIB librarian, "Module Not Found (XXX)", which comes
|
||||||
|
from its attempt to perform the (-+) operation, which removes and
|
||||||
|
then adds a .OBJ to the library. The first time a build is done,
|
||||||
|
it obviously cannot remove what is not yet built.
|
||||||
|
|
||||||
|
This build includes support for most Python functionality as well as
|
||||||
|
TCP/IP sockets. It omits the Posix ability to 'fork' a process but
|
||||||
|
supports threads using OS/2 native capabilities. I have tried to
|
||||||
|
support everything possible but here are a few usage notes.
|
||||||
|
|
||||||
|
|
||||||
|
-- os.popen() Usage Warnings
|
||||||
|
|
||||||
|
With respect to my implementation of popen() under OS/2:
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
fd = os.popen("pkzip.exe -@ junk.zip", 'wb')
|
||||||
|
fd.write("file1.txt\n")
|
||||||
|
fd.write("file2.txt\n")
|
||||||
|
fd.write("file3.txt\n")
|
||||||
|
fd.write("\x1a") # Should Not Be Necessary But Is
|
||||||
|
fd.close()
|
||||||
|
|
||||||
|
There is a bug, either in the VAC++ compiler or OS/2 itself, where the
|
||||||
|
simple closure of the write-side of a pipe -to- a process does not
|
||||||
|
send an EOF to that process. I find I must explicitly write a
|
||||||
|
control-Z (EOF) before closing the pipe. This is not a problem when
|
||||||
|
using popen() in read mode.
|
||||||
|
|
||||||
|
One other slight difference with my popen() is that I return None
|
||||||
|
from the close(), instead of the Unix convention of the return code
|
||||||
|
of the spawned program. I could find no easy way to do this under
|
||||||
|
OS/2.
|
||||||
|
|
||||||
|
|
||||||
|
-- BEGINLIBPATH/ENDLIBPATH
|
||||||
|
|
||||||
|
With respect to environment variables, this OS/2 port supports the
|
||||||
|
special-to-OS/2 magic names of 'BEGINLIBPATH' and 'ENDLIBPATH' to
|
||||||
|
control where to load conventional DLLs from. Those names are
|
||||||
|
intercepted and converted to calls on the OS/2 kernel APIs and
|
||||||
|
are inherited by child processes, whether Python-based or not.
|
||||||
|
|
||||||
|
A few new attributes have been added to the os module:
|
||||||
|
|
||||||
|
os.meminstalled # Count of Bytes of RAM Installed on Machine
|
||||||
|
os.memkernel # Count of Bytes of RAM Reserved (Non-Swappable)
|
||||||
|
os.memvirtual # Count of Bytes of Virtual RAM Possible
|
||||||
|
os.timeslice # Duration of Scheduler Timeslice, in Milliseconds
|
||||||
|
os.maxpathlen # Maximum Length of a Path Specification, in chars
|
||||||
|
os.maxnamelen # Maximum Length of a Single Dir/File Name, in chars
|
||||||
|
os.version # Version of OS/2 Being Run e.g. "4.00"
|
||||||
|
os.revision # Revision of OS/2 Being Run (usually zero)
|
||||||
|
os.bootdrive # Drive that System Booted From e.g. "C:"
|
||||||
|
# (useful to find the CONFIG.SYS used to boot with)
|
||||||
|
|
||||||
|
|
||||||
|
-- Using Python as the Default OS/2 Batch Language
|
||||||
|
|
||||||
|
Note that OS/2 supports the Unix technique of putting the special
|
||||||
|
comment line at the time of scripts e.g. "#!/usr/bin/python" in
|
||||||
|
a different syntactic form. To do this, put your script into a file
|
||||||
|
with a .CMD extension and added 'extproc' to the top as follows:
|
||||||
|
|
||||||
|
extproc C:\Python\Python.exe -x
|
||||||
|
import os
|
||||||
|
print "Hello from Python"
|
||||||
|
|
||||||
|
The '-x' option tells Python to skip the first line of the file
|
||||||
|
while processing the rest as normal Python source.
|
||||||
|
|
||||||
|
|
||||||
|
-- Suggested Environment Variable Setup
|
||||||
|
|
||||||
|
With respect to the environment variables for Python, I use the
|
||||||
|
following setup:
|
||||||
|
|
||||||
|
Set PYTHONHOME=E:\Tau\Projects\Python;D:\DLLs
|
||||||
|
Set PYTHONPATH=.;E:\Tau\Projects\Python\Lib; \
|
||||||
|
E:\Tau\Projects\Python\Lib\plat-win
|
||||||
|
|
||||||
|
The EXEC_PREFIX (optional second pathspec on PYTHONHOME) is where
|
||||||
|
you put any Python extension DLLs you may create/obtain. There
|
||||||
|
are none provided with this release.
|
||||||
|
|
||||||
|
|
||||||
|
-- Contact Info
|
||||||
|
|
||||||
|
If you have questions, suggestions or problems specifically with
|
||||||
|
the OS/2 VAC++ port of Python, please contact me at:
|
||||||
|
|
||||||
|
Jeff Rush <jrush@summit-research.com>.
|
||||||
|
|
||||||
|
I support no other platform but OS/2 (and eventually AmigaDOS).
|
Loading…
Reference in New Issue