Explicitly detect libusb-0.1 in the Makefile
Avoid funny interactions between libpci and libusb detection. Leave libftdi autodetection alone for now.
Tested on Linux, needs tests on *BSD and preferably OSX/Windows.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Index: flashrom-libusb0_Makefile/Makefile =================================================================== --- flashrom-libusb0_Makefile/Makefile (Revision 1622) +++ flashrom-libusb0_Makefile/Makefile (Arbeitskopie) @@ -480,6 +480,8 @@ FEATURE_CFLAGS += $(shell LC_ALL=C grep -q "FT232H := yes" .features && printf "%s" "-D'HAVE_FT232H=1'") FEATURE_LIBS += $(shell LC_ALL=C grep -q "FTDISUPPORT := yes" .features && printf "%s" "$(FTDILIBS)") PROGRAMMER_OBJS += ft2232_spi.o +# We can't set NEED_USB here because that would transform libftdi auto-enabling +# into a hard requirement for libusb, defeating the purpose of auto-enabling. endif
ifeq ($(CONFIG_DUMMY), yes) @@ -531,8 +533,8 @@
ifeq ($(CONFIG_DEDIPROG), yes) FEATURE_CFLAGS += -D'CONFIG_DEDIPROG=1' -FEATURE_LIBS += -lusb PROGRAMMER_OBJS += dediprog.o +NEED_USB := yes endif
ifeq ($(CONFIG_SATAMV), yes) @@ -563,23 +565,23 @@ PROGRAMMER_OBJS += pcidev.o physmap.o hwaccess.o ifeq ($(TARGET_OS), NetBSD) # The libpci we want is called libpciutils on NetBSD and needs NetBSD libpci. -LIBS += -lpciutils -lpci +PCILIBS += -lpciutils -lpci # For (i386|x86_64)_iopl(2). -LIBS += -l$(shell uname -p) +PCILIBS += -l$(shell uname -p) else ifeq ($(TARGET_OS), DOS) # FIXME There needs to be a better way to do this CPPFLAGS += -I../libpci/include -LIBS += ../libpci/lib/libpci.a +PCILIBS += ../libpci/lib/libpci.a else -LIBS += -lpci +PCILIBS += -lpci ifeq ($(TARGET_OS), OpenBSD) # For (i386|amd64)_iopl(2). -LIBS += -l$(shell uname -m) +PCILIBS += -l$(shell uname -m) else ifeq ($(TARGET_OS), Darwin) # DirectHW framework can be found in the DirectHW library. -LIBS += -framework IOKit -framework DirectHW +PCILIBS += -framework IOKit -framework DirectHW else endif endif @@ -587,6 +589,12 @@ endif endif
+ifeq ($(NEED_USB), yes) +CHECK_LIBUSB0 = yes +FEATURE_CFLAGS += -D'NEED_USB=1' +USBLIBS := $(shell pkg-config --libs libusb 2>/dev/null || printf "%s" "-lusb") +endif + ifeq ($(CONFIG_PRINT_WIKI), yes) FEATURE_CFLAGS += -D'CONFIG_PRINT_WIKI=1' CLI_OBJS += print_wiki.o @@ -600,13 +608,13 @@ LIBFLASHROM_OBJS = $(CHIP_OBJS) $(PROGRAMMER_OBJS) $(LIB_OBJS) OBJS = $(CLI_OBJS) $(LIBFLASHROM_OBJS)
-all: pciutils features $(PROGRAM)$(EXEC_SUFFIX) +all: hwlibs features $(PROGRAM)$(EXEC_SUFFIX) ifeq ($(ARCH), x86) @+$(MAKE) -C util/ich_descriptors_tool/ TARGET_OS=$(TARGET_OS) EXEC_SUFFIX=$(EXEC_SUFFIX) endif
$(PROGRAM)$(EXEC_SUFFIX): $(OBJS) - $(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(FEATURE_LIBS) $(LIBS) + $(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(FEATURE_LIBS) $(LIBS) $(PCILIBS) $(USBLIBS)
libflashrom.a: $(LIBFLASHROM_OBJS) $(AR) rcs $@ $^ @@ -679,8 +687,21 @@ endef export LIBPCI_TEST
+define LIBUSB0_TEST +#include <usb.h> +int main(int argc, char **argv) +{ + (void) argc; + (void) argv; + usb_init(); + return 0; +} +endef +export LIBUSB0_TEST + +hwlibs: compiler + @printf "" > .libdeps ifeq ($(CHECK_LIBPCI), yes) -pciutils: compiler @printf "Checking for libpci headers... " @echo "$$LIBPCI_TEST" > .test.c @$(CC) -c $(CPPFLAGS) $(CFLAGS) .test.c -o .test.o >/dev/null && \ @@ -689,20 +710,32 @@ echo "See README for more information."; echo; \ rm -f .test.c .test.o; exit 1) @printf "Checking if libpci is present and sufficient... " - @printf "" > .libdeps - @$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(LIBS) >/dev/null && \ + @$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(PCILIBS) >/dev/null && \ echo "yes." || ( echo "no."; \ printf "Checking if libz+libpci are present and sufficient..."; \ - $(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(LIBS) -lz >/dev/null && \ + $(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(PCILIBS) -lz >/dev/null && \ ( echo "yes."; echo "NEEDLIBZ := yes" > .libdeps ) || ( echo "no."; echo; \ echo "Please install libpci (package pciutils) and/or libz."; \ echo "See README for more information."; echo; \ rm -f .test.c .test.o .test$(EXEC_SUFFIX); exit 1) ) @rm -f .test.c .test.o .test$(EXEC_SUFFIX) -else -pciutils: compiler - @printf "" > .libdeps endif +ifeq ($(CHECK_LIBUSB0), yes) + @printf "Checking for libusb-0.1/libusb-compat headers... " + @echo "$$LIBUSB0_TEST" > .test.c + @$(CC) -c $(CPPFLAGS) $(CFLAGS) .test.c -o .test.o >/dev/null && \ + echo "found." || ( echo "not found."; echo; \ + echo "Please install libusb-0.1 headers or libusb-compat headers."; \ + echo "See README for more information."; echo; \ + rm -f .test.c .test.o; exit 1) + @printf "Checking if libusb-0.1 is usable... " + @$(CC) $(LDFLAGS) .test.o -o .test$(EXEC_SUFFIX) $(USBLIBS) >/dev/null && \ + echo "yes." || ( echo "no."; \ + echo "Please install libusb-0.1 or libusb-compat."; \ + echo "See README for more information."; echo; \ + rm -f .test.c .test.o .test$(EXEC_SUFFIX); exit 1) + @rm -f .test.c .test.o .test$(EXEC_SUFFIX) +endif
.features: features
@@ -816,6 +849,6 @@ libpayload: clean make CC="CC=i386-elf-gcc lpgcc" AR=i386-elf-ar RANLIB=i386-elf-ranlib
-.PHONY: all clean distclean compiler pciutils features export tarball dos featuresavailable +.PHONY: all clean distclean compiler hwlibs features export tarball dos featuresavailable
-include $(OBJS:.o=.d)