dnl
dnl Configure script for the Gnome library
dnl

AC_INIT(copyright.txt)
AM_CONFIG_HEADER(config.h)
AC_CANONICAL_SYSTEM

LIBGTOP_MAJOR_VERSION=2
LIBGTOP_MINOR_VERSION=7
LIBGTOP_MICRO_VERSION=90
LIBGTOP_VERSION=$LIBGTOP_MAJOR_VERSION.$LIBGTOP_MINOR_VERSION.$LIBGTOP_MICRO_VERSION
AM_INIT_AUTOMAKE(libgtop, $LIBGTOP_VERSION)

dnl  increment if the interface has additions, changes, removals.
LIBGTOP_CURRENT=3

dnl  increment any time the source changes; set to
dnl  0 if you increment CURRENT
LIBGTOP_REVISION=0

dnl  increment if any interfaces have been added; set to 0
dnl  if any interfaces have been removed. removal has
dnl  precedence over adding, so set to 0 if both happened.
LIBGTOP_AGE=1

# you can set this to `-snap' for instance to create
# a `libgtop-1.x.y-snap.tar.gz' tarball.
LIBGTOP_VERSION_SUFFIX=

# Increase each time you change the client/server protocol.
LIBGTOP_SERVER_VERSION=5

# Version code calculation
LIBGTOP_VERSION_CODE=`expr $LIBGTOP_MAJOR_VERSION \* 1000000 + $LIBGTOP_MINOR_VERSION \* 1000 + $LIBGTOP_MICRO_VERSION`

AC_SUBST(LIBGTOP_MAJOR_VERSION)
AC_SUBST(LIBGTOP_MINOR_VERSION)
AC_SUBST(LIBGTOP_MICRO_VERSION)
AC_SUBST(LIBGTOP_INTERFACE_AGE)
AC_SUBST(LIBGTOP_BINARY_AGE)
AC_SUBST(LIBGTOP_SERVER_VERSION)
AC_SUBST(LIBGTOP_VERSION)
AC_SUBST(LIBGTOP_VERSION_CODE)
AC_SUBST(LIBGTOP_VERSION_SUFFIX)

# libtool versioning
LT_RELEASE=$LIBGTOP_MAJOR_VERSION.$LIBGTOP_MINOR_VERSION
LT_CURRENT=$LIBGTOP_CURRENT
LT_REVISION=$LIBGTOP_REVISION
LT_AGE=$LIBGTOP_AGE
LT_VERSION_INFO="-version-info ${LT_CURRENT}:${LT_REVISION}:${LT_AGE}"
AC_SUBST(LT_VERSION_INFO)
AC_SUBST(LT_RELEASE)
AC_SUBST(LT_CURRENT)
AC_SUBST(LT_REVISION)
AC_SUBST(LT_AGE)

ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I ."

AC_ISC_POSIX
AC_PROG_CC
AC_STDC_HEADERS
dnl AC_ARG_PROGRAM

dnl We need this at some places.
libgtop_top_builddir=`pwd`
AC_SUBST(libgtop_top_builddir)

dnl We don't use `AC_PROG_AWK' since it checks for mawk first which
dnl does not work for libgtop.
AC_CHECK_PROGS(AWK, gawk awk, )
test -z "$AWK" && AC_MSG_ERROR([Sorry, you need a working awk interpreter.])

dnl Most people should have a working perl interpreter on their system
AC_CHECK_PROGS(PERL, perl5 perl)
test -z "$PERL" && AC_MSG_ERROR([You need to have a working perl interpreter.])

AC_CHECK_TOOL(CC,gcc)
AC_CHECK_TOOL(RANLIB,ranlib)
AC_CHECK_TOOL(AS,as)
AC_CHECK_TOOL(AR,ar)

export CC CXX RANLIB LD AS AR

AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET

export cross_compiling

AM_PROG_LIBTOOL

AM_CONDITIONAL(CROSS_COMPILING, test "x$cross_compiling" = xyes)

GNOME_LIBGTOP_SYSDEPS
GNOME_LIBGTOP_TYPES

AC_ARG_WITH(libgtop-inodedb,
[  --with-libgtop-inodedb  Build the inodedb stuff (default=no)],
[build_inodedb="$withval"], [build_inodedb=no])

LIBGTOP_EXTRA_LIBS=

