cardmod - build fixups and mingw stuff

1. Add --enable-cardmod to autoconf to enable feature explicitly.

2. Modify opensc-cardmod.dll to always have bitness suffix eg opensc-cardmod32.dll

3. Remove complex cardmod.h detection, could not find any reason for this.

4. Make cardmod.inf a template and inject opensc version into its version string.

5. More minor autoconf/automake cleanups.

6. Remove internal-winscard.h usage in cardmod.c as cardmod.h already includes winscard.h

7. DllMain is not exportable.

Notes:

1. I may caused other build not to work, will happy to work it out.

2. Cannot find reason why cardmod.inf cardmod-westcos.reg should reside in bin directory.



git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@4003 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
alonbl 2010-02-05 21:39:28 +00:00
parent a19a966b29
commit f636cc1862
7 changed files with 51 additions and 71 deletions

View File

@ -165,6 +165,13 @@ AC_ARG_ENABLE(
[enable_ctapi="no"]
)
AC_ARG_ENABLE(
[cardmod],
[AS_HELP_STRING([--enable-cardmod],[enable cardmod module on Windows @<:@disabled@:>@])],
,
[enable_cardmod="no"]
)
AC_ARG_ENABLE(
[man],
[AS_HELP_STRING([--disable-man],[disable installation of manuals @<:@enabled for none Windows@:>@])],
@ -305,6 +312,12 @@ AC_CHECK_FUNCS([ \
setlocale getopt_long \
strlcpy
])
AC_CHECK_SIZEOF(void *)
if test "${ac_cv_sizeof_void_p}" = 8; then
LIBRARY_BITNESS="64"
else
LIBRARY_BITNESS="32"
fi
dnl See if socket() is found from libsocket
AC_CHECK_LIB(
@ -339,9 +352,6 @@ AC_CHECK_HEADER(
)
CFLAGS="${saved_CFLAGS}"
dnl for minidriver basecsp
test -z "${CARDMOD}" && CARDMOD="no"
if test "${WIN32}" = "no"; then
dnl Special check for pthread support.
ACX_PTHREAD(
@ -353,28 +363,16 @@ if test "${WIN32}" = "no"; then
[AC_MSG_ERROR([POSIX thread support required])]
)
CC="${PTHREAD_CC}"
else
fi
if test "${enable_cardmod}" = "yes"; then
dnl win32 special test for minidriver
AC_CHECK_HEADER([cardmod.h])
if test "${ac_cv_header_cardmod_h}" != "yes"; then
saved_CFLAGS="${CFLAGS}"
CFLAGS="${CFLAGS} -Isrc/libopensc"
AC_MSG_CHECKING([secondary check for carmod.h presence])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <windows.h>
#include <internal-winscard.h>
#include <cardmod.h>
int main(int argc, char **argv) { return 0;}]])],
[CARDMOD="yes"],
[CARDMOD="no"])
AC_MSG_RESULT(["${CARDMOD}"])
CFLAGS="${saved_CFLAGS}"
else
CARDMOD="yes"
fi
if test "${CARDMOD}" = "yes"; then
AC_DEFINE([HAVE_CARDMOD_H], [], [card minidriver header])
fi
AC_CHECK_HEADER(
[cardmod.h],
,
[AC_MSG_ERROR([cardmod.h is not found and required for cardmod])]
)
AC_DEFINE([ENABLE_CARDMOD], [1], [Enable cardmod support])
fi
AC_ARG_VAR([ZLIB_CFLAGS], [C compiler flags for zlib])
@ -642,10 +640,12 @@ if test "${enable_pcsc}" = "yes"; then
OPENSC_FEATURES="${OPENSC_FEATURES} pcsc(${DEFAULT_PCSC_PROVIDER})"
OPTIONAL_PCSC_CFLAGS="${PCSC_CFLAGS}"
fi
if test "${enable_ctapi}" = "yes"; then
OPENSC_FEATURES="${OPENSC_FEATURES} ctapi"
fi
if test "${enable_cardmod}" = "yes"; then
OPENSC_FEATURES="${OPENSC_FEATURES} cardmod"
fi
AC_DEFINE_UNQUOTED([OPENSC_VERSION_MAJOR], [${OPENSC_VERSION_MAJOR}], [OpenSC version major component])
AC_DEFINE_UNQUOTED([OPENSC_VERSION_MINOR], [${OPENSC_VERSION_MINOR}], [OpenSC version minor component])
@ -680,6 +680,7 @@ AC_SUBST([OPTIONAL_OPENSSL_LIBS])
AC_SUBST([OPTIONAL_OPENCT_CFLAGS])
AC_SUBST([OPTIONAL_OPENCT_LIBS])
AC_SUBST([OPTIONAL_PCSC_CFLAGS])
AC_SUBST([LIBRARY_BITNESS])
AM_CONDITIONAL([SVN_CHECKOUT], [test "${svn_checkout}" = "yes"])
AM_CONDITIONAL([ENABLE_MAN], [test "${enable_man}" = "yes"])
@ -691,7 +692,7 @@ AM_CONDITIONAL([ENABLE_OPENCT], [test "${enable_openct}" = "yes"])
AM_CONDITIONAL([ENABLE_DOC], [test "${enable_doc}" = "yes"])
AM_CONDITIONAL([WIN32], [test "${WIN32}" = "yes"])
AM_CONDITIONAL([CYGWIN], [test "${CYGWIN}" = "yes"])
AM_CONDITIONAL([CARDMOD], [test "${CARDMOD}" = "yes"])
AM_CONDITIONAL([ENABLE_CARDMOD], [test "${enable_cardmod}" = "yes"])
if test "${enable_pedantic}" = "yes"; then
enable_strict="yes";
@ -728,6 +729,7 @@ AC_CONFIG_FILES([
src/tests/regression/Makefile
src/tools/Makefile
src/cardmod/Makefile
src/cardmod/cardmod.inf
win32/Makefile
win32/versioninfo.rc
])
@ -752,6 +754,7 @@ OpenSSL support: ${enable_openssl}
PC/SC support: ${enable_pcsc}
OpenCT support: ${enable_openct}
CT-API support: ${enable_ctapi}
cardmod support: ${enable_cardmod}
PC/SC default provider: ${DEFAULT_PCSC_PROVIDER}
@ -776,7 +779,5 @@ OPENCT_CFLAGS: ${OPENCT_CFLAGS}
OPENCT_LIBS: ${OPENCT_LIBS}
PCSC_CFLAGS: ${PCSC_CFLAGS}
CARDMOD: ${CARDMOD}
EOF

