libusb: require pkg-config support 67/1467/8
authorPaul Fertser <fercerpav@gmail.com>
Wed, 11 Sep 2013 21:07:59 +0000 (23:07 +0200)
committerAndreas Fritiofson <andreas.fritiofson@gmail.com>
Fri, 13 Sep 2013 21:43:18 +0000 (21:43 +0000)
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 <fercerpav@gmail.com>
Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Reviewed-on: http://openocd.zylin.com/1467
Reviewed-by: Xiaofan <xiaofanc@gmail.com>
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Tested-by: Spencer Oliver <spen@spen-soft.co.uk>
12 files changed:
README
README.OSX
README.Windows
configure.ac
src/Makefile.am
src/helper/Makefile.am
src/helper/replacements.c
src/jtag/aice/Makefile.am
src/jtag/drivers/Makefile.am
src/jtag/drivers/libusb1_common.h
src/jtag/drivers/mpsse.c
src/jtag/drivers/ti_icdi_usb.c

diff --git a/README b/README
index 0781dfc42044352d7b137d14944cb5f4155c6231..c5c1e62874918927a0803264dd92184ee4613734 100644 (file)
--- 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
 ---------------------
 
index 5fec44f2013cd918baffa93234d35306f116c5ec..2a023f16fdc1148c50f1fc8e94f158805244c760 100644 (file)
@@ -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]
 
index 1e9c49631d32dd2d088afe69cea904db249723ab..f923228af877b2e71afb6dc76e4dfbb69bd9794c 100644 (file)
@@ -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
 ------------
 
index c7700dc3157b2bdce73b12dada2c2e89e87cd527..7f49ba05a99ca26cd48f0c7eb6fd1ccaeda28082 100644 (file)
@@ -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])
index 5c2081a488ccecffdc7165fac5d1b0faa77f36d1..3413ba953f5e39638df1bf235e261c94b429ea79 100644 (file)
@@ -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 = \
index 9e27d051ef7d38a861fcd021c1f966903ac07e2c..215bbaed5fbe72bc4efe0d7dcb6d59b791f5d835 100644 (file)
@@ -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) \
index d8d8fd0bf663fb972d4ff8f891a92286815cb348..b083096f8213015e61a6c001504bfff1023886a9 100644 (file)
@@ -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 <libusb-1.0/libusb.h>
+#include <libusb.h>
 /* Verbatim from git://git.libusb.org/libusb.git tag 1.0.9
  * The libusb_error enum is compatible down to v0.9.1
  */
index 38c441e1210e40e602ca53ffb9e292952c350efe..7b9469d86f33761ebd6d034df3f8ebf3bf475e0d 100644 (file)
@@ -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
 
index e3ed2199a494c762606e7dc6657f7ddcceff187a..e8f1efbc06db81ace77c53261851b365b48ce3a2 100644 (file)
@@ -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)
index cd1f7f10f51b521a234242ccdb571d8fd4ba4c6f..0e653d845400d3b9c997713ad830a8e280f0259b 100644 (file)
@@ -22,7 +22,7 @@
 #ifndef JTAG_LIBUSB_COMMON_H
 #define JTAG_LIBUSB_COMMON_H
 
-#include <libusb-1.0/libusb.h>
+#include <libusb.h>
 
 #define jtag_libusb_device                     libusb_device
 #define jtag_libusb_device_handle              libusb_device_handle
index c5fd6d7fac1ab295e0686bfbbb83497c3a158e12..c5e0b61c10a54b05a6259627b55fd9f1531003f4 100644 (file)
@@ -24,7 +24,7 @@
 
 #include "mpsse.h"
 #include "helper/log.h"
-#include <libusb-1.0/libusb.h>
+#include <libusb.h>
 
 /* Compatibility define for older libusb-1.0 */
 #ifndef LIBUSB_CALL
index c0c0718796ea5f513a165df75cbf912397d25907..f10d12073668aaa18af54f3ff274a838785e5db8 100644 (file)
@@ -33,7 +33,7 @@
 
 #include <target/cortex_m.h>
 
-#include <libusb-1.0/libusb.h>
+#include <libusb.h>
 
 #define ICDI_WRITE_ENDPOINT 0x02
 #define ICDI_READ_ENDPOINT 0x83

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)