blob: ea186a40a6eb38a6d0063e1a404b847e4a9be548 [file] [log] [blame]
Guido van Rossumbed266a1996-10-22 22:08:02 +00001Subject: AIX-NOTES FOR 1.4
Guido van Rossum9dc78331996-08-09 14:38:40 +00002From: Manus Hand <Manus.Hand@evolving.com>
Guido van Rossum47427671996-11-27 19:38:00 +00003To: guido@CNRI.Reston.VA.US
4cc: Vladimir.Marangozov@imag.fr
5Date: Fri, 25 Oct 1996 15:19:23 -0600 (MDT)
Guido van Rossum9dc78331996-08-09 14:38:40 +00006
7==============================================================================
8 COMPILER INFORMATION
9------------------------------------------------------------------------------
10
11(1) A problem has been reported with "make test" failing because of "weird
12 indentation." Searching the comp.lang.python newsgroup reveals several
13 threads on this subject, and it seems to be a compiler bug in an old
14 version of the AIX CC compiler. However, the compiler/OS combination
15 which has this problem is not identified. In preparation for the 1.4
16 release, Vladimir Marangozov (Vladimir.Marangozov@imag.fr) and Manus Hand
17 (mhand@csn.net) reported no such troubles for the following compilers and
18 operating system versions:
19 AIX C compiler version 3.1.2 on AIX 4.1.3 and AIX 4.1.4
20 AIX C compiler version 1.3.0 on AIX 3.2.5
21 If you have this problem, please report the compiler/OS version.
22
23(2) Stefan Esser (se@MI.Uni-Koeln.DE), in work done to compile Python
24 1.0.0 on AIX 3.2.4, reports that AIX compilers don't like the LANG
25 environment varaiable set to European locales. This makes the compiler
26 generate floating point constants using "," as the decimal seperator,
27 which the assembler doesn't understand (or perhaps it is the other way
28 around, with the assembler expecting, but not getting "," in float
29 numbers). "LANG=C; export LANG" solves the problem, as does
30 "LANG=C $(MAKE) ..." in the master Makefile.
31
32(3) The cc (or xlc) compiler considers "Python/ceval.c" too complex to
33 optimize, except when invoked with "-qmaxmem=4000"
34
35(4) Some problems (due to _AIX not being #defined) when python 1.0.0 was
36 compiled using 'gcc -ansi' were reported by Stefan Esser, but were not
37 investigated.
38
39(5) The cc compiler has internal variables named "__abs" and "__div". These
40 names are reserved and may not be used as program variables in compiled
41 source. (As an anecdote in support of this, the implementation of
42 Python/operator.c had this problem in the 1.4 beta releases, and the
43 solution was to re#define some core-source variables having these names,
44 to give these python variables different names if the build is being done
45 on AIX.)
46
47(6) As mentioned in the README, builds done immediately after previous builds
48 (without "make clean" or "make clobber") sometimes fail for mysterious
49 reasons. There are some unpredictable results when the configuration
50 is changed (that is, if you "configure" with different parameters) or if
51 intermediate changes are made to some files. Performing "make clean" or
52 "make clobber" resolves the problems.
53
54==============================================================================
55 THREAD SUPPORT
56------------------------------------------------------------------------------
57
58AIX uses pthreads. However, as of AIX version 4, there are two (incompatible)
59types of pthreads on AIX:
60 a) AIX DCE pthreads (on AIX 3.2.5)
61 b) AIX 4 pthreads (on AIX 4.1 and up)
62Support has been added to Python to handle the distinction.
63
64The cc and gcc compilers do not initialize pthreads properly. The only
65compilers that can initialize pthreads properly are IBM *_r* compilers,
66which use the crt0_r.o module, and which invoke ld with the reentrant
67version of libc (libc_r).
68
69In order to enable thread support, follow these steps:
70 1. Uncomment the thread module in Modules/Setup
71 2. configure --without-gcc --with-thread ...
72 3. make CC="cc_r" OPT="-O -qmaxmem=4000"
73
74For example, to make with both threads and readline, use:
75 ./configure --without-gcc --with-thread --with-readline=/usr/local/lib
76 make CC=cc_r OPT="-O2 -qmaxmem=4000"
77
78If the "make" which is used ignores the "CC=cc_r" directive, one could alias
79the cc command to cc_r (for example, in C-shell, perform an "alias cc cc_r").
80
81Vladimir Marangozov (Vladimir.Marangozov@imag.fr) provided this information,
82and he reports that a cc_r build initializes threads properly and that all
83demos on threads run okay with cc_r.
84
85==============================================================================
86 SHARED LIBRARY SUPPORT
87------------------------------------------------------------------------------
88
89AIX shared library support was added to Python in the 1.4 release by Manus
90Hand (mhand@csn.net) and Vladimir Marangozov (Vladimir.Marangozov@imag.fr).
91
Guido van Rossumbed266a1996-10-22 22:08:02 +000092Python modules may now be built as shared libraries on AIX using the normal
Guido van Rossum47427671996-11-27 19:38:00 +000093process of uncommenting the "*shared*" line in Modules/Setup.in before the
Guido van Rossum9dc78331996-08-09 14:38:40 +000094build. There is one additional step required, and that is to also uncomment
95the line in Modules/Setup.in which reads
96 LINKCC= makexp_aix python.exp "" $(MYLIBS) $(ADDOBJS) ; $(CC)
97
98AIX shared libraries require that an "export" and "import" file be provided
99at compile time to list all extern symbols which may be shared between
100modules. The effect of uncommenting the LINKCC line in Modules/Setup.in is
101to create the "export" file for the modules and the libraries that belong to
102the Python core. This is done by the "makexp_aix" script, which creates a
103file named python.exp before performing the link of the python binary.
104
105When shared library modules (.so files) are made, a second shell script
106is invoked. This script is named "ld_so_aix" and is also provided with
107the distribution in the Modules subdirectory. This script acts as an "ld"
108wrapper which hides the explicit management of "export" and "import" files;
109it adds the appropriate arguments (in the appropriate order) to the link
110command that creates the shared module. Among other things, it specifies
111that the "python.exp" file is an "import" file for the shared module.
112
113A default python.exp file is provided with the distribution. It will be
114overwritten (by the action of the makexp_aix script) if you build with shared
115libraries. The python.exp file which comes with the distribution contains
Guido van Rossum5c8e2561996-08-20 20:53:04 +0000116all extern symbols of a completely statically built python executable.
Guido van Rossum9dc78331996-08-09 14:38:40 +0000117Any python.exp file which is created from a build of python with some of the
118modules linked as shared modules will obviously not list symbols from the now
119dynamic modules. The distributed python.exp is provided so that, with
120assistance from the ld_so_aix and makexp_aix scripts, shared extension
121modules may be added to an otherwise completely static python build.
122
123At the time of this writing, neither the python.exp file nor the makexp_aix
124or ld_so_aix scripts are installed by the make procedure, so you should
125remember to keep these and/or copy them to a different location for
126safekeeping if you wish to use them to add shared extension modules to
127python. However, if the make process has been updated since this writing,
128these files MAY have been installed for you during the make by the
129LIBAINSTALL rule, in which case the need to make safe copies is obviated.
130
131If you wish to add a shared extension module to the language, you would follow
132the steps given in the example below (the example adds the shared extension
133module "spam" to python):
134 1. Make sure that "ld_so_aix" and "makexp_aix" are in your path.
135 2. The "python.exp" file should be in the current directory.
136 3. Issue the following commands or include them in your Makefile:
137 cc -c spammodule.c
138 ld_so_aix cc spammodule.o -o spammodule.so
139
140For more detailed information on the shared library support, examine the
141contents of the "ld_so_aix" and "makexp_aix" scripts or refer to the AIX
142documentation.
143
Guido van Rossumbed266a1996-10-22 22:08:02 +0000144NOTE: If the extension module is written in C++ and contains templates,
145 an alternative to "ld_so_aix" is the /usr/lpp/xlC/bin/makeC++SharedLib
146 script. Chris Myers (myers@TC.Cornell.EDU) reports that ld_so_aix
147 works well for some C++ (including the C++ that is generated
148 automatically by the Python SWIG package [SWIG can be found at
149 http://www.cs.utah.edu/~beazley/SWIG/swig.html]). However, it is not
150 known whether makeC++SharedLib can be used as a complete substitute
151 for ld_so_aix.
152
Guido van Rossum9dc78331996-08-09 14:38:40 +0000153==============================================================================