]> sigrok.org Git - libsigrok.git/commitdiff
configure.ac: libserialport is optional.
authorUwe Hermann <redacted>
Wed, 13 Nov 2013 18:56:13 +0000 (19:56 +0100)
committerUwe Hermann <redacted>
Fri, 15 Nov 2013 08:36:51 +0000 (09:36 +0100)
Disable drivers that need serial port support if libserialport is not found.

Also, disable building various other serial port related code in that case.

configure.ac
device.c
hardware/common/Makefile.am
hardware/common/dmm/metex14.c
libsigrok-internal.h
std.c

index af94f535793fb1a786b5b7e124385135ddae5c58..36a82d5124719c073fbbc56506f56817c640adc2 100644 (file)
@@ -251,10 +251,26 @@ PKG_CHECK_MODULES([libzip], [libzip >= 0.10],
        [CFLAGS="$CFLAGS $libzip_CFLAGS"; LIBS="$LIBS $libzip_LIBS";
        SR_PKGLIBS="$SR_PKGLIBS libzip"])
 
-# libserialport is always needed. Abort if it's not found.
+# libserialport is only needed for some hardware drivers. Disable the
+# respective drivers if it is not found.
 PKG_CHECK_MODULES([libserialport], [libserialport >= 0.1],
-       [CFLAGS="$CFLAGS $libserialport_CFLAGS"; LIBS="$LIBS $libserialport_LIBS";
-       SR_PKGLIBS="$SR_PKGLIBS libserialport"])
+       [have_libserialport="yes"; CFLAGS="$CFLAGS $libserialport_CFLAGS";
+       LIBS="$LIBS $libserialport_LIBS";
+       SR_PKGLIBS="$SR_PKGLIBS libserialport"],
+       [have_libserialport="no"; HW_AGILENT_DMM="no"; HW_BRYMEN_DMM="no";
+       HW_CEM_DT_885X="no"; HW_CENTER_3XX="no"; HW_COLEAD_SLM="no";
+       HW_FLUKE_DMM="no"; HW_LINK_MSO19="no"; HW_MIC_985XX="no";
+       HW_NORMA_DMM="no"; HW_OLS="no"; HW_RIGOL_DS1XX2="no";
+       HW_SERIAL_DMM="no"; HW_TELEINFO="no"; HW_TONDAJ_SL_814="no"])
+
+# Define HAVE_LIBSERIALPORT in config.h if we found libserialport.
+if test "x$have_libserialport" != "xno"; then
+       AC_DEFINE_UNQUOTED(HAVE_LIBSERIALPORT, [1],
+               [Specifies whether we have libserialport.])
+fi
+
+# Serial port helper code is only compiled in if libserialport was found.
+AM_CONDITIONAL(NEED_SERIAL, test "x$have_libserialport" != xno)
 
 # libusb-1.0 is only needed for some hardware drivers. Disable the respective
 # drivers if it is not found.
@@ -566,7 +582,7 @@ echo "Detected libraries:"
 echo
 
 # Note: This only works for libs with pkg-config integration.
-for lib in "glib-2.0 >= 2.32.0" "libzip >= 0.10" "libusb-1.0 >= 1.0.9" "libftdi >= 0.16" "libudev >= 151" "alsa >= 1.0" "check >= 0.9.4"; do
+for lib in "glib-2.0 >= 2.32.0" "libzip >= 0.10" "libserialport >= 0.1" "libusb-1.0 >= 1.0.9" "libftdi >= 0.16" "libudev >= 151" "alsa >= 1.0" "check >= 0.9.4"; do
        if `$PKG_CONFIG --exists $lib`; then
                ver=`$PKG_CONFIG --modversion $lib`
                answer="yes ($ver)"
index 8cdb8adf68ad050e2e9be4cda58e12f48801fff6..55be3254ba42b2e7c5658f03437b3ad1adf8da02 100644 (file)
--- a/device.c
+++ b/device.c
@@ -299,6 +299,8 @@ SR_PRIV void sr_usb_dev_inst_free(struct sr_usb_dev_inst *usb)
 
 #endif
 
