smartcard: fix PCSC detection/build on OS X
authorBernhard Miklautz <bernhard.miklautz@shacknet.at>
Thu, 6 Feb 2014 23:14:46 +0000 (00:14 +0100)
committerBernhard Miklautz <bernhard.miklautz@shacknet.at>
Thu, 6 Feb 2014 23:14:46 +0000 (00:14 +0100)
fixes #1683

channels/smartcard/client/smartcard_operations.c
cmake/FindPCSC.cmake

index 81d0583..30b64db 100644 (file)
 
 #define BOOL PCSC_BOOL
 #include <PCSC/pcsclite.h>
-#include <PCSC/reader.h>
 #include <PCSC/winscard.h>
+#if !defined(__APPLE__)
+#include <PCSC/reader.h>
+#else
+/* On OS X reader.h isn't available so define it here */
+#endif
+#define SCARD_CLASS_SYSTEM     0x7fff   /**< System-specific definitions */
+#define SCARD_ATTR_DEVICE_FRIENDLY_NAME_A SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0003)
+#define SCARD_ATTR_DEVICE_FRIENDLY_NAME_W SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0005)
+#ifdef UNICODE
+#define SCARD_ATTR_DEVICE_FRIENDLY_NAME SCARD_ATTR_DEVICE_FRIENDLY_NAME_W /**< Reader's display name. */
+#define SCARD_ATTR_DEVICE_SYSTEM_NAME SCARD_ATTR_DEVICE_SYSTEM_NAME_W /**< Reader's system name. */
+#else
+#define SCARD_ATTR_DEVICE_FRIENDLY_NAME SCARD_ATTR_DEVICE_FRIENDLY_NAME_A /**< Reader's display name. */
+#define SCARD_ATTR_DEVICE_SYSTEM_NAME SCARD_ATTR_DEVICE_SYSTEM_NAME_A /**< Reader's system name. */
+#endif
 #undef BOOL
 
 #include <winpr/crt.h>
index 0cee2ab..683252e 100644 (file)
@@ -12,6 +12,14 @@ find_path(PCSC_INCLUDE_DIR pcsclite.h
 find_library(PCSC_LIBRARY pcsclite
        PATHS ${PCSC_LIBRARY_DIRS})
 
+# Windows and Mac detection from http://www.cmake.org/Bug/print_bug_page.php?bug_id=11325
+IF(NOT PCSC_FOUND)
+       # Will find PC/SC headers both on Mac and Windows
+       FIND_PATH(PCSC_INCLUDE_DIRS WinSCard.h)
+       # PCSC library is for Mac, WinSCard library is for Windows
+       FIND_LIBRARY(PCSC_LIBRARY NAMES PCSC WinSCard)
+ENDIF(NOT PCSC_FOUND)
+
 FIND_PACKAGE_HANDLE_STANDARD_ARGS(PCSC DEFAULT_MSG PCSC_INCLUDE_DIR PCSC_LIBRARY)
 
 mark_as_advanced(PCSC_INCLUDE_DIR PCSC_LIBRARY)