From 90bc36c9dab112b10ee8810f7b3aada594d6189e Mon Sep 17 00:00:00 2001
From: Dominic Spill <dominicgs@gmail.com>
Date: Thu, 17 Dec 2015 19:09:29 +0000
Subject: [PATCH 63/68] Support both commonly available versions of dfu-util
 (0.7/0.8)

---
 firmware/dfu-util.cmake      | 56 ++++++++++++++++++++++++++++++++++++++++++++
 firmware/hackrf-common.cmake |  6 +++--
 2 files changed, 60 insertions(+), 2 deletions(-)
 create mode 100644 firmware/dfu-util.cmake

--- /dev/null
+++ b/firmware/dfu-util.cmake
@@ -0,0 +1,56 @@
+#
+# Copyright 2015 Dominic Spill <dominicgs@gmail.com>
+#
+# This file is part of GreatFET.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+
+execute_process(
+	COMMAND dfu-suffix -V
+	WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+	RESULT_VARIABLE DFU_NOT_FOUND
+	ERROR_QUIET
+	OUTPUT_VARIABLE DFU_VERSION_STRING
+	OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+
+set(DFU_ALL "")
+if(NOT DFU_NOT_FOUND)
+	string(REGEX REPLACE ".*([0-9]+)\\.[0-9]+.*" "\\1" DFU_VERSION_MAJOR "${DFU_VERSION_STRING}")
+	string(REGEX REPLACE ".*[0-9]+\\.([0-9])+.*" "\\1" DFU_VERSION_MINOR "${DFU_VERSION_STRING}")
+	MESSAGE( STATUS "DFU utils version: " ${DFU_VERSION_MAJOR} "." ${DFU_VERSION_MINOR})
+	execute_process(
+	        COMMAND dfu-prefix -V
+		WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+		RESULT_VARIABLE DFU_PREFIX_NOT_FOUND
+		ERROR_QUIET
+		OUTPUT_VARIABLE DFU_PREFIX_VERSION_STRING
+		OUTPUT_STRIP_TRAILING_WHITESPACE
+	)
+	if(DFU_PREFIX_NOT_FOUND)
+		set(DFU_COMMAND dfu-suffix --vid=0x1fc9 --pid=0x000c --did=0x0 -s 0 -a _tmp.dfu)
+	else(DFU_PREFIX_NOT_FOUND)
+		set(DFU_COMMAND dfu-suffix --vid=0x1fc9 --pid=0x000c --did=0x0 -a _tmp.dfu && dfu-prefix -s 0 -a _tmp.dfu)
+	endif(DFU_PREFIX_NOT_FOUND)
+    set(DFU_ALL "ALL")
+else(NOT DFU_NOT_FOUND)
+	MESSAGE(STATUS "dfu-suffix not found: not building DFU file")
+endif(NOT DFU_NOT_FOUND)
+
+
+
+    
\ No newline at end of file
--- a/firmware/hackrf-common.cmake
+++ b/firmware/hackrf-common.cmake
@@ -26,6 +26,8 @@
 
 enable_language(C CXX ASM)
 
+include(../dfu-util.cmake)
+
 SET(PATH_HACKRF ../..)
 SET(PATH_HACKRF_FIRMWARE ${PATH_HACKRF}/firmware)
 SET(PATH_HACKRF_FIRMWARE_COMMON ${PATH_HACKRF_FIRMWARE}/common)
@@ -168,11 +170,11 @@
 	)
 
 	add_custom_target(
-		${PROJECT_NAME}.dfu ALL
+		${PROJECT_NAME}.dfu ${DFU_ALL}
 		DEPENDS ${PROJECT_NAME}.bin
 		COMMAND rm -f _tmp.dfu _header.bin
 		COMMAND cp ${PROJECT_NAME}.bin _tmp.dfu
-		COMMAND dfu-suffix --vid=0x1fc9 --pid=0x000c --did=0x0 -s 0 -a _tmp.dfu
+		COMMAND ${DFU_COMMAND}
 		COMMAND python -c \"import os.path\; import struct\; print\('0000000: da ff ' + ' '.join\(map\(lambda s: '%02x' % ord\(s\), struct.pack\('<H', os.path.getsize\('${PROJECT_NAME}.bin'\) / 512 + 1\)\)\) + ' ff ff ff ff'\)\" | xxd -g1 -r > _header.bin
 		COMMAND cat _header.bin _tmp.dfu >${PROJECT_NAME}.dfu
 		COMMAND rm -f _tmp.dfu _header.bin
