[mod_python] make failed on AIX 5.1 using xlc

Hans-Joachim Ehlers HansJoachim.Ehlers at eumetsat.int
Tue Jan 10 06:47:08 EST 2006


>Find where '-El,-bE' is defined in the Python installed Makefile and
>email back that line and the few either side of it.
I think you mean : '-Wl,bE' This option is set with the   LINKFORSHARED
Variable
See extract from Makefile and configure.in 
BTW: The python tarball has a ./Python-2.4.2/Modules/python.exp

Shell i open a bug with the python group ?

Regarding:

>> but still compiles
>
> If that is the line:
>   static int yy_init_globals (yyscan_t yyscanner ) {return 0;};

Yes it is this line 

>
> it is because of the extraneous semicolon on the end of the line.
From
>memory, both AIX C compiler and Sun C++ compiler would complain about
> such extra semicolons.

So i can ignore the error message or do i have to change that line ?

regards
Hajo


>From /usr/local/lib/python/config/Makefile ( +NNN means line No. )

   +34  LINKCC=         $(srcdir)/Modules/makexp_aix Modules/python.exp
. $(LIBRARY); $(PURIFY) $(CC)

   +56  # Compiler options
   +57  OPT=            -O
   +58  BASECFLAGS=
   +59  CFLAGS=         $(BASECFLAGS) $(OPT)
   +60  CPPFLAGS=       -I. -I$(srcdir)/Include
   +61  LDFLAGS=        -L/opt/freeware/lib -ltk8.3 -ltcl8.3
   +62  LDLAST=
   +63  SGI_ABI=
   +64  CCSHARED=
   +65  LINKFORSHARED=  -Wl,-bE:Modules/python.exp -lld
   +66  # Extra C flags added for building the interpreter object
files.
   +67  CFLAGSFORSHARED=
   +68  # C flags used for building the interpreter object files
   +69  PY_CFLAGS=      $(CFLAGS) $(CPPFLAGS) $(CFLAGSFORSHARED)
-DPy_BUILD_CORE
   +70

   +96  # Symbols used for using shared libraries
   +97  SO=             .so
   +98  LDSHARED=       $(BINLIBDEST)/config/ld_so_aix $(CC)
-bI:$(BINLIBDEST)/config/python.exp
   +99  BLDSHARED=      $(srcdir)/Modules/ld_so_aix $(CC)
-bI:Modules/python.exp

  +326  # Build the interpreter
  +327  $(BUILDPYTHON): Modules/$(MAINOBJ) $(LIBRARY) $(LDLIBRARY)
  +328                  $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) -o $@ \
  +329                          Modules/$(MAINOBJ) \
  +330                          $(BLDLIBRARY) $(LIBS) $(MODLIBS)
$(SYSLIBS) $(LDLAST)

Extract from the Python configure.in
...
# This is altered for AIX in order to build the export list before
# linking.
AC_SUBST(LINKCC)
AC_MSG_CHECKING(LINKCC)
if test -z "$LINKCC"
then
....
        AIX*)
           exp_extra="\"\""
           if test $ac_sys_release -ge 5 -o \
                   $ac_sys_release -eq 4 -a `uname -r` -ge 2 ; then
               exp_extra="."
           fi
           LINKCC="\$(srcdir)/Modules/makexp_aix Modules/python.exp
$exp_extra \$(LIBRARY); $LINKCC";;
....
fi
....
# Python, as opposed to building Python itself as a shared library.)
AC_MSG_CHECKING(LDSHARED)
if test -z "$LDSHARED"
then
        case $ac_sys_system/$ac_sys_release in
        AIX*)
                BLDSHARED="\$(srcdir)/Modules/ld_so_aix \$(CC)
-bI:Modules/python.exp"
                LDSHARED="\$(BINLIBDEST)/config/ld_so_aix \$(CC)
-bI:\$(BINLIBDEST)/config/python.exp"
                ;;
.....
# LINKFORSHARED are the flags passed to the $(CC) command that links
# the python executable -- this is only needed for a few systems
AC_MSG_CHECKING(LINKFORSHARED)
if test -z "$LINKFORSHARED"
then
        case $ac_sys_system/$ac_sys_release in
        AIX*)   LINKFORSHARED='-Wl,-bE:Modules/python.exp -lld';;
