summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gnu-system.am1
-rw-r--r--gnu/packages/admin.scm47
-rw-r--r--gnu/packages/patches/flashrom-use-libftdi1.patch70
3 files changed, 118 insertions, 0 deletions
diff --git a/gnu-system.am b/gnu-system.am
index 6e1e8afec0..ea2a4b3f51 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -300,6 +300,7 @@ dist_patch_DATA =						\
   gnu/packages/patches/doxygen-tmake.patch			\
   gnu/packages/patches/emacs-configure-sh.patch			\
   gnu/packages/patches/findutils-absolute-paths.patch		\
+  gnu/packages/patches/flashrom-use-libftdi1.patch		\
   gnu/packages/patches/flex-bison-tests.patch			\
   gnu/packages/patches/gawk-shell.patch				\
   gnu/packages/patches/gcc-cross-environment-variables.patch	\
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 4a88fdd76a..8abc6677ac 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -48,6 +48,9 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages groff)
+  #:use-module (gnu packages pciutils)
+  #:use-module (gnu packages libusb)
+  #:use-module (gnu packages libftdi)
   #:use-module (gnu packages xorg))
 
 (define-public dmd
@@ -803,3 +806,47 @@ reliability depending on the manufacturer.  This will often include usage
 status for the CPU sockets, expansion slots (e.g. AGP, PCI, ISA) and memory
 module slots, and the list of I/O ports (e.g. serial, parallel, USB).")
     (license gpl2+)))
+
+(define-public flashrom
+  (package
+    (name "flashrom")
+    (version "0.9.7")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "http://download.flashrom.org/releases/flashrom-"
+                    version ".tar.bz2"))
+              (sha256
+               (base32
+                "1s9pc4yls2s1gcg2ar4q75nym2z5v6lxq36bl6lq26br00nj2mas"))
+              (patches (list (search-patch "flashrom-use-libftdi1.patch")))))
+    (build-system gnu-build-system)
+    (inputs `(("dmidecode" ,dmidecode)
+              ("pciutils" ,pciutils)
+              ("libusb" ,libusb)
+              ("libftdi" ,libftdi)))
+    (native-inputs `(("pkg-config" ,pkg-config)))
+    (arguments
+     '(#:make-flags (list "CC=gcc" (string-append "PREFIX=" %output))
+       #:tests? #f   ; no 'check' target
+       #:phases
+       (alist-delete
+        'configure
+        (alist-cons-before
+         'build 'patch-exec-paths
+         (lambda* (#:key inputs #:allow-other-keys)
+           (substitute* "dmi.c"
+             (("\"dmidecode\"")
+              (format #f "~S"
+                      (string-append (assoc-ref inputs "dmidecode")
+                                     "/sbin/dmidecode")))))
+         %standard-phases))))
+    (home-page "http://flashrom.org/")
+    (synopsis "Identify, read, write, erase, and verify ROM/flash chips")
+    (description
+     "flashrom is a utility for identifying, reading, writing,
+verifying and erasing flash chips.  It is designed to flash
+BIOS/EFI/coreboot/firmware/optionROM images on mainboards,
+network/graphics/storage controller cards, and various other
+programmer devices.")
+    (license gpl2)))
diff --git a/gnu/packages/patches/flashrom-use-libftdi1.patch b/gnu/packages/patches/flashrom-use-libftdi1.patch
new file mode 100644
index 0000000000..a6051df30a
--- /dev/null
+++ b/gnu/packages/patches/flashrom-use-libftdi1.patch
@@ -0,0 +1,70 @@
+Update to libftdi-1.0 is advertised as a drop-in replacement for libftdi,
+running on top of libusb-1.0. This also removes indirect dependency to
+libusb-0.1.
+
+Patch by Kyösti Mälkki <kyosti.malkki@gmail.com>.
+See <http://patchwork.coreboot.org/patch/3904/>.
+
+--- flashrom/Makefile.orig	2013-08-13 18:00:00.000000000 -0400
++++ flashrom/Makefile	2014-08-05 03:10:40.217145375 -0400
+@@ -492,19 +492,21 @@
+ ifeq ($(CONFIG_FT2232_SPI), yes)
+ # This is a totally ugly hack.
+ FEATURE_CFLAGS += $(shell LC_ALL=C grep -q "FTDISUPPORT := yes" .features && printf "%s" "-D'CONFIG_FT2232_SPI=1'")
+-NEED_FTDI := yes
++NEED_FTDI1 := yes
+ PROGRAMMER_OBJS += ft2232_spi.o
+ endif
+ 
+ ifeq ($(CONFIG_USBBLASTER_SPI), yes)
+ # This is a totally ugly hack.
+ FEATURE_CFLAGS += $(shell LC_ALL=C grep -q "FTDISUPPORT := yes" .features && printf "%s" "-D'CONFIG_USBBLASTER_SPI=1'")
+-NEED_FTDI := yes
++NEED_LIBUSB1 := yes
++NEED_FTDI1 := yes
+ PROGRAMMER_OBJS += usbblaster_spi.o
+ endif
+ 
+-ifeq ($(NEED_FTDI), yes)
+-FTDILIBS := $(shell pkg-config --libs libftdi 2>/dev/null || printf "%s" "-lftdi -lusb")
++ifeq ($(NEED_FTDI1), yes)
++FTDILIBS := $(shell pkg-config --libs libftdi1 2>/dev/null || printf "%s" "-lftdi1 -lusb-1.0")
++FEATURE_CFLAGS += $(shell pkg-config --cflags libftdi1 2>/dev/null)
+ 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)")
+ # We can't set NEED_USB here because that would transform libftdi auto-enabling
+@@ -781,6 +783,7 @@
+ endif
+ 
+ define FTDI_TEST
++#include <stddef.h>
+ #include <ftdi.h>
+ struct ftdi_context *ftdic = NULL;
+ int main(int argc, char **argv)
+@@ -793,6 +796,7 @@
+ export FTDI_TEST
+ 
+ define FTDI_232H_TEST
++#include <stddef.h>
+ #include <ftdi.h>
+ enum ftdi_chip_type type = TYPE_232H;
+ endef
+@@ -826,15 +830,15 @@
+ 
+ features: compiler
+ 	@echo "FEATURES := yes" > .features.tmp
+-ifeq ($(NEED_FTDI), yes)
++ifeq ($(NEED_FTDI1), yes)
+ 	@printf "Checking for FTDI support... "
+ 	@echo "$$FTDI_TEST" > .featuretest.c
+-	@$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) .featuretest.c -o .featuretest$(EXEC_SUFFIX) $(FTDILIBS) $(LIBS) >/dev/null 2>&1 &&	\
++	@$(CC) $(CPPFLAGS) $(CFLAGS) $(FEATURE_CFLAGS) $(LDFLAGS) .featuretest.c -o .featuretest$(EXEC_SUFFIX) $(FTDILIBS) $(LIBS) >/dev/null 2>&1 &&	\
+ 		( echo "found."; echo "FTDISUPPORT := yes" >> .features.tmp ) ||	\
+ 		( echo "not found."; echo "FTDISUPPORT := no" >> .features.tmp )
+ 	@printf "Checking for FT232H support in libftdi... "
+ 	@echo "$$FTDI_232H_TEST" >> .featuretest.c
+-	@$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) .featuretest.c -o .featuretest$(EXEC_SUFFIX) $(FTDILIBS) $(LIBS) >/dev/null 2>&1 &&	\
++	@$(CC) $(CPPFLAGS) $(CFLAGS) $(FEATURE_CFLAGS) $(LDFLAGS) .featuretest.c -o .featuretest$(EXEC_SUFFIX) $(FTDILIBS) $(LIBS) >/dev/null 2>&1 &&	\
+ 		( echo "found."; echo "FT232H := yes" >> .features.tmp ) ||	\
+ 		( echo "not found."; echo "FT232H := no" >> .features.tmp )
+ endif