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.
|
---|