Michael Perzl wrote:
> Hi Daniel,
>
> I gave this tar-ball a quick try and here is the outcome:
>
Thanks for testing this so quickly, there are some things I need to 
clear up and then I'll build another snapshot for you
> I built it on my AIX 5.3 build host and you have to have the following 
> RPMs installed as prereqs for Ganglia to compile (you can get all 
> those from my website http://www.perzl.org/aix):
>
> Here are the versions I used:
> apr-1.3.9 and apr-devel-1.3.9
> libconfuse-2.6 and libconfuse-devel-2.6
> expat-2.0.1 and expat-devel-2.0.1
> rrdtool-1.2.30 and rrdtool-devel 1.2.30
>
Do I need to take any action, e.g. do you want configure to check for these?

Are you trying to use the spec file and do you want it to enforce those 
versions, or is this information just for the README?
> Please keep in mind that these RPMs again have prereqs which I am not 
> listing here.
>
> Then I started the configure process as follows (using bash as shell):
>
>  CC="xlc_r -U_AIX43" ./configure --prefix=/var/tmp/gg --enable-shared 
> --disable-static --with-gmetad --disable-python --sysconfdir=/etc/ganglia
>
> which finished successfully. The compilation (just using "make") ran 
> successfully until the gmond link step.
> The changed patch of BUG227 looks good to me, however now that 
> "fabsf()" is required the link step fails as no "-lm" is specified for 
> the gmond link step.
>
For AIX < 5.2, it should be using fabs, not fabsf.  The macro causes the 
fabsf call to be redirected to fabs

-lm will definitely be in the next snapshot I give you - is this needed 
for all AIX versions or just some versions?

I was looking at a document that told me _AIX52 would be defined on all 
versions >= 5.2 - do you believe that is correct, or is it only defined 
on that exact version?
> Just adding "-lm" to the link step (see below) did it:
> /opt/freeware/bin/bash ../libtool --tag=CC    --mode=link xlc_r 
> -U_AIX43 -qlanglvl=extc99 -I../lib -I../include/ -I../libmetrics 
> -D_LARGEFILE64_SOURCE -DSYSCONFDIR='"/etc/ganglia"' -qmaxmem=16384 
> -DSYSV -D_AIX -D_AIX32 -D_AIX41 -D_AIX43 -D_AIX51 -D_AIX52 -D_AIX53 
> -D_ALL_SOURCE -DFUNCPROTO=15 -O -I/opt/freeware/include -D_ALL_SOURCE 
> -DAIX -DHAVE_PERFSTAT -Wl,-bexpfull  -L/opt/freeware/lib 
> -L/opt/freeware/lib -o gmond gmond.o cmdline.o  g25_config.o 
> core_metrics.o ../libmetrics/libmetrics.la  ../lib/libganglia.la  
> ../lib/libgetopthelper.a   -ldl -lperfstat -lcfg -lodm -lnsl -lnsl 
> -lpcre -lexpat -lconfuse -lapr-1 -lpthreads -lpthread -lm
>
> The remaining compilation then runs without any errors until finished. 
> So the GNU autotools guru need to figure out how to add an "-lm" to 
> gmond/Makefile.am (please see the patch in a different content below).
>
> Some more comments on the libmetrics/aix/metrics file:
>
> Please note all patches are done on the Ganglia 3.1.2 version, so the 
> line numbers might be slightly off for the 3.1.5 version.
>
> The following patch is absolutely required to get it working on AIX 6.1:
I will apply this patch for the next snapshot - this will be safe on any 
AIX version?

> ***************
> *** 814,822 ****
>        */
>       /*
>        * AIX > 4.2 uses bos.mp or bos.up
>        */
>       getit = ODM_FIRST;
> !     while ((rc = (int)odm_get_obj(my_cl, "name like bos.?p",
>                                     &productobj, getit)) != 0) {
>           getit = ODM_NEXT;
>           if (rc == -1) {
> --- 834,843 ----
>        */
>       /*
>        * AIX > 4.2 uses bos.mp or bos.up
> +      * AIX >= 6.1 uses bos.mp64
>        */
>       getit = ODM_FIRST;
> !     while ((rc = (int)odm_get_obj(my_cl, "name like bos.?p*",
>                                     &productobj, getit)) != 0) {
>           getit = ODM_NEXT;
>           if (rc == -1) {
>
> The following patch is just cosmetics but nevertheless:
I will apply this too
> ***************
> *** 832,838 ****
>           }
>       }
>       /*
> !      * AIX < 4.2 uses bos.mp or bos.up
>        */
>       if (!found) {
>           getit = ODM_FIRST;
> --- 853,859 ----
>           }
>       }
>       /*
> !      * AIX < 4.2 uses bos.rte.mp or bos.rte.up
>        */
>       if (!found) {
>           getit = ODM_FIRST;
>
> Now the more serious issue with DSOs on AIX:
>
> In the current gmond compilation setup DSOs unfortunately don't work:
> ganglia-3.1.5.2236/gmond> ./gmond -m
> Cannot load /var/tmp/gg/lib/ganglia/modcpu.so metric module:    
> 0509-022 Cannot load module /var/tmp/gg/lib/ganglia/modcpu.so.
>         0509-026 System error: A file or directory in the path name 
> does not exist.
> Cannot load /var/tmp/gg/lib/ganglia/moddisk.so metric module:   
> 0509-022 Cannot load module /var/tmp/gg/lib/ganglia/moddisk.so.
>         0509-026 System error: A file or directory in the path name 
> does not exist.
> Cannot load /var/tmp/gg/lib/ganglia/modload.so metric module:   
> 0509-022 Cannot load module /var/tmp/gg/lib/ganglia/modload.so.
>         0509-026 System error: A file or directory in the path name 
> does not exist.
> Cannot load /var/tmp/gg/lib/ganglia/modmem.so metric module:    
> 0509-022 Cannot load module /var/tmp/gg/lib/ganglia/modmem.so.
>         0509-026 System error: A file or directory in the path name 
> does not exist.
> Cannot load /var/tmp/gg/lib/ganglia/modnet.so metric module:    
> 0509-022 Cannot load module /var/tmp/gg/lib/ganglia/modnet.so.
>         0509-026 System error: A file or directory in the path name 
> does not exist.
> Cannot load /var/tmp/gg/lib/ganglia/modproc.so metric module:   
> 0509-022 Cannot load module /var/tmp/gg/lib/ganglia/modproc.so.
>         0509-026 System error: A file or directory in the path name 
> does not exist.
> Cannot load /var/tmp/gg/lib/ganglia/modsys.so metric module:    
> 0509-022 Cannot load module /var/tmp/gg/lib/ganglia/modsys.so.
>         0509-026 System error: A file or directory in the path name 
> does not exist.
> Cannot load /var/tmp/gg/lib/ganglia/modibmpower.so metric 
> module:       0509-022 Cannot load module 
> /var/tmp/gg/lib/ganglia/modibmpower.so.
>         0509-026 System error: A file or directory in the path name 
> does not exist.
> heartbeat       Last heartbeat (module core_metrics)
> location        Location of the machine (module core_metrics)
> gexec           gexec available (module core_metrics)
>
> The following patch to gmond/Makefile.am is absolutely required to 
> make DSOs work on AIX:
> ***************
> *** 13,20 ****
>   endif
>   else
>   GCFLAGS = -D_LARGEFILE64_SOURCE
> ! GLDADD =
> ! GLDFLAGS = -export-dynamic
>   endif
>
>   INCLUDES = @APR_INCLUDES@
> --- 14,21 ----
>   endif
>   else
>   GCFLAGS = -D_LARGEFILE64_SOURCE
> ! GLDADD = -lm
> ! GLDFLAGS = -Wl,-bexpfull
>   endif
>
>   INCLUDES = @APR_INCLUDES@
>
I had already applied that on the branch, but to make the code portable 
between AIX and other platforms, I did this by setting 
EXPORT_SYMBOLS_DYNAMIC in configure.in and using it's value in 
gmond/Makefile.am

Can you please look at whether EXPORT_SYMBOLS_DYNAMIC is being used 
properly?  Please share the output of this command:

egrep 'DYN|STATIC' config.status



> The reason behind is that "-export-dynamic" is then later expanded to 
> the AIX linker option "-berok" (which allows a library to have 
> unresolved symbols) but this is absolutely deadly - because you would 
> have to let the linker know during the link step an import file of 
> unknown symbols. To fix this on a general level for libtool is beyond 
> my skills, therefore I always apply the following strategy:
>
>     * Never use "-berok" for a linker flag but force all symbols to be
>       resolved (via "-bernotok" linker flag)
>     * Make sure all symbols are exported (via the "-Wl,-bexpfull"
>       linker flag)
>
> I also had to apply the following patch to libmetrics/aclocal.m4 
> (essentially removing any "-berok" occurrences):
I want to avoid patching aclocal.m4 and try to find the right way to 
make this work

Looking at the comments in the code, do you know about the -brtl 
suggestion?  Can you try that flag in your LDFLAGS?

Could you also post this particular issue on the list autom...@gnu.org?  
Someone else may already know the solution straight away.


> *** libmetrics/aclocal.m4.ORIG  Fri Feb 13 17:04:11 2009
> --- libmetrics/aclocal.m4       Wed Feb 18 23:18:38 2009
> ***************
> *** 2958,2964 ****
>       if test "$aix_use_runtimelinking" = yes; then
>         # Warning - without using the other runtime loading flags (-brtl),
>         # -berok will link without error, but may produce a broken 
> library.
> !       _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
>         # Determine the default libpath from the value encoded in an 
> empty executable.
>         _LT_AC_SYS_LIBPATH_AIX
>         _LT_AC_TAGVAR(hardcode_libdir_flag_spec, 
> $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
> --- 2958,2964 ----
>       if test "$aix_use_runtimelinking" = yes; then
>         # Warning - without using the other runtime loading flags (-brtl),
>         # -berok will link without error, but may produce a broken 
> library.
> !       _LT_AC_TAGVAR(allow_undefined_flag, $1)=''
>         # Determine the default libpath from the value encoded in an 
> empty executable.
>         _LT_AC_SYS_LIBPATH_AIX
>         _LT_AC_TAGVAR(hardcode_libdir_flag_spec, 
> $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
> ***************
> *** 2976,2982 ****
>         # Warning - without using the other run time loading flags,
>         # -berok will link without error, but may produce a broken 
> library.
>         _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
> !       _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
>         # Exported symbols can be pulled into shared objects from archives
>         _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
>         _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
> --- 2976,2982 ----
>         # Warning - without using the other run time loading flags,
>         # -berok will link without error, but may produce a broken 
> library.
>         _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
> !       _LT_AC_TAGVAR(allow_undefined_flag, $1)=' '
>         # Exported symbols can be pulled into shared objects from archives
>         _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
>         _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
> ***************
> *** 5744,5750 ****
>         if test "$aix_use_runtimelinking" = yes; then
>         # Warning - without using the other runtime loading flags (-brtl),
>         # -berok will link without error, but may produce a broken 
> library.
> !       _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
>          # Determine the default libpath from the value encoded in an 
> empty executable.
>          _LT_AC_SYS_LIBPATH_AIX
>          _LT_AC_TAGVAR(hardcode_libdir_flag_spec, 
> $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
> --- 5744,5750 ----
>         if test "$aix_use_runtimelinking" = yes; then
>         # Warning - without using the other runtime loading flags (-brtl),
>         # -berok will link without error, but may produce a broken 
> library.
> !       _LT_AC_TAGVAR(allow_undefined_flag, $1)=''
>          # Determine the default libpath from the value encoded in an 
> empty executable.
>          _LT_AC_SYS_LIBPATH_AIX
>          _LT_AC_TAGVAR(hardcode_libdir_flag_spec, 
> $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
> ***************
> *** 5761,5767 ****
>           # Warning - without using the other run time loading flags,
>           # -berok will link without error, but may produce a broken 
> library.
>           _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
> !         _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
>           # Exported symbols can be pulled into shared objects from 
> archives
>           _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
>           _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
> --- 5761,5767 ----
>           # Warning - without using the other run time loading flags,
>           # -berok will link without error, but may produce a broken 
> library.
>           _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
> !         _LT_AC_TAGVAR(allow_undefined_flag, $1)=' '
>           # Exported symbols can be pulled into shared objects from 
> archives
>           _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
>           _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
>
> By removing the "allow_undefined_flag" AIX will run into an immediate 
> compile error and not produce broken libraries where you run into 
> problems only at runtime....
>
> Hope that helps....
>
> Regards,
> Michael
>
> On 01/15/2010 12:34 PM, Daniel Pocock wrote:
>>
>>
>> I've created branches/monitor-core-3.1-aix and applied the following:
>>
>> BUG226: detect virtual IO server
>>
>> BUG227: I've modified the patch to try and selectively set the linker 
>> flags for AIX and for fabsf on AIX < 5.2
>>
>> I'd also like to test the effect the new autotools have on AIX
>>
>> Therefore, I've created a tarball of the branch, bootstrapped on 
>> Debian 5.  As I don't have an AIX box, is someone able to help test 
>> this and provide feedback?
>>
>> It is at:
>>
>>  http://www.pocock.com.au/ganglia/test/aix-branch
>>
>> I can also bootstrap on other environments if necessary to provide 
>> something to compare with.
>>
>>


------------------------------------------------------------------------------
Throughout its 18-year history, RSA Conference consistently attracts the
world's best and brightest in the field, creating opportunities for Conference
attendees to learn about information security's most important issues through
interactions with peers, luminaries and emerging and established companies.
http://p.sf.net/sfu/rsaconf-dev2dev
_______________________________________________
Ganglia-developers mailing list
Ganglia-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ganglia-developers

Reply via email to