]> sigrok.org Git - libsigrok.git/blobdiff - configure.ac
Enable loading of session files without total probes defined
[libsigrok.git] / configure.ac
index 396db6badd14ca85d280703888a24d057f4db196..4462efeddeb42a0c9dac80d416cb4c12bd035fec 100644 (file)
@@ -21,7 +21,7 @@
 # We require at least autoconf 2.63 (AC_INIT format changed there).
 AC_PREREQ([2.63])
 
-AC_INIT([libsigrok], [0.4.0],
+AC_INIT([libsigrok], [0.5.0],
        [sigrok-devel@lists.sourceforge.net],
        [libsigrok], [http://www.sigrok.org])
 AC_CONFIG_MACRO_DIR([m4])
@@ -33,9 +33,7 @@ AM_INIT_AUTOMAKE([1.11 -Wall -Werror no-define nostdinc subdir-objects check-new
 AM_SILENT_RULES([yes])
 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
 
-AH_TOP([#ifndef SR_CONFIG_H
-#define SR_CONFIG_H    /* To stop multiple inclusions. */])
-AH_BOTTOM([#endif /* SR_CONFIG_H */])
+AC_CANONICAL_HOST
 
 # Checks for programs.
 AC_PROG_CC
@@ -46,7 +44,17 @@ AC_PROG_LN_S
 # Required for per-target flags or subdir-objects with C sources.
 AM_PROG_CC_C_O
 
-# Check if order-only dependencies are supported.
+# Set the standard the C library headers should conform to.
+AH_VERBATIM([_POSIX_C_SOURCE], [/* The targeted POSIX standard. */
+#ifndef _POSIX_C_SOURCE
+# define _POSIX_C_SOURCE 200112L
+#endif])
+
+# Get compiler versions.
+SR_PROG_VERSION([$CC], [sr_cc_version])
+SR_PROG_VERSION([$CXX], [sr_cxx_version])
+
+# Check for optional make features.
 SR_PROG_MAKE_ORDER_ONLY
 
 # Initialize libtool.
@@ -59,7 +67,10 @@ SR_PKG_VERSION_SET([SR_PACKAGE_VERSION], [AC_PACKAGE_VERSION])
 # Carefully read the libtool docs before updating these numbers!
 # The algorithm for determining which number to change (and how) is nontrivial!
 # http://www.gnu.org/software/libtool/manual/libtool.html#Updating-version-info
-SR_LIB_VERSION_SET([SR_LIB_VERSION], [2:0:0])
+# Format: current:revision:age.
+SR_LIB_VERSION_SET([SR_LIB_VERSION], [3:0:0])
+
+AM_CONDITIONAL([WIN32], [test -z "${host_os##mingw*}" || test -z "${host_os##cygwin*}"])
 
 #############################
 ##  Optional dependencies  ##
@@ -81,6 +92,7 @@ SR_VAR_OPT_PKG([SR_PKGLIBS], [sr_deps_avail])
 SR_PKGLIBS_TESTS=
 SR_PKGLIBS_CXX=
 SR_PKGLIBS_PYTHON=
+SR_PKGLIBS_RUBY=
 SR_EXTRA_LIBS=
 
 SR_ARG_OPT_PKG([libserialport], [LIBSERIALPORT], [NEED_SERIAL],
@@ -91,10 +103,15 @@ SR_ARG_OPT_PKG([libftdi], [LIBFTDI],,
 
 # 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])
+# On Windows, require the latest version we can get our hands on,
+# until the new generic event handling has seen an official release.
+AS_CASE([$host_os],
+       [freebsd*], [sr_libusb_req='libusb-1.0' sr_have_libusb=yes],
+       [mingw*], [sr_libusb_req='libusb-1.0 >= 1.0.20'],
+       [sr_libusb_req='libusb-1.0 >= 1.0.16'])
 
 SR_ARG_OPT_PKG([libusb], [LIBUSB_1_0], [NEED_USB],
-       [libusb-1.0 >= 1.0.16])
+       [$sr_libusb_req])
 
 SR_ARG_OPT_PKG([librevisa], [LIBREVISA], [NEED_VISA],
        [librevisa >= 0.0.20130412])
@@ -108,7 +125,7 @@ SR_ARG_OPT_CHECK([libieee1284], [LIBIEEE1284],, [
        AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <ieee1284.h>]],
                                [[(void) ieee1284_open(0, 0, 0);]])],
                [sr_have_libieee1284=yes], [sr_have_libieee1284=no])
-       sr_save_LIBS=$LIBS
+       LIBS=$sr_save_LIBS
 ])
 AS_IF([test "x$sr_have_libieee1284" = xyes],
        [SR_PREPEND([SR_EXTRA_LIBS], [-lieee1284])])
@@ -200,6 +217,7 @@ m4_define([SR_DRIVER],
 
 SR_DRIVER([Agilent DMM], [agilent-dmm], [libserialport])
 SR_DRIVER([Appa 55II], [appa-55ii], [libserialport])
+SR_DRIVER([Arachnid Labs Re:load Pro], [arachnid-labs-re-load-pro], [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])
@@ -208,7 +226,7 @@ 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([ChronoVu LA], [chronovu-la], [libusb 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])
@@ -216,13 +234,18 @@ 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([GW Instek GDS-800], [gwinstek-gds-800], [libserialport])
 SR_DRIVER([Hameg HMO], [hameg-hmo], [libserialport])
+SR_DRIVER([Hantek 6xxx], [hantek-6xxx], [libusb])
 SR_DRIVER([Hantek DSO], [hantek-dso], [libusb])
+SR_DRIVER([Hung-Chang DSO-2100], [hung-chang-dso-2100], [libieee1284])
 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([KERN scale], [kern-scale], [libserialport])
+SR_DRIVER([Korad KAxxxxP], [korad-kaxxxxp], [libserialport])
 SR_DRIVER([Lascar EL-USB], [lascar-el-usb], [libusb])
+SR_DRIVER([LeCroy LogicStudio], [lecroy-logicstudio], [libusb])
 SR_DRIVER([Manson HCS-3xxx], [manson-hcs-3xxx], [libserialport])
 SR_DRIVER([maynuo-m97], [maynuo-m97])
 SR_DRIVER([MIC 985xx], [mic-985xx], [libserialport])
@@ -263,6 +286,10 @@ AC_ARG_ENABLE([python],
        [AS_HELP_STRING([--enable-python], [build Python bindings [default=yes]])],
        [], [enable_python=$enable_bindings])
 
+AC_ARG_ENABLE([ruby],
+       [AS_HELP_STRING([--enable-ruby], [build Ruby bindings [default=yes]])],
+       [], [enable_ruby=$enable_bindings])
+
 AC_ARG_ENABLE([java],
        [AS_HELP_STRING([--enable-java], [build Java bindings [default=yes]])],
        [], [enable_java=$enable_bindings])
@@ -317,9 +344,18 @@ AS_IF([test "x$BINDINGS_CXX" = xyes],
        [sr_python_missing=],
        [sr_python_missing='C++ bindings'])
 
-# The Python bindings need Python development files.
+# Extract major and minor version number of the Python interpreter.
+sr_pymajor=${PYTHON_VERSION%%.*}
+sr_pyminor=${PYTHON_VERSION#*.}
+
+# The Python bindings need Python development files. Check for either
+# Python 3 or Python 2 headers depending on the interpreter version.
 SR_PKG_CHECK([python_dev], [SR_PKGLIBS_PYTHON],
-       [python >= 2.7], [python2 >= 2.7], [python27 >= 2.7])
+       [python = $PYTHON_VERSION],
+       [python$sr_pymajor = $PYTHON_VERSION],
+       [python$sr_pymajor$sr_pyminor = $PYTHON_VERSION],
+       [python-$PYTHON_VERSION = $PYTHON_VERSION])
+
 AS_IF([test "x$sr_have_python_dev" != xyes],
        [SR_APPEND([sr_python_missing], [', '], [Headers])])
 
@@ -332,18 +368,29 @@ 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([unsupported], [Missing macro AX_PYTHON_MODULE: no setuptools check])])
+# The Python bindings need the setuptools and numpy Python modules.
+# We'll let it go through even if the AX macro wasn't found, as the
+# Python modules may still be there.
+m4_ifdef([AX_PYTHON_MODULE], [
+       AX_PYTHON_MODULE([setuptools])
+       AX_PYTHON_MODULE([numpy])
+], [
+       HAVE_PYMOD_SETUPTOOLS=yes
+       HAVE_PYMOD_NUMPY=yes
+       m4_warn([unsupported],
+               [Missing macro AX_PYTHON_MODULE: no check for setuptools and numpy])
+])
 AS_IF([test "x$HAVE_PYMOD_SETUPTOOLS" != xyes],
        [SR_APPEND([sr_python_missing], [', '], [setuptools])])
+AS_IF([test "x$HAVE_PYMOD_NUMPY" != xyes],
+       [SR_APPEND([sr_python_missing], [', '], [numpy])])
 
 # The Python bindings use SWIG to generate code.
 AC_CHECK_PROGS([SWIG], [swig swig3.0 swig2.0])
+AS_IF([test "x$SWIG" != x],
+    AC_MSG_CHECKING([for $SWIG version])
+    [SWIG_VERSION=`$SWIG -version 2>&1 | sed -n 's/SWIG Version\s*//p'`]
+    AC_MSG_RESULT([$SWIG_VERSION]))
 AS_IF([test "x$SWIG" = x],
        [SR_APPEND([sr_python_missing], [', '], [SWIG])])
 
@@ -351,6 +398,48 @@ AS_IF([test -z "$sr_python_missing"],
        [BINDINGS_PYTHON=$enable_python], [BINDINGS_PYTHON=no])
 AM_CONDITIONAL([BINDINGS_PYTHON], [test "x$BINDINGS_PYTHON" = xyes])
 
+#####################
+##  Ruby bindings  ##
+#####################
+
+AS_IF([test "x$BINDINGS_CXX" = xyes],
+       [sr_ruby_missing=],
+       [sr_ruby_missing='C++ bindings'])
+
+AC_PATH_PROGS(RUBY, ["${RUBY-ruby}"], [])
+AS_IF([test "x$RUBY" != x],
+       AC_MSG_CHECKING([for Ruby version])
+    [RUBY_VERSION=`$RUBY -e 'puts RUBY_VERSION'`]
+    AC_MSG_RESULT([$RUBY_VERSION])
+    [RUBY_DLEXT=`$RUBY -rrbconfig -e 'puts RbConfig::CONFIG[["DLEXT"]]'`]
+    AC_SUBST(RUBY_DLEXT))
+
+AS_IF([test "x$RUBY" = x],
+       [SR_APPEND([sr_ruby_missing], [', '], [Ruby])])
+
+# Extract major and minor version number of the Ruby interpreter.
+sr_rbmajor=${RUBY_VERSION%%.*}
+sr_rbminor=${RUBY_VERSION#*.}
+sr_rbminor=${sr_rbminor%%.*}
+
+# The Ruby bindings need Ruby development files.
+SR_PKG_CHECK([ruby_dev], [SR_PKGLIBS_RUBY],
+       [ruby],
+       [ruby-$sr_rbmajor.$sr_rbminor])
+
+AS_IF([test "x$sr_have_ruby_dev" != xyes],
+       [SR_APPEND([sr_ruby_missing], [', '], [Headers])])
+
+# The Ruby bindings use SWIG >= 3.0.8 to generate code.
+AS_IF([test "x$SWIG" = x],
+       [SR_APPEND([sr_ruby_missing], [', '], [SWIG])],
+       [AS_VERSION_COMPARE($SWIG_VERSION, "3.0.8",
+               [SR_APPEND([sr_ruby_missing], [', '], ['SWIG >= 3.0.8'])])])
+
+AS_IF([test -z "$sr_ruby_missing"],
+       [BINDINGS_RUBY=$enable_ruby], [BINDINGS_RUBY=no])
+AM_CONDITIONAL([BINDINGS_RUBY], [test "x$BINDINGS_RUBY" = xyes])
+
 ####################
 ##  Java bindings ##
 ####################
@@ -419,7 +508,25 @@ PKG_CHECK_MODULES([TESTS], [$SR_PKGLIBS_TESTS glib-2.0 $SR_PKGLIBS])
 AM_COND_IF([BINDINGS_CXX], [
        PKG_CHECK_MODULES([LIBSIGROKCXX], [$SR_PKGLIBS_CXX])
        PKG_CHECK_MODULES([PYSIGROK], [$SR_PKGLIBS_PYTHON $SR_PKGLIBS_CXX])
+       PKG_CHECK_MODULES([RBSIGROK], [$SR_PKGLIBS_RUBY $SR_PKGLIBS_CXX], [AC_SUBST(RBSIGROK_EXTDIR, "lib/$($PKG_CONFIG --variable=sitearch $SR_PKGLIBS_RUBY)/$($PKG_CONFIG --variable=RUBY_BASE_NAME $SR_PKGLIBS_RUBY)/vendor_ruby/$($PKG_CONFIG --variable=ruby_version $SR_PKGLIBS_RUBY)")])
 ])
+
+# Check for specific libusb features, now that we know the CFLAGS.
+AC_LANG([C])
+sr_save_cflags=$CFLAGS
+sr_save_libs=$LIBS
+CFLAGS="$LIBSIGROK_CFLAGS $CFLAGS"
+LIBS="$LIBSIGROK_LIBS $LIBS"
+AC_CHECK_TYPES([libusb_os_handle],
+       [sr_have_libusb_os_handle=yes], [sr_have_libusb_os_handle=no],
+       [[#include <libusb.h>]])
+AC_CHECK_FUNCS([zip_discard])
+LIBS=$sr_save_libs
+CFLAGS=$sr_save_cflags
+
+AM_COND_IF([NEED_USB], [AS_CASE([$sr_have_libusb_os_handle:$host_os], [no:mingw*],
+       [AC_MSG_ERROR([Windows builds require the event-abstraction branch of libusb])])])
+
 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`
 
@@ -438,7 +545,7 @@ m4_define([SR_PREPARE_BINDING_REPORT], [
        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])
+m4_map_args([SR_PREPARE_BINDING_REPORT], [cxx], [python], [ruby], [java])
 
 cat >&AS_MESSAGE_FD <<_EOF
 
@@ -448,8 +555,16 @@ libsigrok configuration summary:
  - Prefix.......................... $prefix
  - Building on..................... $build
  - Building for.................... $host
+
+Compile configuration:
+ - C compiler...................... $CC
+ - C compiler version.............. $sr_cc_version
+ - C compiler flags................ $CFLAGS
  - Additional C compiler flags..... $SR_EXTRA_CFLAGS
  - C compiler warnings............. $SR_WFLAGS
+ - C++ compiler.................... $CXX
+ - C++ compiler version............ $sr_cxx_version
+ - C++ compiler flags.............. $CXXFLAGS
  - C++ compiler warnings........... $SR_WXXFLAGS
 
 Detected libraries (required):
@@ -471,6 +586,7 @@ Enabled SCPI backends:
 Enabled language bindings:
  - C++............................. $BINDINGS_CXX$sr_report_cxx
  - Python.......................... $BINDINGS_PYTHON$sr_report_python
+ - Ruby............................ $BINDINGS_RUBY$sr_report_ruby
  - Java............................ $BINDINGS_JAVA$sr_report_java
 
 _EOF