X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=configure.ac;h=4192c8e4f117f674b33a78d7c4bc8cf9a70130f7;hb=d37c7109bf4e3b3e3ed0a477d96c1cc77b1623f7;hp=75d14e8b2f58444b26ebd9027996c2158052c158;hpb=7d39e2105f6da82f4f90a87d081c1bf5cc30968d;p=libsigrok.git diff --git a/configure.ac b/configure.ac index 75d14e8b..8c8e30bb 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ ## -## This file is part of the sigrok project. +## This file is part of the libsigrok project. ## ## Copyright (C) 2010-2012 Bert Vermeulen ## Copyright (C) 2012 Alexandru Gagniuc @@ -23,18 +23,18 @@ AC_PREREQ([2.63]) # libsigrok package version number (NOT the same as shared lib version!). m4_define([sr_package_version_major], [0]) -m4_define([sr_package_version_minor], [2]) +m4_define([sr_package_version_minor], [4]) m4_define([sr_package_version_micro], [0]) -m4_define([sr_package_version], [sr_package_version_major.sr_package_version_minor.sr_package_version_micro]) -AC_INIT([libsigrok], [sr_package_version], [sigrok-devel@lists.sourceforge.net], +AC_INIT([libsigrok], [sr_package_version_major.sr_package_version_minor.sr_package_version_micro], + [sigrok-devel@lists.sourceforge.net], [libsigrok], [http://www.sigrok.org]) -AC_CONFIG_HEADER([config.h]) +AC_CONFIG_HEADERS([config.h include/libsigrok/version.h]) AC_CONFIG_MACRO_DIR([autostuff]) AC_CONFIG_AUX_DIR([autostuff]) # We require at least automake 1.11 (needed for 'silent rules'). -AM_INIT_AUTOMAKE([1.11 -Wall -Werror foreign std-options]) +AM_INIT_AUTOMAKE([1.11 -Wall -Werror no-define nostdinc subdir-objects check-news color-tests]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) @@ -44,20 +44,54 @@ AH_BOTTOM([#endif /* SR_CONFIG_H */]) # Enable more compiler warnings via -Wall and -Wextra. Add -fvisibility=hidden # and enforce use of SR_API to explicitly mark all public API functions. -CFLAGS="$CFLAGS -Wall -Wextra -fvisibility=hidden" +CFLAGS="$CFLAGS -std=c11" +CFLAGS="$CFLAGS -Wall -Wextra -Wmissing-prototypes" +CFLAGS="$CFLAGS -fvisibility=hidden" +CFLAGS="$CFLAGS -D_POSIX_C_SOURCE=200112L" # Checks for programs. AC_PROG_CC AC_PROG_CPP +AC_PROG_CXX AC_PROG_INSTALL AC_PROG_LN_S +# Required for per-target flags or subdir-objects with C sources. +AM_PROG_CC_C_O + # Initialize libtool. LT_INIT -# Initialize pkg-config. -# We require at least 0.22, as "Requires.private" behaviour changed there. -PKG_PROG_PKG_CONFIG([0.22]) +CONFIG_STATUS_DEPENDENCIES= +SR_PACKAGE_VERSION="AC_PACKAGE_VERSION" + +# Check if we can get revision information from git. +sr_head=`git -C "$srcdir" rev-parse --verify --short HEAD 2>&AS_MESSAGE_LOG_FD` + +AS_IF([test "$?" -eq 0 && test -n "$sr_head"], [ + sr_git_deps= + test ! -f "$srcdir/.git/HEAD" || sr_git_deps=' $(top_srcdir)/.git/HEAD' + + sr_head_name=`git -C "$srcdir" rev-parse --symbolic-full-name HEAD 2>&AS_MESSAGE_LOG_FD` + AS_IF([test "$?" -eq 0 && test -f "$srcdir/.git/$sr_head_name"], + [sr_git_deps="$sr_git_deps \$(top_srcdir)/.git/$sr_head_name"]) + + # Use $(wildcard) so that things do not break if for whatever + # reason these files do not exist anymore at make time. + test -z "$sr_git_deps" || CONFIG_STATUS_DEPENDENCIES="\$(wildcard$sr_git_deps)" + + # Append the revision hash unless we are exactly on a tagged release. + git -C "$srcdir" describe --match 'AC_PACKAGE_NAME-AC_PACKAGE_VERSION' \ + --exact-match >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD \ + || SR_PACKAGE_VERSION="$SR_PACKAGE_VERSION-git-$sr_head" +]) +AC_SUBST([CONFIG_STATUS_DEPENDENCIES]) +AC_SUBST([SR_PACKAGE_VERSION]) + +AC_DEFINE([SR_PACKAGE_VERSION_MAJOR], [sr_package_version_major], [.]) +AC_DEFINE([SR_PACKAGE_VERSION_MINOR], [sr_package_version_minor], [.]) +AC_DEFINE([SR_PACKAGE_VERSION_MICRO], [sr_package_version_micro], [.]) +AC_DEFINE_UNQUOTED([SR_PACKAGE_VERSION_STRING], ["$SR_PACKAGE_VERSION"], [.]) # Library version for libsigrok (NOT the same as the package version). # Carefully read the libtool docs before updating these numbers! @@ -66,382 +100,432 @@ PKG_PROG_PKG_CONFIG([0.22]) SR_LIB_VERSION_CURRENT=2 SR_LIB_VERSION_REVISION=0 SR_LIB_VERSION_AGE=0 -SR_LIB_VERSION="$SR_LIB_VERSION_CURRENT:$SR_LIB_VERSION_REVISION:$SR_LIB_VERSION_AGE" -SR_LIB_LDFLAGS="-version-info $SR_LIB_VERSION" -AC_SUBST(SR_LIB_VERSION_CURRENT) -AC_SUBST(SR_LIB_VERSION_REVISION) -AC_SUBST(SR_LIB_VERSION_AGE) -AC_SUBST(SR_LIB_VERSION) -AC_SUBST(SR_LIB_LDFLAGS) - -# Hardware support '--enable' options. - -AC_ARG_ENABLE(all-drivers, AC_HELP_STRING([--enable-all-drivers], - [enable all drivers by default [default=yes]]), - [HW_ENABLED_DEFAULT="$enableval"], - [HW_ENABLED_DEFAULT="yes"]) - -AC_ARG_ENABLE(agilent-dmm, AC_HELP_STRING([--enable-agilent-dmm], - [enable Agilent DMM support [default=yes]]), - [HW_AGILENT_DMM="$enableval"], - [HW_AGILENT_DMM=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(HW_AGILENT_DMM, test x$HW_AGILENT_DMM = xyes) -if test "x$HW_AGILENT_DMM" = "xyes"; then - AC_DEFINE(HAVE_HW_AGILENT_DMM, 1, [Agilent DMM support]) -fi - -AC_ARG_ENABLE(alsa, AC_HELP_STRING([--enable-alsa], - [enable ALSA driver support [default=yes]]), - [HW_ALSA="$enableval"], - [HW_ALSA=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(HW_ALSA, test x$HW_ALSA = xyes) -if test "x$HW_ALSA" = "xyes"; then - AC_DEFINE(HAVE_HW_ALSA, 1, [ALSA driver support]) -fi - -AC_ARG_ENABLE(asix-sigma, AC_HELP_STRING([--enable-asix-sigma], - [enable ASIX SIGMA/SIGMA2 support [default=yes]]), - [LA_ASIX_SIGMA="$enableval"], - [LA_ASIX_SIGMA=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(LA_ASIX_SIGMA, test x$LA_ASIX_SIGMA = xyes) -if test "x$LA_ASIX_SIGMA" = "xyes"; then - AC_DEFINE(HAVE_LA_ASIX_SIGMA, 1, [ASIX SIGMA/SIGMA2 support]) -fi - -AC_ARG_ENABLE(chronovu-la8, AC_HELP_STRING([--enable-chronovu-la8], - [enable ChronoVu LA8 support [default=yes]]), - [LA_CHRONOVU_LA8="$enableval"], - [LA_CHRONOVU_LA8=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(LA_CHRONOVU_LA8, test x$LA_CHRONOVU_LA8 = xyes) -if test "x$LA_CHRONOVU_LA8" = "xyes"; then - AC_DEFINE(HAVE_LA_CHRONOVU_LA8, 1, [ChronoVu LA8 support]) -fi - -AC_ARG_ENABLE(colead-slm, AC_HELP_STRING([--enable-colead-slm], - [enable Colead SLM support [default=yes]]), - [HW_COLEAD_SLM="$enableval"], - [HW_COLEAD_SLM=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(HW_COLEAD_SLM, test x$HW_COLEAD_SLM = xyes) -if test "x$HW_COLEAD_SLM" = "xyes"; then - AC_DEFINE(HAVE_HW_COLEAD_SLM, 1, [Colead SLM support]) -fi - -AC_ARG_ENABLE(demo, AC_HELP_STRING([--enable-demo], - [enable demo driver support [default=yes]]), - [LA_DEMO="$enableval"], - [LA_DEMO=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(LA_DEMO, test x$LA_DEMO = xyes) -if test "x$LA_DEMO" = "xyes"; then - AC_DEFINE(HAVE_LA_DEMO, 1, [Demo driver support]) -fi - -AC_ARG_ENABLE(fluke-dmm, AC_HELP_STRING([--enable-fluke-dmm], - [enable Fluke DMM support [default=yes]]), - [HW_FLUKE_DMM="$enableval"], - [HW_FLUKE_DMM=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(HW_FLUKE_DMM, test x$HW_FLUKE_DMM = xyes) -if test "x$HW_FLUKE_DMM" = "xyes"; then - AC_DEFINE(HAVE_HW_FLUKE_DMM, 1, [Fluke DMM support]) -fi - -AC_ARG_ENABLE(fx2lafw, AC_HELP_STRING([--enable-fx2lafw], - [enable fx2lafw support (for FX2 LAs). [default=yes]]), - [LA_FX2LAFW="$enableval"], - [LA_FX2LAFW=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(LA_FX2LAFW, test x$LA_FX2LAFW = xyes) -if test "x$LA_FX2LAFW" = "xyes"; then - AC_DEFINE(HAVE_LA_FX2LAFW, 1, [fx2lafw support]) -fi - -AC_ARG_ENABLE(hantek-dso, AC_HELP_STRING([--enable-hantek-dso], - [enable Hantek DSO support [default=yes]]), - [HW_HANTEK_DSO="$enableval"], - [HW_HANTEK_DSO=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(HW_HANTEK_DSO, test x$HW_HANTEK_DSO = xyes) -if test "x$HW_HANTEK_DSO" = "xyes"; then - AC_DEFINE(HAVE_HW_HANTEK_DSO, 1, [Hantek DSO support]) -fi - -AC_ARG_ENABLE(lascar-el-usb, AC_HELP_STRING([--enable-lascar-el-usb], - [enable Lascar EL-USB support [default=yes]]), - [HW_LASCAR_EL_USB="$enableval"], - [HW_LASCAR_EL_USB=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(HW_LASCAR_EL_USB, test x$HW_LASCAR_EL_USB = xyes) -if test "x$HW_LASCAR_EL_USB" = "xyes"; then - AC_DEFINE(HAVE_HW_LASCAR_EL_USB, 1, [Lascar EL-USB support]) -fi - -AC_ARG_ENABLE(link-mso19, AC_HELP_STRING([--enable-link-mso19], - [enable Link Instruments MSO-19 support [default=yes]]), - [LA_LINK_MSO19="$enableval"], - [LA_LINK_MSO19=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(LA_LINK_MSO19, test x$LA_LINK_MSO19 = xyes) -if test "x$LA_LINK_MSO19" = "xyes"; then - AC_DEFINE(HAVE_LA_LINK_MSO19, 1, [Link Instruments MSO-19 support]) -fi - -AC_ARG_ENABLE(nexus-osciprime, AC_HELP_STRING([--enable-nexus-osciprime], - [enable Nexus Osciprime support [default=yes]]), - [HW_NEXUS_OSCIPRIME="$enableval"], - [HW_NEXUS_OSCIPRIME=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(HW_NEXUS_OSCIPRIME, test x$HW_NEXUS_OSCIPRIME = xyes) -if test "x$HW_NEXUS_OSCIPRIME" = "xyes"; then - AC_DEFINE(HAVE_HW_NEXUS_OSCIPRIME, 1, [Nexus Osciprime support]) -fi - -AC_ARG_ENABLE(ols, AC_HELP_STRING([--enable-ols], - [enable OpenBench Logic Sniffer (OLS) support [default=yes]]), - [LA_OLS="$enableval"], - [LA_OLS=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(LA_OLS, test x$LA_OLS = xyes) -if test "x$LA_OLS" = "xyes"; then - AC_DEFINE(HAVE_LA_OLS, 1, [OpenBench Logic Sniffer (OLS) support]) -fi - -AC_ARG_ENABLE(rigol-ds1xx2, AC_HELP_STRING([--enable-rigol-ds1xx2], - [enable Rigol DS1xx2 support [default=yes]]), - [HW_RIGOL_DS1XX2="$enableval"], - [HW_RIGOL_DS1XX2=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(HW_RIGOL_DS1XX2, test x$HW_RIGOL_DS1XX2 = xyes) -if test "x$HW_RIGOL_DS1XX2" = "xyes"; then - AC_DEFINE(HAVE_HW_RIGOL_DS1XX2, 1, [Rigol DS1xx2 support]) -fi - -AC_ARG_ENABLE(serial-dmm, AC_HELP_STRING([--enable-serial-dmm], - [enable serial DMM support [default=yes]]), - [HW_SERIAL_DMM="$enableval"], - [HW_SERIAL_DMM=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(HW_SERIAL_DMM, test x$HW_SERIAL_DMM = xyes) -if test "x$HW_SERIAL_DMM" = "xyes"; then - AC_DEFINE(HAVE_HW_SERIAL_DMM, 1, [Serial DMM support]) -fi - -AC_ARG_ENABLE(tondaj-sl-814, AC_HELP_STRING([--enable-tondaj-sl-814], - [enable Tondaj SL-814 support [default=yes]]), - [HW_TONDAJ_SL_814="$enableval"], - [HW_TONDAJ_SL_814=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(HW_TONDAJ_SL_814, test x$HW_TONDAJ_SL_814 = xyes) -if test "x$HW_TONDAJ_SL_814" = "xyes"; then - AC_DEFINE(HAVE_HW_TONDAJ_SL_814, 1, [Tondaj SL-814 support]) -fi - -AC_ARG_ENABLE(uni-t-dmm, AC_HELP_STRING([--enable-uni-t-dmm], - [enable UNI-T DMM support [default=yes]]), - [HW_UNI_T_DMM="$enableval"], - [HW_UNI_T_DMM=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(HW_UNI_T_DMM, test x$HW_UNI_T_DMM = xyes) -if test "x$HW_UNI_T_DMM" = "xyes"; then - AC_DEFINE(HAVE_HW_UNI_T_DMM, 1, [UNI-T DMM support]) -fi - -AC_ARG_ENABLE(victor-dmm, AC_HELP_STRING([--enable-victor-dmm], - [enable victor-dmm support [default=yes]]), - [HW_VICTOR_DMM="$enableval"], - [HW_VICTOR_DMM=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(HW_VICTOR_DMM, test x$HW_VICTOR_DMM = xyes) -if test "x$HW_VICTOR_DMM" = "xyes"; then - AC_DEFINE(HAVE_HW_VICTOR_DMM, 1, [victor-dmm support]) -fi - -AC_ARG_ENABLE(zeroplus-logic-cube, - AC_HELP_STRING([--enable-zeroplus-logic-cube], - [enable ZEROPLUS Logic Cube support [default=yes]]), - [LA_ZEROPLUS_LOGIC_CUBE="$enableval"], - [LA_ZEROPLUS_LOGIC_CUBE=$HW_ENABLED_DEFAULT]) -AM_CONDITIONAL(LA_ZEROPLUS_LOGIC_CUBE, test x$LA_ZEROPLUS_LOGIC_CUBE = xyes) -if test "x$LA_ZEROPLUS_LOGIC_CUBE" = "xyes"; then - AC_DEFINE(HAVE_LA_ZEROPLUS_LOGIC_CUBE, 1, [ZEROPLUS Logic Cube support]) -fi - -# Checks for libraries. - -# This variable collects the pkg-config names of all detected libs. -# It is then used to construct the "Requires.private:" field in the -# libsigrok.pc file. -SR_PKGLIBS="" - -# libglib-2.0 is always needed. -# Note: glib-2.0 is part of the libsigrok API (hard pkg-config requirement). -AM_PATH_GLIB_2_0([2.28.0], - [CFLAGS="$CFLAGS $GLIB_CFLAGS"; LIBS="$LIBS $GLIB_LIBS"]) - -# libusb-1.0 is only needed for some hardware drivers. -if test "x$LA_ASIX_SIGMA" != xno \ - -o "x$LA_CHRONOVU_LA8" != xno \ - -o "x$LA_FX2LAFW" != xno \ - -o "x$HW_HANTEK_DSO" != xno \ - -o "x$LA_ZEROPLUS_LOGIC_CUBE" != xno; then - case "$build" in - *freebsd*) - # FreeBSD comes with an "integrated" libusb-1.0-style USB API. - AC_DEFINE_UNQUOTED(HAVE_LIBUSB_1_0, [1], - [Specifies whether we have a libusb.h header.]) - ;; - *) - PKG_CHECK_MODULES([libusb], [libusb-1.0 >= 1.0.9], - [CFLAGS="$CFLAGS $libusb_CFLAGS"; - LIBS="$LIBS $libusb_LIBS"; - SR_PKGLIBS="$SR_PKGLIBS libusb-1.0"]) - # Define HAVE_LIBUSB_1_0 in config.h if we found libusb-1.0. - if test "x$libusb_CFLAGS" != "x"; then - AC_DEFINE_UNQUOTED(HAVE_LIBUSB_1_0, [1], - [Specifies whether we have a libusb.h header.]) - fi - ;; - esac -fi - -# libzip is always needed. -PKG_CHECK_MODULES([libzip], [libzip >= 0.8], - [CFLAGS="$CFLAGS $libzip_CFLAGS"; LIBS="$LIBS $libzip_LIBS"; - SR_PKGLIBS="$SR_PKGLIBS libzip"]) - -# libftdi is only needed for some hardware drivers. -if test "x$LA_ASIX_SIGMA" != xno \ - -o "x$LA_CHRONOVU_LA8" != xno; then - PKG_CHECK_MODULES([libftdi], [libftdi >= 0.16], - [CFLAGS="$CFLAGS $libftdi_CFLAGS"; - LIBS="$LIBS $libftdi_LIBS"; - SR_PKGLIBS="$SR_PKGLIBS libftdi"]) -fi - -# libudev is only needed for some hardware drivers. -if test "x$LA_LINK_MSO19" != xno; then - PKG_CHECK_MODULES([libudev], [libudev >= 151], - [CFLAGS="$CFLAGS $libudev_CFLAGS"; LIBS="$LIBS $libudev_LIBS"; - SR_PKGLIBS="$SR_PKGLIBS libudev"]) -fi - -# ALSA is only needed for some hardware drivers. -if test "x$HW_ALSA" != xno; then - PKG_CHECK_MODULES([alsa], [alsa >= 1.0], - [CFLAGS="$CFLAGS $alsa_CFLAGS"; LIBS="$LIBS $alsa_LIBS"; - SR_PKGLIBS="$SR_PKGLIBS alsa"]) -fi - -# EZUSB FX2 firmware helper code is only needed for some hardware drivers. -AM_CONDITIONAL(NEED_EZUSB, \ - test "x$LA_FX2LAFW" != xno \ - -o "x$HW_HANTEK_DSO" != xno \ -) - -# Serial port helper code is only needed for some hardware drivers. -AM_CONDITIONAL(NEED_SERIAL, \ - test "x$HW_AGILENT_DMM" != xno \ - -o "x$HW_COLEAD_SLM" != xno \ - -o "x$HW_FLUKE_DMM" != xno \ - -o "x$LA_LINK_MSO19" != xno \ - -o "x$LA_OLS" != xno \ - -o "x$HW_SERIAL_DMM" != xno \ - -o "x$HW_TONDAJ_SL_814" != xno \ -) - -AC_SUBST(SR_PKGLIBS) - -# Checks for header files. -# These are already checked: inttypes.h stdint.h stdlib.h string.h unistd.h. -AC_CHECK_HEADERS([fcntl.h sys/time.h termios.h]) - -# Checks for typedefs, structures, and compiler characteristics. -AC_C_INLINE -AC_TYPE_INT8_T -AC_TYPE_INT16_T -AC_TYPE_INT32_T -AC_TYPE_INT64_T -AC_TYPE_UINT8_T -AC_TYPE_UINT16_T -AC_TYPE_UINT32_T -AC_TYPE_UINT64_T -AC_TYPE_SIZE_T - -# Checks for library functions. -AC_CHECK_FUNCS([gettimeofday memset strchr strcspn strdup strerror strncasecmp strstr strtol strtoul strtoull]) - -AC_SUBST(FIRMWARE_DIR, "$datadir/sigrok-firmware") -AC_SUBST(MAKEFLAGS, '--no-print-directory') -AC_SUBST(AM_LIBTOOLFLAGS, '--silent') - -SR_PACKAGE_VERSION_MAJOR=sr_package_version_major -SR_PACKAGE_VERSION_MINOR=sr_package_version_minor -SR_PACKAGE_VERSION_MICRO=sr_package_version_micro -SR_PACKAGE_VERSION=sr_package_version - -AC_SUBST(SR_PACKAGE_VERSION_MAJOR) -AC_SUBST(SR_PACKAGE_VERSION_MINOR) -AC_SUBST(SR_PACKAGE_VERSION_MICRO) -AC_SUBST(SR_PACKAGE_VERSION) - -AC_CONFIG_FILES([Makefile version.h hardware/Makefile - hardware/agilent-dmm/Makefile - hardware/alsa/Makefile - hardware/asix-sigma/Makefile - hardware/chronovu-la8/Makefile - hardware/colead-slm/Makefile - hardware/common/Makefile - hardware/lascar-el-usb/Makefile - hardware/nexus-osciprime/Makefile - hardware/rigol-ds1xx2/Makefile - hardware/tondaj-sl-814/Makefile - hardware/victor-dmm/Makefile - hardware/common/dmm/Makefile - hardware/demo/Makefile - hardware/fluke-dmm/Makefile - hardware/fx2lafw/Makefile - hardware/hantek-dso/Makefile - hardware/link-mso19/Makefile - hardware/openbench-logic-sniffer/Makefile - hardware/serial-dmm/Makefile - hardware/uni-t-dmm/Makefile - hardware/zeroplus-logic-cube/Makefile - input/Makefile - output/Makefile - output/text/Makefile - libsigrok.pc - contrib/Makefile - ]) +AC_SUBST([SR_LIB_VERSION], + ["$SR_LIB_VERSION_CURRENT:$SR_LIB_VERSION_REVISION:$SR_LIB_VERSION_AGE"]) -AC_OUTPUT +AC_DEFINE_UNQUOTED([SR_LIB_VERSION_CURRENT], [$SR_LIB_VERSION_CURRENT], [.]) +AC_DEFINE_UNQUOTED([SR_LIB_VERSION_REVISION], [$SR_LIB_VERSION_REVISION], [.]) +AC_DEFINE_UNQUOTED([SR_LIB_VERSION_AGE], [$SR_LIB_VERSION_AGE], [.]) +AC_DEFINE_UNQUOTED([SR_LIB_VERSION_STRING], ["$SR_LIB_VERSION"], [.]) + +############################# +## Optional dependencies ## +############################# -echo -echo "libsigrok configuration summary:" -echo -echo " - Package version (major.minor.micro): $SR_PACKAGE_VERSION" -echo " - Library version (current:revision:age): $SR_LIB_VERSION" -echo " - Prefix: $prefix" -echo -echo "Detected libraries:" -echo - -# Note: This only works for libs with pkg-config integration. -for lib in "glib-2.0" "libusb-1.0" "libzip" "libftdi" "libudev" "alsa"; do - if `$PKG_CONFIG --exists $lib`; then - ver=`$PKG_CONFIG --modversion $lib` - answer="yes ($ver)" - else - answer="no" - fi - echo " - $lib: $answer" +# Initialize pkg-config. +# We require at least 0.22, as "Requires.private" behaviour changed there. +PKG_PROG_PKG_CONFIG([0.22]) + +# This variable collects the pkg-config module names of all dependencies. +# These are used to derive the compiler flags and for the "Requires.private" +# field in the generated libsigrok.pc file. +SR_PKGLIBS= +SR_PKGLIBS_CHECK= +SR_PKGLIBS_CXX= +SR_PKGLIBS_PYTHON= + +# Keep track of all checked modules so we can list them at the end. +sr_pkglibs_summary= +sr_nl=' +' +## SR_PKG_CHECK(tag, [collect-var], module...) +m4_define([SR_PKG_CHECK], [ + sr_mod_leader=`printf '%.32s' "$3................................"` + PKG_CHECK_EXISTS([$3], [ + sr_have_$1=yes + m4_ifval([$2], [$2="[$]$2[$]{$2:+ }$3"]) + sr_$1_version=`$PKG_CONFIG --modversion "$3" 2>&AS_MESSAGE_LOG_FD` + AS_VAR_APPEND([sr_pkglibs_summary], [" - $sr_mod_leader $sr_$1_version$sr_nl"]) + ], [ + AS_VAR_APPEND([sr_pkglibs_summary], [" - $sr_mod_leader no$sr_nl"]) + m4_ifval([$4], + [SR_PKG_CHECK([$1], [$2], m4_shift3($@))], + [sr_have_$1=no sr_$1_version=]) + ]) +]) + +# List of detected features. +sr_deps_avail= + +## SR_ARG_OPT_PKG(opt-name, [cpp-name], [cond-name], module...) +m4_define([SR_ARG_OPT_PKG], [ + AC_ARG_WITH([$1], [AS_HELP_STRING([--without-$1], + [disable $1 support [default=detect]])]) + AS_IF([test "x$with_$1" = xno], [sr_have_$1=no], + [test "x$sr_have_$1" != xyes], + [SR_PKG_CHECK([$1], [SR_PKGLIBS], m4_shift3($@))]) + AS_IF([test "x$with_$1$sr_have_$1" = xyesno], + [AC_MSG_ERROR([$1 support requested, but it was not found.])]) + AS_IF([test "x$sr_have_$1" = xyes], + [sr_deps_avail="$sr_deps_avail $1"[]m4_ifval([$2], [ + AC_DEFINE([HAVE_$2], [1], [Whether $1 is available.]) + AC_DEFINE_UNQUOTED([CONF_$2_VERSION], ["$sr_$1_version"], [Build-time version of $1.]) + ])]) + m4_ifval([$3], [AM_CONDITIONAL([$3], [test "x$sr_have_$1" = xyes])]) +]) + +SR_ARG_OPT_PKG([libserialport], [LIBSERIALPORT], [NEED_SERIAL], + [libserialport >= 0.1.1]) + +SR_ARG_OPT_PKG([libftdi], [LIBFTDI],, + [libftdi >= 0.16], [libftdi1 >= 1.0]) + +# FreeBSD comes with an "integrated" libusb-1.0-style USB API. +# This means libusb-1.0 is always available; no need to check for it. +AS_CASE([$host], [*freebsd*], [sr_have_libusb=yes]) + +SR_ARG_OPT_PKG([libusb], [LIBUSB_1_0], [NEED_USB], + [libusb-1.0 >= 1.0.16]) + +SR_ARG_OPT_PKG([librevisa], [LIBREVISA], [NEED_VISA], + [librevisa >= 0.0.20130412]) + +SR_ARG_OPT_PKG([libgpib], [LIBGPIB], [NEED_GPIB], + [libgpib]) + +###################### +## Feature checks ## +###################### + +# The Check unit testing framework is optional. Disable if not found. +SR_PKG_CHECK([check], [SR_PKGLIBS_CHECK], [check >= 0.9.4]) +AM_CONDITIONAL([HAVE_CHECK], [test "x$sr_have_check" = xyes]) + +AC_LANG([C]) + +# Check host characteristics. +AC_C_BIGENDIAN + +AC_CHECK_HEADERS([sys/mman.h], [sr_deps_avail="$sr_deps_avail sys_mman_h"]) +AC_CHECK_HEADERS([sys/ioctl.h], [sr_deps_avail="$sr_deps_avail sys_ioctl_h"]) +AC_CHECK_HEADERS([sys/timerfd.h], [sr_deps_avail="$sr_deps_avail sys_timerfd_h"]) + +# RPC is only needed for VXI support. +AC_CACHE_CHECK([for RPC support], [sr_cv_have_rpc], + [AC_LINK_IFELSE([AC_LANG_PROGRAM( + [[#include ]m4_newline[CLIENT *rpc_test(void);]], + [[(void) clnt_create("", 0, 0, "");]])], + [sr_cv_have_rpc=yes], [sr_cv_have_rpc=no])]) +AS_IF([test "x$sr_cv_have_rpc" = xyes], + [AC_DEFINE([HAVE_RPC], [1], [Specifies whether we have RPC support.])]) +# VXI support is only compiled if RPC support was found. +AM_CONDITIONAL([NEED_RPC], [test "x$sr_cv_have_rpc" = xyes]) + +######################## +## Hardware drivers ## +######################## + +# Keep track of all drivers so we can list them at the end. +sr_driver_summary= + +# Check whether the sr_deps_avail list contains all of the arguments. +# Unavailable dependencies are collected in sr_deps_missing. +sr_check_driver_deps() { + sr_deps_missing= + for sr_dep + do + AS_CASE([" $sr_deps_avail "], [*" $sr_dep "*],, + [sr_deps_missing="$sr_deps_missing $sr_dep"]) + done +} + +AC_ARG_ENABLE([all-drivers], + [AS_HELP_STRING([--enable-all-drivers], + [enable all drivers by default [default=yes]])], + [], [enable_all_drivers=yes]) + +## _SR_DRIVER(Device name, driver-name, var-name, [dependencies...]) +m4_define([_SR_DRIVER], [ + AC_ARG_ENABLE([$3], + [AS_HELP_STRING([--enable-$2], [enable $1 support])], + [$3=$enableval], [$3=$enable_all_drivers]) + + AS_IF([test "x[$]$3" = xyes], [sr_hw_info=yes[]m4_ifval([$4], [ + sr_check_driver_deps $4 + AS_IF([test -n "$sr_deps_missing"], + [$3=no sr_hw_info="no (missing:$sr_deps_missing)"]) + ])], [sr_hw_info='no (disabled)']) + sr_hw_leader=`printf '%.32s' "$2................................"` + AS_VAR_APPEND([sr_driver_summary], [" - $sr_hw_leader $sr_hw_info$sr_nl"]) + + AM_CONDITIONAL([$3], [test "x[$]$3" = xyes]) + AM_COND_IF([$3], [AC_DEFINE([HAVE_$3], [1], [Whether to support $1 device.])]) +]) + +## SR_DRIVER(Device name, driver-name, [dependencies...]) +m4_define([SR_DRIVER], + [_SR_DRIVER([$1], [$2], m4_expand([AS_TR_CPP([HW_$2])]), [$3])]) + +SR_DRIVER([Agilent DMM], [agilent-dmm], [libserialport]) +SR_DRIVER([Appa 55II], [appa-55ii], [libserialport]) +SR_DRIVER([ASIX SIGMA/SIGMA2], [asix-sigma], [libftdi]) +SR_DRIVER([Atten PPS3xxx], [atten-pps3xxx], [libserialport]) +SR_DRIVER([BayLibre ACME], [baylibre-acme], [sys_timerfd_h]) +SR_DRIVER([BeagleLogic], [beaglelogic], [sys_mman_h sys_ioctl_h]) +SR_DRIVER([Brymen BM86x], [brymen-bm86x], [libusb]) +SR_DRIVER([Brymen DMM], [brymen-dmm], [libserialport]) +SR_DRIVER([CEM DT-885x], [cem-dt-885x], [libserialport]) +SR_DRIVER([Center 3xx], [center-3xx], [libserialport]) +SR_DRIVER([ChronoVu LA], [chronovu-la], [libftdi]) +SR_DRIVER([Colead SLM], [colead-slm], [libserialport]) +SR_DRIVER([Conrad DIGI 35 CPU], [conrad-digi-35-cpu], [libserialport]) +SR_DRIVER([DER EE DE-5000], [deree-de5000], [libserialport]) +SR_DRIVER([demo], [demo]) +SR_DRIVER([Fluke DMM], [fluke-dmm], [libserialport]) +SR_DRIVER([fx2lafw], [fx2lafw], [libusb]) +SR_DRIVER([GMC MH 1x/2x], [gmc-mh-1x-2x], [libserialport]) +SR_DRIVER([Hameg HMO], [hameg-hmo], [libserialport]) +SR_DRIVER([Hantek DSO], [hantek-dso], [libusb]) +SR_DRIVER([Ikalogic Scanalogic-2], [ikalogic-scanalogic2], [libusb]) +SR_DRIVER([Ikalogic Scanaplus], [ikalogic-scanaplus], [libftdi]) +SR_DRIVER([Kecheng KC-330B], [kecheng-kc-330b], [libusb]) +SR_DRIVER([Lascar EL-USB], [lascar-el-usb], [libusb]) +SR_DRIVER([Manson HCS-3xxx], [manson-hcs-3xxx], [libserialport]) +SR_DRIVER([maynuo-m97], [maynuo-m97]) +SR_DRIVER([MIC 985xx], [mic-985xx], [libserialport]) +SR_DRIVER([Motech LPS 30x], [motech-lps-30x], [libserialport]) +SR_DRIVER([Norma DMM], [norma-dmm], [libserialport]) +SR_DRIVER([OpenBench Logic Sniffer], [openbench-logic-sniffer], [libserialport]) +SR_DRIVER([Pipistrello-OLS], [pipistrello-ols], [libftdi]) +SR_DRIVER([Rigol DS], [rigol-ds]) +SR_DRIVER([Saleae Logic16], [saleae-logic16], [libusb]) +SR_DRIVER([SCPI PPS], [scpi-pps]) +SR_DRIVER([serial DMM], [serial-dmm], [libserialport]) +SR_DRIVER([Sysclk LWLA], [sysclk-lwla], [libusb]) +SR_DRIVER([Teleinfo], [teleinfo], [libserialport]) +SR_DRIVER([Testo], [testo], [libusb]) +SR_DRIVER([Tondaj SL-814], [tondaj-sl-814], [libserialport]) +SR_DRIVER([UNI-T DMM], [uni-t-dmm], [libusb]) +SR_DRIVER([UNI-T UT32x], [uni-t-ut32x], [libusb]) +SR_DRIVER([Victor DMM], [victor-dmm], [libusb]) +SR_DRIVER([Yokogawa DL/DLM], [yokogawa-dlm]) +SR_DRIVER([ZEROPLUS Logic Cube], [zeroplus-logic-cube], [libusb]) + +############################### +## Language bindings setup ## +############################### + +AC_LANG([C++]) + +AC_ARG_ENABLE([bindings], + [AS_HELP_STRING([--enable-bindings], [build language bindings [default=yes]])], + [], [enable_bindings=yes]) + +AC_ARG_ENABLE([cxx], + [AS_HELP_STRING([--enable-cxx], [build C++ bindings [default=yes]])], + [], [enable_cxx=$enable_bindings]) + +AC_ARG_ENABLE([python], + [AS_HELP_STRING([--enable-python], [build Python bindings [default=yes]])], + [], [enable_python=$enable_bindings]) + +AC_ARG_ENABLE([java], + [AS_HELP_STRING([--enable-java], [build Java bindings [default=yes]])], + [], [enable_java=$enable_bindings]) + +#################### +## C++ bindings ## +#################### + +sr_cxx_missing= + +# Check if the C++ compiler supports the C++11 standard. +m4_ifdef([AX_CXX_COMPILE_STDCXX_11], + [AX_CXX_COMPILE_STDCXX_11(, [optional])], + [m4_warn(, [[Missing macro AX_CXX_COMPILE_STDCXX_11: no C++11 check possible]])]) +test "x$HAVE_CXX11" = x1 || sr_cxx_missing="$sr_cxx_missing C++11" + +# The C++ bindings need glibmm. +SR_PKG_CHECK([glibmm], [SR_PKGLIBS_CXX], [glibmm-2.4 >= 2.32.0]) +test "x$sr_have_glibmm" = xyes || sr_cxx_missing="$sr_cxx_missing glibmm" + +# The C++ bindings use Doxygen to parse libsigrok symbols. +AC_CHECK_PROG([HAVE_DOXYGEN], [doxygen], [yes], [no]) +test "x$HAVE_DOXYGEN" = xyes || sr_cxx_missing="$sr_cxx_missing Doxygen" + +# Python is needed for the C++ bindings. +AM_PATH_PYTHON([2.7], + [HAVE_PYTHON=yes], + [HAVE_PYTHON=no sr_cxx_missing="$sr_cxx_missing Python"]) + +AS_IF([test -z "$sr_cxx_missing"], + [BINDINGS_CXX=$enable_cxx], [BINDINGS_CXX=no]) +AM_CONDITIONAL([BINDINGS_CXX], [test "x$BINDINGS_CXX" = xyes]) + +# C++ bindings want stoi and stod. +AM_COND_IF([BINDINGS_CXX], [ + AC_CACHE_CHECK([for stoi and stod], [sr_cv_have_stoi_stod], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[(void) std::stoi("1"); (void) std::stod("1.0");]])], + [sr_cv_have_stoi_stod=yes], [sr_cv_have_stoi_stod=no])]) + AS_IF([test "x$sr_cv_have_stoi_stod" = xyes], + [AC_DEFINE([HAVE_STOI_STOD], [1], + [Specifies whether we have the stoi and stod functions.])]) +]) + +####################### +## Python bindings ## +####################### + +sr_python_missing= +test "x$BINDINGS_CXX" = xyes || sr_python_missing=" C++ bindings" + +# The Python bindings need Python development files. +SR_PKG_CHECK([python_dev], [SR_PKGLIBS_PYTHON], + [python >= 2.7], [python2 >= 2.7], [python27 >= 2.7]) +test "x$sr_have_python_dev" = xyes \ + || sr_python_missing="$sr_python_missing Headers" + +# PyGObject is needed for the Python bindings. +SR_PKG_CHECK([pygobject], [SR_PKGLIBS_PYTHON], [pygobject-3.0 >= 3.0.0]) +test "x$sr_have_python_dev" = xyes \ + || sr_python_missing="$sr_python_missing PyGObject" + +PKG_CHECK_EXISTS([pygobject-3.0 < 3.7.91], + [AC_DEFINE([PYGOBJECT_FLAGS_SIGNED], [1], + [Whether last argument to pyg_flags_get_value() is signed.])]) + +# The Python bindings need the setuptools Python module. +# We'll let it go through even if the AX macro wasn't found, +# as the Python module may still be there. +HAVE_PYMOD_SETUPTOOLS=yes +m4_ifdef([AX_PYTHON_MODULE], + [AX_PYTHON_MODULE([setuptools])], + [m4_warn(, [[Missing macro AX_PYTHON_MODULE: no setuptools check]])]) +test "x$HAVE_PYMOD_SETUPTOOLS" = xyes \ + || sr_python_missing="$sr_python_missing Setuptools" + +# The Python bindings use SWIG to generate code. +AC_CHECK_PROG([HAVE_SWIG], [swig], [yes], [no]) +test "x$HAVE_SWIG" = xyes || sr_python_missing="$sr_python_missing SWIG" + +AS_IF([test -z "$sr_python_missing"], + [BINDINGS_PYTHON=$enable_python], [BINDINGS_PYTHON=no]) +AM_CONDITIONAL([BINDINGS_PYTHON], [test "x$BINDINGS_PYTHON" = xyes]) + +#################### +## Java bindings ## +#################### + +sr_java_missing= +test "x$BINDINGS_CXX" = xyes || sr_java_missing=" C++ bindings" + +# The Java bindings use SWIG to generate code. +test "x$HAVE_SWIG" = xyes || sr_java_missing="$sr_java_missing SWIG" + +# Find Java compiler and JNI includes for Java bindings. +AC_CHECK_PROG([HAVE_JAVAC], [javac], [yes], [no]) +test "x$HAVE_JAVAC" = xyes || sr_java_missing="$sr_java_missing JavaC" + +AC_ARG_WITH([jni-include-path], + [AS_HELP_STRING([[--with-jni-include-path=DIR-LIST (space-separated)]], + [specify JNI include directories [default=detect]])], + [JNI_INCLUDE_DIRS=" $withval"], [JNI_INCLUDE_DIRS=]) + +JNI_CPPFLAGS= +AS_IF([test "x$enable_java$HAVE_JAVAC" = xyesyes], [ + AX_PROG_JAVAC + AS_IF([test -z "$JNI_INCLUDE_DIRS" && test "x$cross_compiling" != xyes], [ + ## Work around the totally broken logic in AX_JNI_INCLUDE_DIR: + ## If we can find jni.h without any special search path, skip + ## the execution of the broken macro to increase our chances of + ## success. + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [])],, + [AX_JNI_INCLUDE_DIR]) + ]) +]) +for sr_dir in $JNI_INCLUDE_DIRS +do + JNI_CPPFLAGS="$JNI_CPPFLAGS -I$sr_dir" done +AC_SUBST([JNI_CPPFLAGS]) + +sr_save_cppflags=$CPPFLAGS +CPPFLAGS=$CPPFLAGS$JNI_CPPFLAGS +AC_CHECK_HEADER([jni.h],, [sr_java_missing="$sr_java_missing JNI headers"]) +CPPFLAGS=$sr_save_cppflags + +AS_IF([test -z "$sr_java_missing"], + [BINDINGS_JAVA=$enable_java], [BINDINGS_JAVA=no]) +AM_CONDITIONAL([BINDINGS_JAVA], [test "x$BINDINGS_JAVA" = xyes]) + +############################## +## Finalize configuration ## +############################## + +# Add mandatory dependencies to module list. +SR_PKGLIBS="$SR_PKGLIBS${SR_PKGLIBS:+ }libzip >= 0.10" +AC_SUBST([SR_PKGLIBS]) + +# Retrieve the compile and link flags for all modules combined. +# Also, bail out at this point if any module dependency is not met. +PKG_CHECK_MODULES([LIBSIGROK], [glib-2.0 >= 2.32.0 $SR_PKGLIBS]) +PKG_CHECK_MODULES([LIBSIGROKCXX], [$SR_PKGLIBS_CXX]) +PKG_CHECK_MODULES([PYSIGROK], [$SR_PKGLIBS_PYTHON $SR_PKGLIBS_CXX]) +PKG_CHECK_MODULES([CHECK], [$SR_PKGLIBS_CHECK glib-2.0 $SR_PKGLIBS]) + +sr_glib_version=`$PKG_CONFIG --modversion glib-2.0 2>&AS_MESSAGE_LOG_FD` +sr_libzip_version=`$PKG_CONFIG --modversion libzip 2>&AS_MESSAGE_LOG_FD` -echo -e "\nEnabled hardware drivers:\n" -echo " - Agilent DMM..................... $HW_AGILENT_DMM" -echo " - ALSA............................ $HW_ALSA" -echo " - ASIX SIGMA/SIGMA2............... $LA_ASIX_SIGMA" -echo " - ChronoVu LA8.................... $LA_CHRONOVU_LA8" -echo " - Colead SLM...................... $HW_COLEAD_SLM" -echo " - Demo driver..................... $LA_DEMO" -echo " - Fluke DMM....................... $HW_FLUKE_DMM" -echo " - fx2lafw (for FX2 LAs)........... $LA_FX2LAFW" -echo " - Hantek DSO...................... $HW_HANTEK_DSO" -echo " - Lascar EL-USB................... $HW_LASCAR_EL_USB" -echo " - Link MSO-19..................... $LA_LINK_MSO19" -echo " - Nexus Osciprime................. $HW_NEXUS_OSCIPRIME" -echo " - Openbench Logic Sniffer......... $LA_OLS" -echo " - Rigol DS1xx2.................... $HW_RIGOL_DS1XX2" -echo " - Serial DMM...................... $HW_SERIAL_DMM" -echo " - Tondaj SL-814................... $HW_TONDAJ_SL_814" -echo " - UNI-T DMM....................... $HW_UNI_T_DMM" -echo " - Victor DMM...................... $HW_VICTOR_DMM" -echo " - ZEROPLUS Logic Cube............. $LA_ZEROPLUS_LOGIC_CUBE" -echo +AC_DEFINE_UNQUOTED([CONF_LIBZIP_VERSION], ["$sr_libzip_version"], + [Build-time version of libzip.]) +AC_DEFINE_UNQUOTED([CONF_HOST], ["$host"], + [The canonical host libsigrok will run on.]) + +AC_LANG([C]) + +# libm (the standard math library) is always needed. +AC_SEARCH_LIBS([pow], [m]) + +# We need to link against the Winsock2 library for SCPI over TCP. +AS_CASE([$host], [*mingw*], [LIBS="$LIBS -lws2_32"]) + +AC_SUBST([FIRMWARE_DIR], ['$(datadir)/sigrok-firmware']) +AC_SUBST([MAKEFLAGS], ['--no-print-directory']) +AC_SUBST([AM_LIBTOOLFLAGS], ['--silent']) + +AC_CONFIG_FILES([Makefile libsigrok.pc bindings/cxx/libsigrokcxx.pc]) + +AC_OUTPUT +# Prepare bindings report messages. +m4_define([SR_PREPARE_BINDING_REPORT], [ + sr_report_$1= + test -z "$sr_$1_missing" || sr_report_$1=" (missing:$sr_$1_missing)" + test "x$enable_$1" = xyes || sr_report_$1=' (disabled)' +]) +m4_map_args([SR_PREPARE_BINDING_REPORT], [cxx], [python], [java]) + +cat >&AS_MESSAGE_FD <<_EOF + +libsigrok configuration summary: + - Package version................. $SR_PACKAGE_VERSION + - Library ABI version............. $SR_LIB_VERSION + - Prefix.......................... $prefix + - Building on..................... $build + - Building for.................... $host + +Detected libraries (required): + - glib-2.0 >= 2.32.0.............. $sr_glib_version + - libzip >= 0.10.................. $sr_libzip_version + +Detected libraries (optional): +$sr_pkglibs_summary + +Enabled hardware drivers: +$sr_driver_summary + +Enabled SCPI backends: + - TCP............................. yes + - RPC............................. $sr_cv_have_rpc + - serial.......................... $sr_have_libserialport + - VISA............................ $sr_have_librevisa + - GPIB............................ $sr_have_libgpib + - USBTMC.......................... $sr_have_libusb + +Enabled language bindings: + - C++............................. $BINDINGS_CXX$sr_report_cxx + - Python.......................... $BINDINGS_PYTHON$sr_report_python + - Java............................ $BINDINGS_JAVA$sr_report_java + +_EOF