blob: 61cf6dfc701cfb43a4592ca03a0cfb237262cd0d [file] [log] [blame]
Christian Heimes292d3512008-02-03 16:51:08 +00001This is a port of Python 2.6 to OS/2 using the EMX development tools
Andrew MacIntyre41d97d62002-02-17 05:23:30 +00002=========================================================================
3
4What's new since the previous release
5-------------------------------------
6
Andrew MacIntyrec2138af2003-12-02 12:23:07 +00007Another day, another version...
Andrew MacIntyre631e87f2003-04-21 14:33:04 +00008
Andrew MacIntyre41d97d62002-02-17 05:23:30 +00009
10Licenses and info about Python and EMX
11--------------------------------------
12
Christian Heimes292d3512008-02-03 16:51:08 +000013Please read the file README.Python-2.6 included in this package for
14information about Python 2.6. This file is the README file from the
15Python 2.6 source distribution available via http://www.python.org/
16and its mirrors. The file LICENCE.Python-2.6 is the text of the Licence
17from the Python 2.6 source distribution.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +000018
19Note that the EMX package that this package depends on is released under
20the GNU General Public Licence. Please refer to the documentation
21accompanying the EMX Runtime libraries for more information about the
22implications of this. A copy of version 2 of the GPL is included as the
23file COPYING.gpl2.
24
25Readline and GDBM are covered by the GNU General Public Licence. I think
26Eberhard Mattes' porting changes to BSD DB v1.85 are also GPL'ed (BSD DB
27itself is BSD Licenced). ncurses and expat appear to be covered by MIT
28style licences - please refer to the source distributions for more detail.
Andrew MacIntyre3dac89e2004-10-03 08:26:36 +000029zlib is distributable under a very free license. GNU UFC is under the
30GNU LGPL (see file COPYING.lib).
Andrew MacIntyre41d97d62002-02-17 05:23:30 +000031
32My patches to the Python-2.x source distributions, and any other packages
33used in this port, are placed in the public domain.
34
35This software is provided 'as-is', without any express or implied warranty.
36In no event will the author be held liable for any damages arising from the
37use of the software.
38
39I do hope however that it proves useful to someone.
40
41
42Other ports
43-----------
44
45There have been ports of previous versions of Python to OS/2.
46
47The best known would be that by Jeff Rush, most recently of version
481.5.2. Jeff used IBM's Visual Age C++ (v3) for his ports, and his
Christian Heimes292d3512008-02-03 16:51:08 +000049patches have been included in the Python 2.6 source distribution.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +000050
Andrew MacIntyre631e87f2003-04-21 14:33:04 +000051Andy Zabolotny implemented a port of Python v1.5.2 using the EMX
Andrew MacIntyre41d97d62002-02-17 05:23:30 +000052development tools. His patches against the Python v1.5.2 source
53distribution have become the core of this port, and without his efforts
Andrew MacIntyre631e87f2003-04-21 14:33:04 +000054this port wouldn't exist. Andy's port also appears to have been
Andrew MacIntyre41d97d62002-02-17 05:23:30 +000055compiled with his port of gcc 2.95.2 to EMX, which I have but have
Andrew MacIntyrefae89532003-06-09 08:15:14 +000056chosen not to use for the binary distribution of this port (see item 16
Andrew MacIntyre41d97d62002-02-17 05:23:30 +000057of the "YOU HAVE BEEN WARNED" section below).
58
Andrew MacIntyre41d97d62002-02-17 05:23:30 +000059It is possible to have these earlier ports still usable after installing
60this port - see the README.os2emx.multiple_versions file, contributed by
61Dr David Mertz, for a suggested approach to achieving this.
62
63
64Software requirements
65---------------------
66
67This package requires the EMX Runtime package, available from the
68Hobbes (http://hobbes.nmsu.edu/) and LEO (http://archiv.leo.org/)
69archives of OS/2 software. I have used EMX version 0.9d fix04 in
70developing this port.
71
72My development system is running OS/2 v4 with fixpack 12.
73
743rd party software which has been linked into dynamically loaded modules:
75- ncurses (see http://dickey.his.com/ for more info, v5.2)
76- GNU Readline (Kai Uwe Rommel's port available from Hobbes or LEO, v2.1)
77- GNU GDBM (Kai Uwe Rommel's port available from Hobbes or LEO, v1.7.3)
Andrew MacIntyre631e87f2003-04-21 14:33:04 +000078- zlib (derived from Hung-Chi Chu's port of v1.1.3, v1.1.4)
79- expat (distributed with Python, v1.95.6)
Andrew MacIntyre41d97d62002-02-17 05:23:30 +000080- GNU UFC (Kai Uwe Rommel's port available from LEO, v2.0.4)
81
Andrew MacIntyre41d97d62002-02-17 05:23:30 +000082
83About this port
84---------------
85
86I have attempted to make this port as complete and functional as I can,
87notwithstanding the issues in the "YOU HAVE BEEN WARNED" section below.
88
89Core components:
90
91Python.exe is linked as an a.out executable, ie using EMX method E1
92to compile & link the executable. This is so that fork() works (see
Andrew MacIntyre631e87f2003-04-21 14:33:04 +000093"YOU HAVE BEEN WARNED" item 1).
Andrew MacIntyre41d97d62002-02-17 05:23:30 +000094
Christian Heimes292d3512008-02-03 16:51:08 +000095Python26.dll is created as a normal OMF DLL, with an OMF import
Andrew MacIntyre41d97d62002-02-17 05:23:30 +000096library and module definition file. There is also an a.out (.a) import
Andrew MacIntyreffcf8992002-08-18 06:28:21 +000097library to support linking the DLL to a.out executables. The DLL
98requires the EMX runtime DLLs.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +000099
100This port has been built with complete support for multithreading.
101
102Modules:
103
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000104With the exception of modules that have a significant code size, or are
105not recommended or desired for normal use, the standard modules are now
106built into the core DLL rather than configured as dynamically loadable
107modules. This is for both reasons of performance (startup time) and
108memory use (lots of small DLLs fragment the address space).
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000109
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000110I haven't yet changed the building of Python's dynamically loadable
111modules over to using the DistUtils.
112
113See "YOU HAVE BEEN WARNED" item 3 for notes about the fcntl module, and
114"YOU HAVE BEEN WARNED" item 10 for notes about the pwd and grp modules.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000115
Andrew MacIntyrec2138af2003-12-02 12:23:07 +0000116This port supports case sensitive module import semantics, matching
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000117the Windows release. This can be deactivated by setting the PYTHONCASEOK
118environment variable (the value doesn't matter) - see "YOU HAVE BEEN WARNED"
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000119item 12.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000120
121Optional modules:
122
123Where I've been able to locate the required 3rd party packages already
124ported to OS/2, I've built and included them.
125
Georg Brandl1158a332009-06-04 09:30:30 +0000126These include ncurses (_curses, _curses_panel),
Andrew MacIntyre3dac89e2004-10-03 08:26:36 +0000127GNU GDBM (gdbm, dbm), zlib (zlib), GNU Readline (readline), and GNU UFC
128(crypt).
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000129
Andrew MacIntyrec2138af2003-12-02 12:23:07 +0000130Expat is now included in the Python release sourceball, and the pyexpat
131module is always built.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000132
133I have built these modules statically linked against the 3rd party
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000134libraries. Unfortunately my attempts to use the dll version of GNU
135readline have been a dismal failure, in that when the dynamically
136linked readline module is active other modules immediately provoke a
137core dump when imported.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000138
139Only the BSD DB package (part of the BSD package distributed with EMX)
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000140needs source modifications to be used for this port, pertaining to use
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000141of errno with multithreading.
142
143The other packages, except for ncurses and zlib, needed Makefile changes
144for multithreading support but no source changes.
145
146The _curses_panel module is a potential problem - see "YOU HAVE BEEN
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000147WARNED" item 13.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000148
149Upstream source patches:
150
Christian Heimes292d3512008-02-03 16:51:08 +0000151No updates to the Python 2.6 release have become available.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000152
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000153Library and other distributed Python code:
154
155The Python standard library lives in the Lib directory. All the standard
Christian Heimes292d3512008-02-03 16:51:08 +0000156library code included with the Python 2.6 source distribution is included
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000157in the binary archive, with the exception of the dos-8x3 and tkinter
158subdirectories which have been omitted to reduce the size of the binary
159archive - the dos-8x3 components are unnecessary duplicates and Tkinter
160is not supported by this port (yet). All the plat-* subdirectories in the
Andrew MacIntyrec2138af2003-12-02 12:23:07 +0000161source distribution have also been omitted, except for the plat-os2emx
162subdirectory.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000163
164The Tools and Demo directories contain a collection of Python scripts.
165To reduce the size of the binary archive, the Demo/sgi, Demo/Tix,
166Demo/tkinter, Tools/audiopy and Tools/IDLE subdirectories have been
167omitted as not being supported by this port. The Misc directory has
168also been omitted.
169
170All subdirectories omitted from the binary archive can be reconstituted
Christian Heimes292d3512008-02-03 16:51:08 +0000171from the Python 2.6 source distribution, if desired.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000172
173Support for building Python extensions:
174
175The Config subdirectory contains the files describing the configuration
176of the interpreter and the Makefile, import libraries for the Python DLL,
177and the module definition file used to create the Python DLL. The
178Include subdirectory contains all the standard Python header files
179needed for building extensions.
180
181As I don't have the Visual Age C++ compiler, I've made no attempt to
182have this port support extensions built with that compiler.
183
184
185Packaging
186---------
187
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000188This port is packaged as follows:
Christian Heimes292d3512008-02-03 16:51:08 +0000189- python-2.6-os2emx-bin-03????.zip (binaries, library modules)
190- python-2.6-os2emx-src-03???? (patches+makefiles for non-Python code)
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000191
192As all the Python specific patches for the port are now part of the
193Python release tarball, only the patches and makefiles involved in
194building external libraries for optional extensions are included in
195the source archive.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000196
Christian Heimes292d3512008-02-03 16:51:08 +0000197Documentation for the Python language, as well as the Python 2.6
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000198source distibution, can be obtained from the Python website
199(http://www.python.org/) or the Python project pages at Sourceforge
200(http://sf.net/projects/python/).
201
202
203Installation
204------------
205
206Obtain and install, as per the included instructions, the EMX runtime
207package.
208
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000209Unpack this archive, preserving the subdirectories, in the root directory
210of the drive where you want Python to live.
211
Christian Heimes292d3512008-02-03 16:51:08 +0000212Add the Python directory (eg C:\Python26) to the PATH and LIBPATH
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000213variables in CONFIG.SYS.
214
215You should then set the PYTHONHOME and PYTHONPATH environment variables
216in CONFIG.SYS.
217
218PYTHONHOME should be set to Python's top level directory. PYTHONPATH
219should be set to the semicolon separated list of principal Python library
220directories.
221I use:
Christian Heimes292d3512008-02-03 16:51:08 +0000222 SET PYTHONHOME=F:/Python26
223 SET PYTHONPATH=F:/Python26/Lib;F:/Python26/Lib/plat-os2emx;
224 F:/Python26/Lib/lib-dynload;F:/Python26/Lib/site-packages
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000225
226NOTE!: the PYTHONPATH setting above is linewrapped for this document - it
227should all be on one line in CONFIG.SYS!
228
229If you wish to use the curses module, you should set the TERM and TERMINFO
230environment variables appropriately.
231
232If you don't already have ncurses installed, I have included a copy of the
233EMX subset of the Terminfo database included with the ncurses-5.2 source
234distribution. This can be used by setting the TERMINFO environment variable
235to the path of the Terminfo subdirectory below the Python home directory.
236On my system this looks like:
Christian Heimes292d3512008-02-03 16:51:08 +0000237 SET TERMINFO=F:/Python26/Terminfo
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000238
239For the TERM environment variable, I would try one of the following:
240 SET TERM=ansi
241 SET TERM=os2
242 SET TERM=window
243
244You will have to reboot your system for these changes to CONFIG.SYS to take
245effect.
246
247If you wish to compile all the included Python library modules to bytecode,
248you can change into the Python home directory and run the COMPILEALL.CMD
249batch file.
250
Christian Heimes292d3512008-02-03 16:51:08 +0000251You can execute the regression tests included with the Python 2.6 source
252distribution by changing to the Python 2.6 home directory and executing the
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000253REGRTEST.CMD batch file. The following tests are known to fail at this
254time:
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000255- test_mhlib (I don't know of any port of MH to OS/2);
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000256- test_strptime (see "YOU HAVE BEEN WARNED" item 22);
Andrew MacIntyrec2138af2003-12-02 12:23:07 +0000257- test_time (see "YOU HAVE BEEN WARNED" item 22);
258- test_posixpath (see "YOU HAVE BEEN WARNED" item 23).
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000259
260Note that some of the network related tests expect the loopback interface
261(interface "lo", with IP address 127.0.0.1) to be enabled, which from my
262experience is not the default configuration. Additionally, test_popen2
263expects the "cat" utility (such as found in ports of the GNU tools) to
264be installed.
265
266
267Building from source
268--------------------
269
270With the EMX port now checked into Python's CVS repository, the build
271infrastructure is part of the Python release sourceball.
272
273Prerequisites
274
275First and foremost, you need an operational EMX development installation -
276EMX v0.9d with fix04 (the latest at time of writing) & the gcc 2.8.1
277compiler released by Eberhard Mattes is the recommended setup.
278
279If you have a different version of gcc installed, see "YOU HAVE BEEN
280WARNED" item 16.
281
282Other items of software required:-
283
284- GNU make (I'm using v3.76.1)
285- rm, cp, mkdir from the GNU file utilities package
286- GNU find
Andrew MacIntyrec2138af2003-12-02 12:23:07 +0000287- GNU sed
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000288
289Procedure
290
2910. all changes mentioned apply to files in the PC/os2emx subdirectory
292 of the Python release source tree. make is also executed from this
293 directory, so change into this directory before proceeding.
294
2951. decide if you need to change the location of the Python installation.
296 If you wish to do this, set the value of the Makefile variable LIB_DIR
297 to the directory you wish to use for PYTHONHOME
Christian Heimes292d3512008-02-03 16:51:08 +0000298 (eg /usr/local/lib/python2.6).
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000299
300 If you want Python to find its library without the PYTHONHOME
301 environment variable set, set the value of the Makefile variable
302 FIXED_PYHOME to "yes" (uncomment the appropriate line).
303
3042. If you wish the Python executables (python.exe, pythonpm.exe & pgen.exe)
305 to be installed in a directory other than the PYTHONHOME directory, set
306 the value of the Makefile variable EXE_DIR to the appropriate directory.
307
Georg Brandlfa2c61a2011-02-20 10:41:31 +00003083. If you wish the Python core DLL (python33.dll) to be installed in a
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000309 directory other than the directory in which the Python executables are
310 installed (by default, the PYTHONHOME directory), set the value of the
311 Makefile variable DLL_DIR to the appropriate directory. This DLL must
312 be placed in a directory on the system's LIBPATH, or that gets set
313 with BEGINLIBPATH or ENDLIBPATH.
314
3154. If you have installed any of the libraries that can be used to build
316 optional Python modules, set the value of the relevant HAVE_<package>
317 Makefile variable to "yes". The Makefile currently supports:
318
319 library Makefile variable
320 ........................................
321 zlib (1.1.4) HAVE_ZLIB
322 GNU UltraFast Crypt HAVE_UFC
323 Tcl/Tk HAVE_TCLTK (not known to work)
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000324 GNU Readline HAVE_GREADLINE
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000325 ncurses HAVE_NCURSES
326 GNU gdbm HAVE_GDBM
327 libbz2 HAVE_BZ2
Andrew MacIntyre578371f2005-02-17 12:46:34 +0000328 OpenSSL HAVE_OPENSSL
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000329
330 Please note that you need to check that what you have installed
331 is compatible with Python's build options. In particular, the
332 BSD DB v1.85 library needs to be rebuilt with a source patch for
333 multithread support (doesn't change the library's reentrant status
334 but allows it to be linked to Python which is multithreaded).
335 Widely available binary packages of other librarys & DLLs are
336 not built/linked with multithread support. Beware!
337
338 Also note that the Makefile currently expects any libraries to be
339 found with the default library search path. You may need to add
340 -L switches to the LDFLAGS Makefile variable if you have installed
341 libraries in directories not in the default search path (which can
342 be controlled by the LIBRARY_PATH environment variable used by EMX).
343
3445. make
345
346 It is usually a good idea to redirect the stdout and stderr streams
347 of the make process to log files, so that you can review any messages.
348
3496. make test
350
351 This runs the Python regression tests, and completion is a sign of
352 a usable build. You should check the list of skipped modules to
353 ensure that any optional modules you selected have been built;
354 checking the list of failures against the list of known failures
355 elsewhere in this document is also prudent.
356
3577. make install
358 >>>>>> NOT YET COMPLETE <<<<<<
359
3608. change to a directory outside the Python source tree and start Python.
361 Check the version and build date to confirm satisfactory installation.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000362
363
364YOU HAVE BEEN WARNED!!
365----------------------
366
367I know about a number of nasties in this port.
368
Andrew MacIntyre631e87f2003-04-21 14:33:04 +00003691. Eberhard Mattes, author of EMX, writes in his documentation that fork()
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000370is very inefficient in the OS/2 environment. It also requires that the
371executable be linked in a.out format rather than OMF. Use the os.exec
372and/or the os.spawn family of functions where possible.
373
Andrew MacIntyre631e87f2003-04-21 14:33:04 +00003742. In the absence of GNU Readline, terminating the interpreter requires a
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000375control-Z (^Z) followed by a carriage return. Jeff Rush documented this
376problem in his Python 1.5.2 port. With Readline, a control-D (^D) works
377as per the standard Unix environment.
378
Andrew MacIntyre631e87f2003-04-21 14:33:04 +00003793. EMX only has a partial implementation of fcntl(). The fcntl module
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000380in this port supports what EMX supports. If fcntl is important to you,
381please review the EMX C Library Reference (included in .INF format in the
382EMXVIEW.ZIP archive as part of the complete EMX development tools suite).
383Because of other side-effects I have modified the test_fcntl.py test
384script to deactivate the exercising of the missing functionality.
385
Georg Brandl1158a332009-06-04 09:30:30 +00003864. The readline module has been linked against ncurses rather than the
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000387termcap library supplied with EMX.
388
Georg Brandl1158a332009-06-04 09:30:30 +00003895. I have configured this port to use "/" as the preferred path separator
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000390character, rather than "\" ('\\'), in line with the convention supported
391by EMX. Backslashes are still supported of course, and still appear in
392unexpected places due to outside sources that don't get normalised.
393
Georg Brandl1158a332009-06-04 09:30:30 +00003946. While the DistUtils components are now functional, other
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000395packaging/binary handling tools and utilities such as those included in
396the Demo and Tools directories - freeze in particular - are unlikely to
397work. If you do get them going, I'd like to know about your success.
398
Georg Brandl1158a332009-06-04 09:30:30 +00003997. I haven't set out to support the [BEGIN|END]LIBPATH functionality
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000400supported by one of the earlier ports (Rush's??). If it works let me know.
401
Georg Brandl1158a332009-06-04 09:30:30 +00004028. As a result of the limitations imposed by EMX's library routines, the
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000403standard extension module pwd only synthesises a simple passwd database,
404and the grp module cannot be supported at all.
405
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000406I have written pure Python substitutes for pwd and grp, which can process
407real passwd and group files for those applications (such as MailMan) that
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000408require more than EMX emulates. I have placed pwd.py and grp.py in
409Lib/plat-os2emx, which is usually before Lib/lib-dynload (which contains
410pwd.pyd) in the PYTHONPATH. If you have become attached to what pwd.pyd
411supports, you can put Lib/lib-dynload before Lib/plat-os2emx in PYTHONPATH
412or delete/rename pwd.py & grp.py.
413
414pwd.py & grp.py support locating their data files by looking in the
415environment for them in the following sequence:
416pwd.py: $ETC_PASSWD (%ETC_PASSWD%)
417 $ETC/passwd (%ETC%/passwd)
418 $PYTHONHOME/Etc/passwd (%PYTHONHOME%/Etc/passwd)
419grp.py: $ETC_GROUP (%ETC_GROUP%)
420 $ETC/group (%ETC%/group)
421 $PYTHONHOME/Etc/group (%PYTHONHOME%/Etc/group)
422
Andrew MacIntyreb0f5e5a2003-07-10 12:55:30 +0000423The ETC_PASSWD and ETC_GROUP environment variables are intended to allow
424support for multiple passwd/grp files, where other applications may not
425support as wide a variety of input variations (drive remappings,
426separators etc).
427
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000428Both modules support using either the ":" character (Unix standard) or
429";" (OS/2, DOS, Windows standard) field separator character, and pwd.py
430implements the following drive letter conversions for the home_directory and
431shell fields (for the ":" separator only):
432 $x -> x:
433 x; -> x:
434
Andrew MacIntyreb0f5e5a2003-07-10 12:55:30 +0000435Example versions of passwd and group are in the Etc subdirectory. The
436regression tests (test_pwd and test_grp) will fail if valid password and
437group files cannot be found, but should pass otherwise.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000438
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000439Be aware that Python's pwd & group modules are for reading password and
440group information only.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000441
Andrew MacIntyre631e87f2003-04-21 14:33:04 +000044211. EMX's termios routines don't support all of the functionality now
443exposed by the termios module - refer to the EMX documentation to find
444out what is supported.
445
44612. The case sensitive import semantics introduced in Python 2.1 for other
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000447case insensitive but case preserving file/operating systems (Windows etc),
448have been incorporated into this port, and are active by default. Setting
449the PYTHONCASEOK environment variable (to any value) reverts to the
Andrew MacIntyrec2138af2003-12-02 12:23:07 +0000450previous (case insensitive) semantics. This can be an issue with some
451file management utilities that do not preserve the case of file and
452directory names.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000453
Andrew MacIntyre631e87f2003-04-21 14:33:04 +000045413. Because I am statically linking ncurses, the _curses_panel
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000455module has potential problems arising from separate library data areas.
456To avoid this, I have configured the _curses_.pyd (imported as
Andrew MacIntyrec2138af2003-12-02 12:23:07 +0000457"_curses_panel") to import the ncurses symbols it needs from _curses.dll
458(which is the curses module, but with a .dll extension rather than .pyd
459so that the dynamic loader can actually import the symbols from it as a
460DLL).
461
462The site module (Lib/site.py) has code added to tweak BEGINLIBPATH so
463that _curses.dll is found when _curses_panel is imported. If you have
464problems attempting to use the _curses_panel support please let me know,
465and I'll have another look at this.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000466
Andrew MacIntyre631e87f2003-04-21 14:33:04 +000046714. sys.platform reports "os2emx" instead of "os2". os.name still
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000468reports "os2". This change was to make it easier to distinguish between
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000469the VAC++ build (formerly maintained by Michael Muller) and the EMX build
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000470(this port), principally for DistUtils.
471
Andrew MacIntyre631e87f2003-04-21 14:33:04 +000047215. it appears that the %W substitution in the EMX strftime() routine has
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000473an off-by-one bug. strftime was listed as passing the regression tests
474in previous releases, but this fact appears to have been an oversight in
475the regression test suite. To fix this really requires a portable
476strftime routine - I'm looking into using one from FreeBSD, but its not
477ready yet.
478
Andrew MacIntyre631e87f2003-04-21 14:33:04 +000047916. I have successfully built this port with Andy Zabolotny's ports of
Georg Brandl1158a332009-06-04 09:30:30 +0000480pgcc 2.95 and gcc 3.2.1, in addition to EM's gcc 2.8.1.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000481
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000482I have not attempted to compile Python with any version of gcc prior to
483v2.8.1.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000484
Andrew MacIntyrebac1ea92003-07-16 13:31:11 +0000485This release sees the default optimisation change to
Andrew MacIntyrec2138af2003-12-02 12:23:07 +0000486"-O3 -fomit-frame-pointer -mprobe". This works fine too for pgcc 2.95
487but not for gcc 3.2.1.
Andrew MacIntyrebac1ea92003-07-16 13:31:11 +0000488
489With gcc 3.2.1, -O3 causes 2 unexpected test failures: test_format and
490test_unicode. Both these tests pass if -O2 is instead of -O3 with this
491compiler, and the performance difference is negligible (in contrast to
492gcc 2.8.1 and pgcc 2.95, where the performance difference between the
4932 optimisation settings approaches 10%).
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000494
Andrew MacIntyre631e87f2003-04-21 14:33:04 +000049517. os.spawnv() and os.spawnve() expose EMX's library routines rather
496than use the emulation in os.py.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000497
498In order to make use of some of the features this makes available in
499the OS/2 environment, you should peruse the relevant EMX documentation
500(EMXLIB.INF in the EMXVIEW.ZIP archive accompanying the EMX archives
501on Hobbes or LEO). Be aware that I have exposed all the "mode" options
502supported by EMX, but there are combinations that either cannot be
503practically used by/in Python or have the potential to compromise your
504system's stability.
505
Andrew MacIntyre631e87f2003-04-21 14:33:04 +000050618. pythonpm.exe used to be just python.exe with the WINDOWAPI linker
507option set in the pythonpm.def file. In practice, this turns out to do
508nothing useful.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000509
510I have written a replacement which wraps the Python DLL in a genuine
511Presentation Manager application. This version actually runs the
512Python interpreter in a separate thread from the PM shell, in order
513that PythonPM has a functioning message queue as good PM apps should.
514In its current state, PythonPM's window is hidden. It can be displayed,
515although it will have no content as nothing is ever written to the
516window. Only the "hide" button is available. Although the code
517has support for shutting PythonPM down when the Python interpreter is
518still busy (via the "control" menu), this is not well tested and given
519comments I've come across in EMX documentation suggesting that the
520thread killing operation has problems I would suggest caution in
521relying on this capability.
522
523PythonPM processes commandline parameters normally. The standard input,
524output and error streams are only useful if redirected, as PythonPM's
525window is not a console in any form and so cannot accept or display
526anything. This means that the -i option is ineffective.
527
528Because the Python thread doesn't create its own message queue, creating
529PM Windows and performing most PM operations is not possible from within
530this thread. How this will affect supporting PM extensions (such as
531Tkinter using a PM port of Tcl/Tk, or wxPython using the PM port of
532WxWindows) is still being researched.
533
534Note that os.fork() _DOES_NOT_WORK_ in PythonPM - SYS3175s are the result
535of trying. os.spawnv() _does_ work. PythonPM passes all regression tests
536that the standard Python interpreter (python.exe) passes, with the exception
537of test_fork1 and test_socket which both attempt to use os.fork().
538
539I very much want feedback on the performance, behaviour and utility of
540PythonPM. I would like to add a PM console capability to it, but that
541will be a non-trivial effort. I may be able to leverage the code in
542Illya Vaes' Tcl/Tk port, which would make it easier.
543
Andrew MacIntyre631e87f2003-04-21 14:33:04 +000054419. os.chdir() uses EMX's _chdir2(), which supports changing both drive
545and directory at once. Similarly, os.getcwd() uses EMX's _getcwd()
546which returns drive as well as path.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000547
Andrew MacIntyre631e87f2003-04-21 14:33:04 +000054820. pyconfig.h is installed in the Include subdirectory with all
549other include files.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000550
Andrew MacIntyre631e87f2003-04-21 14:33:04 +000055121. the default build explicitly sets the number of file handles
552available to a Python process to 250. EMX default is 40, which is
553insufficient for the tempfile regression test (test_tempfile) which
554tries to create 100 temporary files.
Andrew MacIntyreffcf8992002-08-18 06:28:21 +0000555
556This setting can be overridden via the EMXOPT environment variable:
557 set EMXOPT=-h250
558is equivalent to the setting currently used. The emxbind utility (if you
559have it installed) can also be used to permanently change the setting in
560python.exe - please refer to the EMX documentation for more information.
561
Andrew MacIntyre631e87f2003-04-21 14:33:04 +000056222. a pure python strptime module is now part of the Python standard
563library, superceding a platform specific extension module. This module
564leverages the strftime module, and as a result test_strptime fails
565due to the EMX strftime bug in item 20 above.
566
Andrew MacIntyrec2138af2003-12-02 12:23:07 +000056723. test_posixpath attempts to exercise various Posix path related
568functionality. Most of the sub-tests pass, but the "ismount" and
569"samestat" subtests fail:
570- EMX provides not satisfactory mount point emulation, so "ismount"
571 cannot succeed;
572- EMX documents that successive stat() calls will produce different
573 results, so "samestat" cannot succeed.
574
575test_posixpath should skip these tests on EMX.
576
Thomas Wouters0e3f5912006-08-11 14:57:12 +000057724. I have reports of BitTorrent not working. It appears that the
578EMX select() emulation, possibly in concert with bugs in the TCP/IP
579stack, runs into problems under the stress imposed by this application.
580I think it suffices to say that BitTorrent is a fair stress test of a
581system's networking capability.
Andrew MacIntyrec2138af2003-12-02 12:23:07 +0000582
58325. In the absence of an EMX implementation of the link() function, I've
584implemented a crude Python emulation, in the file
585Lib/plat-os2emx/_emx_link.py. This is imported into the os module, and
586becomes available as os.link() in the normal way.
587
588The emulation copies the source file in binary mode, and will fail if
589disk space is exhausted. The call fails if the target already exists.
590There are no guarantees to thread safety with this emulation - beware!
591
592The emulation was written to support a link() based file locking system
593used in GNU Mailman.
594
Andrew MacIntyreb8882002004-04-11 12:05:28 +000059526. AF_UNIX sockets, otherwise known as Unix domain sockets, are now
596supported. Unfortunately, there are some traps arising from the
597implementation in IBM's TCP/IP stack:-
598- the path name must start with '\\socket\\' ('/socket/' won't work!),
599 with the length of the full path name less than 108 characters;
600- unlike Unix, the socket endpoints don't exist in the filesystem;
601- by default, sockets are in binary mode.
602
Andrew MacIntyre3dac89e2004-10-03 08:26:36 +000060327. As of Python 2.4, the mpz, rotor and xreadlines modules have been
604dropped from the Python source tree.
605
Andrew MacIntyre578371f2005-02-17 12:46:34 +000060628. The subprocess module was added to the standard library relatively
607late in the 2.4 development cycle. Unfortunately I haven't had the
608round tuits to adapt the module to the EMX environment yet, and
609test_subprocess has a number of failures as a result.
610
61129. The default stack size for threads has been 64k. This is proving
612insufficient for some codebases, such as Zope. The thread stack size
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000613still defaults to 64k, but this can now be increased via the stack_size()
614function exposed by the threading & thread modules as well as by defining
Andrew MacIntyre578371f2005-02-17 12:46:34 +0000615THREAD_STACK_SIZE to an appropriate value in the Makefile (which contains
616a commented out definition for 128kB thread stacks). I have seen
617references to heavy Zope/Plone usage requiring 1MB thread stacks on
618FreeBSD and Linux, but doubt that for most likely usage on OS/2 that
619more than 256kB is necessary. The size of the required stacks (main
620and thread) can vary significantly depending on which version of gcc
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000621is used along with the compiler optimisations selected. Note that the
622main thread stack size is set during linking and is currently 2MB.
Andrew MacIntyre578371f2005-02-17 12:46:34 +0000623
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000624... probably other issues that I've not encountered, or don't remember :-(
625
626If you encounter other difficulties with this port, which can be
627characterised as peculiar to this port rather than to the Python release,
628I would like to hear about them. However I cannot promise to be able to do
629anything to resolve such problems. See the Contact section below...
630
631
632To do...
633--------
634
635In no particular order of apparent importance or likelihood...
636
637- support Tkinter and/or alternative GUI (wxWindows??)
638
639
640Credits
641-------
642
643In addition to people identified above, I'd like to thank:
644- the BDFL, Guido van Rossum, and crew for Python;
645- Dr David Mertz, for trying out a pre-release of this port;
646- the Python-list/comp.lang.python community;
647- John Poltorak, for input about pwd/grp.
648
649Contact
650-------
651
652Constructive feedback, negative or positive, about this port is welcome
653and should be addressed to me at the e-mail addresses below.
654
Andrew MacIntyre631e87f2003-04-21 14:33:04 +0000655I have a private mailing list for announcements of fixes & updates to
656this port. If you wish to receive such e-mail announcments, please send
657me an e-mail requesting that you be added to this list.
Andrew MacIntyre41d97d62002-02-17 05:23:30 +0000658
659Andrew MacIntyre
660E-mail: andymac@bullseye.apana.org.au, or andymac@pcug.org.au
661Web: http://www.andymac.org/
662
Christian Heimes292d3512008-02-03 16:51:08 +000066328 January, 2008.