From 5f71a79b56ca64f98900146b103a2f361c6dd837 Mon Sep 17 00:00:00 2001 From: Lucien Judert Date: Mon, 27 Jan 2014 23:30:45 +0100 Subject: [PATCH] Allow cross-compilation from mingw-w64 using libusb/libusbx 1.0.18 --- CMakeLists.txt | 17 ++++++----- cmake/modules/FindLIBUSB.cmake | 51 +++++++++++++------------------ cmake/modules/FindPCRE.cmake | 10 ------ contrib/win32/libnfc/buses/uart.c | 2 +- contrib/windows.h | 1 + examples/CMakeLists.txt | 4 +-- libnfc/CMakeLists.txt | 34 ++++++++++++--------- utils/CMakeLists.txt | 4 +-- 8 files changed, 57 insertions(+), 66 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 90825f3..b641c59 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -131,14 +131,17 @@ ENDIF(LIBUSB_INCLUDE_DIRS) # version.rc for Windows IF(WIN32) - # Date for filling in rc file information - MACRO (GET_CURRENT_YEAR RESULT) - EXECUTE_PROCESS(COMMAND "cmd" " /C date /T" OUTPUT_VARIABLE ${RESULT}) - STRING(REGEX REPLACE ".*(..)/(..)/(....).*" "\\3" ${RESULT} ${${RESULT}}) - ENDMACRO (GET_CURRENT_YEAR) - GET_CURRENT_YEAR(CURRENT_YEAR) - MESSAGE("Year for copyright is " ${CURRENT_YEAR}) + IF(NOT MINGW) + # Date for filling in rc file information + MACRO (GET_CURRENT_YEAR RESULT) + EXECUTE_PROCESS(COMMAND "cmd" " /C date /T" OUTPUT_VARIABLE ${RESULT}) + STRING(REGEX REPLACE ".*(..)/(..)/(....).*" "\\3" ${RESULT} ${${RESULT}}) + ENDMACRO (GET_CURRENT_YEAR) + GET_CURRENT_YEAR(CURRENT_YEAR) + MESSAGE("Year for copyright is " ${CURRENT_YEAR}) + ENDIF() + SET(RC_COMMENT "${PACKAGE_NAME} library") SET(RC_INTERNAL_NAME "${PACKAGE_NAME} ${WIN32_MODE}") SET(RC_ORIGINAL_NAME ${PACKAGE_NAME}.dll) diff --git a/cmake/modules/FindLIBUSB.cmake b/cmake/modules/FindLIBUSB.cmake index 41180aa..7187148 100644 --- a/cmake/modules/FindLIBUSB.cmake +++ b/cmake/modules/FindLIBUSB.cmake @@ -17,7 +17,6 @@ IF(CMAKE_SYSTEM_NAME MATCHES FreeBSD) EXEC_PROGRAM(sysctl ARGS -n kern.osreldate OUTPUT_VARIABLE FREEBSD_VERSION) SET(MIN_FREEBSD_VERSION 800068) IF(FREEBSD_VERSION GREATER ${MIN_FREEBSD_VERSION}) - SET(LIBUSB_FOUND TRUE) SET(LIBUSB_INCLUDE_DIRS "/usr/include") SET(LIBUSB_LIBRARIES "usb") SET(LIBUSB_LIBRARY_DIRS "/usr/lib/") @@ -25,33 +24,27 @@ IF(CMAKE_SYSTEM_NAME MATCHES FreeBSD) ENDIF(CMAKE_SYSTEM_NAME MATCHES FreeBSD) IF(NOT LIBUSB_FOUND) - IF(WIN32) - FIND_PATH(LIBUSB_INCLUDE_DIRS lusb0_usb.h "$ENV{ProgramFiles}/LibUSB-Win32/include" NO_SYSTEM_ENVIRONMENT_PATH) - FIND_LIBRARY(LIBUSB_LIBRARIES NAMES libusb PATHS "$ENV{ProgramFiles}/LibUSB-Win32/lib/gcc") - SET(LIBUSB_LIBRARY_DIR "$ENV{ProgramFiles}/LibUSB-Win32/bin/x86/") - # Must fix up variable to avoid backslashes during packaging - STRING(REGEX REPLACE "\\\\" "/" LIBUSB_LIBRARY_DIR ${LIBUSB_LIBRARY_DIR}) - ELSE(WIN32) - # If not under Windows we use PkgConfig - FIND_PACKAGE (PkgConfig) - IF(PKG_CONFIG_FOUND) - PKG_CHECK_MODULES(LIBUSB REQUIRED libusb-1.0) - ELSE(PKG_CONFIG_FOUND) - MESSAGE(FATAL_ERROR "Could not find PkgConfig") - ENDIF(PKG_CONFIG_FOUND) - ENDIF(WIN32) + FIND_PACKAGE (PkgConfig) - IF(LIBUSB_INCLUDE_DIRS AND LIBUSB_LIBRARIES) - SET(LIBUSB_FOUND TRUE) - ENDIF(LIBUSB_INCLUDE_DIRS AND LIBUSB_LIBRARIES) -ENDIF(NOT LIBUSB_FOUND) + IF(PKG_CONFIG_FOUND) + PKG_CHECK_MODULES(LIBUSB REQUIRED libusb-1.0) + ENDIF() -IF(LIBUSB_FOUND) - IF(NOT LIBUSB_FIND_QUIETLY) - MESSAGE(STATUS "Found LIBUSB: ${LIBUSB_LIBRARIES} ${LIBUSB_INCLUDE_DIRS}") - ENDIF (NOT LIBUSB_FIND_QUIETLY) -ELSE(LIBUSB_FOUND) - IF(LIBUSB_FIND_REQUIRED) - MESSAGE(FATAL_ERROR "Could not find LIBUSB") - ENDIF(LIBUSB_FIND_REQUIRED) -ENDIF(LIBUSB_FOUND) + FIND_PATH(LIBUSB_INCLUDE_DIRS libusb.h lusb0_usb.h + PATHS + ${PC_LIBUSB_INCLUDEDIR} ${PC_LIBUSB_INCLUDE_DIRS} + "$ENV{ProgramFiles}/LibUSB-Win32/include" + PATH_SUFFIXES libusb-1.0 + ) + + FIND_LIBRARY(LIBUSB_LIBRARIES NAMES usb-1.0 libusb + PATHS ${PC_LIBUSB_LIBDIR} ${PC_LIBUSB_LIBRARY_DIRS} + "$ENV{ProgramFiles}/LibUSB-Win32/lib/gcc" + ) + +ENDIF() + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBUSB DEFAULT_MSG LIBUSB_LIBRARIES LIBUSB_INCLUDE_DIRS) + +MARK_AS_ADVANCED(LIBUSB_INCLUDE_DIRS LIBUSB_LIBRARIES) diff --git a/cmake/modules/FindPCRE.cmake b/cmake/modules/FindPCRE.cmake index 0b83def..393a3f8 100644 --- a/cmake/modules/FindPCRE.cmake +++ b/cmake/modules/FindPCRE.cmake @@ -21,16 +21,6 @@ IF(WIN32) ENDIF(PCRE_INCLUDE_DIRS AND PCRE_LIBRARIES) ENDIF(NOT PCRE_FOUND) - IF(PCRE_FOUND) - IF(NOT PCRE_FIND_QUIETLY) - MESSAGE(STATUS "Found PCRE: ${PCRE_LIBRARIES} ${PCRE_INCLUDE_DIRS}") - ENDIF (NOT PCRE_FIND_QUIETLY) - ELSE(PCRE_FOUND) - IF(PCRE_FIND_REQUIRED) - MESSAGE(FATAL_ERROR "Could not find PCRE") - ENDIF(PCRE_FIND_REQUIRED) - ENDIF(PCRE_FOUND) - INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(PCRE DEFAULT_MSG PCRE_LIBRARIES diff --git a/contrib/win32/libnfc/buses/uart.c b/contrib/win32/libnfc/buses/uart.c index 0650869..bfb20c0 100644 --- a/contrib/win32/libnfc/buses/uart.c +++ b/contrib/win32/libnfc/buses/uart.c @@ -113,7 +113,7 @@ uart_close(const serial_port sp) } void -uart_flush_input(const serial_port sp) +uart_flush_input(const serial_port sp, bool wait) { PurgeComm(((struct serial_port_windows *) sp)->hPort, PURGE_RXABORT | PURGE_RXCLEAR); } diff --git a/contrib/windows.h b/contrib/windows.h index 88817db..411e881 100644 --- a/contrib/windows.h +++ b/contrib/windows.h @@ -34,6 +34,7 @@ #define __WINDOWS_H__ # include +# undef interface # include # include "win32/err.h" # if defined (__MINGW32__) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 4c8cf0b..3e9ffca 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -32,11 +32,11 @@ FOREACH(source ${EXAMPLES-SOURCES}) ENDFOREACH(source) #install required libraries -IF(WIN32) +IF(WIN32 AND NOT MINGW) INCLUDE(InstallRequiredSystemLibraries) CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/cmake/FixBundle.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FixBundle.cmake @ONLY) INSTALL(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/FixBundle.cmake) -ENDIF(WIN32) +ENDIF() IF(NOT WIN32) # Manuals for the examples diff --git a/libnfc/CMakeLists.txt b/libnfc/CMakeLists.txt index 66d2124..585c80d 100644 --- a/libnfc/CMakeLists.txt +++ b/libnfc/CMakeLists.txt @@ -79,7 +79,7 @@ IF(LIBNFC_LOG) LIST(APPEND LIBRARY_SOURCES log log-internal) ENDIF(WIN32) ENDIF(LIBNFC_LOG) -ADD_LIBRARY(nfc SHARED ${LIBRARY_SOURCES}) +ADD_LIBRARY(nfc ${LIBRARY_SOURCES}) IF(PCSC_FOUND) TARGET_LINK_LIBRARIES(nfc ${PCSC_LIBRARIES}) @@ -98,20 +98,24 @@ IF(WIN32) TARGET_LINK_LIBRARIES(nfc ${PCRE_LIBRARIES}) ENDIF(PCRE_FOUND) - ADD_CUSTOM_COMMAND( - OUTPUT libnfc.lib - COMMAND dlltool -d ${CMAKE_CURRENT_SOURCE_DIR}/../contrib/win32/nfc.def -l ${CMAKE_CURRENT_BINARY_DIR}/libnfc.lib ${CMAKE_CURRENT_BINARY_DIR}/libnfc.dll - DEPENDS nfc ${CMAKE_CURRENT_SOURCE_DIR}/../contrib/win32/nfc.def - ) - ADD_CUSTOM_TARGET(win32lib ALL DEPENDS libnfc.lib) + IF(NOT MINGW) + ADD_CUSTOM_COMMAND( + OUTPUT libnfc.lib + COMMAND dlltool -d ${CMAKE_CURRENT_SOURCE_DIR}/../contrib/win32/nfc.def -l ${CMAKE_CURRENT_BINARY_DIR}/libnfc.lib ${CMAKE_CURRENT_BINARY_DIR}/libnfc.dll + DEPENDS nfc ${CMAKE_CURRENT_SOURCE_DIR}/../contrib/win32/nfc.def + ) + ADD_CUSTOM_TARGET(win32lib ALL DEPENDS libnfc.lib) + + # At compile time we need the .LIB file, we place it in the lib directory + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libnfc.lib DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries) + ENDIF() - # On Windows the shared (runtime) library should be either in the same - # directory as the excutables or in the path, we add it to same directory - INSTALL(TARGETS nfc RUNTIME DESTINATION bin COMPONENT libraries) - - # At compile time we need the .LIB file, we place it in the lib directory - INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libnfc.lib DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries) -ELSE(WIN32) - INSTALL(TARGETS nfc LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries) ENDIF(WIN32) +# On Windows the shared (runtime) library should be either in the same +# directory as the excutables or in the path, we add it to same directory +INSTALL(TARGETS nfc + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION bin + COMPONENT libraries) diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index b00411f..a8b6756 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -46,11 +46,11 @@ FOREACH(source ${UTILS-SOURCES}) ENDFOREACH(source) #install required libraries -IF(WIN32) +IF(WIN32 AND NOT MINGW) INCLUDE(InstallRequiredSystemLibraries) CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/cmake/FixBundle.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FixBundle.cmake @ONLY) INSTALL(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/FixBundle.cmake) -ENDIF(WIN32) +ENDIF() IF(NOT WIN32) # Manuals for the examples