aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt3
-rw-r--r--cmake/FindPCSC.cmake31
-rw-r--r--src/device/device_ledger.cpp9
-rw-r--r--src/device/device_ledger.hpp5
4 files changed, 37 insertions, 11 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 751f66006..cab853581 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -467,9 +467,12 @@ link_directories(${LIBUNWIND_LIBRARY_DIRS})
# Final setup for libpcsc
if (PCSC_FOUND)
+ message(STATUS "Using PCSC include dir at ${PCSC_INCLUDE_DIR}")
add_definitions(-DHAVE_PCSC)
include_directories(${PCSC_INCLUDE_DIR})
link_directories(${LIBPCSC_LIBRARY_DIRS})
+else (PCSC_FOUND)
+ message(STATUS "Could not find PCSC")
endif()
if(MSVC)
diff --git a/cmake/FindPCSC.cmake b/cmake/FindPCSC.cmake
index 8dd9d0e76..b5e8420e6 100644
--- a/cmake/FindPCSC.cmake
+++ b/cmake/FindPCSC.cmake
@@ -14,22 +14,31 @@ ENDIF (PCSC_INCLUDE_DIR AND PCSC_LIBRARIES)
IF (NOT WIN32)
FIND_PACKAGE(PkgConfig)
PKG_CHECK_MODULES(PC_PCSC libpcsclite)
-ENDIF (NOT WIN32)
-FIND_PATH(PCSC_INCLUDE_DIR winscard.h
- HINTS
- /usr/include/PCSC
- ${PC_PCSC_INCLUDEDIR}
- ${PC_PCSC_INCLUDE_DIRS}
- PATH_SUFFIXES PCSC
+ FIND_PATH(PCSC_INCLUDE_DIR winscard.h
+ HINTS
+ /usr/include/PCSC
+ ${PC_PCSC_INCLUDEDIR}
+ ${PC_PCSC_INCLUDE_DIRS}
+ PATH_SUFFIXES PCSC
)
-FIND_LIBRARY(PCSC_LIBRARY NAMES pcsclite libpcsclite WinSCard PCSC
- HINTS
- ${PC_PCSC_LIBDIR}
- ${PC_PCSC_LIBRARY_DIRS}
+ FIND_LIBRARY(PCSC_LIBRARY NAMES pcsclite libpcsclite PCSC
+ HINTS
+ ${PC_PCSC_LIBDIR}
+ ${PC_PCSC_LIBRARY_DIRS}
)
+ELSE (NOT WIN32)
+ IF(BUILD_64 STREQUAL "ON")
+ set(PCSC_INCLUDE_DIR /mingw64/x86_64-w64-mingw32/include)
+ set(PCSC_LIBRARY /mingw64/x86_64-w64-mingw32/lib/libwinscard.a)
+ ELSE(BUILD_64 STREQUAL "ON")
+ set(PCSC_INCLUDE_DIR /mingw32/i686-w64-mingw32/include)
+ set(PCSC_LIBRARY /mingw32/i686-w64-mingw32/lib/libwinscard.a)
+ ENDIF(BUILD_64 STREQUAL "ON")
+ENDIF (NOT WIN32)
+
# handle the QUIETLY and REQUIRED arguments and set PCSC_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
diff --git a/src/device/device_ledger.cpp b/src/device/device_ledger.cpp
index 3b9ab6744..aedaf8382 100644
--- a/src/device/device_ledger.cpp
+++ b/src/device/device_ledger.cpp
@@ -48,6 +48,15 @@ namespace hw {
/* ===================================================================== */
/* === Debug ==== */
/* ===================================================================== */
+ #ifdef WIN32
+ static char *pcsc_stringify_error(LONG rv) {
+ static __thread char out[20];
+ sprintf_s(out, sizeof(out), "0x%08lX", rv);
+
+ return out;
+ }
+ #endif
+
void set_apdu_verbose(bool verbose) {
apdu_verbose = verbose;
}
diff --git a/src/device/device_ledger.hpp b/src/device/device_ledger.hpp
index f1fcaab87..b62bdf959 100644
--- a/src/device/device_ledger.hpp
+++ b/src/device/device_ledger.hpp
@@ -33,8 +33,13 @@
#include <cstddef>
#include <string>
#include "device.hpp"
+#ifdef WIN32
+#include <winscard.h>
+#define MAX_ATR_SIZE 33
+#else
#include <PCSC/winscard.h>
#include <PCSC/wintypes.h>
+#endif
#include <boost/thread/mutex.hpp>
#include <boost/thread/recursive_mutex.hpp>