if test x$build_inodedb = xyes ; then
  AC_CHECK_LIB(gdbm, gdbm_open, LIBGTOP_EXTRA_LIBS='-lgdbm', build_inodedb=no)
fi

AM_CONDITIONAL(INODEDB, test x$build_inodedb = xyes)

if test x$build_inodedb = xyes ; then
  AC_DEFINE(GLIBTOP_INODEDB)
fi

AC_DEFINE(GLIBTOP_NAMES)

if test x$libgtop_smp = xyes ; then
  smp_examples='smp'
  smp_static_examples='smp_static'
else
  smp_examples=
  smp_static_examples=
fi

if test "x$enable_static" != xno; then
  static_targets="first_static second_static mountlist_static procmap_static netload_static sysdeps_static timings_static $smp_static_examples"
else
  static_targets=""
fi

AM_CONDITIONAL(ENABLE_STATIC, test x$enable_static = xyes)
AM_CONDITIONAL(ENABLE_SHARED, test x$enable_static = xyes)

AC_SUBST(static_targets)
AC_SUBST(smp_examples)

GLIB_REQUIRED=2.0.0

PKG_CHECK_MODULES(GLIB, glib-2.0 >= $GLIB_REQUIRED)
AC_SUBST(GLIB_CFLAGS)
AC_SUBST(GLIB_LIBS)

AC_CHECK_HEADER(popt.h,[POPT=yes],[POPT=no])
AC_MSG_CHECKING(for popt.h)
if test x$POPT = xyes ; then
   AC_MSG_RESULT(yes)
else
   AC_MSG_ERROR([libgtop requires the popt development libraries])
fi

dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_C_INLINE
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_STRUCT_ST_RDEV
AC_HEADER_TIME
AC_STRUCT_TM
AC_TYPE_UID_T

dnl For SunOS
AC_CHECK_TYPE(ssize_t, int)
AC_CHECK_HEADERS(memory.h)
AC_CHECK_HEADERS(string.h strings.h, break)
AC_REPLACE_FUNCS(strerror)

dnl dlopen() and dlsym()
DL_LIB=
AC_CHECK_FUNCS(dlopen,,[
  AC_CHECK_LIB(dl, dlopen, DL_LIB="-ldl", [
    AC_CHECK_LIB(dld, shl_load, DL_LIB="-ldld", [
      AC_CHECK_FUNCS(dlopen, DL_LIB="", DL_LIB="")
    ])
  ])
])
oLIBS="$LIBS"
LIBS="$LIBS $DL_LIB"
AC_CHECK_FUNCS(dlerror,,)
LIBS="$oLIBS"
AC_SUBST(DL_LIB)

dnl Linux
AC_CHECK_HEADER(linux/isdn.h,[HAVE_ISDN_H=yes],[HAVE_ISDN_H=no])
if test x$HAVE_ISDN_H = xyes ; then
	AC_DEFINE(HAVE_ISDN_H, 1, [defined if you have linux/isdn.h])
fi

dnl AIX
AH_TEMPLATE(HAVE_VMGETINFO, [Define to 1 if you have the 'vmgetinfo' function in libperfstat])
AC_CHECK_LIB(perfstat, vmgetinfo, AC_DEFINE(HAVE_VMGETINFO))

dnl Solaris
AC_CHECK_LIB(kstat, kstat_open)
AC_CHECK_FUNCS(getloadavg swapctl)
AC_CHECK_HEADERS(procfs.h sys/procfs.h, break)

dnl Some versions of Solaris require -lelf for -lkvm
AC_CHECK_LIB(kvm, kvm_open,[
  LIBS="-lkvm $LIBS"
],[AC_MSG_CHECKING(for kvm_open in -lkvm with -lelf)
   AC_CACHE_VAL(ac_cv_lib_kvm_with_elf,
   [ac_save_LIBS="$LIBS"
    LIBS="-lkvm -lelf $LIBS"
    AC_TRY_LINK([char kvm_open();], [kvm_open()],
                ac_cv_lib_kvm_with_elf=yes, ac_cv_lib_kvm_with_elf=no)
    LIBS="$ac_save_LIBS"
   ])
   if test "$ac_cv_lib_kvm_with_elf" = "yes"; then
     AC_MSG_RESULT(yes)
     LIBS="-lkvm -lelf $LIBS"
   else
     AC_MSG_RESULT(no)
   fi
])