View File

@ -1,30 +1,31 @@
include $(top_srcdir)/win32/ltrc.inc
MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
EXTRA_DIST = Makefile.mak
lib_LTLIBRARIES =
if ENABLE_CARDMOD
lib_LTLIBRARIES = opensc-cardmod@LIBRARY_BITNESS@.la
# Do we need this on bin? Why can't we
# put it in dedicated directory
dist_sbin_SCRIPTS = cardmod.inf cardmod-westcos.reg
else
dist_noinst_DATA = cardmod.inf cardmod-westcos.reg
endif
INCLUDES = -I$(top_builddir)/src/include \
-I$(top_srcdir)/src/common \
-I$(top_srcdir)/src/libopensc
opensc_cardmod_la_SOURCES = cardmod.c cardmod.exports
opensc_cardmod_la_LIBADD = $(LTLIB_LIBS) \
$(top_builddir)/src/libopensc/libopensc.la
opensc_cardmod_la_LDFLAGS = $(AM_LDFLAGS) \
opensc_cardmod@LIBRARY_BITNESS@_la_SOURCES = cardmod.c cardmod.exports \
$(top_builddir)/win32/versioninfo.rc
opensc_cardmod@LIBRARY_BITNESS@_la_LIBADD = $(LTLIB_LIBS) \
$(top_builddir)/src/libopensc/libopensc.la \
-lcrypt32
opensc_cardmod@LIBRARY_BITNESS@_la_LDFLAGS = $(AM_LDFLAGS) \
-export-symbols "$(srcdir)/cardmod.exports" \
-module -avoid-version -no-undefined
if CARDMOD
sbin_SCRIPTS = cardmod.inf cardmod-westcos.reg
lib_LTLIBRARIES += opensc-cardmod.la
opensc_cardmod_la_SOURCES += $(top_builddir)/win32/versioninfo.rc
opensc_cardmod_la_LIBADD += -lcrypt32
if ENABLE_CARDMOD
install-exec-hook:
mv "$(DESTDIR)$(libdir)/opensc-cardmod.dll" "$(DESTDIR)$(bindir)/"
else
dist_noinst_SCRIPTS = cardmod.inf cardmod-westcos.reg
mv "$(DESTDIR)$(libdir)/opensc-cardmod@LIBRARY_BITNESS@.dll" "$(DESTDIR)$(bindir)/"
endif

