dnl  Process this file with autoconf to produce a configure script.
dnl  Copyright (C) 1998 John Harper <john@dcs.warwick.ac.uk>
dnl  $Id: configure.in,v 1.140 2008/02/18 20:59:59 jkozicki Exp $
dnl
dnl  This file is part of sawfish.
dnl
dnl  sawfish is free software; you can redistribute it and/or modify it
dnl  under the terms of the GNU General Public License as published by
dnl  the Free Software Foundation; either version 2, or (at your option)
dnl  any later version.
dnl
dnl  sawfish is distributed in the hope that it will be useful, but
dnl  WITHOUT ANY WARRANTY; without even the implied warranty of
dnl  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
dnl  GNU General Public License for more details.
dnl
dnl  You should have received a copy of the GNU General Public License
dnl  along with sawfish; see the file COPYING.  If not, write to
dnl  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.

AC_REVISION($Revision: 1.141 $)
AC_INIT(src/sawfish.h)

AC_CONFIG_HEADER(config.h)
AC_CONFIG_MACRO_DIR([m4])

AM_PROG_LIBTOOL

#IT_PROG_INTLTOOL([0.40.0])

dnl Release versioning info
version="1.5.2"
subversion=""
codename="Save The Robots"

VERSION=${version}

PACKAGE="sawfish"
GETTEXT_PACKAGE=${PACKAGE}

install_sh=../install-sh

SUBDIRS="src lisp scripts themes sounds man"

sawfishdir='${datadir}/sawfish'
lispdir='${sawfishdir}/${version}/lisp'
localedir='${datadir}/locale'
sawfishexecdir='${libexecdir}/sawfish/${version}/${host_type}'

dnl Several checks
AC_C_CONST
AC_C_INLINE
AC_C_BIGENDIAN
AC_TYPE_SIZE_T
AC_FUNC_ALLOCA
AC_FUNC_VPRINTF
AC_CHECK_FUNCS(gethostname socket snprintf getpagesize)
AC_PROG_INSTALL
AC_CHECK_LIB(nsl, xdr_void)
AC_CHECK_LIB(socket, bind)
AC_HEADER_SYS_WAIT
AC_HEADER_TIME
AC_CHECK_HEADERS(fcntl.h sys/time.h sys/utsname.h)
AC_PATH_PROG(PKG_CONFIG, [pkg-config], [no])

dnl Check for X headers, etc
_cppflags="${CPPFLAGS}"
CPPFLAGS="${CPPFLAGS} ${X_CFLAGS}"

AC_ARG_WITH(xorg-x11r7,
	    [  --with-xorg-x11r7	  Use X.Org X11R7
	     --without-xorg-x11r7	  Use X.Org/XFree86 X11R6 instead], [], [with_xorg_x11r7=yes])

if test "$with_xorg_x11r7" != "no"; then