.....






>>> Graham Dumpleton <grahamd at dscpl.com.au> 10/01/06 11:33 >>>

On 10/01/2006, at 9:18 PM, Hans-Joachim Ehlers wrote:

> 2)
> Under AIX the Compilation of python is somehow quite uncommon
> Just see the out from from the mod_python make:
>
> /usr/local/apache2/build/libtool --silent --mode=link xlc_r -o
> mod_python.la  -rpath /usr/local/apache2/modules -module
-avoid-version
> -Wl,-brtl  hlistobject.lo hlist.lo filterobject.lo connobject.lo
> serverobject.lo util.lo tableobject.lo requestobject.lo 
> _apachemodule.lo
> mod_python.lo -L/usr/local/lib/python2.4/config
> -Wl,-bE:Modules/python.exp -lld -L/opt/freeware/lib -ltk8.3 -ltcl8.3

> -lm
> -lpython2.4 -ldl -lm
> ld: 0706-004 Cannot find or read export file: Modules/python.exp
>
> These ./python.exp can be found as
> /usr/local/lib/python2.4/config/python.exp in the installed python
> distribution
> So the Makefile for Modpython should have a Section for AIX where
the
> makefile does the following:
> Get the python installation directory ( in my case
> /usr/local/lib/python2.4 )
> Create a Subdirectory in ./src for Modules ( mkdir Modules )
> Creates a Link in ./src/Modules to
> /usr/local/lib/python2.4/config/python.exp
>
> OR
> just makes mkdir ./src/Modules && touch ./src/Modules/python.exp
>
> I have tested both without problems but i would prefer the first
one.

Look at /usr/local/lib/python2.4/config/Makefile. The mod_python
makefile is most likely getting the '-Wl,-bE:Modules/python.exp'
out of there.

Either one of two things might be wrong. First might be that the
option is exactly that and therefore that Makefile in Python is wrong.

Second thing that might be wrong is that the option is actually
written as '-El,-bE:$(DESTDIR)$(LIBPL)/python.exp' and that is what
mod_python is using but DESTDIR and LIBPL aren't actually set and
thus are being replaced with nothing.

If the latter, one might argue that mod_python could set one or both
of these variables in its makefile somehow to ensure they are expanded
correctly.

Find where '-El,-bE' is defined in the Python installed Makefile and
email back that line and the few either side of it.

> After that i get from a make:
> xlc_r -O -Isrc/include -I/usr/local/include/python2.4 -c
> src/_pspmodule.c -o build/temp.aix-5.1-2.4/src/_pspmodule.o
> "src/_pspmodule.c", line 32.61: 1506-137 (E) Declaration must
declare
> at least one declarator, tag, or the members of an enumeration.
>
> but still compiles

If that is the line:

   static int yy_init_globals (yyscan_t yyscanner ) {return 0;};

it is because of the extraneous semicolon on the end of the line. From
memory, both AIX C compiler and Sun C++ compiler would complain about
such extra semicolons.