dnl For DEC OSF1
AC_CHECK_LIB(mach, vm_statistics)

dnl For some broken libc5 systems (Debian 1.3)
saved_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS -D_GNU_SOURCE"
GCC_NEED_DECLARATION(program_invocation_name, [                           
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
])

CFLAGS=$saved_CFLAGS

AC_CHECK_FUNC(socket,
 [AC_CHECK_HEADER(netinet/in.h,
   [AC_CHECK_HEADER(arpa/inet.h, [
  AC_DEFINE(HAVE_SOCKETS)
      AC_MSG_CHECKING("for sun_len member in struct sockaddr_un")
      AC_TRY_LINK([
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
      ],
      [static struct sockaddr_un x; x.sun_len = 1;],
      [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOCKADDR_SUN_LEN)],
      [AC_MSG_RESULT(no)])])])])

dnl Checks for library functions.
AC_FUNC_ALLOCA
AC_FUNC_MMAP
AC_TYPE_SIGNAL
AC_FUNC_STRFTIME
AC_CHECK_FUNCS(getcwd gettimeofday getwd putenv strdup strtoul uname)

ALL_LINGUAS="am ar az be bg bn ca cs cy da de el en_CA en_GB es et eu fa fi fr ga gl gu he hi hr hu id it ja ko lt lv mi mk ml mn ms nl nn no pa pl pt pt_BR ro ru sk sl sq sr sr@Latn sv ta tr uk vi zh_CN zh_TW"

GETTEXT_PACKAGE=libgtop-2.0
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE")

AM_GLIB_GNU_GETTEXT

AC_PATH_XTRA

dnl For Solaris
dnl Please don't move this before AC_PATH_XTRA
AC_CHECK_FUNC(gethostbyname,,[AC_CHECK_LIB(nsl,gethostbyname)])
AC_CHECK_FUNC(connect,,[AC_CHECK_LIB(socket,connect)])
AC_CHECK_FUNC(inet_aton,,[AC_CHECK_LIB(resolv,inet_aton)])

dnl The construct foo=`echo $w1 $w2 $w3` fails on some systems if $w1 = -e or -n
dnl So we use the following instead.
dnl XE_SPACE(var, words)
define([XE_SPACE],[
T=""
for W in $2; do if test -z "$T"; then T="$W"; else T="$T $W"; fi; done
$1="$T"
])dnl

dnl Autodetect Xauth
dnl -lXau is only used by gnuclient, so use a special variable for Xauth X libs
saved_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
test -z "$with_xauth" && { AC_CHECK_HEADER(X11/Xauth.h,          ,with_xauth=no) }
test -z "$with_xauth" && { AC_CHECK_LIB(Xau, XauGetAuthByAddr,[:],with_xauth=no, $X_LIBS) }
test -z "$with_xauth" && with_xauth=yes
if test "$with_xauth" = "yes"; then
  AC_DEFINE(HAVE_XAUTH)
  XE_SPACE(libs_xauth, $X_LIBS -lXau)
fi
CPPFLAGS="$saved_CPPFLAGS"
AC_SUBST(libs_xauth)

dnl For diskusage stuff
GNOME_FILEUTILS_CHECKS

dnl Debugging
AC_ARG_ENABLE(debug, [  --enable-debug          turn on debugging [default=no]],AC_DEFINE(LIBGTOP_ENABLE_DEBUG),)
AC_ARG_ENABLE(fatal-warnings, [  --enable-fatal-warnings make all warnings fatal [debug=no]],AC_DEFINE(LIBGTOP_FATAL_WARNINGS),)

dnl These definitions are expanded in make.
LIBGTOP_LIBS='-L$(libdir)'
LIBGTOP_INCS='-I$(includedir)/libgtop-2.0'

if test x$libgtop_use_machine_h = xyes ; then
  LIBGTOP_INCS="$LIBGTOP_INCS -DHAVE_GLIBTOP_MACHINE_H"
fi

if test x$build_inodedb = xyes ; then
  LIBGTOP_INCS="$LIBGTOP_INCS -DGLIBTOP_INODEDB"
fi

if test x$libgtop_smp = xyes ; then
  LIBGTOP_INCS="$LIBGTOP_INCS -DHAVE_LIBGTOP_SMP"
fi