+#ifdef HAVE_LIBSERIALPORT
+
 /**
  * @private
  *
@@ -346,6 +348,8 @@ SR_PRIV void sr_serial_dev_inst_free(struct sr_serial_dev_inst *serial)
        g_free(serial);
 }
 
+#endif
+
 /**
  * Get the list of devices/instances of the specified driver.
  *
index ca717510d5fb0796f95b5cd5c561cd9ba0549e44..de8f06c168baeaea23168a7287ed8ff4f18d3a3f 100644 (file)
@@ -22,7 +22,11 @@ SUBDIRS = dmm
 # Local lib, this is NOT meant to be installed!
 noinst_LTLIBRARIES = libsigrok_hw_common.la
 
-libsigrok_hw_common_la_SOURCES = serial.c
+libsigrok_hw_common_la_SOURCES =
+
+if NEED_SERIAL
+libsigrok_hw_common_la_SOURCES += serial.c
+endif
 
 if NEED_USB
 libsigrok_hw_common_la_SOURCES += ezusb.c usb.c
index 8ba4291364d2d3b2f9cf2880992ec985c4819c49..4a37efe0c545577b9eff5bbb33b46c60fd02677c 100644 (file)
@@ -254,6 +254,7 @@ static gboolean flags_valid(const struct metex14_info *info)
        return TRUE;
 }
 
+#ifdef HAVE_LIBSERIALPORT
 SR_PRIV int sr_metex14_packet_request(struct sr_serial_dev_inst *serial)
 {
        const uint8_t wbuf = 'D';
@@ -262,6 +263,7 @@ SR_PRIV int sr_metex14_packet_request(struct sr_serial_dev_inst *serial)
 
        return (serial_write(serial, &wbuf, 1) == 1) ? SR_OK : SR_ERR;
 }
+#endif
 
 SR_PRIV gboolean sr_metex14_packet_valid(const uint8_t *buf)
 {
index 0c03aed63765a9099e0ba064df2f5fbb4400910c..d1fb313297bd7281fd7b5abfc5ab2484fa290944 100644 (file)
@@ -26,7 +26,9 @@
 #ifdef HAVE_LIBUSB_1_0
 #include <libusb.h>
 #endif
+#ifdef HAVE_LIBSERIALPORT
 #include <serialport.h>
+#endif
 
 /**
  * @file
@@ -65,6 +67,7 @@ struct sr_usb_dev_inst {
 };
 #endif
 
+#ifdef HAVE_LIBSERIALPORT
 #define SERIAL_PARITY_NONE SP_PARITY_NONE
 #define SERIAL_PARITY_EVEN SP_PARITY_EVEN
 #define SERIAL_PARITY_ODD  SP_PARITY_ODD
@@ -74,6 +77,7 @@ struct sr_serial_dev_inst {
        int fd;
        struct sp_port *data;
 };
+#endif
 
 /* Private driver context. */
 struct drv_context {
@@ -108,10 +112,12 @@ SR_PRIV GSList *sr_usb_find_usbtmc(libusb_context *usb_ctx);
 SR_PRIV void sr_usb_dev_inst_free(struct sr_usb_dev_inst *usb);
 #endif
 
+#ifdef HAVE_LIBSERIALPORT
 /* Serial-specific instances */
 SR_PRIV struct sr_serial_dev_inst *sr_serial_dev_inst_new(const char *port,
                const char *serialcomm);
 SR_PRIV void sr_serial_dev_inst_free(struct sr_serial_dev_inst *serial);
+#endif
 
 
 /*--- hwdriver.c ------------------------------------------------------------*/
@@ -137,9 +143,11 @@ typedef void (*std_dev_clear_t)(void *priv);
 
 SR_PRIV int std_init(struct sr_context *sr_ctx, struct sr_dev_driver *di,
                const char *prefix);
+#ifdef HAVE_LIBSERIALPORT
 SR_PRIV int std_dev_acquisition_stop_serial(struct sr_dev_inst *sdi,
                void *cb_data, dev_close_t dev_close_fn,
                struct sr_serial_dev_inst *serial, const char *prefix);
+#endif
 SR_PRIV int std_session_send_df_header(const struct sr_dev_inst *sdi,
                const char *prefix);
 SR_PRIV int std_dev_clear(const struct sr_dev_driver *driver,
@@ -147,6 +155,7 @@ SR_PRIV int std_dev_clear(const struct sr_dev_driver *driver,
 
 /*--- hardware/common/serial.c ----------------------------------------------*/
 
+#ifdef HAVE_LIBSERIALPORT
 enum {
        SERIAL_RDWR = 1,
        SERIAL_RDONLY = 2,
@@ -172,6 +181,7 @@ SR_PRIV int serial_stream_detect(struct sr_serial_dev_inst *serial,
                                 uint8_t *buf, size_t *buflen,
                                 size_t packet_size, packet_valid_t is_valid,
                                 uint64_t timeout_ms, int baudrate);
+#endif
 
 /*--- hardware/common/ezusb.c -----------------------------------------------*/
 
@@ -298,7 +308,9 @@ struct metex14_info {
        gboolean is_unitless;
 };
 
+#ifdef HAVE_LIBSERIALPORT
 SR_PRIV int sr_metex14_packet_request(struct sr_serial_dev_inst *serial);
+#endif
 SR_PRIV gboolean sr_metex14_packet_valid(const uint8_t *buf);
 SR_PRIV int sr_metex14_parse(const uint8_t *buf, float *floatval,
                             struct sr_datafeed_analog *analog, void *info);
diff --git a/std.c b/std.c
index 22123fc5d743dc527ca31af3e3cdca549cf8b31d..44435be22520745d460dc66ffe4d64a80449568c 100644 (file)
--- a/std.c
+++ b/std.c
@@ -101,6 +101,8 @@ SR_PRIV int std_session_send_df_header(const struct sr_dev_inst *sdi,
        return SR_OK;
 }
 
+#ifdef HAVE_LIBSERIALPORT
+
 /*
  * Standard sr_session_stop() API helper.
  *
@@ -163,6 +165,8 @@ SR_PRIV int std_dev_acquisition_stop_serial(struct sr_dev_inst *sdi,
        return SR_OK;
 }
 
+#endif
+
 /*
  * Standard driver dev_clear() helper.
  *
@@ -203,10 +207,12 @@ SR_PRIV int std_dev_clear(const struct sr_dev_driver *driver,
                        driver->dev_close(sdi);
 
                if (sdi->conn) {
-                        if (sdi->inst_type == SR_INST_SERIAL)
+#if HAVE_LIBSERIALPORT
+                       if (sdi->inst_type == SR_INST_SERIAL)
                                sr_serial_dev_inst_free(sdi->conn);
+#endif
 #if HAVE_LIBUSB_1_0
-                       else if (sdi->inst_type == SR_INST_USB)
+                       if (sdi->inst_type == SR_INST_USB)
                                sr_usb_dev_inst_free(sdi->conn);
 #endif
                }