AC_CHECK_HEADERS(X11/extensions/Xdbe.h, [], [], [#include <X11/Xlib.h> ])

dnl Checks for X extensions/libraries
XINERAMA_LIBS=""
XRANDR_LIBS=""
XFT_LIBS=""
XFT_CFLAGS=""

PKG_CHECK_MODULES(libXineRama, xinerama >= 1.0
		  ,XINERAMA_LIBS="-lXinerama"
		  AC_DEFINE(HAVE_X11_EXTENSIONS_XINERAMA_H, 1, [Have xinerama])
		  ,AC_MSG_ERROR([cannot locate libXineRama]))

PKG_CHECK_MODULES(libXRandR, xrandr >= 1.0
		  ,XRANDR_LIBS="-lXrandr"
		  AC_DEFINE(HAVE_X11_EXTENSIONS_XRANDR_H, 1, [Have xrandr])
		  ,AC_MSG_ERROR([cannot locate libXRandR]))

PKG_CHECK_MODULES(libXft, xft >= 1.0
		  ,XFT_LIBS="-lXft"
		  XFT_CFLAGS="`pkg-config --cflags xft`"
		  AC_DEFINE(HAVE_X11_XFT_XFT_H, 1, [Have xft])
		  ,AC_MSG_ERROR([cannot locate libXft]))

dnl is X available?
X_LIBS=""

PKG_CHECK_MODULES(libX11, x11 >= 1.0
		  ,AC_DEFINE(HAVE_X11, 1, [Have X11])
		  X_LIBS="`pkg-config --libs x11`"
		  X_CFLAGS="`pkg-config --cflags x11`"
		  AC_DEFINE(X_DISPLAY_MISSING, 0, [Have x11])
		  ,AC_MSG_ERROR([cannot locate libX11]))

X_LIBS="${X_LIBS} -lXext -lXrender"

X_EXTRA_LIBS=""

PKG_CHECK_MODULES(libICE, ice >= 1.0
		  ,X_EXTRA_LIBS="${X_EXTRA_LIBS} -lICE"
		  AC_DEFINE(HAVE_X11_ICE_ICE_H, 1, [Have libice])
		  ,AC_MSG_ERROR([cannot locate libICE]))

PKG_CHECK_MODULES(libSM, sm >= 1.0
		  ,X_EXTRA_LIBS="${X_EXTRA_LIBS} -lSM"
		  AC_DEFINE(HAVE_X11_SM_SMLIB_H, 1, [Have smlib])
		  ,AC_MSG_ERROR([cannot locate libSM]))

X_SERVER="X.Org X11R7"

CPPFLAGS="${_cppflags}"

else

AC_CHECK_HEADERS(X11/ICE/ICE.h X11/SM/SMlib.h X11/extensions/Xdbe.h, [], [], [#include <X11/Xlib.h> ])

dnl Checks for X extensions/libraries
XINERAMA_LIBS=""
XRANDR_LIBS=""
XFT_LIBS=""
XFT_CFLAGS=""

AC_CHECK_LIB(Xinerama, XineramaQueryScreens,
	     [XINERAMA_LIBS="-lXinerama"
	      AC_CHECK_HEADERS(X11/extensions/Xinerama.h)],
	     [],[$X_LIBS -lX11 -lXext])

AC_CHECK_LIB(Xrandr, XRRUpdateConfiguration,
	     [XRANDR_LIBS="-lXrandr"
	      AC_CHECK_HEADERS(X11/extensions/Xrandr.h, [], [],
	         [#include <X11/Xlib.h> ])],
	     [],[$X_LIBS -lX11 -lXext])

dnl Try using pkg-config first, since it looks like Xft2 may fail our
dnl hand-crafted tests
PKG_CHECK_MODULES(XFT, xft >= 1.0,
 [_cppflags=$CPPFLAGS
  CPPFLAGS="$CPPFLAGS $XFT_CFLAGS"
  AC_CHECK_HEADERS(X11/Xft/Xft.h)
  CPPFLAGS=$_cppflags],
 [AC_CHECK_LIB(Xft, XftDrawCreate,
	       [XFT_LIBS="-lXft -lXrender"
	       AC_CHECK_HEADERS(X11/Xft/Xft.h)],
	       [], [$X_LIBS -lX11 -lXext])])

dnl is X available?
if test "${no_x}" != "yes"; then
  AC_DEFINE(HAVE_X11, 1, [Have X11])
  X_LIBS="${X_LIBS} -lXext -lXrender -lSM -lICE"
  X_EXTRA_LIBS=""
else
  AC_MSG_ERROR([You need X11 for sawfish])
fi

X_SERVER="X.Org/XFree86 X11R6"

CPPFLAGS="${_cppflags}"

fi

dnl Checks for pango

AC_ARG_WITH(pango,
  [  --with-pango Use Pango instead of Xft
  --without-pango], [], [with_pango=yes])

if test "$with_pango" = "yes"; then

PANGO_MIN_VER="1.8.0"

PANGO_MODULES="pango "

PKG_CHECK_MODULES(PANGO, pango >= ${PANGO_MIN_VER}
		  ,AC_DEFINE(HAVE_PANGO, 1, [Have pango]) FONT_LOADER="Pango"
		  ,AC_MSG_ERROR([cannot locate pango]))

PKG_CHECK_MODULES(PANGOX, pangox >= ${PANGO_MIN_VER}
		  ,AC_DEFINE(HAVE_PANGO_X, 1, [Have pangox]) PANGO_MODULES="${PANGO_MODULES} pangox" FONT_LOADER="Pango X"
		  ,AC_MSG_WARN([pango x support not available]))

PKG_CHECK_MODULES(PANGOXFT, pangoxft >= ${PANGO_MIN_VER}
		  ,AC_DEFINE(HAVE_PANGO_XFT, 1, [Have pangoxft]) PANGO_MODULES="${PANGO_MODULES} pangoxft" have_pango_xft="yes" FONT_LOADER="Pango XFT" AC_SUBST(have_pango_xft)
		  ,AC_MSG_WARN([pango xft support not available]))

PANGO_LIBS=`pkg-config --libs $PANGO_MODULES`
PANGO_CFLAGS=`pkg-config --cflags $PANGO_MODULES`

else FONT_LOADER="X.Org"
fi

dnl Check for librep
REP_MIN_VER="0.90.0"

PKG_CHECK_MODULES(LIBREP, librep >= ${REP_MIN_VER}
		  ,REP_EXECDIR="`pkg-config --variable=repcommonexecdir librep`"
		  REP_CFLAGS="`pkg-config --cflags librep`"
		  REP_LIBS="`pkg-config --libs librep`"
		  REP_MSGFMT="`which msgfmt`"
		  REP_VERSION="`pkg-config --variable=version librep`"
		  ,AC_MSG_ERROR([cannot locate librep]))

dnl Check for rep-gtk
REP_GTK_MIN_VER="0.90.0"

PKG_CHECK_MODULES(REP_GTK, rep-gtk >= ${REP_GTK_MIN_VER}
		  ,
		  ,AC_MSG_ERROR([cannot locate rep-gtk]))

dnl Check for GTK+2
GTK_MIN_VER="2.6.0"

PKG_CHECK_MODULES(GTK, gtk+-2.0 >= ${GTK_MIN_VER}
		  ,GTK_LIBS="`pkg-config --libs gtk+-2.0`"
		  GTK_CFLAGS="`pkg-config --cflags gtk+-2.0`"
		  AC_DEFINE(HAVE_GTK, 1, [Have GTK])
		  ,AC_MSG_ERROR([cannot locate gtk+2]))

dnl Check for image handling libraries
AC_ARG_WITH(gdk-pixbuf,
	    [  --with-gdk-pixbuf	  Use gdk-pixbuf for image management
	     --without-gdk-pixbuf	  Use Imlib1 instead], [], [with_gdk_pixbuf=yes])

if test "$with_gdk_pixbuf" != "no"; then
	PKG_CHECK_MODULES(GDK_PIXBUF, gdk-pixbuf-xlib-2.0 >= ${GTK_MIN_VER}
			  ,GDK_PIXBUF_CFLAGS="`pkg-config --cflags gdk-pixbuf-xlib-2.0`"
			  GDK_PIXBUF_LIBS="`pkg-config --libs gdk-pixbuf-xlib-2.0`"
			  AC_DEFINE(HAVE_GDK_PIXBUF, 1, [Have gdk-pixbuf])
			  AC_DEFINE(NEED_PIXMAP_CACHE, 1, [Need pixmap cache])
			  IMAGE_LIBS='${GDK_PIXBUF_LIBS}'
			  IMAGE_CFLAGS='${GDK_PIXBUF_CFLAGS}'
			  IMAGE_LOADER="GDK Pixbuf Xlib"
			  with_gdk_pixbuf=yes
			  ,AC_MSG_ERROR([cannot locate gdk-pixbuf-xlib])
			  with_gdk_pixbuf=no)
fi

if test "$with_gdk_pixbuf" = "no"; then
	PKG_CHECK_MODULES(IMLIB1, imlib >= 1.9
			  ,IMLIB_CFLAGS="`pkg-config --cflags imlib`"
			  IMLIB_LIBS="`pkg-config --libs imlib`"
			  AC_DEFINE(HAVE_IMLIB, 1, [Have Imlib1])
			  IMAGE_LIBS='${IMLIB1_LIBS}'
			  IMAGE_CFLAGS='${IMLIB1_CFLAGS}'
			  IMLIB_VERSION="`pkg-config --modversion imlib`"
			  IMAGE_LOADER="IMLIB 1"
			  ,AC_MSG_ERROR([cannot locate imlib1 library]))
fi

dnl Check for libaudiofile
AUDIOFILE_MIN_VER="0.2.3"

AC_ARG_WITH(audiofile,
	    [  --with-audiofile	  Use libaudiofile for sound manipulation
	     --without-audiofile], [], [with_audiofile=yes])

if test "$with_audiofile" = "yes"; then
    PKG_CHECK_MODULES(AUDIOFILE, audiofile >= ${AUDIOFILE_MIN_VER},
		      ,AUDIOFILE_LIBS="`pkg-config --libs audiofile`"
		      AUDIOFILE_CFLAGS="`pkg-config --cflags audiofile`"
		      AC_DEFINE(HAVE_LIBAUDIOFILE, 1, [Have libaudiofile])
		      ,AC_MSG_ERROR([cannot locate libaudiofile]))
fi

dnl Check for esound
ESD_MIN_VER="0.2.23"

AC_ARG_WITH(esd,
	    [  --with-esd	  Use the Enlightened Sound Daemon
	     --without-esd], [], [with_esd=yes])

if test "$with_esd" = "yes"; then
    PKG_CHECK_MODULES(ESD, esound >= ${ESD_MIN_VER}
		      ,ESD_LIBS="`pkg-config --libs esound`"
		      ESD_CFLAGS="`pkg-config --cflags esound`"
		      AC_DEFINE(HAVE_ESD, 1, [Have ESD])
		      ,AC_MSG_ERROR([cannot locate esound]))
fi

dnl Check wether to install mo files

AC_ARG_WITH(nls,
	   [ --with-nls		Install translations
	    --without-nls], [], [with_nls=yes])

if test "$with_nls" = "yes"; then
	SUBDIRS="${SUBDIRS} po"
fi

dnl Check for Doug Lea's malloc in libc
doug_lea_malloc=yes
AC_CHECK_FUNC(malloc_get_state, , doug_lea_malloc=no)
AC_CHECK_FUNC(malloc_set_state, , doug_lea_malloc=no)
if test "$doug_lea_malloc" = "no"; then
  dnl We used to compile our own version of dlmalloc on most
  dnl platforms that didn't have it in their libc. But the list
  dnl of exceptions was growing too long..
  AC_DEFINE(LIBC_MALLOC,1,[libc malloc])
else
  AC_DEFINE(DOUG_LEA_MALLOC,1,[Doug Lea malloc])
  AC_DEFINE(LIBC_MALLOC,1,[libc malloc])
fi

dnl Check for GNOME location
AC_ARG_WITH(gnome_prefix,
 [  --with-gnome-prefix=DIR Root of GNOME installation], [],
 [ with_gnome_prefix="" ])
AC_MSG_CHECKING([for GNOME prefix])
if test "x$with_gnome_prefix" = "x"; then
  with_gnome_prefix='${prefix}'
fi
AC_MSG_RESULT([$with_gnome_prefix])
GNOMEDIR=$with_gnome_prefix

dnl How do we get dependency lines in the Makefile?
if test "x${GCC}" = "xyes"; then
  MAKEDEP='$(CC) -MM'
else
  case ${host} in
    *-dec-osf*)
      dnl works on Tru64
      MAKEDEP='$(CC) -M'
      ;;
    *-sun-solaris*)
      dnl works on Solaris
      MAKEDEP='/usr/ccs/lib/cpp -M'
      ;;
    *)
      dnl disable dependences?
      MAKEDEP='true'
      ;;
  esac
fi

AC_MSG_CHECKING(for languages to install)
AC_ARG_ENABLE(linguas,
  [  --enable-linguas=LANGS... Install language catalogs for language codes LANGS],
  [ LINGUAS="$enableval" ], [ LINGUAS="" ])
if test "x$LINGUAS" = x; then
  changequote({,})
  LINGUAS="`echo $srcdir/po/*.po | sed -e 's/[^ ]*\/po\/\([^ ]*\)\.po/\1/g'`"
  changequote([,])
fi
dnl too gross for words..
if test $REP_MSGFMT = true; then
  LINGUAS=""
fi
AC_MSG_RESULT($LINGUAS)

dnl Nonstandard exported symbols
AC_SUBST(version)
AC_SUBST(subversion)
AC_SUBST(sawfishdir)
AC_SUBST(sawfishexecdir)
AC_SUBST(lispdir)
AC_SUBST(localedir)
AC_SUBST(install_sh)
AC_SUBST(datarootdir)
AC_SUBST(MAKEDEP)
AC_SUBST(GNOMEDIR)
AC_SUBST(SUBDIRS)
AC_SUBST(HAVE_X11)
AC_SUBST(CPPFLAGS)
AC_SUBST(CFLAGS)
AC_SUBST(LIBS)
AC_SUBST(X_CFLAGS)
AC_SUBST(X_LIBS)
AC_SUBST(X_EXTRA_LIBS)
AC_SUBST(IMLIB_CFLAGS)
AC_SUBST(IMLIB_LIBS)
AC_SUBST(XINERAMA_LIBS)
AC_SUBST(XRANDR_LIBS)
AC_SUBST(XFT_LIBS)
AC_SUBST(XFT_CFLAGS)
AC_SUBST(PANGO_MIN_VER)
AC_SUBST(PANGO_LIBS)
AC_SUBST(PANGO_CFLAGS)
AC_SUBST(REP_EXECDIR)
AC_SUBST(REP_CFLAGS)
AC_SUBST(REP_LIBS)
AC_SUBST(REP_VERSION)
AC_SUBST(REP_MSGFMT)
AC_SUBST(GDK_PIXBUF_LIBS)
AC_SUBST(GDK_PIXBUF_CFLAGS)
AC_SUBST(IMAGE_LIBS)
AC_SUBST(IMAGE_CFLAGS)
AC_SUBST(GTK_MIN_VER)
AC_SUBST(GTK_LIBS)
AC_SUBST(GTK_CFLAGS)
AC_SUBST(REP_MIN_VER)
AC_SUBST(REP_GTK_MIN_VER)
AC_SUBST(AUDIOFILE_MIN_VER)
AC_SUBST(AUDIOFILE_LIBS)
AC_SUBST(AUDIOFILE_CFLAGS)
AC_SUBST(ESD_MIN_VER)
AC_SUBST(ESD_LIBS)
AC_SUBST(ESD_CFLAGS)
AC_SUBST(VERSION)
AC_SUBST(PACKAGE)
AC_SUBST(GETTEXT_PACKAGE)
AC_SUBST(LINGUAS)

dnl Build all files
AC_CONFIG_FILES([
Makedefs
Makefile
sawfish.ebuild
sawfish.pc
sawfish.spec
lisp/Makefile
lisp/sawfish/ui/Makefile
lisp/sawfish/gtk/Makefile
lisp/sawfish/gtk/widgets/font.jl
man/Makefile
po/Makefile
scripts/Makefile
sounds/Makefile
src/Makefile
themes/Makefile
])

AC_OUTPUT

mv sawfish.ebuild sawfish-$version.ebuild

REP_VERSION="`pkg-config --modversion librep`"
REP_GTK_VERSION="`pkg-config --modversion rep-gtk`"
GLIB_VERSION="`pkg-config --modversion glib-2.0`"
PANGO_VERSION="`pkg-config --modversion pango`"

if $PKG_CONFIG --exists cairo; then
	CAIRO_VERSION="`pkg-config --modversion cairo`"
fi

GTK_VERSION="`pkg-config --modversion gtk+-2.0`"

echo "
  == == == == == == == == == == == == ==

  sawfish:	$version '$codename'

  == == == == == == == == == == == == ==

  prefix:	$prefix
  exec_prefix:	$exec_prefix
  libdir:	$libdir
  libexecdir:	$libexecdir

  == == == == == == == == == == == == ==

  compiler:	$CC
  cflags:	$CFLAGS $DEVELOPMENT_CFLAGS
  preprocessor:	$CPP
  cppflags:	$CPPFLAGS
  ldflags:	$LDFLAGS
  makeflags:	$MAKEFLAGS

  == == == == == == == == == == == == ==

  rep:		$REP_VERSION
  rep-gtk:	$REP_GTK_VERSION
  glib:		$GLIB_VERSION"

if $PKG_CONFIG --exists cairo; then
	echo "  cairo:	$CAIRO_VERSION"
fi

echo "  pango:	$PANGO_VERSION
  gtk+:		$GTK_VERSION"

if test "$with_gdk_pixbuf" = "no"; then
echo "  imlib1:	$IMLIB_VERSION"
fi

echo "
  == == == == == == == == == == == == ==

  xserver:	$X_SERVER

  == == == == == == == == == == == == ==

  image loader:	$IMAGE_LOADER

  == == == == == == == == == == == == ==

  font loader:	$FONT_LOADER

  == == == == == == == == == == == == ==

  Please read README.IMPORTANT

  == == == == == == == == == == == == ==
  "

dnl If it doesn't look like GNU Make is being used, give a friendly warning
tem=`make --version -f /dev/null 2>&1 | grep GNU`
if test "x$tem" = "x"; then
  AC_MSG_WARN([You need to use GNU Make when compiling sawfish])
fi

dnl Local variables:
dnl major-mode: sh-mode
dnl End:
