On 28.02.2010 16:30, Idwer Vollering wrote: > 2010/2/26 Carl-Daniel Hailfinger <[email protected]> > >> Idwer reported problems with the current libpci check on >> >> FreeBSD 8.0-RELEASE i386 >> >> This is caused by a strict linker. Parsing linker error messages is an >> exercise in futility, so I implemented fallback library detection with >> $CC --print-file-name. >> This fallback will fail on llvm-clang (llvm bug 5137), but such machines >> hopefully have a more permissive linker and will never hit that code path. >> The fallback will also fail on NetBSD where we should look for >> libpciutils instead, but that hopefully doesn't have a strict linker >> either. >> >> Side note: The configure checks in the Makefile are now so unwieldy that >> a separate configure script will definitely improve readability. >> >> Signed-off-by: Carl-Daniel Hailfinger <[email protected]> >> >> > $ gmake > Checking for a C compiler... found. > Checking for libpci headers... found. > Checking for libpci (method 1)... not found. > Checking for dynamic libpci (method 2)... not found. > not found. > > Please install libpci (package pciutils). > See README for more information. > > unavailable. > > Please install libpci (package pciutils). > See README for more information. >
Ouch. Turns out the patch had one error message too many, a missing semicolon and missing LDFLAGS in some CC calls. New version . Idwer reported problems with the current libpci check on FreeBSD 8.0-RELEASE i386 This is caused by a strict linker. Parsing linker error messages is an exercise in futility, so I implemented fallback library detection with $CC --print-file-name. This fallback may cause false positives/negatives on llvm-clang (llvm bug 5137), but such machines hopefully have a more permissive linker and will never hit that code path. The fallback will be unreliable on NetBSD where we should look for libpciutils instead, but that hopefully doesn't have a strict linker either. A fix is easy (replace libpci with PCI_LIB_NAME), but outside the scope of this patch. Tested with error injection at various levels. Signed-off-by: Carl-Daniel Hailfinger <[email protected]> Index: flashrom-libpci_robust_detection/Makefile =================================================================== --- flashrom-libpci_robust_detection/Makefile (Revision 919) +++ flashrom-libpci_robust_detection/Makefile (Arbeitskopie) @@ -251,21 +251,28 @@ echo "Please install libpci headers (package pciutils-devel)."; \ echo "See README for more information."; echo; \ rm -f .test.c .test.o; exit 1) - @printf "Checking for libpci... " + @printf "Checking for libpci (method 1)... " @$(shell ( echo "#include <pci/pci.h>"; \ echo "int main(int argc, char **argv)"; \ echo "{ return 0; }"; ) > .test1.c ) - @$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) .test1.c -o .test1 -lpci $(LIBS) >/dev/null 2>&1 && \ - echo "found." || ( echo "not found."; echo; \ - echo "Please install libpci (package pciutils)."; \ - echo "See README for more information."; echo; \ - rm -f .test1.c .test1; exit 1) + @$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) .test1.c -o .test1 $(LIBS) >/dev/null 2>&1 && \ + echo "found." || ( echo "not found."; \ + $(CC) $(LDFLAGS) --print-file-name=libpci.so >/dev/null 2>&1 && ( \ + printf "Checking for dynamic libpci (method 2)... "; \ + $(CC) $(LDFLAGS) --print-file-name=libpci.so 2>/dev/null | grep -q / && \ + echo "found." || ( echo "not found."; \ + printf "Checking for static libpci (method 2)... "; \ + $(CC) $(LDFLAGS) --print-file-name=libpci.a 2>/dev/null | grep -q / && \ + echo "found." || ( echo "not found."; echo; \ + echo "Please install libpci (package pciutils)."; \ + echo "See README for more information."; echo; \ + rm -f .test1.c .test1; exit 1) ) ) ) @printf "Checking if libpci is sufficient... " @printf "" > .libdeps - @$(CC) $(LDFLAGS) .test.o -o .test -lpci $(LIBS) >/dev/null 2>&1 && \ + @$(CC) $(LDFLAGS) .test.o -o .test $(LIBS) >/dev/null 2>&1 && \ echo "yes." || ( echo "no."; \ printf "Checking if libz is present and supplies all needed symbols..."; \ - $(CC) $(LDFLAGS) .test.o -o .test -lpci -lz $(LIBS) >/dev/null 2>&1 && \ + $(CC) $(LDFLAGS) .test.o -o .test $(LIBS) -lz >/dev/null 2>&1 && \ ( echo "yes."; echo "NEEDLIBZ := yes" > .libdeps ) || ( echo "no."; echo; \ echo "Please install libz."; \ echo "See README for more information."; echo; \ -- "I do consider assignment statements and pointer variables to be among computer science's most valuable treasures." -- Donald E. Knuth _______________________________________________ flashrom mailing list [email protected] http://www.flashrom.org/mailman/listinfo/flashrom
