Subversion Repositories rld.domoticz

Rev

Blame | Last modification | View Log | Download

AC_PREREQ(2.63)

# Version number. This is currently the only place.
m4_define([HIDAPI_MAJOR],   0)
m4_define([HIDAPI_MINOR],   7)
m4_define([HIDAPI_RELEASE], 0)
m4_define([HIDAPI_RC],      +)
m4_define([VERSION_STRING], HIDAPI_MAJOR[.]HIDAPI_MINOR[.]HIDAPI_RELEASE[]HIDAPI_RC)

AC_INIT([hidapi],[VERSION_STRING],[alan@signal11.us])

# Library soname version
# Follow the following rules (particularly the ones in the second link):
#  http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
#  http://sourceware.org/autobook/autobook/autobook_91.html
lt_current="0"
lt_revision="0"
lt_age="0"
LTLDFLAGS="-version-info ${lt_current}:${lt_revision}:${lt_age}"

AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([foreign -Wall -Werror])
AC_CONFIG_MACRO_DIR([m4])

m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
LT_INIT

AC_PROG_CC
AC_PROG_CXX
AC_PROG_OBJC
PKG_PROG_PKG_CONFIG


m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])

hidapi_lib_error() {
  echo ""
  echo "  Library $1 was not found on this system."
  echo "  Please install it and re-run ./configure"
  echo ""
  exit 1
}

hidapi_prog_error() {
  echo ""
  echo "  Program $1 was not found on this system."
  echo "  This program is part of $2."
  echo "  Please install it and re-run ./configure"
  echo ""
  exit 1
}

AC_MSG_CHECKING([operating system])
AC_MSG_RESULT($host)
case $host in
*-linux*)
  AC_MSG_RESULT([ (Linux back-end)])
  AC_DEFINE(OS_LINUX, 1, [Linux implementations])
  AC_SUBST(OS_LINUX)
  backend="linux"
  os="linux"
  threads="pthreads"

  # HIDAPI/hidraw libs
  PKG_CHECK_MODULES([libudev], [libudev], true, [hidapi_lib_error libudev])
  LIBS_HIDRAW_PR+=" $libudev_LIBS"
  CFLAGS_HIDRAW+=" $libudev_CFLAGS"

  # HIDAPI/libusb libs
  AC_CHECK_LIB([rt], [clock_gettime], [LIBS_LIBUSB_PRIVATE+=" -lrt"], [hidapi_lib_error librt])
  PKG_CHECK_MODULES([libusb], [libusb-1.0], true, [hidapi_lib_error libusb-1.0])
  LIBS_LIBUSB_PRIVATE+=" $libusb_LIBS"
  CFLAGS_LIBUSB+=" $libusb_CFLAGS"
  ;;
*-darwin*)
  AC_MSG_RESULT([ (Mac OS X back-end)])
  AC_DEFINE(OS_DARWIN, 1, [Mac implementation])
  AC_SUBST(OS_DARWIN)
  backend="mac"
  os="darwin"
  threads="pthreads"
  LIBS="${LIBS} -framework IOKit -framework CoreFoundation"
  ;;
*-freebsd*)
  AC_MSG_RESULT([ (FreeBSD back-end)])
  AC_DEFINE(OS_FREEBSD, 1, [FreeBSD implementation])
  AC_SUBST(OS_FREEBSD)
  backend="libusb"
  os="freebsd"
  threads="pthreads"

  CFLAGS="$CFLAGS -I/usr/local/include"
  LDFLAGS="$LDFLAGS -L/usr/local/lib"
  LIBS="${LIBS}"
  AC_CHECK_LIB([usb], [libusb_init], [LIBS_LIBUSB_PRIVATE="${LIBS_LIBUSB_PRIVATE} -lusb"], [hidapi_lib_error libusb])
  AC_CHECK_LIB([iconv], [iconv_open], [LIBS_LIBUSB_PRIVATE="${LIBS_LIBUSB_PRIVATE} -liconv"], [hidapi_lib_error libiconv])
  echo libs_priv: $LIBS_LIBUSB_PRIVATE
  ;;
*-mingw*)
  AC_MSG_RESULT([ (Windows back-end, using MinGW)])
  backend="windows"
  os="windows"
  threads="windows"
  win_implementation="mingw"
  ;;
*-cygwin*)
  AC_MSG_RESULT([ (Windows back-end, using Cygwin)])
  backend="windows"
  os="windows"
  threads="windows"
  win_implementation="cygwin"
  ;;
*)
  AC_MSG_ERROR([HIDAPI is not supported on your operating system yet])
esac

LIBS_HIDRAW="${LIBS} ${LIBS_HIDRAW_PR}"
LIBS_LIBUSB="${LIBS} ${LIBS_LIBUSB_PRIVATE}"
AC_SUBST([LIBS_HIDRAW])
AC_SUBST([LIBS_LIBUSB])
AC_SUBST([CFLAGS_LIBUSB])
AC_SUBST([CFLAGS_HIDRAW])

