AC_PREREQ(2.59)
-AC_INIT([libcec], [1:8:0], [http://libcec.pulse-eight.com/])
+AC_INIT([libcec], [2:0:0], [http://libcec.pulse-eight.com/])
AC_CONFIG_HEADERS([config.h])
AH_TOP([#pragma once])
AM_INIT_AUTOMAKE([foreign])
-m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES])
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
msg_dl_missing="required library 'dl' is missing"
msg_udev_missing="library 'udev' is missing - adapter detection will not be available"
msg_dirent_missing="dirent.h header is missing - adapter detection will not be available"
-msg_lockdev_missing="required library 'liblockdev' is missing"
+msg_lockdev_missing="library 'liblockdev' is missing"
+msg_rpi_api_missing="Raspberry Pi API not found or incompatible with libCEC"
+msg_rpi_will_check="will check for RPi support"
+msg_rpi_unsupported_target="will not check for RPi support (unsupported cpu: ${host_cpu})"
msg_required_header_missing="required header is missing"
## debugging symbols
[use_optimisation=$enableval],
[use_optimisation=yes])
+## TDA995x support
+AC_ARG_ENABLE([cubox],
+ [AS_HELP_STRING([--enable-tda995x],
+ [enable support for the TDA995x (default is no)])],
+ [use_tda995x=$enableval],
+ [use_tda995x=no])
+
+## Optional path to the tda995x dev toolkit
+AC_ARG_WITH([tda995x-toolkit-path],
+ [AS_HELP_STRING([--with-tda995x-toolkit-path],
+ [location of the TDA995x driver toolkit (default is ./nxp_hdmi)])],
+ [TDA995X_CFLAGS="-I$withval/inc"],
+ [TDA995X_CFLAGS="-I\$(abs_top_srcdir)/nxp_hdmi/inc"])
+
+## Raspberry Pi support
+AC_ARG_ENABLE([rpi],
+ [AS_HELP_STRING([--enable-rpi],
+ [enable support for the Raspberry Pi (default is auto)])],
+ [use_rpi=$enableval],
+ [use_rpi=auto])
+
+## Optional path to the RPi's dev headers
+AC_ARG_WITH([rpi-include-path],
+ [AS_HELP_STRING([--with-rpi-include-path],
+ [location of the Raspberry Pi headers (location of /opt/vc/include, default is auto)])],
+ [RPI_CFLAGS="-I$withval -I$withval/interface/vcos/pthreads -I$withval/interface/vmcs_host/linux"])
+
+## Optional path to libbcm_host.so
+AC_ARG_WITH([rpi-lib-path],
+ [AS_HELP_STRING([--with-rpi-lib-path],
+ [location of the Raspberry Pi libraries (location of libbcm_host.so, default is auto)])],
+ [RPI_LIBS="-L$withval"])
+
+## only check for the RPi API on ARM targets
+if test "x$use_rpi" != "xno"; then
+ case "${host_cpu}" in
+ arm*)
+ AC_MSG_NOTICE($msg_rpi_will_check)
+ ;;
+ *)
+ if test "x$use_rpi" = "xyes"; then
+ AC_MSG_ERROR($msg_rpi_unsupported_target)
+ else
+ AC_MSG_NOTICE($msg_rpi_unsupported_target)
+ fi
+ use_rpi="no"
+ ;;
+ esac
+fi
+
## add the top dir and include to the include path, so we can include config.h and cec.h
CPPFLAGS="$CPPFLAGS -I\$(abs_top_srcdir)/src -I\$(abs_top_srcdir)/include"
AC_SEARCH_LIBS([dlopen], [dl],
[test "$ac_cv_search_dlopen" = "none required" || LIBS_DL=$ac_cv_search_dlopen],
AC_MSG_ERROR($msg_dl_missing))
-AC_CHECK_FUNCS([dlopen dlcose dlsym])
+AC_CHECK_FUNCS([dlopen dlclose dlsym])
## platform specific libs, required by all targets
case "${host}" in
*-*-linux*)
# for timeutils
- LIBS="$LIBS -lrt"
+ AC_SEARCH_LIBS([clock_gettime], [rt])
;;
*-apple-darwin*)
LIBS="$LIBS -framework CoreVideo -framework IOKit"
## search for udev, lockdev and the RPi API, only required by libCEC
use_udev="no"
use_adapter_detection="yes"
+use_lockdev="no"
case "${host}" in
*-*-linux*)
## search for udev if pkg-config was found
fi
## search for lockdev
- AC_CHECK_HEADER(lockdev.h,,AC_MSG_ERROR($msg_lockdev_missing))
- AC_CHECK_LIB(lockdev,dev_unlock,,AC_MSG_ERROR($msg_lockdev_missing))
+ use_lockdev="yes"
+ AC_CHECK_HEADER(lockdev.h,,[use_lockdev="no";AC_MSG_WARN($msg_lockdev_missing)])
+ AC_CHECK_LIB(lockdev,dev_unlock,,[use_lockdev="no";AC_MSG_WARN($msg_lockdev_missing)])
AC_CHECK_HEADER(time.h,,AC_MSG_ERROR($msg_required_header_missing))
AC_CHECK_HEADER(sys/prctl.h,,AC_MSG_ERROR($msg_required_header_missing))
+
+ ## search for the RPi API. we need to check a couple of things to see if
+ ## it's recent enough and contains the calls needed for libCEC to operate
+ ## correctly.
+ if test "x$use_rpi" != "xno"; then
+ CPPFLAGS="$CPPFLAGS $RPI_CFLAGS"
+ libs_pre_rpi="$LIBS"
+ LIBS="$LIBS $RPI_LIBS -lvcos -lvchiq_arm"
+
+ check_rpi_cec_service="yes"
+
+ ## check for headers we need
+ AC_CHECK_HEADER(interface/vmcs_host/vc_cec.h,,check_rpi_cec_service="no")
+ AC_CHECK_HEADER(interface/vmcs_host/vc_cecservice.h,,check_rpi_cec_service="no")
+ AC_CHECK_HEADER(interface/vchiq_arm/vchiq_if.h,,check_rpi_cec_service="no")
+ AC_CHECK_HEADER(bcm_host.h,,check_rpi_cec_service="no")
+
+ ## check if the headers contain support for libCEC.
+ ## VC_CECSERVICE_VER needs to be defined
+ AC_MSG_CHECKING([interface/vmcs_host/vc_cec.h compatibility])
+
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <interface/vmcs_host/vc_cecservice.h>
+#include <interface/vchiq_arm/vchiq_if.h>
+#if !defined(VC_CECSERVICE_VER)
+#error RPi headers does not contain libCEC support
+#endif]], [[]])],[AC_MSG_RESULT([yes])],[check_rpi_cec_service="no"; AC_MSG_RESULT([no])])
+
+ ## check if the methods we're using can be found in libbcm_host.so, so we don't use an incompatible version
+ AC_CHECK_LIB(bcm_host,vchi_initialise,,check_rpi_cec_service="no")
+ libs_tmp="$LIBS"
+ AC_CHECK_LIB(bcm_host,vc_vchi_cec_init,,check_rpi_cec_service="no")
+ AC_CHECK_LIB(bcm_host,vc_cec_get_logical_address,,check_rpi_cec_service="no")
+ AC_CHECK_LIB(bcm_host,vc_cec_get_physical_address,,check_rpi_cec_service="no")
+ AC_CHECK_LIB(bcm_host,vc_cec_param2message,,check_rpi_cec_service="no")
+ AC_CHECK_LIB(bcm_host,vc_cec_poll_address,,check_rpi_cec_service="no")
+ AC_CHECK_LIB(bcm_host,vc_cec_register_callback,,check_rpi_cec_service="no")
+ AC_CHECK_LIB(bcm_host,vc_cec_release_logical_address,,check_rpi_cec_service="no")
+ AC_CHECK_LIB(bcm_host,vc_cec_set_passive,,check_rpi_cec_service="no")
+ AC_CHECK_LIB(bcm_host,vcos_init,,check_rpi_cec_service="no")
+ AC_CHECK_LIB(bcm_host,vchiq_initialise,,check_rpi_cec_service="no")
+ AC_CHECK_LIB(bcm_host,vchi_initialise,,check_rpi_cec_service="no")
+ AC_CHECK_LIB(bcm_host,vchi_create_connection,,check_rpi_cec_service="no")
+ AC_CHECK_LIB(bcm_host,bcm_host_init,,check_rpi_cec_service="no")
+ LIBS="$libs_tmp"
+
+ if test "x$check_rpi_cec_service" != "xyes" && test "x$use_rpi" = "xyes"; then
+ AC_MSG_ERROR($msg_rpi_api_missing)
+ elif test "x$check_rpi_cec_service" != "xyes"; then
+ use_rpi="no"
+ LIBS="$libs_pre_rpi"
+ fi
+ fi
;;
*-apple-darwin*)
AC_CHECK_HEADER(mach/mach_time.h,,AC_MSG_ERROR($msg_required_header_missing))
AC_CHECK_HEADER(CoreVideo/CVHostTime.h,,AC_MSG_ERROR($msg_required_header_missing))
+ AC_DEFINE([TARGET_DARWIN], [1], [Darwin target])
;;
esac
AC_DEFINE([HAVE_P8_USB],[1],[Define to 1 to include support for the Pulse-Eight USB-CEC Adapter])
AM_CONDITIONAL(USE_P8_USB, true)
+if test "x$use_lockdev" = "xyes"; then
+ AC_DEFINE([HAVE_LOCKDEV],[1],[Define to 1 if liblockdev is installed])
+fi
+
## mark adapter detection as available if the required deps were found
if test "x$use_adapter_detection" = "xyes"; then
## mark udev as available if it was found
features="$features\n Pulse-Eight CEC Adapter detection :\tno"
fi
+## mark RPi support as available if the required headers and libs were found
+if test "x$use_rpi" != "xno"; then
+ AC_DEFINE([HAVE_RPI_API],[1],[Define to 1 to include RPi support])
+ AM_CONDITIONAL(USE_RPI_API, true)
+ features="$features\n Raspberry Pi support :\t\tyes"
+ LIB_INFO="$LIB_INFO 'RPi'"
+else
+ AM_CONDITIONAL(USE_RPI_API, false)
+ features="$features\n Raspberry Pi support :\t\tno"
+fi
+
+## mark TDA995x support as available
+if test "x$use_tda995x" != "xno"; then
+ AC_DEFINE([HAVE_TDA995X_API],[1],[Define to 1 to include CuBox support])
+ AM_CONDITIONAL(USE_TDA995X_API, true)
+ features="$features\n TDA995x support :\t\t\tyes"
+ LIB_INFO="$LIB_INFO 'TDA995x'"
+ CPPFLAGS="$CPPFLAGS $TDA995X_CFLAGS"
+else
+ AM_CONDITIONAL(USE_TDA995X_API, false)
+ features="$features\n TDA995x support :\t\t\tno"
+fi
+
## check if our build system is complete
AC_CHECK_HEADER(algorithm,,AC_MSG_ERROR($msg_required_header_missing))
AC_CHECK_HEADER(ctype.h,,AC_MSG_ERROR($msg_required_header_missing))
LIB_INFO="$LIB_INFO on `uname -s` `uname -r` (`uname -m`)"
fi
-## redefine the LIBS, so cec-client and cec-config aren't linked against things they don't need
+## redefine the LIBS, so cec-client isn't linked against things they don't need
LIBS_LIBCEC="$LIBS"
LIBS="$libs_client"
if test "x$use_debug" = "xyes"; then
CXXFLAGS="$CXXFLAGS -g"
+ AC_DEFINE(CEC_DEBUGGING,"1", "generate libCEC debug output")
fi
if test "x$optimisation" = "xyes"; then
AC_SUBST([USE_P8_USB_DETECT])
AC_SUBST([USE_RPI_API])
AC_CONFIG_FILES([src/lib/libcec.pc])
-AC_OUTPUT([Makefile src/lib/Makefile src/testclient/Makefile src/cec-config/Makefile])
+AC_OUTPUT([Makefile src/lib/Makefile src/testclient/Makefile])
cat <<EOB