After much wailing and gnashing of teeth, I was able to successfully compile iftop 0.17 on HP-UX 11.23 by adding both LDFLAGS and CPPFLAGS definitions to the configure command and by patching two programs. The sordid details follow for any interested parties.
Jay Franz jay.franz@ssa.gov
====================
First, my build environment:
autoconf-2.61 automake-1.10 binutils-2.17 bison-2.3 flex-2.5.33 gawk-3.1.5 gcc-4.1.2 gettext-0.16.1 libiconv-1.11 libpcap-0.9.7 libtool-1.5.24 m4-1.4.9 make-3.81 ncurses-5.6 patch-2.5.4 perl-5.8.8 sed-4.1.5 shtool-2.0.7 termcap-1.3.1 texinfo-4.9
Secondly, my configure statement:
# LDFLAGS='-lpthread -lipv6' CPPFLAGS='-I /usr/local/include/ncurses' ./configure
And, finally, two patches, one for 'addrs_dlpi.c.patch' and one for 'dlcommon.c.patch'.
addrs_dlpi.c.patch:
24d23 < #include <sys/sockio.h> 28a28
#include <netinet/in.h>
dlcommon.c.patch:
28a29
#include <stdlib.h>
465c466 < static void ---
void
--------------------
An explanation of the above.
First, the build environment should be self-explanatory. the gcc, gettext, libiconv, and make packages were downloaded and installed from the Porting and Archiving Center for HP-UX (http://hpux.connect.org.uk/). All others were built on the target server.
----------
Secondly, the first LDFLAG, '-lpthread', addresses the failure of the configure script to accurately identify the threads capability in HP-UX 11.23. Running configure without the flag results in the following error:
# ./configure <snip> checking POSIX threads compilation... CFLAGS= and LIBS= checking POSIX threads usability... configure: error: it fails. We probably guessed the wrong CFLAGS.
I can provide the 'config.log' for anyone who wants it.
----------
The second LDFLAG, '-lipv6', addresses the error when linking all of the compiled programs:
gcc -g -O2 -lpthread -o iftop addr_hash.o edline.o hash.o iftop.o ns_hash.o options.o resolver.o screenfilter.o serv_hash.o sorted_list.o threadprof.o ui.o util.o addrs_ioctl.o addrs_dlpi.o dlcommon.o stringmap.o cfgfile.o vector.o -lpcap -lm -lcurses ld: Unsatisfied symbol "if_nameindex" in file options.o ld: Unsatisfied symbol "if_freenameindex" in file options.o 2 errors. collect2: ld returned 1 exit status
The 'if_nameindex' and 'if_freenameindex' symbols are defined in the 'ipv6' library.
----------
The CPPFLAG, '-I /usr/local/include/ncurses', addresses the following compilation error when compiling 'edline.c':
source='edline.c' object='edline.o' libtool=no \ depfile='.deps/edline.Po' tmpdepfile='.deps/edline.TPo' \ depmode=gcc3 /bin/sh ./config/depcomp \ gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c `test -f 'edline.c' || echo './'`edline.c edline.c: In function 'edline': edline.c:68: error: 'KEY_END' undeclared (first use in this function) edline.c:68: error: (Each undeclared identifier is reported only once edline.c:68: error: for each function it appears in.) make[2]: *** [edline.o] Error 1 make[2]: Leaving directory `/usr/local/install/iftop-0.17' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/usr/local/install/iftop-0.17' make: *** [all] Error 2
It is possible that this could be addressed in the configure script, since it appears to correctly identify the native 'curses' library; however, 'gcc' fails to locate the native library and forcing its inclusion (i.e., -I /usr/include) has no effect.
----------
Thirdly, the first patch, for 'addrs_dlpi.c' addresses the following compilation errors:
source='addrs_dlpi.c' object='addrs_dlpi.o' libtool=no \ depfile='.deps/addrs_dlpi.Po' tmpdepfile='.deps/addrs_dlpi.TPo' \ depmode=gcc3 /bin/sh ./config/depcomp \ gcc -DHAVE_CONFIG_H -I. -I. -I. -I /usr/local/include/ncurses -g -O2 -c `test -f 'addrs_dlpi.c' || echo './'`addrs_dlpi.c addrs_dlpi.c:24:24: error: sys/sockio.h: No such file or directory addrs_dlpi.c:53: warning: 'struct in_addr' declared inside parameter list addrs_dlpi.c:53: warning: its scope is only this definition or declaration, which is probably not what you want addrs_dlpi.c: In function 'get_addrs_dlpi': addrs_dlpi.c:184: error: dereferencing pointer to incomplete type addrs_dlpi.c:190: error: dereferencing pointer to incomplete type addrs_dlpi.c:190: error: invalid application of 'sizeof' to incomplete type 'struct in_addr' make[2]: *** [addrs_dlpi.o] Error 1 make[2]: Leaving directory `/usr/local/install/iftop-0.17' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/usr/local/install/iftop-0.17' make: *** [all] Error 2
The first error, regarding the 'sys/sockio.h' header file, is resolved by removing the include statement, as this file does not exist on HP-UX 11.23. The other errors, regarding the 'in_addr' structure, are resolved by including the 'netinet/in.h' library, where it is defined for HP-UX 11.23.
----------
The second patch, for 'dlcommon.c', resolves the following compilation errors and warnings:
source='dlcommon.c' object='dlcommon.o' libtool=no \ depfile='.deps/dlcommon.Po' tmpdepfile='.deps/dlcommon.TPo' \ depmode=gcc3 /bin/sh ./config/depcomp \ gcc -DHAVE_CONFIG_H -I. -I. -I. -I /usr/local/include/ncurses -g -O2 -c `test -f 'dlcommon.c' || echo './'`dlcommon.c dlcommon.c:467: error: static declaration of 'sigalrm' follows non-static declaration dlcommon.h:35: error: previous declaration of 'sigalrm' was here dlcommon.c: In function 'expecting': dlcommon.c:531: warning: incompatible implicit declaration of built-in function 'exit' dlcommon.c: In function 'err': dlcommon.c:1333: warning: incompatible implicit declaration of built-in function 'exit' dlcommon.c: In function 'syserr': dlcommon.c:1340: warning: incompatible implicit declaration of built-in function 'exit' make[2]: *** [dlcommon.o] Error 1 make[2]: Leaving directory `/usr/local/install/iftop-0.17' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/usr/local/install/iftop-0.17' make: *** [all] Error 2
The errors, regarding re-declaration of the 'sigalrm' function, are resolved by removing the 'static' statement from the re-declaration of the function. This does allow the 'dlcommon.c' program to compile cleanly and the resulting build of iftop appears to work as expected; however, I am not a C programmer and this may not have been what was originally intended. YMMV. The warnings, regarding the 'exit' function, are resolved by including the 'stdlib.h' header file.
====================