From: Uwe Hermann Date: Wed, 13 Nov 2013 18:56:13 +0000 (+0100) Subject: configure.ac: libserialport is optional. X-Git-Tag: libsigrok-0.3.0~559 X-Git-Url: http://sigrok.org/gitweb/?p=libsigrok.git;a=commitdiff_plain;h=c4f2dfd0f0df07e6e2b10e33c46c9c457c9c5016 configure.ac: libserialport is optional. Disable drivers that need serial port support if libserialport is not found. Also, disable building various other serial port related code in that case. --- diff --git a/configure.ac b/configure.ac index af94f535..36a82d51 100644 --- a/configure.ac +++ b/configure.ac @@ -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)" diff --git a/device.c b/device.c index 8cdb8adf..55be3254 100644 --- 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. * diff --git a/hardware/common/Makefile.am b/hardware/common/Makefile.am index ca717510..de8f06c1 100644 --- a/hardware/common/Makefile.am +++ b/hardware/common/Makefile.am @@ -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 diff --git a/hardware/common/dmm/metex14.c b/hardware/common/dmm/metex14.c index 8ba42913..4a37efe0 100644 --- a/hardware/common/dmm/metex14.c +++ b/hardware/common/dmm/metex14.c @@ -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) { diff --git a/libsigrok-internal.h b/libsigrok-internal.h index 0c03aed6..d1fb3132 100644 --- a/libsigrok-internal.h +++ b/libsigrok-internal.h @@ -26,7 +26,9 @@ #ifdef HAVE_LIBUSB_1_0 #include #endif +#ifdef HAVE_LIBSERIALPORT #include +#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 22123fc5..44435be2 100644 --- 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 }