if test x$libgtop_have_sysinfo = xyes ; then
  LIBGTOP_INCS="$LIBGTOP_INCS -DHAVE_LIBGTOP_SYSINFO"
fi

LIBGTOP_INCS="$LIBGTOP_INCS $GLIB_CFLAGS"

LIBGTOP_BINDIR='$(bindir)'
LIBGTOP_SERVER='$(bindir)/libgtop_server2'

sysdeps_dir="$libgtop_sysdeps_dir"
AC_SUBST(sysdeps_dir)

if test -z "$LIBGTOP_EXTRA_LIBS" ; then
  LIBGTOP_EXTRA_LIBS="$libs_xauth"
else
  LIBGTOP_EXTRA_LIBS="$LIBGTOP_EXTRA_LIBS $libs_xauth"
fi

LIBGTOP_EXTRA_LIBS="$LIBGTOP_EXTRA_LIBS $GLIB_LIBS"

LIBGTOP_LIBS="$LIBGTOP_LIBS"
LIBGTOP_NAMES_LIBS="$LIBGTOP_LIBS"

LIBGTOP_LIBS="$LIBGTOP_LIBS" 
LIBGTOP_NAMES_LIBS="$LIBGTOP_NAMES_LIBS"

LIBGTOP_NAMES_INCS="$LIBGTOP_INCS -DGLIBTOP_NAMES"

machine_incs="-I\$(top_srcdir)/sysdeps/$sysdeps_dir"

AC_SUBST(machine_incs)

if test "$GCC" = "yes" ; then
        CFLAGS="\
	-Wall \
	-Wchar-subscripts -Wmissing-declarations -Wmissing-prototypes \
	-Wnested-externs -Wpointer-arith \
	-Wcast-align -Wsign-compare \
	-fno-strict-aliasing \
	$CFLAGS"
fi

INCLUDES="-D_IN_LIBGTOP -D_GNU_SOURCE -DGLIBTOP_NAMES -I\$(top_builddir) -I\$(top_srcdir) -I\$(top_srcdir)/sysdeps/$sysdeps_dir -I\$(top_srcdir)/include $GLIB_CFLAGS $CFLAGS $X_CFLAGS "'-DGTOPLOCALEDIR=\"$(datadir)/locale\" -DLIBGTOP_VERSION=\"'"$LIBGTOP_VERSION"'\" -DLIBGTOP_SERVER_VERSION=\"'"$LIBGTOP_SERVER_VERSION"'\" -DLIBGTOP_VERSION_CODE='$LIBGTOP_VERSION_CODE' -DLIBGTOP_SERVER=\"'"$LIBGTOP_SERVER"'\"'

AC_SUBST(INCLUDES)

AC_SUBST(LIBGTOP_EXTRA_LIBS)
AC_SUBST(GLIB_LIBS)
AC_SUBST(LIBGTOP_LIBS)
AC_SUBST(LIBGTOP_INCS)
AC_SUBST(LIBGTOP_NAMES_LIBS)
AC_SUBST(LIBGTOP_NAMES_INCS)
AC_SUBST(LIBGTOP_BINDIR)
AC_SUBST(LIBGTOP_SERVER)

if test x$libgtop_need_server = xyes ; then
   sysdeps_suid_lib="\$(top_builddir)/sysdeps/\$(sysdeps_dir)/libgtop_sysdeps_suid-2.0.la"
   server_programs='libgtop_server2'
else
   sysdeps_suid_lib=
   server_programs=
fi
AC_SUBST(sysdeps_suid_lib)
AC_SUBST(server_programs)

AC_OUTPUT([
Makefile
libgtop.spec
po/Makefile.in
misc/Makefile
include/Makefile
include/glibtop/Makefile
sysdeps/Makefile
sysdeps/common/Makefile
sysdeps/names/Makefile
sysdeps/stub/Makefile
sysdeps/stub_suid/Makefile
sysdeps/sun4/Makefile
sysdeps/osf1/Makefile
sysdeps/linux/Makefile
sysdeps/kernel/Makefile
sysdeps/freebsd/Makefile
sysdeps/solaris/Makefile
sysdeps/aix/Makefile
src/Makefile
src/daemon/Makefile
src/inodedb/Makefile
lib/Makefile
examples/Makefile
doc/Makefile
libgtop-2.0.pc
])
