| 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 | Jeff Rush is no longer supporting the VACPP port :-(
|
|---|
| 110 |
|
|---|
| 111 | I don't have the VACPP compiler, so can't reliably maintain this port.
|
|---|
| 112 |
|
|---|
| 113 | Anyone with VACPP who can contribute patches to keep this port buildable
|
|---|
| 114 | should upload them to the Python Patch Manager at Sourceforge and
|
|---|
| 115 | assign them to me for review/checkin.
|
|---|
| 116 |
|
|---|
| 117 | Andrew MacIntyre
|
|---|
| 118 | aimacintyre at users.sourceforge.net
|
|---|
| 119 | August 18, 2002.
|
|---|