dnl  Copyright 2005 Adam Jackson.
dnl  Copyright 2011 Diego Elio Pettenò <flameeyes@gmail.com>
dnl
dnl  Permission is hereby granted, free of charge, to any person obtaining a
dnl  copy of this software and associated documentation files (the "Software"),
dnl  to deal in the Software without restriction, including without limitation
dnl  on the rights to use, copy, modify, merge, publish, distribute, sub
dnl  license, and/or sell copies of the Software, and to permit persons to whom
dnl  the Software is furnished to do so, subject to the following conditions:
dnl
dnl  The above copyright notice and this permission notice (including the next
dnl  paragraph) shall be included in all copies or substantial portions of the
dnl  Software.
dnl
dnl  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
dnl  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
dnl  FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
dnl  ADAM JACKSON BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
dnl  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
dnl  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
dnl
dnl Process this file with autoconf to produce a configure script

dnl Initialize Autoconf
AC_PREREQ([2.60])
AC_INIT([xf86-input-multitouch],
        [1.0.0-rc2],
        [patches@bitmath.org],
        [xf86-input-multitouch],
        [http://bitmath.org/code/multitouch/])
AC_CONFIG_SRCDIR([Makefile.am])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_AUX_DIR(.)

dnl Initialize Automake
AM_INIT_AUTOMAKE([foreign dist-bzip2])
AM_MAINTAINER_MODE

dnl Initialize libtool
AC_DISABLE_STATIC
AC_PROG_LIBTOOL

dnl Initialize X.Org macros 1.8 or later for MAN_SUBSTS set by XORG_MANPAGE_SECTIONS
m4_ifndef([XORG_MACROS_VERSION], 
          [m4_fatal([must install xorg-macros 1.8 or later before running autoconf/autogen])])
XORG_MACROS_VERSION(1.8)
XORG_DEFAULT_OPTIONS

dnl Obtain compiler/linker options from server and required extensions
PKG_CHECK_MODULES(XORG, xorg-server xproto inputproto)
PKG_CHECK_MODULES(MTDEV, mtdev)

dnl Define a configure option for an alternate input module directory
AC_ARG_WITH(xorg-module-dir,
            AC_HELP_STRING([--with-xorg-module-dir=DIR],
                           [Default xorg module directory @<:@default=$libdir/xorg/modules@:>@]),
            [moduledir="$withval"],
            [moduledir="$libdir/xorg/modules"])
inputdir=${moduledir}/input
AC_SUBST(inputdir)

dnl X Server SDK location is required to install evdev header files
dnl This location is also relayed in the xorg-evdev.pc file
sdkdir=`$PKG_CONFIG --variable=sdkdir xorg-server`

dnl Workaround overriding sdkdir to be able to create a tarball when user has no
dnl write permission in sdkdir. See DISTCHECK_CONFIGURE_FLAGS in Makefile.am
AC_ARG_WITH([sdkdir], [], [sdkdir="$withval"])
AC_SUBST([sdkdir])

DRIVER_NAME=multitouch
AC_SUBST([DRIVER_NAME])

AC_CONFIG_FILES([Makefile])
AC_OUTPUT
