|
| 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 | + |
| 113 | + |
| 114 | +I support no other platform but OS/2 (and eventually AmigaDOS). |
0 commit comments