View File

@ -32,8 +32,7 @@
#endif
#include <windows.h>
#include "internal-winscard.h"
#include "cardmod.h"
#include <cardmod.h>
#include <opensc/opensc.h>
#include <opensc/pkcs15.h>
@ -44,20 +43,6 @@
#define NULLSTR(a) (a == NULL ? "<NULL>" : a)
#define NULLWSTR(a) (a == NULL ? L"<NULL>" : a)
#ifndef SCARD_E_INVALID_PARAMETER
#define SCARD_E_INVALID_PARAMETER 0x80100004
#define SCARD_E_NO_MEMORY 0x80100006
#define SCARD_E_UNKNOWN_CARD 0x8010000D
#define SCARD_F_UNKNOWN_ERROR 0x80100014
#define SCARD_E_UNSUPPORTED_FEATURE 0x80100022
#define SCARD_E_FILE_NOT_FOUND 0x80100024
#define SCARD_W_WRONG_CHV 0x8010006B
#endif
typedef struct _BCRYPT_PKCS1_PADDING_INFO {
LPCWSTR pszAlgId;
}BCRYPT_PKCS1_PADDING_INFO;
typedef struct _VENDOR_SPECIFIC
{
BYTE bPinsFreshness;

View File

@ -1,3 +1 @@
DllMain
CardAcquireContext
CardAcquireContext

View File

@ -5,7 +5,7 @@ Class=SmartCard
ClassGuid={990A2BD7-E738-46c7-B26F-1CF8FB9F1391}
Provider=%ProviderName%
CatalogFile=delta.cat
DriverVer=05/02/2010,0.0.1.3
DriverVer=05/02/2010,@OPENSC_VERSION_MAJOR@,@OPENSC_VERSION_MINOR@,@OPENSC_VERSION_FIX@,0
[Manufacturer]
%ProviderName%=Minidriver,NTamd64,NTamd64.6.1,NTx86,NTx86.6.1
@ -145,5 +145,5 @@ MediaDescription="Opensc Smart Card Minidriver Installation Disk"
CardDeviceName="Opensc Minidriver for Smart Card"
SmartCardName="SOFTWARE\Microsoft\Cryptography\Calais\SmartCards\Cev Westcos"
SmartCardNameWOW64="SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais\SmartCards\Cev Westcos"
SmartCardCardModule="opensc-cardmod.dll"
SmartCardCardModule="opensc-cardmod32.dll"
SmartCardCardModule64="opensc-cardmod64.dll"

View File

@ -95,7 +95,7 @@ static const struct _sc_driver_entry internal_card_drivers[] = {
static const struct _sc_driver_entry internal_reader_drivers[] = {
#ifdef ENABLE_PCSC
{ "pcsc", (void *(*)(void)) sc_get_pcsc_driver },
#ifdef HAVE_CARDMOD_H
#ifdef ENABLE_CARDMOD
{ "cardmod", (void *(*)(void)) sc_get_cardmod_driver },
#endif
#endif

View File

@ -1457,12 +1457,7 @@ struct sc_reader_driver * sc_get_pcsc_driver(void)
return &pcsc_drv;
}
/*
*
*/
#ifdef HAVE_CARDMOD_H
#ifdef ENABLE_CARDMOD
#define SCARD_CLASS_SYSTEM 0x7fff
#define SCARD_ATTR_VALUE(Class, Tag) ((((ULONG)(Class)) << 16) | ((ULONG)(Tag)))