From a34c31352b0d29177fb537c4cc37eb46e41f9359 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Fri, 5 Dec 1997 22:07:14 +0000 Subject: New batch of patches by Jeff Rush; moved his readme.txt portion here. --- PC/os2vacpp/config.c | 2 + PC/os2vacpp/config.h | 11 ++--- PC/os2vacpp/getpathp.c | 26 +++++++++-- PC/os2vacpp/makefile | 8 +++- PC/os2vacpp/readme.txt | 114 +++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 148 insertions(+), 13 deletions(-) create mode 100644 PC/os2vacpp/readme.txt diff --git a/PC/os2vacpp/config.c b/PC/os2vacpp/config.c index 5f7ad91..3e7adf9 100644 --- a/PC/os2vacpp/config.c +++ b/PC/os2vacpp/config.c @@ -63,6 +63,7 @@ extern void inittime(); extern void initthread(); extern void initcStringIO(); extern void initcPickle(); +extern void initpcre(); #ifdef WIN32 extern void initmsvcrt(); #endif @@ -113,6 +114,7 @@ struct _inittab _PyImport_Inittab[] = { #endif {"cStringIO", initcStringIO}, {"cPickle", initcPickle}, + {"pcre", initpcre}, #ifdef WIN32 {"msvcrt", initmsvcrt}, #endif diff --git a/PC/os2vacpp/config.h b/PC/os2vacpp/config.h index 19438f5..ad7626b 100644 --- a/PC/os2vacpp/config.h +++ b/PC/os2vacpp/config.h @@ -74,11 +74,6 @@ /* Configuration Options for Finding Modules */ #define 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 */ @@ -91,7 +86,7 @@ #define PYCC_VACPP /* Define Indicator of C Compiler */ /* 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 IMPORT_8x3_NAMES */ @@ -483,7 +478,7 @@ /* #define WITH_READLINE 1 */ /* Define if you have clock. */ -/* #define HAVE_CLOCK */ +#define HAVE_CLOCK /* Define if you have ftime. */ #define HAVE_FTIME @@ -540,7 +535,7 @@ /* #undef HAVE_TCSETPGRP */ /* Define if you have times. */ -/* #undef HAVE_TIMES */ +#define HAVE_TIMES /* Define if you have uname. */ /* #undef HAVE_UNAME */ diff --git a/PC/os2vacpp/getpathp.c b/PC/os2vacpp/getpathp.c index 2cfba16..69e38cb 100644 --- a/PC/os2vacpp/getpathp.c +++ b/PC/os2vacpp/getpathp.c @@ -50,7 +50,11 @@ extern BOOL PyWin_IsWin32s(); /* 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. * @@ -75,6 +79,7 @@ extern BOOL PyWin_IsWin32s(); #endif static char prefix[MAXPATHLEN+1]; +static char exec_prefix[MAXPATHLEN+1]; static char progpath[MAXPATHLEN+1]; static char *module_search_path = NULL; @@ -345,9 +350,21 @@ calculate_path() else pythonhome = NULL; } - else + else { + char *delim; + strcpy(prefix, pythonhome); + /* Extract Any Optional Trailing EXEC_PREFIX */ + /* e.g. PYTHONHOME=: */ + delim = strchr(prefix, DELIM); + if (delim) { + *delim = '\0'; + strcpy(exec_prefix, delim+1); + } else + strcpy(exec_prefix, EXEC_PREFIX); + } + if (envpath && *envpath == '\0') envpath = NULL; @@ -475,7 +492,10 @@ Py_GetPrefix() char * Py_GetExecPrefix() { - return Py_GetPrefix(); + if (!module_search_path) + calculate_path(); + + return exec_prefix; } char * diff --git a/PC/os2vacpp/makefile b/PC/os2vacpp/makefile index cecbe96..d609d50 100644 --- a/PC/os2vacpp/makefile +++ b/PC/os2vacpp/makefile @@ -165,6 +165,9 @@ MODULES = \ $(PATHOBJ)\MD5Module.obj \ $(PATHOBJ)\NewModule.obj \ $(PATHOBJ)\Operator.obj \ + $(PATHOBJ)\PCREModule.obj \ + $(PATHOBJ)\PyPCRE.obj \ + $(PATHOBJ)\RotorModule.obj \ $(PATHOBJ)\PosixModule.obj \ $(PATHOBJ)\RegexModule.obj \ $(PATHOBJ)\RegExpr.obj \ @@ -197,7 +200,7 @@ _BASE = /Q /W2 /I$(PROJINCLUDE) # /Q = Omit IBM Copyright # /W2 = Show Warnings/Errors Only -_GEN = /G4 /Gm /Gd +_GEN = /G4 /Gm /Gd- # /G4 = Generate Code for 486 (Use 386 for Debugger) # /Gm = Use Multithread Runtime # /Gd = Dynamically Load Runtime @@ -208,7 +211,8 @@ _OPT = /O /Gl # /Gu = Advise Linker All Ext Data is ID'd # /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 # /Tm = Enable Debug Memory Fns # /Tx = Request Full Dump Upon Exception diff --git a/PC/os2vacpp/readme.txt b/PC/os2vacpp/readme.txt new file mode 100644 index 0000000..f805232 --- /dev/null +++ b/PC/os2vacpp/readme.txt @@ -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 . + +I support no other platform but OS/2 (and eventually AmigaDOS). -- cgit v0.12