if test "x$os" = xwindows; then
  AC_DEFINE(OS_WINDOWS, 1, [Windows implementations])
  AC_SUBST(OS_WINDOWS)
  LDFLAGS="${LDFLAGS} -no-undefined"
  LIBS="${LIBS} -lsetupapi"
fi

if test "x$threads" = xpthreads; then
  AX_PTHREAD([found_pthreads=yes], [found_pthreads=no])

  if test "x$found_pthreads" = xyes; then
    if test "x$os" = xlinux; then
      # Only use pthreads for libusb implementation on Linux.
      LIBS_LIBUSB="$PTHREAD_LIBS $LIBS_LIBUSB"
      CFLAGS_LIBUSB="$CFLAGS_LIBUSB $PTHREAD_CFLAGS"
      # There's no separate CC on Linux for threading,
      # so it's ok that both implementations use $PTHREAD_CC
      CC="$PTHREAD_CC"
    else
      LIBS="$PTHREAD_LIBS $LIBS"
      CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
      CC="$PTHREAD_CC"
    fi
  fi
fi

# Test GUI
AC_ARG_ENABLE([testgui],
  [AS_HELP_STRING([--enable-testgui],
    [enable building of test GUI (default n)])],
  [testgui_enabled=$enableval],
  [testgui_enabled='no'])
AM_CONDITIONAL([BUILD_TESTGUI], [test "x$testgui_enabled" != "xno"])

# Configure the MacOS TestGUI app bundle
rm -Rf testgui/TestGUI.app
mkdir -p testgui/TestGUI.app
cp -R ${srcdir}/testgui/TestGUI.app.in/* testgui/TestGUI.app
chmod -R u+w testgui/TestGUI.app
mkdir testgui/TestGUI.app/Contents/MacOS/

if test "x$testgui_enabled" != "xno"; then
  if test "x$os" = xdarwin; then
    # On Mac OS, don't use pkg-config.
    AC_CHECK_PROG([foxconfig], [fox-config], [fox-config], false)
    if test "x$foxconfig" = "xfalse"; then
      hidapi_prog_error fox-config "FOX Toolkit"
    fi
    LIBS_TESTGUI+=`$foxconfig --libs`
    LIBS_TESTGUI+=" -framework Cocoa -L/usr/X11R6/lib"
    CFLAGS_TESTGUI+=`$foxconfig --cflags`
    OBJCFLAGS+=" -x objective-c++"
  elif test "x$os" = xwindows; then
    # On Windows, just set the paths for Fox toolkit
    if test "x$win_implementation" = xmingw; then
      CFLAGS_TESTGUI="-I\$(srcdir)/../../hidapi-externals/fox/include -g -c"
      LIBS_TESTGUI=" -mwindows \$(srcdir)/../../hidapi-externals/fox/lib/libFOX-1.6.a -lgdi32 -Wl,--enable-auto-import -static-libgcc -static-libstdc++ -lkernel32"
    else
      # Cygwin
      CFLAGS_TESTGUI="-DWIN32 -I\$(srcdir)/../../hidapi-externals/fox/include -g -c"
      LIBS_TESTGUI="\$(srcdir)/../../hidapi-externals/fox/lib/libFOX-cygwin-1.6.a -lgdi32 -Wl,--enable-auto-import -static-libgcc -static-libstdc++ -lkernel32"
    fi
  else
    # On Linux and FreeBSD platforms, use pkg-config to find fox.
    PKG_CHECK_MODULES([fox], [fox])
    LIBS_TESTGUI="${LIBS_TESTGUI} $fox_LIBS"
    if test "x$os" = xfreebsd; then
      LIBS_TESTGUI="${LIBS_TESTGUI} -L/usr/local/lib"
    fi
    CFLAGS_TESTGUI="${CFLAGS_TESTGUI} $fox_CFLAGS"
  fi
fi
AC_SUBST([LIBS_TESTGUI])
AC_SUBST([CFLAGS_TESTGUI])
AC_SUBST([backend])

# OS info for Automake
AM_CONDITIONAL(OS_LINUX, test "x$os" = xlinux)
AM_CONDITIONAL(OS_DARWIN, test "x$os" = xdarwin)
AM_CONDITIONAL(OS_FREEBSD, test "x$os" = xfreebsd)
AM_CONDITIONAL(OS_WINDOWS, test "x$os" = xwindows)

AC_CONFIG_HEADERS([config.h])

if test "x$os" = "xlinux"; then
  AC_CONFIG_FILES([pc/hidapi-hidraw.pc])
  AC_CONFIG_FILES([pc/hidapi-libusb.pc])
else
  AC_CONFIG_FILES([pc/hidapi.pc])
fi

AC_SUBST(LTLDFLAGS)

AC_CONFIG_FILES([Makefile \
  hidtest/Makefile \
  libusb/Makefile \
  linux/Makefile \
  mac/Makefile \
  testgui/Makefile \
  windows/Makefile])
AC_OUTPUT