> A make install will pass with out any error
> I would like to provide a patch file for the Makefile but i am a
totaly
> newbe to C programming and building so i hope the above information 
> will
> help
>
> No runtime testing has been done yet
>
> With kind regards
> Hajo
>
>
>>>> "Graham Dumpleton" <grahamd at dscpl.com.au> 09/01/06 22:38 >>>
> Seems to be some quirk with xlc compiler. Never liked that compiler,
> always did strange things.
>
> Try hacking the code so that instead of:
>
>   (destructor)request_dealloc,     /* tp_free */
>
> it says:
>
>   (void(*)(void*))request_dealloc,     /* tp_free */
>
> Try a typedef for the function pointer if I got the cast wrong or it
> doesn't want to accept that.
>
> Graham
>
> Hans-Joachim Ehlers wrote ..
>> Hi folk,
>> i am trying to build mod-python 3.1.4 on AIX 5.1 with xlc
>> During the gmake i get the following error: .... 1506-196 (E)
>> Initialization between types "void(*)(void*)" and "void(*)(struct
>> _object*)" is not allowed
>>
>> any Tips ?
>> tai
>> Hajo
>>
>> For details see below
>>
>> given:
>> AIX 5.1
>> vac 6.0 ( IBM xlc)
>> mod-python 3.1.4
>> Python 2.4.2 build as shared Lib application
>> Apache 2.0.55
>>
>> $ ./configure CC=xlc_r \
>>  --with-thread       \
>>  --with-python=/usr/local/bin/python \
>>  --with-apxs=/usr/local/apache2/bin/apxs
>>
>>
>> $ gmake[1]: Entering directory
>> `/homespace/hjehlers/workbench/modpython/mod_python-3.1.4/src'
>>
>> Compiling for DSO.
>>
>> /usr/local/apache2/bin/apxs
>>
>
-I/homespace/hjehlers/workbench/modpython/mod_python-3.1.4/src/include
>> -I/usr/local/apache2/include -I/usr/local/include/python2.4 -c
>> mod_python.c _apachemodule.c requestobject.c tableobject.c util.c
>> serverobject.c connobject.c filterobject.c hlist.c hlistobject.c
>> -L/usr/local/lib/python2.4/config  -Wl,-bE:Modules/python.exp -lld
>> -L/opt/freeware/lib -ltk8.3 -ltcl8.3    -lm  -lpython2.4   -ldl
> -lm
>> /usr/local/apache2/build/libtool --silent --mode=compile xlc_r
>> -prefer-pic   -U__STR__ -D_THREAD_SAFE -D_USE_IRS -DAP_DEBUG -g
> -qHALT=E
>> -qfullpath -qinitauto=FE -qcheck=all -qinfo=pro
>> -I/usr/local/apache2/include  -I/usr/local/apache2/include
>> -I/usr/local/apache2/include
>>
>
-I/homespace/hjehlers/workbench/modpython/mod_python-3.1.4/src/include
>> -I/usr/local/apache2/include -I/usr/local/include/python2.4  -c -o
>> mod_python.lo mod_python.c && touch mod_python.slo
>> /usr/local/apache2/build/libtool --silent --mode=compile xlc_r
>> -prefer-pic   -U__STR__ -D_THREAD_SAFE -D_USE_IRS -DAP_DEBUG -g
> -qHALT=E
>> -qfullpath -qinitauto=FE -qcheck=all -qinfo=pro
>> -I/usr/local/apache2/include  -I/usr/local/apache2/include
>> -I/usr/local/apache2/include
>>
>
-I/homespace/hjehlers/workbench/modpython/mod_python-3.1.4/src/include
>> -I/usr/local/apache2/include -I/usr/local/include/python2.4  -c -o
>> _apachemodule.lo _apachemodule.c && touch _apachemodule.slo
>> /usr/local/apache2/build/libtool --silent --mode=compile xlc_r
>> -prefer-pic   -U__STR__ -D_THREAD_SAFE -D_USE_IRS -DAP_DEBUG -g
> -qHALT=E
>> -qfullpath -qinitauto=FE -qcheck=all -qinfo=pro
>> -I/usr/local/apache2/include  -I/usr/local/apache2/include
>> -I/usr/local/apache2/include
>>
>
-I/homespace/hjehlers/workbench/modpython/mod_python-3.1.4/src/include
>> -I/usr/local/apache2/include -I/usr/local/include/python2.4  -c -o
>> requestobject.lo requestobject.c && touch requestobject.slo
>> "requestobject.c", line 1381.5: 1506-196 (E) Initialization between
>> types "void(*)(void*)" and "void(*)(struct _object*)" is not
> allowed.
>> apxs:Error: Command failed with rc=65536
>> .
>> gmake[1]: *** [mod_python.so] Error 1
>> gmake[1]: Leaving directory
>> `/homespace/hjehlers/workbench/modpython/mod_python-3.1.4/src'
>> gmake: *** [do_dso] Error 2
>>
>> _______________________________________________
>> Mod_python mailing list
>> Mod_python at modpython.org 
>> http://mailman.modpython.org/mailman/listinfo/mod_python 



More information about the Mod_python mailing list