Guido van Rossum | e8afe51 | 1998-09-28 22:02:40 +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 | |
Andrew MacIntyre | 1adbceb | 2002-08-18 06:32:46 +0000 | [diff] [blame] | 109 | Jeff Rush is no longer supporting the VACPP port :-( |
Guido van Rossum | e8afe51 | 1998-09-28 22:02:40 +0000 | [diff] [blame] | 110 | |
Andrew MacIntyre | 1adbceb | 2002-08-18 06:32:46 +0000 | [diff] [blame] | 111 | I don't have the VACPP compiler, so can't reliably maintain this port. |
Guido van Rossum | e8afe51 | 1998-09-28 22:02:40 +0000 | [diff] [blame] | 112 | |
Andrew MacIntyre | 1adbceb | 2002-08-18 06:32:46 +0000 | [diff] [blame] | 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. |