# SVN revison
define([svn_revision], esyscmd([sh -c "svnversion -n"]))
SVN_REVISION=svn_revision

# General init
AC_INIT(libnfc, 1.2.1, info@libnfc.org)

AC_CONFIG_HEADER(config.h)
AM_INIT_AUTOMAKE

AC_LANG_C
AC_PROG_CC
AC_PROG_MAKE_SET

# Libtool
AC_PROG_LIBTOOL
case "$host" in
   *-pc-linux-gnu)
     AC_MSG_RESULT([Fixing libtool for -rpath problems.])
     sed -i -r 's/(hardcode_into_libs)=.*$/\1=no/' libtool
   ;;
esac

AC_PATH_PROG(PKG_CONFIG, pkg-config)

# Checks for header files.
AC_HEADER_STDC
AC_HEADER_STDBOOL
AC_CHECK_HEADERS([stdio.h stdlib.h stdint.h stddef.h stdbool.h])

# Checks for types
AC_TYPE_SIZE_T
AC_TYPE_UINT8_T
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
AC_TYPE_INT32_T

# Debug support (default:no)
AC_ARG_ENABLE([debug],AS_HELP_STRING([--enable-debug],[Enable debug output]),[enable_debug=$enableval],[enable_debug="no"])
 
AC_MSG_CHECKING(for debug flag)
AC_MSG_RESULT($enable_debug)
 
if test x"$enable_debug" = "xyes"
then
  CFLAGS="$CFLAGS -g -Wall -DDEBUG -pedantic"
fi
AC_SUBST([DEBUG_CFLAGS])

# Serial autoprobing support (default:yes)
AC_ARG_ENABLE([serial-autoprobe],AS_HELP_STRING([--disable-serial-autoprobe],[Disable serial autoprobing]),[enable_serial_autoprobe=$enableval],[enable_serial_autoprobe="yes"])
 
AC_MSG_CHECKING(for serial autoprobe flag)
AC_MSG_RESULT($enable_serial_autoprobe)

if test x"$enable_serial_autoprobe" = "xno"
then
  CFLAGS="$CFLAGS -DDISABLE_SERIAL_AUTOPROBE"
fi

# PCSC-lite support (default: yes)
AC_ARG_ENABLE([pcsc-lite],AS_HELP_STRING([--disable-pcsc-lite],[Disable PCSC-lite dependency (removes ACR122 support)]),[enable_pcsc_lite=$enableval],[enable_pcsc_lite="yes"])
 
AC_MSG_CHECKING(for pcsc-lite support)
AC_MSG_RESULT($enable_pcsc_lite)
 
if test x"$enable_pcsc_lite" = "xno"
then
  WITH_PCSC=0
fi
AM_CONDITIONAL(PCSC_LITE_ENABLED, [test x"$enable_pcsc_lite" = xyes])

# libusb support (default: yes)
AC_ARG_ENABLE([libusb],AS_HELP_STRING([--disable-libusb],[Disable libusb dependency (removes PN531USB and PN533USB support)]),[enable_libusb=$enableval],[enable_libusb="yes"])
 
AC_MSG_CHECKING(for libusb support)
AC_MSG_RESULT($enable_libusb)
 
if test x"$enable_libusb" = "xno"
then
  WITH_LIBUSB=0
fi
AM_CONDITIONAL(LIBUSB_ENABLED, [test x"$enable_libusb" = xyes])

# Documentation (default: no)
AC_ARG_ENABLE([doc],AS_HELP_STRING([--enable-doc],[Enable documentation generation.]),[enable_doc=$enableval],[enable_doc="no"])

AC_MSG_CHECKING(for documentation request)
AC_MSG_RESULT($enable_doc)

if test x"$enable_doc" = "xyes"
then
  AC_PATH_PROG([DOXYGEN], [doxygen])
  if test x$DOXYGEN = x
  then
    AC_MSG_ERROR([doxygen is mandatory.])
  fi
fi
AM_CONDITIONAL(DOC_ENABLED, [test x"$enable_doc" = xyes])


# Dependencies
PKG_CONFIG_REQUIRES=""
## libusb
if test "x$enable_libusb" = "xyes"; then
  if test x"$PKG_CONFIG" = "x"; then
    AC_PATH_PROG(LIBUSB_CONFIG,libusb-config)
    if test x"$LIBUSB_CONFIG" = "x" ; then
      WITH_USB=0
    else
      LIBUSB_CFLAGS=`$LIBUSB_CONFIG --cflags`
      LIBUSB_LIBS=`$LIBUSB_CONFIG --libs`
      WITH_USB=1
    fi
  else
    PKG_CHECK_MODULES(LIBUSB, libusb, [WITH_USB=1], [WITH_USB=0])
    if test x"$PKG_CONFIG_REQUIRES" != x""; then
      PKG_CONFIG_REQUIRES="$PKG_CONFIG_REQUIRES,"
    fi
    PKG_CONFIG_REQUIRES="$PKG_CONFIG_REQUIRES libusb"
  fi
  
  if test x"$WITH_USB" = "x0"; then
    AC_MSG_ERROR([libusb is mandatory.])
  fi
  AC_SUBST(LIBUSB_LIBS)
  AC_SUBST(LIBUSB_CFLAGS)
fi

## libpcsclite
if test "x$enable_pcsc_lite" = "xyes"; then
  case "$host" in
    *darwin*)
      AC_MSG_WARN(Using darwin PCSC Framework)
      LIBPCSCLITE_LIBS="-Wl,-framework,PCSC"
      LIBPCSCLITE_CFLAGS="-I/System/Library/Frameworks/PCSC.framework/Headers"
    ;;
    *)
      PKG_CHECK_MODULES(LIBPCSCLITE, libpcsclite, [WITH_PCSC=1], [WITH_PCSC=0])
      if test x"$WITH_PCSC" = "x0" ; then
        AC_MSG_ERROR([libpcsclite is mandatory.])
      fi
      if test x"$PKG_CONFIG_REQUIRES" != x""; then
        PKG_CONFIG_REQUIRES="$PKG_CONFIG_REQUIRES,"
      fi
      PKG_CONFIG_REQUIRES="$PKG_CONFIG_REQUIRES libpcsclite"
    ;;
  esac
  AC_SUBST(LIBPCSCLITE_LIBS)
  AC_SUBST(LIBPCSCLITE_CFLAGS)
fi

AC_SUBST(PKG_CONFIG_REQUIRES)

# Set C standard to C99
# C99 standard support (default: yes)
AC_ARG_ENABLE([std-c99],AS_HELP_STRING([--disable-std-c99],[Disable C99 standard when compiling]),[enable_std_c99=$enableval],[enable_std_c99="yes"])
 
AC_MSG_CHECKING(for C99 support)
AC_MSG_RESULT($enable_std_c99)
 
if test x"$enable_std_c99" != "xno"
then
	CFLAGS="$CFLAGS -std=c99"
fi

AC_CONFIG_FILES([
		Makefile
		src/lib/buses/Makefile
		src/lib/drivers/Makefile
		src/lib/Makefile
		src/examples/Makefile
		src/Makefile
		libnfc.pc
		Doxyfile
		])

AC_OUTPUT