From: Paul Fertser Date: Wed, 11 Sep 2013 21:07:59 +0000 (+0200) Subject: libusb: require pkg-config support X-Git-Tag: v0.8.0-rc1~266 X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=commitdiff_plain;h=191a5736c202dfb784e86a8190edc64e80dc62e5 libusb: require pkg-config support An alternative approach to show how much cleaner the pure pkg-config way is. This changes the discovery procedures for libusb-1.0 and libusb-0.1, making them depend on pkg-config being properly installed and configured, including the necessary build host configuration for the cross-builds (see http://www.flameeyes.eu/autotools-mythbuster/pkgconfig/cross-compiling.html) It should make it possible to compile OpenOCD without changes and extra effort on GNU/Linux, FreeBSD users would need to supply a .pc file for their libusb implementation or add LIBUSB1_LIBS and LIBUSB1_CFLAGS to the configure environment. Change-Id: I826e378dd1e0d101a549a573b2c63212a7e00b64 Signed-off-by: Paul Fertser Signed-off-by: Andreas Fritiofson Reviewed-on: http://openocd.zylin.com/1467 Reviewed-by: Xiaofan Reviewed-by: Spencer Oliver Tested-by: Spencer Oliver --- diff --git a/README b/README index 0781dfc420..c5c1e62874 100644 --- a/README +++ b/README @@ -210,6 +210,7 @@ You'll also need: - make - libtool +- pkg-config >= 0.23 (or compatible) Additionally, for building from git: @@ -218,7 +219,8 @@ Additionally, for building from git: - texinfo USB-based adapters depend on libusb-1.0 and some older drivers require -libusb-0.1 or libusb-compat-0.1. +libusb-0.1 or libusb-compat-0.1. A compatible implementation, such as +FreeBSD's, additionally needs the corresponding .pc files. USB-Blaster, ASIX Presto, OpenJTAG and ft2232 interface adapter drivers need either one of: @@ -272,6 +274,16 @@ e.g. for cross-building for Windows 32-bit with MinGW on Debian: ./configure --host=i686-w64-mingw32 [options] +To make pkg-config work nicely for cross-compiling, you might need an +additional wrapper script as described at + + http://www.flameeyes.eu/autotools-mythbuster/pkgconfig/cross-compiling.html + +This is needed to tell pkg-config where to look for the target +libraries that OpenOCD depends on. Alternatively, you can specify +*_CFLAGS and *_LIBS environment variables directly, see "./configure +--help" for the details. + Parallel Port Dongles --------------------- diff --git a/README.OSX b/README.OSX index 5fec44f201..2a023f16fd 100644 --- a/README.OSX +++ b/README.OSX @@ -9,9 +9,9 @@ There are a few prerequisites you will need first: or - Homebrew (http://mxcl.github.io/homebrew/) -libtool, automake, autoconf and libusb can be easily installed via -MacPorts: - sudo port install libtool automake autoconf libusb [libusb-compat] +libtool, automake, autoconf, pkg-config and libusb can be easily +installed via MacPorts: + sudo port install libtool automake autoconf pkgconfig libusb [libusb-compat] or with Homebrew: brew install libtool automake libusb [libusb-compat] diff --git a/README.Windows b/README.Windows index 1e9c49631d..f923228af8 100644 --- a/README.Windows +++ b/README.Windows @@ -5,6 +5,18 @@ You can build OpenOCD for Windows natively with either MinGW/MSYS or Cygwin. Alternatively, one can cross-compile it using MinGW on a *nix host. See README for the generic instructions. +Native MinGW/MSYS compilation +----------------------------- + +As MSYS doesn't come with pkg-config pre-installed, you need to add it +manually. The easiest way to do that is to download pkg-config-lite +from: + + http://sourceforge.net/projects/pkgconfiglite/ + +Then simply unzip the archive to the root directory of your MSYS +installation. + USB adapters ------------ diff --git a/configure.ac b/configure.ac index c7700dc315..7f49ba05a9 100644 --- a/configure.ac +++ b/configure.ac @@ -19,6 +19,7 @@ AC_PROG_CC AC_PROG_CC_C99 AM_PROG_CC_C_O AC_PROG_RANLIB +PKG_PROG_PKG_CONFIG([0.23]) dnl disable checks for C++, Fortran and GNU Java Compiler m4_defun([_LT_AC_LANG_CXX_CONFIG], [:]) @@ -1175,10 +1176,10 @@ fi # check for libusb library if necessary use_libusb1=no if test $need_usb = yes -o $need_usb_ng = yes; then - AC_CHECK_HEADER([libusb-1.0/libusb.h], [ - AC_DEFINE([HAVE_LIBUSB1], [1], [Define if you have libusb-1.x]) + PKG_CHECK_MODULES([LIBUSB1], [libusb-1.0], [ use_libusb1=yes - AC_SEARCH_LIBS([libusb_error_name], [usb-1.0], + AC_DEFINE([HAVE_LIBUSB1], [1], [Define if you have libusb-1.x]) + PKG_CHECK_EXISTS([libusb-1.0 >= 1.0.9], [AC_DEFINE([HAVE_LIBUSB_ERROR_NAME], [1], [Define if your libusb has libusb_error_name()])], [AC_MSG_WARN([libusb-1.x older than 1.0.9 detected, consider updating])]) ], [ @@ -1193,11 +1194,9 @@ fi use_libusb0=no if test $need_usb0 = yes; then - AC_CHECK_HEADERS([usb.h], [ - use_libusb0=yes - ], [ - AC_MSG_ERROR([libusb-0.1 is required to build some OpenOCD driver(s)]) - ]) + PKG_CHECK_MODULES([LIBUSB0], [libusb], [use_libusb0=yes], [ + AC_MSG_ERROR([libusb-0.1 is required to build some OpenOCD driver(s)]) + ]) fi AM_CONDITIONAL([RELEASE], [test $build_release = yes]) diff --git a/src/Makefile.am b/src/Makefile.am index 5c2081a488..3413ba953f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -75,11 +75,11 @@ endif LIBUSB = if USE_LIBUSB1 -LIBUSB += -lusb-1.0 +LIBUSB += $(LIBUSB1_LIBS) endif if USE_LIBUSB0 -LIBUSB += -lusb +LIBUSB += $(LIBUSB0_LIBS) endif libopenocd_la_LIBADD = \ diff --git a/src/helper/Makefile.am b/src/helper/Makefile.am index 9e27d051ef..215bbaed5f 100644 --- a/src/helper/Makefile.am +++ b/src/helper/Makefile.am @@ -5,6 +5,8 @@ noinst_LTLIBRARIES = libhelper.la CONFIGFILES = options.c time_support_common.c +libhelper_la_CPPFLAGS = $(AM_CPPFLAGS) $(LIBUSB1_CFLAGS) + libhelper_la_SOURCES = \ binarybuffer.c \ $(CONFIGFILES) \ diff --git a/src/helper/replacements.c b/src/helper/replacements.c index d8d8fd0bf6..b083096f82 100644 --- a/src/helper/replacements.c +++ b/src/helper/replacements.c @@ -278,7 +278,7 @@ int win_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct time #endif #if defined HAVE_LIBUSB1 && !defined HAVE_LIBUSB_ERROR_NAME -#include +#include /* Verbatim from git://git.libusb.org/libusb.git tag 1.0.9 * The libusb_error enum is compatible down to v0.9.1 */ diff --git a/src/jtag/aice/Makefile.am b/src/jtag/aice/Makefile.am index 38c441e121..7b9469d86f 100644 --- a/src/jtag/aice/Makefile.am +++ b/src/jtag/aice/Makefile.am @@ -1,6 +1,6 @@ include $(top_srcdir)/common.mk -AM_CPPFLAGS += -I$(top_srcdir)/src/jtag/drivers +AM_CPPFLAGS += -I$(top_srcdir)/src/jtag/drivers $(LIBUSB1_CFLAGS) $(LIBUSB0_CFLAGS) noinst_LTLIBRARIES = libocdaice.la diff --git a/src/jtag/drivers/Makefile.am b/src/jtag/drivers/Makefile.am index e3ed2199a4..e8f1efbc06 100644 --- a/src/jtag/drivers/Makefile.am +++ b/src/jtag/drivers/Makefile.am @@ -6,6 +6,8 @@ libocdjtagdrivers_la_LIBADD = libocdjtagdrivers_la_SOURCES = \ $(DRIVERFILES) +libocdjtagdrivers_la_CPPFLAGS = $(AM_CPPFLAGS) $(LIBUSB1_CFLAGS) $(LIBUSB0_CFLAGS) + ULINK_FIRMWARE = $(srcdir)/OpenULINK EXTRA_DIST = $(ULINK_FIRMWARE) diff --git a/src/jtag/drivers/libusb1_common.h b/src/jtag/drivers/libusb1_common.h index cd1f7f10f5..0e653d8454 100644 --- a/src/jtag/drivers/libusb1_common.h +++ b/src/jtag/drivers/libusb1_common.h @@ -22,7 +22,7 @@ #ifndef JTAG_LIBUSB_COMMON_H #define JTAG_LIBUSB_COMMON_H -#include +#include #define jtag_libusb_device libusb_device #define jtag_libusb_device_handle libusb_device_handle diff --git a/src/jtag/drivers/mpsse.c b/src/jtag/drivers/mpsse.c index c5fd6d7fac..c5e0b61c10 100644 --- a/src/jtag/drivers/mpsse.c +++ b/src/jtag/drivers/mpsse.c @@ -24,7 +24,7 @@ #include "mpsse.h" #include "helper/log.h" -#include +#include /* Compatibility define for older libusb-1.0 */ #ifndef LIBUSB_CALL diff --git a/src/jtag/drivers/ti_icdi_usb.c b/src/jtag/drivers/ti_icdi_usb.c index c0c0718796..f10d120736 100644 --- a/src/jtag/drivers/ti_icdi_usb.c +++ b/src/jtag/drivers/ti_icdi_usb.c @@ -33,7 +33,7 @@ #include -#include +#include #define ICDI_WRITE_ENDPOINT 0x02 #define ICDI_READ_ENDPOINT 0x83