Re-add pcsc-lite compile-time dependency

Win64 changed the SCARDCONTEXT from LONG to ULONG_PTR,
pcsc-lite did not follow this on 64bit platforms.
This breaks the pcsc module.

To solve this we use installed winscard.h in order to get proper
declerations.

As mingw32 does not have winscard.h we keep current types. mingw64 and
pcsc-lite system have winscard.h.



git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@3590 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
alonbl 2008-10-27 19:16:28 +00:00
parent 4ad85b3d91
commit d7941bf850
3 changed files with 33 additions and 23 deletions

View File

@ -490,7 +490,17 @@ if test "${enable_openct}" = "yes"; then
fi
if test "${enable_pcsc}" = "yes"; then
AC_DEFINE([ENABLE_PCSC], [1], [Define if PC/SC is to be enabled])
AC_ARG_VAR([PCSC_CFLAGS], [C compiler flags for pcsc])
if test "${WIN32}" != "yes"; then
test -z "${PCSC_CFLAGS}" && PCSC_CFLAGS="-I/usr/include/PCSC"
fi
saved_CFLAGS="${CFLAGS}"
CFLAGS="${CFLAGS} ${PCSC_CFLAGS}"
# We must cope with mingw32 that does not have winscard.h mingw64 has it.
AC_CHECK_HEADERS([winscard.h],,[test "${WIN32}" != "yes" && AC_MSG_ERROR([winscard.h is required for pcsc])])
CFLAGS="${saved_CFLAGS}"
if test "${with_pcsc_provider}" = "detect"; then
case "${host}" in
*-*-darwin*)
@ -507,6 +517,7 @@ if test "${enable_pcsc}" = "yes"; then
DEFAULT_PCSC_PROVIDER="${with_pcsc_provider}"
fi
AC_DEFINE_UNQUOTED([DEFAULT_PCSC_PROVIDER], ["${DEFAULT_PCSC_PROVIDER}"], [Default PC/SC provider])
AC_DEFINE([ENABLE_PCSC], [1], [Define if PC/SC is to be enabled])
fi
dnl AM_PATH_LIBASSUAN([MINIMUM-VERSION,
@ -545,7 +556,10 @@ if test "${enable_openct}" = "yes"; then
OPTIONAL_OPENCT_CFLAGS="${OPENCT_CFLAGS}"
OPTIONAL_OPENCT_LIBS="${OPENCT_LIBS}"
fi
test "${enable_pcsc}" = "yes" && OPENSC_FEATURES="${OPENSC_FEATURES} pcsc(${DEFAULT_PCSC_PROVIDER})"
if test "${enable_pcsc}" = "yes"; then
OPENSC_FEATURES="${OPENSC_FEATURES} pcsc(${DEFAULT_PCSC_PROVIDER})"
OPTIONAL_PCSC_CFLAGS="${PCSC_CFLAGS}"
fi
test "${enable_nsplugin}" = "yes" && OPENSC_FEATURES="${OPENSC_FEATURES} nsplugin"
AC_DEFINE_UNQUOTED([OPENSC_ETC_PATH], ["${full_sysconfdir}"], [etc path for libopensc])
@ -579,6 +593,7 @@ AC_SUBST([OPTIONAL_OPENSSL_CFLAGS])
AC_SUBST([OPTIONAL_OPENSSL_LIBS])
AC_SUBST([OPTIONAL_OPENCT_CFLAGS])
AC_SUBST([OPTIONAL_OPENCT_LIBS])
AC_SUBST([OPTIONAL_PCSC_CFLAGS])
AM_CONDITIONAL([SVN_CHECKOUT], [test "${svn_checkout}" = "yes"])
AM_CONDITIONAL([ENABLE_MAN], [test "${enable_man}" = "yes"])
@ -671,6 +686,7 @@ OPENSSL_CFLAGS: ${OPENSSL_CFLAGS}
OPENSSL_LIBS: ${OPENSSL_LIBS}
OPENCT_CFLAGS: ${OPENCT_CFLAGS}
OPENCT_LIBS: ${OPENCT_LIBS}
PCSC_CFLAGS: ${PCSC_CFLAGS}
LIBASSUAN_CFLAGS: ${LIBASSUAN_CFLAGS}
LIBASSUAN_LIBS: ${LIBASSUAN_LIBS}

View File

@ -16,7 +16,7 @@ noinst_HEADERS = cards.h ctbcs.h internal.h esteid.h muscle.h muscle-filesystem.
pkgconfig_DATA = libopensc.pc libpkcs15init.pc libscconf.pc
AM_CFLAGS = $(OPTIONAL_OPENSSL_CFLAGS) $(OPTIONAL_OPENCT_CFLAGS) \
$(OPTIONAL_ZLIB_CFLAGS) $(LTLIB_CFLAGS)
$(OPTIONAL_PCSC_CFLAGS) $(OPTIONAL_ZLIB_CFLAGS) $(LTLIB_CFLAGS)
INCLUDES = -I$(top_builddir)/src/include -I$(top_srcdir)/src/common
libopensc_la_SOURCES = \

View File

@ -3,19 +3,6 @@
/* Mostly copied from pcsc-lite, this is the minimum required */
#ifndef _WIN32
#ifndef BYTE
typedef unsigned char BYTE;
#endif
typedef const void *LPCVOID;
typedef void *LPVOID;
typedef unsigned long DWORD;
typedef long LONG;
typedef const char *LPCSTR;
typedef BYTE *LPBYTE;
typedef DWORD *LPDWORD;
typedef char *LPSTR;
#endif
#if defined(HAVE_INTTYPES_H)
#include <inttypes.h>
#elif defined(HAVE_STDINT_H)
@ -28,7 +15,11 @@ typedef unsigned __int8 uint8_t;
#warning no uint32_t type available, please contact opensc-devel@opensc-project.org
#endif
#ifndef _MSC_VER
#ifdef HAVE_WINSCARD_H
#include <winscard.h>
#else
/* mingw32 does not have winscard.h */
#define MAX_ATR_SIZE 33 /**< Maximum ATR size */
#define SCARD_PROTOCOL_T0 0x0001 /**< T=0 active protocol. */
@ -64,7 +55,6 @@ typedef unsigned __int8 uint8_t;
#define SCARD_W_REMOVED_CARD 0x80100069 /**< The smart card has been removed, so further communication is not possible. */
#endif
#define SCARD_CTL_CODE(code) (0x42000000 + (code))
typedef const BYTE *LPCBYTE;
typedef long SCARDCONTEXT; /**< \p hContext returned by SCardEstablishContext() */
@ -92,7 +82,11 @@ typedef struct _SCARD_IO_REQUEST
}
SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
#endif /* MSC_VER */
typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST;
typedef SCARD_READERSTATE_A SCARD_READERSTATE, *PSCARD_READERSTATE_A,
*LPSCARD_READERSTATE_A;
#endif /* HAVE_SCARD_H */
#if defined(_WIN32)
#define PCSC_API WINAPI
@ -102,10 +96,6 @@ SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
#define PCSC_API
#endif
typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST;
typedef SCARD_READERSTATE_A SCARD_READERSTATE, *PSCARD_READERSTATE_A,
*LPSCARD_READERSTATE_A;
typedef LONG (PCSC_API *SCardEstablishContext_t)(DWORD dwScope, LPCVOID pvReserved1,
LPCVOID pvReserved2, LPSCARDCONTEXT phContext);
typedef LONG (PCSC_API *SCardReleaseContext_t)(SCARDCONTEXT hContext);
@ -133,6 +123,10 @@ typedef LONG (PCSC_API *SCardListReaders_t)(SCARDCONTEXT hContext, LPCSTR mszGro
/* Copied from pcsc-lite reader.h */
#ifndef SCARD_CTL_CODE
#define SCARD_CTL_CODE(code) (0x42000000 + (code))
#endif
/**
* TeleTrust Class 2 reader tags
*/