Guido van Rossum | a34c313 | 1997-12-05 22:07:14 +0000 | [diff] [blame] | 1 | IBM VisualAge C/C++ for OS/2
|
| 2 | ============================
|
| 3 |
|
| 4 | To build Python for OS/2, change into ./os2vacpp and issue an 'NMAKE'
|
| 5 | command. This will build a PYTHON15.DLL containing the set of Python
|
| 6 | modules listed in config.c and a small PYTHON.EXE to start the
|
| 7 | interpreter.
|
| 8 |
|
| 9 | By changing the C compiler flag /Gd- in the makefile to /Gd+, you can
|
| 10 | reduce the size of these by causing Python to dynamically link to the
|
| 11 | C runtime DLLs instead of including their bulk in your binaries.
|
| 12 | However, this means that any system on which you run Python must have
|
| 13 | the VAC++ compiler installed in order to have those DLLs available.
|
| 14 |
|
| 15 | During the build process you may see a couple of harmless warnings:
|
| 16 |
|
| 17 | From the C Compiler, "No function prototype given for XXX", which
|
| 18 | comes from the use of K&R parameters within Python for portability.
|
| 19 |
|
| 20 | From the ILIB librarian, "Module Not Found (XXX)", which comes
|
| 21 | from its attempt to perform the (-+) operation, which removes and
|
| 22 | then adds a .OBJ to the library. The first time a build is done,
|
| 23 | it obviously cannot remove what is not yet built.
|
| 24 |
|
| 25 | This build includes support for most Python functionality as well as
|
| 26 | TCP/IP sockets. It omits the Posix ability to 'fork' a process but
|
| 27 | supports threads using OS/2 native capabilities. I have tried to
|
| 28 | support everything possible but here are a few usage notes.
|
| 29 |
|
| 30 |
|
| 31 | -- os.popen() Usage Warnings
|
| 32 |
|
| 33 | With respect to my implementation of popen() under OS/2:
|
| 34 |
|
| 35 | import os
|
| 36 |
|
| 37 | fd = os.popen("pkzip.exe -@ junk.zip", 'wb')
|
| 38 | fd.write("file1.txt\n")
|
| 39 | fd.write("file2.txt\n")
|
| 40 | fd.write("file3.txt\n")
|
| 41 | fd.write("\x1a") # Should Not Be Necessary But Is
|
| 42 | fd.close()
|
| 43 |
|
| 44 | There is a bug, either in the VAC++ compiler or OS/2 itself, where the
|
| 45 | simple closure of the write-side of a pipe -to- a process does not
|
| 46 | send an EOF to that process. I find I must explicitly write a
|
| 47 | control-Z (EOF) before closing the pipe. This is not a problem when
|
| 48 | using popen() in read mode.
|
| 49 |
|
| 50 | One other slight difference with my popen() is that I return None
|
| 51 | from the close(), instead of the Unix convention of the return code
|
| 52 | of the spawned program. I could find no easy way to do this under
|
| 53 | OS/2.
|
| 54 |
|
| 55 |
|
| 56 | -- BEGINLIBPATH/ENDLIBPATH
|
| 57 |
|
| 58 | With respect to environment variables, this OS/2 port supports the
|
| 59 | special-to-OS/2 magic names of 'BEGINLIBPATH' and 'ENDLIBPATH' to
|
| 60 | control where to load conventional DLLs from. Those names are
|
| 61 | intercepted and converted to calls on the OS/2 kernel APIs and
|
| 62 | are inherited by child processes, whether Python-based or not.
|
| 63 |
|
| 64 | A few new attributes have been added to the os module:
|
| 65 |
|
| 66 | os.meminstalled # Count of Bytes of RAM Installed on Machine
|
| 67 | os.memkernel # Count of Bytes of RAM Reserved (Non-Swappable)
|
| 68 | os.memvirtual # Count of Bytes of Virtual RAM Possible
|
| 69 | os.timeslice # Duration of Scheduler Timeslice, in Milliseconds
|
| 70 | os.maxpathlen # Maximum Length of a Path Specification, in chars
|
| 71 | os.maxnamelen # Maximum Length of a Single Dir/File Name, in chars
|
| 72 | os.version # Version of OS/2 Being Run e.g. "4.00"
|
| 73 | os.revision # Revision of OS/2 Being Run (usually zero)
|
| 74 | os.bootdrive # Drive that System Booted From e.g. "C:"
|
| 75 | # (useful to find the CONFIG.SYS used to boot with)
|
| 76 |
|
| 77 |
|
| 78 | -- Using Python as the Default OS/2 Batch Language
|
| 79 |
|
| 80 | Note that OS/2 supports the Unix technique of putting the special
|
| 81 | comment line at the time of scripts e.g. "#!/usr/bin/python" in
|
| 82 | a different syntactic form. To do this, put your script into a file
|
| 83 | with a .CMD extension and added 'extproc' to the top as follows:
|
| 84 |
|
| 85 | extproc C:\Python\Python.exe -x
|
| 86 | import os
|
| 87 | print "Hello from Python"
|
| 88 |
|
| 89 | The '-x' option tells Python to skip the first line of the file
|
| 90 | while processing the rest as normal Python source.
|
| 91 |
|
| 92 |
|
| 93 | -- Suggested Environment Variable Setup
|
| 94 |
|
| 95 | With respect to the environment variables for Python, I use the
|
| 96 | following setup:
|
| 97 |
|
| 98 | Set PYTHONHOME=E:\Tau\Projects\Python;D:\DLLs
|
| 99 | Set PYTHONPATH=.;E:\Tau\Projects\Python\Lib; \
|
| 100 | E:\Tau\Projects\Python\Lib\plat-win
|
| 101 |
|
| 102 | The EXEC_PREFIX (optional second pathspec on PYTHONHOME) is where
|
| 103 | you put any Python extension DLLs you may create/obtain. There
|
| 104 | are none provided with this release.
|
| 105 |
|
| 106 |
|
| 107 | -- Contact Info
|
| 108 |
|
| 109 | If you have questions, suggestions or problems specifically with
|
| 110 | the OS/2 VAC++ port of Python, please contact me at:
|
| 111 |
|
| 112 | Jeff Rush <jrush@summit-research.com>.
|
| 113 |
|
| 114 | I support no other platform but OS/2 (and eventually AmigaDOS).
|