New upstream version 1.4.35
This commit is contained in:
parent
a7859a1fbd
commit
651ecec10c
|
@ -150,7 +150,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
/* Set structure elements aligment on bytes
|
||||
* http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html */
|
||||
#if defined(__APPLE__) | defined(sun)
|
||||
#if defined(__APPLE__) | defined(sun) | defined(__NetBSD__)
|
||||
#pragma pack(1)
|
||||
#else
|
||||
#pragma pack(push, 1)
|
||||
|
@ -247,7 +247,7 @@ typedef struct {
|
|||
} PIN_PROPERTIES_STRUCTURE;
|
||||
|
||||
/* restore default structure elements alignment */
|
||||
#if defined(__APPLE__) | defined(sun)
|
||||
#if defined(__APPLE__) | defined(sun) | defined(__NetBSD__)
|
||||
#pragma pack()
|
||||
#else
|
||||
#pragma pack(pop)
|
||||
|
|
|
@ -5,7 +5,6 @@ SUBDIRS = readers examples contrib src
|
|||
EXTRA_DIST = bootstrap ChangeLog SCARDGETATTRIB.txt \
|
||||
README.md \
|
||||
$(AUX_DIST) \
|
||||
m4/ax_pthread.m4 \
|
||||
MacOSX/configure \
|
||||
MacOSX/convert_reader_h.pl \
|
||||
MacOSX/debuglog.h \
|
||||
|
|
|
@ -89,8 +89,7 @@ build_triplet = @build@
|
|||
host_triplet = @host@
|
||||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
|
||||
$(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
|
||||
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
||||
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
|
@ -163,7 +162,7 @@ CSCOPE = cscope
|
|||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in AUTHORS \
|
||||
COPYING ChangeLog INSTALL NEWS ar-lib compile config.guess \
|
||||
config.sub install-sh ltmain.sh missing ylwrap
|
||||
config.sub depcomp install-sh ltmain.sh missing ylwrap
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
|
@ -307,7 +306,6 @@ am__tar = @am__tar@
|
|||
am__untar = @am__untar@
|
||||
ax_pthread_config = @ax_pthread_config@
|
||||
bindir = @bindir@
|
||||
bindir_exp = @bindir_exp@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
|
@ -347,7 +345,6 @@ serialconfdir = @serialconfdir@
|
|||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
sysconfdir_exp = @sysconfdir_exp@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
|
@ -358,7 +355,6 @@ SUBDIRS = readers examples contrib src
|
|||
EXTRA_DIST = bootstrap ChangeLog SCARDGETATTRIB.txt \
|
||||
README.md \
|
||||
$(AUX_DIST) \
|
||||
m4/ax_pthread.m4 \
|
||||
MacOSX/configure \
|
||||
MacOSX/convert_reader_h.pl \
|
||||
MacOSX/debuglog.h \
|
||||
|
|
52
README.md
52
README.md
|
@ -42,8 +42,8 @@ Supported operating systems:
|
|||
See also https://ccid.apdu.fr/ for more information.
|
||||
|
||||
|
||||
Debug informations:
|
||||
===================
|
||||
Debug information:
|
||||
==================
|
||||
|
||||
The driver uses the debug function provided by pcscd. So if pcscd sends
|
||||
its debug to stdout (`pcscd --foreground`) then the CCID driver will also
|
||||
|
@ -55,7 +55,7 @@ The `Info.plist` file is installed, by default, in
|
|||
`/usr/local/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist`
|
||||
or set the environment variable `LIBCCID_ifdLogLevel`.
|
||||
|
||||
The debug level is set in the `ifdLogLevel` field. It is a binary OR
|
||||
The debug level is set in the `ifdLogLevel` field. It is a binary OR
|
||||
combination of 4 different levels.
|
||||
- 1: critical: important error messages
|
||||
- 2: info: informative messages like what reader was detected
|
||||
|
@ -68,7 +68,7 @@ By default the debug level is set to 3 (1 + 2) and correspond to the
|
|||
critical and info levels.
|
||||
|
||||
You have to restart the driver so it reads the configuration file again
|
||||
and use the new debug level value. To restart the driver you just need
|
||||
and uses the new debug level value. To restart the driver you just need
|
||||
to unplug all your CCID readers so the driver is unloaded and then replug
|
||||
your readers. You can also restart pcscd.
|
||||
|
||||
|
@ -91,7 +91,7 @@ combination of 4 different levels.
|
|||
By default the voltage level is set to 0 and corresponds to 5V.
|
||||
|
||||
You have to restart the driver so it reads the configuration file again
|
||||
and use the new voltage level value. To restart the driver you just need
|
||||
and uses the new voltage level value. To restart the driver you just need
|
||||
to unplug all your CCID readers so the driver is unloaded and then replug
|
||||
your readers. You can also restart pcscd.
|
||||
|
||||
|
@ -117,6 +117,48 @@ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|||
History:
|
||||
========
|
||||
|
||||
1.4.35 - 25 July 2021, Ludovic Rousseau
|
||||
- Add support of
|
||||
- ArkSigner Connect2Sign
|
||||
- Circle CCR7115 ICC
|
||||
- Circle CCR7315
|
||||
- Circle CIR215 CL
|
||||
- Circle CIR215 PICC
|
||||
- Circle CIR315
|
||||
- Circle CIR315 (idProduct: 0x3100)
|
||||
- Circle CIR315 CL
|
||||
- Circle CIR315 Dual & 1S
|
||||
- Circle CIR415 CL & 1S
|
||||
- Circle Idaxis SecurePIV
|
||||
- DUALi DE-ABCM6 RFRW
|
||||
- Feitian R701
|
||||
- Generic EMV Smartcard Reader (0x058C:0x9590)
|
||||
- INMAX DWR18 HC
|
||||
- INMAX DWR18 HPC
|
||||
- Identiv Identiv uTrust 4711 F CL + SAM Reader
|
||||
- Identiv uTrust 3721 Contactless Reader
|
||||
- Infocrypt HWDSSL DEVICE
|
||||
- Infocrypt Token++ lite
|
||||
- MK Technology KeyPass D1
|
||||
- SONY Felica RC-S300/P
|
||||
- SONY Felica RC-S300/S
|
||||
- SONY Felica RC-S660/U
|
||||
- SYNNIX CL-2100R
|
||||
- SoloKeys Solo 2
|
||||
- Spyrus Inc PocketVault P-3X (idProduct: 0x3203)
|
||||
- parse: use "ICCD token" for ICCD tokens
|
||||
- Support 4 card slots with Feitian R502 C9
|
||||
- ccid_usb: ask for bNumDataRatesSupported data rates
|
||||
- Solve a performance issue with T=1 and CCID_CLASS_AUTO_PPS_PROP
|
||||
- Fix a possible buffer overflow in T0ProcACK
|
||||
- IFDHSetProtocolParameters: set IFSC/IFSD only for TPDU readers
|
||||
- CCID serial: Reset buffers on failed read
|
||||
- Fix yylex missing symbol
|
||||
- Gemalto pinpad: fix incorrect bEntryValidationCondition for
|
||||
SecurePINVerify and SecurePINModify
|
||||
- Fix bit4id miniLector-EVO pinpad support
|
||||
- The Kobil TriBank reader does NOT support extended APDU
|
||||
|
||||
1.4.34 - 24 January 2021, Ludovic Rousseau
|
||||
- Add support of
|
||||
- ACS ACR1252IMP Reader
|
||||
|
|
|
@ -20,6 +20,492 @@ You have another version of autoconf. It may work, but is not guaranteed to.
|
|||
If you have problems, you may need to regenerate the build system entirely.
|
||||
To do so, use the procedure documented by the package, typically 'autoreconf'.])])
|
||||
|
||||
# ===========================================================================
|
||||
# https://www.gnu.org/software/autoconf-archive/ax_pthread.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# This macro figures out how to build C programs using POSIX threads. It
|
||||
# sets the PTHREAD_LIBS output variable to the threads library and linker
|
||||
# flags, and the PTHREAD_CFLAGS output variable to any special C compiler
|
||||
# flags that are needed. (The user can also force certain compiler
|
||||
# flags/libs to be tested by setting these environment variables.)
|
||||
#
|
||||
# Also sets PTHREAD_CC to any special C compiler that is needed for
|
||||
# multi-threaded programs (defaults to the value of CC otherwise). (This
|
||||
# is necessary on AIX to use the special cc_r compiler alias.)
|
||||
#
|
||||
# NOTE: You are assumed to not only compile your program with these flags,
|
||||
# but also to link with them as well. For example, you might link with
|
||||
# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
|
||||
#
|
||||
# If you are only building threaded programs, you may wish to use these
|
||||
# variables in your default LIBS, CFLAGS, and CC:
|
||||
#
|
||||
# LIBS="$PTHREAD_LIBS $LIBS"
|
||||
# CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
# CC="$PTHREAD_CC"
|
||||
#
|
||||
# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
|
||||
# has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to
|
||||
# that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
|
||||
#
|
||||
# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
|
||||
# PTHREAD_PRIO_INHERIT symbol is defined when compiling with
|
||||
# PTHREAD_CFLAGS.
|
||||
#
|
||||
# ACTION-IF-FOUND is a list of shell commands to run if a threads library
|
||||
# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
|
||||
# is not found. If ACTION-IF-FOUND is not specified, the default action
|
||||
# will define HAVE_PTHREAD.
|
||||
#
|
||||
# Please let the authors know if this macro fails on any platform, or if
|
||||
# you have any other suggestions or comments. This macro was based on work
|
||||
# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
|
||||
# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
|
||||
# Alejandro Forero Cuervo to the autoconf macro repository. We are also
|
||||
# grateful for the helpful feedback of numerous users.
|
||||
#
|
||||
# Updated for Autoconf 2.68 by Daniel Richard G.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
|
||||
# Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation, either version 3 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 24
|
||||
|
||||
AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
|
||||
AC_DEFUN([AX_PTHREAD], [
|
||||
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||
AC_REQUIRE([AC_PROG_CC])
|
||||
AC_REQUIRE([AC_PROG_SED])
|
||||
AC_LANG_PUSH([C])
|
||||
ax_pthread_ok=no
|
||||
|
||||
# We used to check for pthread.h first, but this fails if pthread.h
|
||||
# requires special compiler flags (e.g. on Tru64 or Sequent).
|
||||
# It gets checked for in the link test anyway.
|
||||
|
||||
# First of all, check if the user has set any of the PTHREAD_LIBS,
|
||||
# etcetera environment variables, and if threads linking works using
|
||||
# them:
|
||||
if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
|
||||
ax_pthread_save_CC="$CC"
|
||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
||||
ax_pthread_save_LIBS="$LIBS"
|
||||
AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"])
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS])
|
||||
AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes])
|
||||
AC_MSG_RESULT([$ax_pthread_ok])
|
||||
if test "x$ax_pthread_ok" = "xno"; then
|
||||
PTHREAD_LIBS=""
|
||||
PTHREAD_CFLAGS=""
|
||||
fi
|
||||
CC="$ax_pthread_save_CC"
|
||||
CFLAGS="$ax_pthread_save_CFLAGS"
|
||||
LIBS="$ax_pthread_save_LIBS"
|
||||
fi
|
||||
|
||||
# We must check for the threads library under a number of different
|
||||
# names; the ordering is very important because some systems
|
||||
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
|
||||
# libraries is broken (non-POSIX).
|
||||
|
||||
# Create a list of thread flags to try. Items starting with a "-" are
|
||||
# C compiler flags, and other items are library names, except for "none"
|
||||
# which indicates that we try without any flags at all, and "pthread-config"
|
||||
# which is a program returning the flags for the Pth emulation library.
|
||||
|
||||
ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
|
||||
|
||||
# The ordering *is* (sometimes) important. Some notes on the
|
||||
# individual items follow:
|
||||
|
||||
# pthreads: AIX (must check this before -lpthread)
|
||||
# none: in case threads are in libc; should be tried before -Kthread and
|
||||
# other compiler flags to prevent continual compiler warnings
|
||||
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
|
||||
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64
|
||||
# (Note: HP C rejects this with "bad form for `-t' option")
|
||||
# -pthreads: Solaris/gcc (Note: HP C also rejects)
|
||||
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
|
||||
# doesn't hurt to check since this sometimes defines pthreads and
|
||||
# -D_REENTRANT too), HP C (must be checked before -lpthread, which
|
||||
# is present but should not be used directly; and before -mthreads,
|
||||
# because the compiler interprets this as "-mt" + "-hreads")
|
||||
# -mthreads: Mingw32/gcc, Lynx/gcc
|
||||
# pthread: Linux, etcetera
|
||||
# --thread-safe: KAI C++
|
||||
# pthread-config: use pthread-config program (for GNU Pth library)
|
||||
|
||||
case $host_os in
|
||||
|
||||
freebsd*)
|
||||
|
||||
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
|
||||
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
|
||||
|
||||
ax_pthread_flags="-kthread lthread $ax_pthread_flags"
|
||||
;;
|
||||
|
||||
hpux*)
|
||||
|
||||
# From the cc(1) man page: "[-mt] Sets various -D flags to enable
|
||||
# multi-threading and also sets -lpthread."
|
||||
|
||||
ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
|
||||
;;
|
||||
|
||||
openedition*)
|
||||
|
||||
# IBM z/OS requires a feature-test macro to be defined in order to
|
||||
# enable POSIX threads at all, so give the user a hint if this is
|
||||
# not set. (We don't define these ourselves, as they can affect
|
||||
# other portions of the system API in unpredictable ways.)
|
||||
|
||||
AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING],
|
||||
[
|
||||
# if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
|
||||
AX_PTHREAD_ZOS_MISSING
|
||||
# endif
|
||||
],
|
||||
[AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])])
|
||||
;;
|
||||
|
||||
solaris*)
|
||||
|
||||
# On Solaris (at least, for some versions), libc contains stubbed
|
||||
# (non-functional) versions of the pthreads routines, so link-based
|
||||
# tests will erroneously succeed. (N.B.: The stubs are missing
|
||||
# pthread_cleanup_push, or rather a function called by this macro,
|
||||
# so we could check for that, but who knows whether they'll stub
|
||||
# that too in a future libc.) So we'll check first for the
|
||||
# standard Solaris way of linking pthreads (-mt -lpthread).
|
||||
|
||||
ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags"
|
||||
;;
|
||||
esac
|
||||
|
||||
# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
|
||||
|
||||
AS_IF([test "x$GCC" = "xyes"],
|
||||
[ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"])
|
||||
|
||||
# The presence of a feature test macro requesting re-entrant function
|
||||
# definitions is, on some systems, a strong hint that pthreads support is
|
||||
# correctly enabled
|
||||
|
||||
case $host_os in
|
||||
darwin* | hpux* | linux* | osf* | solaris*)
|
||||
ax_pthread_check_macro="_REENTRANT"
|
||||
;;
|
||||
|
||||
aix*)
|
||||
ax_pthread_check_macro="_THREAD_SAFE"
|
||||
;;
|
||||
|
||||
*)
|
||||
ax_pthread_check_macro="--"
|
||||
;;
|
||||
esac
|
||||
AS_IF([test "x$ax_pthread_check_macro" = "x--"],
|
||||
[ax_pthread_check_cond=0],
|
||||
[ax_pthread_check_cond="!defined($ax_pthread_check_macro)"])
|
||||
|
||||
# Are we compiling with Clang?
|
||||
|
||||
AC_CACHE_CHECK([whether $CC is Clang],
|
||||
[ax_cv_PTHREAD_CLANG],
|
||||
[ax_cv_PTHREAD_CLANG=no
|
||||
# Note that Autoconf sets GCC=yes for Clang as well as GCC
|
||||
if test "x$GCC" = "xyes"; then
|
||||
AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG],
|
||||
[/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
|
||||
# if defined(__clang__) && defined(__llvm__)
|
||||
AX_PTHREAD_CC_IS_CLANG
|
||||
# endif
|
||||
],
|
||||
[ax_cv_PTHREAD_CLANG=yes])
|
||||
fi
|
||||
])
|
||||
ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
|
||||
|
||||
ax_pthread_clang_warning=no
|
||||
|
||||
# Clang needs special handling, because older versions handle the -pthread
|
||||
# option in a rather... idiosyncratic way
|
||||
|
||||
if test "x$ax_pthread_clang" = "xyes"; then
|
||||
|
||||
# Clang takes -pthread; it has never supported any other flag
|
||||
|
||||
# (Note 1: This will need to be revisited if a system that Clang
|
||||
# supports has POSIX threads in a separate library. This tends not
|
||||
# to be the way of modern systems, but it's conceivable.)
|
||||
|
||||
# (Note 2: On some systems, notably Darwin, -pthread is not needed
|
||||
# to get POSIX threads support; the API is always present and
|
||||
# active. We could reasonably leave PTHREAD_CFLAGS empty. But
|
||||
# -pthread does define _REENTRANT, and while the Darwin headers
|
||||
# ignore this macro, third-party headers might not.)
|
||||
|
||||
PTHREAD_CFLAGS="-pthread"
|
||||
PTHREAD_LIBS=
|
||||
|
||||
ax_pthread_ok=yes
|
||||
|
||||
# However, older versions of Clang make a point of warning the user
|
||||
# that, in an invocation where only linking and no compilation is
|
||||
# taking place, the -pthread option has no effect ("argument unused
|
||||
# during compilation"). They expect -pthread to be passed in only
|
||||
# when source code is being compiled.
|
||||
#
|
||||
# Problem is, this is at odds with the way Automake and most other
|
||||
# C build frameworks function, which is that the same flags used in
|
||||
# compilation (CFLAGS) are also used in linking. Many systems
|
||||
# supported by AX_PTHREAD require exactly this for POSIX threads
|
||||
# support, and in fact it is often not straightforward to specify a
|
||||
# flag that is used only in the compilation phase and not in
|
||||
# linking. Such a scenario is extremely rare in practice.
|
||||
#
|
||||
# Even though use of the -pthread flag in linking would only print
|
||||
# a warning, this can be a nuisance for well-run software projects
|
||||
# that build with -Werror. So if the active version of Clang has
|
||||
# this misfeature, we search for an option to squash it.
|
||||
|
||||
AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread],
|
||||
[ax_cv_PTHREAD_CLANG_NO_WARN_FLAG],
|
||||
[ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
|
||||
# Create an alternate version of $ac_link that compiles and
|
||||
# links in two steps (.c -> .o, .o -> exe) instead of one
|
||||
# (.c -> exe), because the warning occurs only in the second
|
||||
# step
|
||||
ax_pthread_save_ac_link="$ac_link"
|
||||
ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
|
||||
ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"`
|
||||
ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
|
||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
||||
for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
|
||||
AS_IF([test "x$ax_pthread_try" = "xunknown"], [break])
|
||||
CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
|
||||
ac_link="$ax_pthread_save_ac_link"
|
||||
AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
|
||||
[ac_link="$ax_pthread_2step_ac_link"
|
||||
AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
|
||||
[break])
|
||||
])
|
||||
done
|
||||
ac_link="$ax_pthread_save_ac_link"
|
||||
CFLAGS="$ax_pthread_save_CFLAGS"
|
||||
AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no])
|
||||
ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
|
||||
])
|
||||
|
||||
case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
|
||||
no | unknown) ;;
|
||||
*) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
|
||||
esac
|
||||
|
||||
fi # $ax_pthread_clang = yes
|
||||
|
||||
if test "x$ax_pthread_ok" = "xno"; then
|
||||
for ax_pthread_try_flag in $ax_pthread_flags; do
|
||||
|
||||
case $ax_pthread_try_flag in
|
||||
none)
|
||||
AC_MSG_CHECKING([whether pthreads work without any flags])
|
||||
;;
|
||||
|
||||
-mt,pthread)
|
||||
AC_MSG_CHECKING([whether pthreads work with -mt -lpthread])
|
||||
PTHREAD_CFLAGS="-mt"
|
||||
PTHREAD_LIBS="-lpthread"
|
||||
;;
|
||||
|
||||
-*)
|
||||
AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag])
|
||||
PTHREAD_CFLAGS="$ax_pthread_try_flag"
|
||||
;;
|
||||
|
||||
pthread-config)
|
||||
AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no])
|
||||
AS_IF([test "x$ax_pthread_config" = "xno"], [continue])
|
||||
PTHREAD_CFLAGS="`pthread-config --cflags`"
|
||||
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
|
||||
;;
|
||||
|
||||
*)
|
||||
AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag])
|
||||
PTHREAD_LIBS="-l$ax_pthread_try_flag"
|
||||
;;
|
||||
esac
|
||||
|
||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
||||
ax_pthread_save_LIBS="$LIBS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
|
||||
# Check for various functions. We must include pthread.h,
|
||||
# since some functions may be macros. (On the Sequent, we
|
||||
# need a special flag -Kthread to make this header compile.)
|
||||
# We check for pthread_join because it is in -lpthread on IRIX
|
||||
# while pthread_create is in libc. We check for pthread_attr_init
|
||||
# due to DEC craziness with -lpthreads. We check for
|
||||
# pthread_cleanup_push because it is one of the few pthread
|
||||
# functions on Solaris that doesn't have a non-functional libc stub.
|
||||
# We try pthread_create on general principles.
|
||||
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
|
||||
# if $ax_pthread_check_cond
|
||||
# error "$ax_pthread_check_macro must be defined"
|
||||
# endif
|
||||
static void routine(void *a) { a = 0; }
|
||||
static void *start_routine(void *a) { return a; }],
|
||||
[pthread_t th; pthread_attr_t attr;
|
||||
pthread_create(&th, 0, start_routine, 0);
|
||||
pthread_join(th, 0);
|
||||
pthread_attr_init(&attr);
|
||||
pthread_cleanup_push(routine, 0);
|
||||
pthread_cleanup_pop(0) /* ; */])],
|
||||
[ax_pthread_ok=yes],
|
||||
[])
|
||||
|
||||
CFLAGS="$ax_pthread_save_CFLAGS"
|
||||
LIBS="$ax_pthread_save_LIBS"
|
||||
|
||||
AC_MSG_RESULT([$ax_pthread_ok])
|
||||
AS_IF([test "x$ax_pthread_ok" = "xyes"], [break])
|
||||
|
||||
PTHREAD_LIBS=""
|
||||
PTHREAD_CFLAGS=""
|
||||
done
|
||||
fi
|
||||
|
||||
# Various other checks:
|
||||
if test "x$ax_pthread_ok" = "xyes"; then
|
||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
||||
ax_pthread_save_LIBS="$LIBS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
|
||||
# Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
|
||||
AC_CACHE_CHECK([for joinable pthread attribute],
|
||||
[ax_cv_PTHREAD_JOINABLE_ATTR],
|
||||
[ax_cv_PTHREAD_JOINABLE_ATTR=unknown
|
||||
for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
|
||||
[int attr = $ax_pthread_attr; return attr /* ; */])],
|
||||
[ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break],
|
||||
[])
|
||||
done
|
||||
])
|
||||
AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
|
||||
test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
|
||||
test "x$ax_pthread_joinable_attr_defined" != "xyes"],
|
||||
[AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE],
|
||||
[$ax_cv_PTHREAD_JOINABLE_ATTR],
|
||||
[Define to necessary symbol if this constant
|
||||
uses a non-standard name on your system.])
|
||||
ax_pthread_joinable_attr_defined=yes
|
||||
])
|
||||
|
||||
AC_CACHE_CHECK([whether more special flags are required for pthreads],
|
||||
[ax_cv_PTHREAD_SPECIAL_FLAGS],
|
||||
[ax_cv_PTHREAD_SPECIAL_FLAGS=no
|
||||
case $host_os in
|
||||
solaris*)
|
||||
ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
|
||||
;;
|
||||
esac
|
||||
])
|
||||
AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
|
||||
test "x$ax_pthread_special_flags_added" != "xyes"],
|
||||
[PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
|
||||
ax_pthread_special_flags_added=yes])
|
||||
|
||||
AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
|
||||
[ax_cv_PTHREAD_PRIO_INHERIT],
|
||||
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],
|
||||
[[int i = PTHREAD_PRIO_INHERIT;]])],
|
||||
[ax_cv_PTHREAD_PRIO_INHERIT=yes],
|
||||
[ax_cv_PTHREAD_PRIO_INHERIT=no])
|
||||
])
|
||||
AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
|
||||
test "x$ax_pthread_prio_inherit_defined" != "xyes"],
|
||||
[AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])
|
||||
ax_pthread_prio_inherit_defined=yes
|
||||
])
|
||||
|
||||
CFLAGS="$ax_pthread_save_CFLAGS"
|
||||
LIBS="$ax_pthread_save_LIBS"
|
||||
|
||||
# More AIX lossage: compile with *_r variant
|
||||
if test "x$GCC" != "xyes"; then
|
||||
case $host_os in
|
||||
aix*)
|
||||
AS_CASE(["x/$CC"],
|
||||
[x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6],
|
||||
[#handle absolute path differently from PATH based program lookup
|
||||
AS_CASE(["x$CC"],
|
||||
[x/*],
|
||||
[AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])],
|
||||
[AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])])
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
|
||||
|
||||
AC_SUBST([PTHREAD_LIBS])
|
||||
AC_SUBST([PTHREAD_CFLAGS])
|
||||
AC_SUBST([PTHREAD_CC])
|
||||
|
||||
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
||||
if test "x$ax_pthread_ok" = "xyes"; then
|
||||
ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1])
|
||||
:
|
||||
else
|
||||
ax_pthread_ok=no
|
||||
$2
|
||||
fi
|
||||
AC_LANG_POP
|
||||
])dnl AX_PTHREAD
|
||||
|
||||
# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
|
||||
# serial 12 (pkg-config-0.29.2)
|
||||
|
||||
|
@ -1520,8 +2006,6 @@ AC_SUBST([am__tar])
|
|||
AC_SUBST([am__untar])
|
||||
]) # _AM_PROG_TAR
|
||||
|
||||
m4_include([m4/as-ac-expand.m4])
|
||||
m4_include([m4/ax_pthread.m4])
|
||||
m4_include([m4/libtool.m4])
|
||||
m4_include([m4/ltoptions.m4])
|
||||
m4_include([m4/ltsugar.m4])
|
||||
|
|
|
@ -121,9 +121,6 @@
|
|||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
|
||||
#undef TIME_WITH_SYS_TIME
|
||||
|
||||
/* composite device are seen as multi-slots */
|
||||
#undef USE_COMPOSITE_AS_MULTISLOT
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for ccid 1.4.34.
|
||||
# Generated by GNU Autoconf 2.69 for ccid 1.4.35.
|
||||
#
|
||||
#
|
||||
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
|
||||
|
@ -587,8 +587,8 @@ MAKEFLAGS=
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='ccid'
|
||||
PACKAGE_TARNAME='ccid'
|
||||
PACKAGE_VERSION='1.4.34'
|
||||
PACKAGE_STRING='ccid 1.4.34'
|
||||
PACKAGE_VERSION='1.4.35'
|
||||
PACKAGE_STRING='ccid 1.4.35'
|
||||
PACKAGE_BUGREPORT=''
|
||||
PACKAGE_URL=''
|
||||
|
||||
|
@ -634,8 +634,6 @@ ac_subst_vars='am__EXEEXT_FALSE
|
|||
am__EXEEXT_TRUE
|
||||
LTLIBOBJS
|
||||
LIBOBJS
|
||||
sysconfdir_exp
|
||||
bindir_exp
|
||||
serialconfdir
|
||||
ccidtwindir
|
||||
usbdropdir
|
||||
|
@ -1379,7 +1377,7 @@ if test "$ac_init_help" = "long"; then
|
|||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures ccid 1.4.34 to adapt to many kinds of systems.
|
||||
\`configure' configures ccid 1.4.35 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
|
@ -1450,7 +1448,7 @@ fi
|
|||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of ccid 1.4.34:";;
|
||||
short | recursive ) echo "Configuration of ccid 1.4.35:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
|
@ -1597,7 +1595,7 @@ fi
|
|||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
ccid configure 1.4.34
|
||||
ccid configure 1.4.35
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
|
@ -2016,7 +2014,7 @@ cat >config.log <<_ACEOF
|
|||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by ccid $as_me 1.4.34, which was
|
||||
It was created by ccid $as_me 1.4.35, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
|
@ -2875,7 +2873,7 @@ fi
|
|||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='ccid'
|
||||
VERSION='1.4.34'
|
||||
VERSION='1.4.35'
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
|
@ -12787,118 +12785,6 @@ CC=$lt_save_CC
|
|||
|
||||
|
||||
# Checks for header files.
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
|
||||
$as_echo_n "checking for ANSI C header files... " >&6; }
|
||||
if ${ac_cv_header_stdc+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <float.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_compile "$LINENO"; then :
|
||||
ac_cv_header_stdc=yes
|
||||
else
|
||||
ac_cv_header_stdc=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
|
||||
if test $ac_cv_header_stdc = yes; then
|
||||
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <string.h>
|
||||
|
||||
_ACEOF
|
||||
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
||||
$EGREP "memchr" >/dev/null 2>&1; then :
|
||||
|
||||
else
|
||||
ac_cv_header_stdc=no
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
fi
|
||||
|
||||
if test $ac_cv_header_stdc = yes; then
|
||||
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <stdlib.h>
|
||||
|
||||
_ACEOF
|
||||
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
||||
$EGREP "free" >/dev/null 2>&1; then :
|
||||
|
||||
else
|
||||
ac_cv_header_stdc=no
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
fi
|
||||
|
||||
if test $ac_cv_header_stdc = yes; then
|
||||
# /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
|
||||
if test "$cross_compiling" = yes; then :
|
||||
:
|
||||
else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
#if ((' ' & 0x0FF) == 0x020)
|
||||
# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
|
||||
# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
|
||||
#else
|
||||
# define ISLOWER(c) \
|
||||
(('a' <= (c) && (c) <= 'i') \
|
||||
|| ('j' <= (c) && (c) <= 'r') \
|
||||
|| ('s' <= (c) && (c) <= 'z'))
|
||||
# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
|
||||
#endif
|
||||
|
||||
#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
|
||||
int
|
||||
main ()
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 256; i++)
|
||||
if (XOR (islower (i), ISLOWER (i))
|
||||
|| toupper (i) != TOUPPER (i))
|
||||
return 2;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_run "$LINENO"; then :
|
||||
|
||||
else
|
||||
ac_cv_header_stdc=no
|
||||
fi
|
||||
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
|
||||
conftest.$ac_objext conftest.beam conftest.$ac_ext
|
||||
fi
|
||||
|
||||
fi
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
|
||||
$as_echo "$ac_cv_header_stdc" >&6; }
|
||||
if test $ac_cv_header_stdc = yes; then
|
||||
|
||||
$as_echo "#define STDC_HEADERS 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
for ac_header in errno.h fcntl.h stdlib.h unistd.h termios.h string.h sys/time.h sys/types.h stdarg.h arpa/inet.h stdio.h
|
||||
do :
|
||||
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||
|
@ -13008,41 +12894,6 @@ _ACEOF
|
|||
|
||||
fi
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
|
||||
$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
|
||||
if ${ac_cv_header_time+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <time.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
if ((struct tm *) 0)
|
||||
return 0;
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_compile "$LINENO"; then :
|
||||
ac_cv_header_time=yes
|
||||
else
|
||||
ac_cv_header_time=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5
|
||||
$as_echo "$ac_cv_header_time" >&6; }
|
||||
if test $ac_cv_header_time = yes; then
|
||||
|
||||
$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
|
||||
# Checks for library functions.
|
||||
for ac_func in select strerror strncpy memcpy strlcpy strlcat
|
||||
|
@ -13467,6 +13318,8 @@ fi
|
|||
if test "${multithread}" != no ; then
|
||||
|
||||
|
||||
|
||||
|
||||
ac_ext=c
|
||||
ac_cpp='$CPP $CPPFLAGS'
|
||||
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||
|
@ -13476,19 +13329,23 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
|||
ax_pthread_ok=no
|
||||
|
||||
# We used to check for pthread.h first, but this fails if pthread.h
|
||||
# requires special compiler flags (e.g. on True64 or Sequent).
|
||||
# requires special compiler flags (e.g. on Tru64 or Sequent).
|
||||
# It gets checked for in the link test anyway.
|
||||
|
||||
# First of all, check if the user has set any of the PTHREAD_LIBS,
|
||||
# etcetera environment variables, and if threads linking works using
|
||||
# them:
|
||||
if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
|
||||
save_CFLAGS="$CFLAGS"
|
||||
if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
|
||||
ax_pthread_save_CC="$CC"
|
||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
||||
ax_pthread_save_LIBS="$LIBS"
|
||||
if test "x$PTHREAD_CC" != "x"; then :
|
||||
CC="$PTHREAD_CC"
|
||||
fi
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
save_LIBS="$LIBS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5
|
||||
$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; }
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5
|
||||
$as_echo_n "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; }
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
|
@ -13514,12 +13371,13 @@ rm -f core conftest.err conftest.$ac_objext \
|
|||
conftest$ac_exeext conftest.$ac_ext
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
|
||||
$as_echo "$ax_pthread_ok" >&6; }
|
||||
if test x"$ax_pthread_ok" = xno; then
|
||||
if test "x$ax_pthread_ok" = "xno"; then
|
||||
PTHREAD_LIBS=""
|
||||
PTHREAD_CFLAGS=""
|
||||
fi
|
||||
LIBS="$save_LIBS"
|
||||
CFLAGS="$save_CFLAGS"
|
||||
CC="$ax_pthread_save_CC"
|
||||
CFLAGS="$ax_pthread_save_CFLAGS"
|
||||
LIBS="$ax_pthread_save_LIBS"
|
||||
fi
|
||||
|
||||
# We must check for the threads library under a number of different
|
||||
|
@ -13532,7 +13390,7 @@ fi
|
|||
# which indicates that we try without any flags at all, and "pthread-config"
|
||||
# which is a program returning the flags for the Pth emulation library.
|
||||
|
||||
ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
|
||||
ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
|
||||
|
||||
# The ordering *is* (sometimes) important. Some notes on the
|
||||
# individual items follow:
|
||||
|
@ -13541,51 +13399,257 @@ ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mt
|
|||
# none: in case threads are in libc; should be tried before -Kthread and
|
||||
# other compiler flags to prevent continual compiler warnings
|
||||
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
|
||||
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
|
||||
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
|
||||
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
|
||||
# -pthreads: Solaris/gcc
|
||||
# -mthreads: Mingw32/gcc, Lynx/gcc
|
||||
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64
|
||||
# (Note: HP C rejects this with "bad form for `-t' option")
|
||||
# -pthreads: Solaris/gcc (Note: HP C also rejects)
|
||||
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
|
||||
# doesn't hurt to check since this sometimes defines pthreads too;
|
||||
# also defines -D_REENTRANT)
|
||||
# ... -mt is also the pthreads flag for HP/aCC
|
||||
# doesn't hurt to check since this sometimes defines pthreads and
|
||||
# -D_REENTRANT too), HP C (must be checked before -lpthread, which
|
||||
# is present but should not be used directly; and before -mthreads,
|
||||
# because the compiler interprets this as "-mt" + "-hreads")
|
||||
# -mthreads: Mingw32/gcc, Lynx/gcc
|
||||
# pthread: Linux, etcetera
|
||||
# --thread-safe: KAI C++
|
||||
# pthread-config: use pthread-config program (for GNU Pth library)
|
||||
|
||||
case ${host_os} in
|
||||
case $host_os in
|
||||
|
||||
freebsd*)
|
||||
|
||||
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
|
||||
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
|
||||
|
||||
ax_pthread_flags="-kthread lthread $ax_pthread_flags"
|
||||
;;
|
||||
|
||||
hpux*)
|
||||
|
||||
# From the cc(1) man page: "[-mt] Sets various -D flags to enable
|
||||
# multi-threading and also sets -lpthread."
|
||||
|
||||
ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
|
||||
;;
|
||||
|
||||
openedition*)
|
||||
|
||||
# IBM z/OS requires a feature-test macro to be defined in order to
|
||||
# enable POSIX threads at all, so give the user a hint if this is
|
||||
# not set. (We don't define these ourselves, as they can affect
|
||||
# other portions of the system API in unpredictable ways.)
|
||||
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
# if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
|
||||
AX_PTHREAD_ZOS_MISSING
|
||||
# endif
|
||||
|
||||
_ACEOF
|
||||
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
||||
$EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5
|
||||
$as_echo "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;}
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
;;
|
||||
|
||||
solaris*)
|
||||
|
||||
# On Solaris (at least, for some versions), libc contains stubbed
|
||||
# (non-functional) versions of the pthreads routines, so link-based
|
||||
# tests will erroneously succeed. (We need to link with -pthreads/-mt/
|
||||
# -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
|
||||
# a function called by this macro, so we could check for that, but
|
||||
# who knows whether they'll stub that too in a future libc.) So,
|
||||
# we'll just look for -pthreads and -lpthread first:
|
||||
# tests will erroneously succeed. (N.B.: The stubs are missing
|
||||
# pthread_cleanup_push, or rather a function called by this macro,
|
||||
# so we could check for that, but who knows whether they'll stub
|
||||
# that too in a future libc.) So we'll check first for the
|
||||
# standard Solaris way of linking pthreads (-mt -lpthread).
|
||||
|
||||
ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
|
||||
;;
|
||||
|
||||
darwin*)
|
||||
ax_pthread_flags="-pthread $ax_pthread_flags"
|
||||
ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags"
|
||||
;;
|
||||
esac
|
||||
|
||||
if test x"$ax_pthread_ok" = xno; then
|
||||
for flag in $ax_pthread_flags; do
|
||||
# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
|
||||
|
||||
case $flag in
|
||||
if test "x$GCC" = "xyes"; then :
|
||||
ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"
|
||||
fi
|
||||
|
||||
# The presence of a feature test macro requesting re-entrant function
|
||||
# definitions is, on some systems, a strong hint that pthreads support is
|
||||
# correctly enabled
|
||||
|
||||
case $host_os in
|
||||
darwin* | hpux* | linux* | osf* | solaris*)
|
||||
ax_pthread_check_macro="_REENTRANT"
|
||||
;;
|
||||
|
||||
aix*)
|
||||
ax_pthread_check_macro="_THREAD_SAFE"
|
||||
;;
|
||||
|
||||
*)
|
||||
ax_pthread_check_macro="--"
|
||||
;;
|
||||
esac
|
||||
if test "x$ax_pthread_check_macro" = "x--"; then :
|
||||
ax_pthread_check_cond=0
|
||||
else
|
||||
ax_pthread_check_cond="!defined($ax_pthread_check_macro)"
|
||||
fi
|
||||
|
||||
# Are we compiling with Clang?
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5
|
||||
$as_echo_n "checking whether $CC is Clang... " >&6; }
|
||||
if ${ax_cv_PTHREAD_CLANG+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
ax_cv_PTHREAD_CLANG=no
|
||||
# Note that Autoconf sets GCC=yes for Clang as well as GCC
|
||||
if test "x$GCC" = "xyes"; then
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
|
||||
# if defined(__clang__) && defined(__llvm__)
|
||||
AX_PTHREAD_CC_IS_CLANG
|
||||
# endif
|
||||
|
||||
_ACEOF
|
||||
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
||||
$EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1; then :
|
||||
ax_cv_PTHREAD_CLANG=yes
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
fi
|
||||
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5
|
||||
$as_echo "$ax_cv_PTHREAD_CLANG" >&6; }
|
||||
ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
|
||||
|
||||
ax_pthread_clang_warning=no
|
||||
|
||||
# Clang needs special handling, because older versions handle the -pthread
|
||||
# option in a rather... idiosyncratic way
|
||||
|
||||
if test "x$ax_pthread_clang" = "xyes"; then
|
||||
|
||||
# Clang takes -pthread; it has never supported any other flag
|
||||
|
||||
# (Note 1: This will need to be revisited if a system that Clang
|
||||
# supports has POSIX threads in a separate library. This tends not
|
||||
# to be the way of modern systems, but it's conceivable.)
|
||||
|
||||
# (Note 2: On some systems, notably Darwin, -pthread is not needed
|
||||
# to get POSIX threads support; the API is always present and
|
||||
# active. We could reasonably leave PTHREAD_CFLAGS empty. But
|
||||
# -pthread does define _REENTRANT, and while the Darwin headers
|
||||
# ignore this macro, third-party headers might not.)
|
||||
|
||||
PTHREAD_CFLAGS="-pthread"
|
||||
PTHREAD_LIBS=
|
||||
|
||||
ax_pthread_ok=yes
|
||||
|
||||
# However, older versions of Clang make a point of warning the user
|
||||
# that, in an invocation where only linking and no compilation is
|
||||
# taking place, the -pthread option has no effect ("argument unused
|
||||
# during compilation"). They expect -pthread to be passed in only
|
||||
# when source code is being compiled.
|
||||
#
|
||||
# Problem is, this is at odds with the way Automake and most other
|
||||
# C build frameworks function, which is that the same flags used in
|
||||
# compilation (CFLAGS) are also used in linking. Many systems
|
||||
# supported by AX_PTHREAD require exactly this for POSIX threads
|
||||
# support, and in fact it is often not straightforward to specify a
|
||||
# flag that is used only in the compilation phase and not in
|
||||
# linking. Such a scenario is extremely rare in practice.
|
||||
#
|
||||
# Even though use of the -pthread flag in linking would only print
|
||||
# a warning, this can be a nuisance for well-run software projects
|
||||
# that build with -Werror. So if the active version of Clang has
|
||||
# this misfeature, we search for an option to squash it.
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5
|
||||
$as_echo_n "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; }
|
||||
if ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
|
||||
# Create an alternate version of $ac_link that compiles and
|
||||
# links in two steps (.c -> .o, .o -> exe) instead of one
|
||||
# (.c -> exe), because the warning occurs only in the second
|
||||
# step
|
||||
ax_pthread_save_ac_link="$ac_link"
|
||||
ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
|
||||
ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"`
|
||||
ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
|
||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
||||
for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
|
||||
if test "x$ax_pthread_try" = "xunknown"; then :
|
||||
break
|
||||
fi
|
||||
CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
|
||||
ac_link="$ax_pthread_save_ac_link"
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
int main(void){return 0;}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_link "$LINENO"; then :
|
||||
ac_link="$ax_pthread_2step_ac_link"
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
int main(void){return 0;}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_link "$LINENO"; then :
|
||||
break
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
done
|
||||
ac_link="$ax_pthread_save_ac_link"
|
||||
CFLAGS="$ax_pthread_save_CFLAGS"
|
||||
if test "x$ax_pthread_try" = "x"; then :
|
||||
ax_pthread_try=no
|
||||
fi
|
||||
ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
|
||||
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5
|
||||
$as_echo "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; }
|
||||
|
||||
case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
|
||||
no | unknown) ;;
|
||||
*) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
|
||||
esac
|
||||
|
||||
fi # $ax_pthread_clang = yes
|
||||
|
||||
if test "x$ax_pthread_ok" = "xno"; then
|
||||
for ax_pthread_try_flag in $ax_pthread_flags; do
|
||||
|
||||
case $ax_pthread_try_flag in
|
||||
none)
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5
|
||||
$as_echo_n "checking whether pthreads work without any flags... " >&6; }
|
||||
;;
|
||||
|
||||
-mt,pthread)
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with -mt -lpthread" >&5
|
||||
$as_echo_n "checking whether pthreads work with -mt -lpthread... " >&6; }
|
||||
PTHREAD_CFLAGS="-mt"
|
||||
PTHREAD_LIBS="-lpthread"
|
||||
;;
|
||||
|
||||
-*)
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5
|
||||
$as_echo_n "checking whether pthreads work with $flag... " >&6; }
|
||||
PTHREAD_CFLAGS="$flag"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5
|
||||
$as_echo_n "checking whether pthreads work with $ax_pthread_try_flag... " >&6; }
|
||||
PTHREAD_CFLAGS="$ax_pthread_try_flag"
|
||||
;;
|
||||
|
||||
pthread-config)
|
||||
|
@ -13627,22 +13691,24 @@ $as_echo "no" >&6; }
|
|||
fi
|
||||
|
||||
|
||||
if test x"$ax_pthread_config" = xno; then continue; fi
|
||||
if test "x$ax_pthread_config" = "xno"; then :
|
||||
continue
|
||||
fi
|
||||
PTHREAD_CFLAGS="`pthread-config --cflags`"
|
||||
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
|
||||
;;
|
||||
|
||||
*)
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5
|
||||
$as_echo_n "checking for the pthreads library -l$flag... " >&6; }
|
||||
PTHREAD_LIBS="-l$flag"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5
|
||||
$as_echo_n "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; }
|
||||
PTHREAD_LIBS="-l$ax_pthread_try_flag"
|
||||
;;
|
||||
esac
|
||||
|
||||
save_LIBS="$LIBS"
|
||||
save_CFLAGS="$CFLAGS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
||||
ax_pthread_save_LIBS="$LIBS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
|
||||
# Check for various functions. We must include pthread.h,
|
||||
# since some functions may be macros. (On the Sequent, we
|
||||
|
@ -13653,9 +13719,13 @@ $as_echo_n "checking for the pthreads library -l$flag... " >&6; }
|
|||
# pthread_cleanup_push because it is one of the few pthread
|
||||
# functions on Solaris that doesn't have a non-functional libc stub.
|
||||
# We try pthread_create on general principles.
|
||||
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <pthread.h>
|
||||
# if $ax_pthread_check_cond
|
||||
# error "$ax_pthread_check_macro must be defined"
|
||||
# endif
|
||||
static void routine(void *a) { a = 0; }
|
||||
static void *start_routine(void *a) { return a; }
|
||||
int
|
||||
|
@ -13677,14 +13747,14 @@ fi
|
|||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
|
||||
LIBS="$save_LIBS"
|
||||
CFLAGS="$save_CFLAGS"
|
||||
CFLAGS="$ax_pthread_save_CFLAGS"
|
||||
LIBS="$ax_pthread_save_LIBS"
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
|
||||
$as_echo "$ax_pthread_ok" >&6; }
|
||||
if test "x$ax_pthread_ok" = xyes; then
|
||||
break;
|
||||
fi
|
||||
if test "x$ax_pthread_ok" = "xyes"; then :
|
||||
break
|
||||
fi
|
||||
|
||||
PTHREAD_LIBS=""
|
||||
PTHREAD_CFLAGS=""
|
||||
|
@ -13692,74 +13762,82 @@ done
|
|||
fi
|
||||
|
||||
# Various other checks:
|
||||
if test "x$ax_pthread_ok" = xyes; then
|
||||
save_LIBS="$LIBS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
save_CFLAGS="$CFLAGS"
|
||||
if test "x$ax_pthread_ok" = "xyes"; then
|
||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
||||
ax_pthread_save_LIBS="$LIBS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
|
||||
# Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
|
||||
$as_echo_n "checking for joinable pthread attribute... " >&6; }
|
||||
attr_name=unknown
|
||||
for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
if ${ax_cv_PTHREAD_JOINABLE_ATTR+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
ax_cv_PTHREAD_JOINABLE_ATTR=unknown
|
||||
for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <pthread.h>
|
||||
int
|
||||
main ()
|
||||
{
|
||||
int attr = $attr; return attr /* ; */
|
||||
int attr = $ax_pthread_attr; return attr /* ; */
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_link "$LINENO"; then :
|
||||
attr_name=$attr; break
|
||||
ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
done
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5
|
||||
$as_echo "$attr_name" >&6; }
|
||||
if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
|
||||
done
|
||||
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5
|
||||
$as_echo "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; }
|
||||
if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
|
||||
test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
|
||||
test "x$ax_pthread_joinable_attr_defined" != "xyes"; then :
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define PTHREAD_CREATE_JOINABLE $attr_name
|
||||
#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
ax_pthread_joinable_attr_defined=yes
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5
|
||||
$as_echo_n "checking if more special flags are required for pthreads... " >&6; }
|
||||
flag=no
|
||||
case ${host_os} in
|
||||
aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
|
||||
osf* | hpux*) flag="-D_REENTRANT";;
|
||||
solaris*)
|
||||
if test "$GCC" = "yes"; then
|
||||
flag="-D_REENTRANT"
|
||||
else
|
||||
flag="-mt -D_REENTRANT"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5
|
||||
$as_echo "${flag}" >&6; }
|
||||
if test "x$flag" != xno; then
|
||||
PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
|
||||
fi
|
||||
fi
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5
|
||||
$as_echo_n "checking whether more special flags are required for pthreads... " >&6; }
|
||||
if ${ax_cv_PTHREAD_SPECIAL_FLAGS+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
ax_cv_PTHREAD_SPECIAL_FLAGS=no
|
||||
case $host_os in
|
||||
solaris*)
|
||||
ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
|
||||
;;
|
||||
esac
|
||||
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5
|
||||
$as_echo "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; }
|
||||
if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
|
||||
test "x$ax_pthread_special_flags_added" != "xyes"; then :
|
||||
PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
|
||||
ax_pthread_special_flags_added=yes
|
||||
fi
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5
|
||||
$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; }
|
||||
if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
#include <pthread.h>
|
||||
#include <pthread.h>
|
||||
int
|
||||
main ()
|
||||
{
|
||||
|
@ -13779,18 +13857,32 @@ rm -f core conftest.err conftest.$ac_objext \
|
|||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5
|
||||
$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; }
|
||||
if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"; then :
|
||||
if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
|
||||
test "x$ax_pthread_prio_inherit_defined" != "xyes"; then :
|
||||
|
||||
$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h
|
||||
|
||||
ax_pthread_prio_inherit_defined=yes
|
||||
|
||||
fi
|
||||
|
||||
LIBS="$save_LIBS"
|
||||
CFLAGS="$save_CFLAGS"
|
||||
CFLAGS="$ax_pthread_save_CFLAGS"
|
||||
LIBS="$ax_pthread_save_LIBS"
|
||||
|
||||
# More AIX lossage: must compile with xlc_r or cc_r
|
||||
if test x"$GCC" != xyes; then
|
||||
for ac_prog in xlc_r cc_r
|
||||
# More AIX lossage: compile with *_r variant
|
||||
if test "x$GCC" != "xyes"; then
|
||||
case $host_os in
|
||||
aix*)
|
||||
case "x/$CC" in #(
|
||||
x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) :
|
||||
#handle absolute path differently from PATH based program lookup
|
||||
case "x$CC" in #(
|
||||
x/*) :
|
||||
if as_fn_executable_p ${CC}_r; then :
|
||||
PTHREAD_CC="${CC}_r"
|
||||
fi ;; #(
|
||||
*) :
|
||||
for ac_prog in ${CC}_r
|
||||
do
|
||||
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
||||
set dummy $ac_prog; ac_word=$2
|
||||
|
@ -13831,21 +13923,25 @@ fi
|
|||
|
||||
test -n "$PTHREAD_CC" && break
|
||||
done
|
||||
test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}"
|
||||
|
||||
else
|
||||
PTHREAD_CC=$CC
|
||||
test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
|
||||
;;
|
||||
esac ;; #(
|
||||
*) :
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
else
|
||||
PTHREAD_CC="$CC"
|
||||
fi
|
||||
|
||||
test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
||||
if test x"$ax_pthread_ok" = xyes; then
|
||||
if test "x$ax_pthread_ok" = "xyes"; then
|
||||
|
||||
$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
|
||||
|
||||
|
@ -14080,71 +14176,11 @@ fi
|
|||
|
||||
|
||||
|
||||
EXP_VAR=bindir_exp
|
||||
FROM_VAR=$bindir
|
||||
|
||||
prefix_save=$prefix
|
||||
exec_prefix_save=$exec_prefix
|
||||
|
||||
if test "x$prefix" = "xNONE"; then
|
||||
prefix="$ac_default_prefix"
|
||||
fi
|
||||
if test "x$exec_prefix" = "xNONE"; then
|
||||
exec_prefix=$prefix
|
||||
fi
|
||||
|
||||
full_var="$FROM_VAR"
|
||||
while true; do
|
||||
new_full_var="`eval echo $full_var`"
|
||||
if test "x$new_full_var" = "x$full_var"; then break; fi
|
||||
full_var=$new_full_var
|
||||
done
|
||||
|
||||
full_var=$new_full_var
|
||||
bindir_exp="$full_var"
|
||||
|
||||
|
||||
prefix=$prefix_save
|
||||
exec_prefix=$exec_prefix_save
|
||||
|
||||
|
||||
EXP_VAR=sysconfdir_exp
|
||||
FROM_VAR=$sysconfdir
|
||||
|
||||
prefix_save=$prefix
|
||||
exec_prefix_save=$exec_prefix
|
||||
|
||||
if test "x$prefix" = "xNONE"; then
|
||||
prefix="$ac_default_prefix"
|
||||
fi
|
||||
if test "x$exec_prefix" = "xNONE"; then
|
||||
exec_prefix=$prefix
|
||||
fi
|
||||
|
||||
full_var="$FROM_VAR"
|
||||
while true; do
|
||||
new_full_var="`eval echo $full_var`"
|
||||
if test "x$new_full_var" = "x$full_var"; then break; fi
|
||||
full_var=$new_full_var
|
||||
done
|
||||
|
||||
full_var=$new_full_var
|
||||
sysconfdir_exp="$full_var"
|
||||
|
||||
|
||||
prefix=$prefix_save
|
||||
exec_prefix=$exec_prefix_save
|
||||
|
||||
|
||||
cat << EOF
|
||||
|
||||
libccid has been configured with following options:
|
||||
|
||||
Version: ${PACKAGE_VERSION}
|
||||
User binaries: $(eval eval eval echo "${bindir_exp}")
|
||||
Configuration files: $(eval eval eval echo "${sysconfdir_exp}")
|
||||
|
||||
|
||||
Host: ${host}
|
||||
Compiler: ${CC}
|
||||
Preprocessor flags: ${CPPFLAGS}
|
||||
|
@ -14729,7 +14765,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
|||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by ccid $as_me 1.4.34, which was
|
||||
This file was extended by ccid $as_me 1.4.35, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
@ -14795,7 +14831,7 @@ _ACEOF
|
|||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
ccid config.status 1.4.34
|
||||
ccid config.status 1.4.35
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
|
10
configure.ac
10
configure.ac
|
@ -4,7 +4,7 @@
|
|||
# Require autoconf 2.61
|
||||
AC_PREREQ([2.69])
|
||||
|
||||
AC_INIT([ccid],[1.4.34])
|
||||
AC_INIT([ccid],[1.4.35])
|
||||
AC_CONFIG_SRCDIR(src/ifdhandler.c)
|
||||
AC_CONFIG_AUX_DIR([.])
|
||||
AM_INIT_AUTOMAKE(1.8 dist-bzip2 no-dist-gzip subdir-objects foreign)
|
||||
|
@ -66,14 +66,12 @@ LT_INIT
|
|||
AC_SUBST(LIBTOOL_DEPS)
|
||||
|
||||
# Checks for header files.
|
||||
AC_HEADER_STDC
|
||||
AC_CHECK_HEADERS(errno.h fcntl.h stdlib.h unistd.h termios.h string.h sys/time.h sys/types.h stdarg.h arpa/inet.h stdio.h,,
|
||||
[AC_MSG_ERROR([some header files not found])])
|
||||
|
||||
# Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_CONST
|
||||
AC_TYPE_SIZE_T
|
||||
AC_HEADER_TIME
|
||||
|
||||
# Checks for library functions.
|
||||
AC_CHECK_FUNCS(select strerror strncpy memcpy strlcpy strlcat)
|
||||
|
@ -289,18 +287,12 @@ AC_SUBST(bundle)
|
|||
AC_SUBST(usbdropdir)
|
||||
AC_SUBST(ccidtwindir)
|
||||
AC_SUBST(serialconfdir)
|
||||
AS_AC_EXPAND(bindir_exp,$bindir)
|
||||
AS_AC_EXPAND(sysconfdir_exp,$sysconfdir)
|
||||
|
||||
cat << EOF
|
||||
|
||||
libccid has been configured with following options:
|
||||
|
||||
Version: ${PACKAGE_VERSION}
|
||||
User binaries: $(eval eval eval echo "${bindir_exp}")
|
||||
Configuration files: $(eval eval eval echo "${sysconfdir_exp}")
|
||||
|
||||
|
||||
Host: ${host}
|
||||
Compiler: ${CC}
|
||||
Preprocessor flags: ${CPPFLAGS}
|
||||
|
|
|
@ -92,8 +92,7 @@ host_triplet = @host@
|
|||
noinst_PROGRAMS = Kobil_mIDentity_switch$(EXEEXT)
|
||||
subdir = contrib/Kobil_mIDentity_switch
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
|
||||
$(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
|
||||
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
||||
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
|
@ -280,7 +279,6 @@ am__tar = @am__tar@
|
|||
am__untar = @am__untar@
|
||||
ax_pthread_config = @ax_pthread_config@
|
||||
bindir = @bindir@
|
||||
bindir_exp = @bindir_exp@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
|
@ -320,7 +318,6 @@ serialconfdir = @serialconfdir@
|
|||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
sysconfdir_exp = @sysconfdir_exp@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
|
|
|
@ -89,8 +89,7 @@ build_triplet = @build@
|
|||
host_triplet = @host@
|
||||
subdir = contrib
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
|
||||
$(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
|
||||
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
||||
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
|
@ -280,7 +279,6 @@ am__tar = @am__tar@
|
|||
am__untar = @am__untar@
|
||||
ax_pthread_config = @ax_pthread_config@
|
||||
bindir = @bindir@
|
||||
bindir_exp = @bindir_exp@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
|
@ -320,7 +318,6 @@ serialconfdir = @serialconfdir@
|
|||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
sysconfdir_exp = @sysconfdir_exp@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
|
|
|
@ -91,8 +91,7 @@ host_triplet = @host@
|
|||
noinst_PROGRAMS = RSA_SecurID_getpasswd$(EXEEXT)
|
||||
subdir = contrib/RSA_SecurID
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
|
||||
$(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
|
||||
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
||||
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
|
@ -278,7 +277,6 @@ am__tar = @am__tar@
|
|||
am__untar = @am__untar@
|
||||
ax_pthread_config = @ax_pthread_config@
|
||||
bindir = @bindir@
|
||||
bindir_exp = @bindir_exp@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
|
@ -318,7 +316,6 @@ serialconfdir = @serialconfdir@
|
|||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
sysconfdir_exp = @sysconfdir_exp@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
|
|
|
@ -93,8 +93,7 @@ host_triplet = @host@
|
|||
noinst_PROGRAMS = scardcontrol$(EXEEXT)
|
||||
subdir = examples
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
|
||||
$(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
|
||||
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
||||
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
|
@ -280,7 +279,6 @@ am__tar = @am__tar@
|
|||
am__untar = @am__untar@
|
||||
ax_pthread_config = @ax_pthread_config@
|
||||
bindir = @bindir@
|
||||
bindir_exp = @bindir_exp@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
|
@ -320,7 +318,6 @@ serialconfdir = @serialconfdir@
|
|||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
sysconfdir_exp = @sysconfdir_exp@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
|
|
|
@ -1,43 +0,0 @@
|
|||
dnl as-ac-expand.m4 0.2.0
|
||||
dnl autostars m4 macro for expanding directories using configure's prefix
|
||||
dnl thomas@apestaart.org
|
||||
|
||||
dnl AS_AC_EXPAND(VAR, CONFIGURE_VAR)
|
||||
dnl example
|
||||
dnl AS_AC_EXPAND(SYSCONFDIR, $sysconfdir)
|
||||
dnl will set SYSCONFDIR to /usr/local/etc if prefix=/usr/local
|
||||
|
||||
AC_DEFUN([AS_AC_EXPAND],
|
||||
[
|
||||
EXP_VAR=[$1]
|
||||
FROM_VAR=[$2]
|
||||
|
||||
dnl first expand prefix and exec_prefix if necessary
|
||||
prefix_save=$prefix
|
||||
exec_prefix_save=$exec_prefix
|
||||
|
||||
dnl if no prefix given, then use /usr/local, the default prefix
|
||||
if test "x$prefix" = "xNONE"; then
|
||||
prefix="$ac_default_prefix"
|
||||
fi
|
||||
dnl if no exec_prefix given, then use prefix
|
||||
if test "x$exec_prefix" = "xNONE"; then
|
||||
exec_prefix=$prefix
|
||||
fi
|
||||
|
||||
full_var="$FROM_VAR"
|
||||
dnl loop until it doesn't change anymore
|
||||
while true; do
|
||||
new_full_var="`eval echo $full_var`"
|
||||
if test "x$new_full_var" = "x$full_var"; then break; fi
|
||||
full_var=$new_full_var
|
||||
done
|
||||
|
||||
dnl clean up
|
||||
full_var=$new_full_var
|
||||
AC_SUBST([$1], "$full_var")
|
||||
|
||||
dnl restore prefix and exec_prefix
|
||||
prefix=$prefix_save
|
||||
exec_prefix=$exec_prefix_save
|
||||
])
|
309
m4/ax_pthread.m4
309
m4/ax_pthread.m4
|
@ -1,309 +0,0 @@
|
|||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_pthread.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# This macro figures out how to build C programs using POSIX threads. It
|
||||
# sets the PTHREAD_LIBS output variable to the threads library and linker
|
||||
# flags, and the PTHREAD_CFLAGS output variable to any special C compiler
|
||||
# flags that are needed. (The user can also force certain compiler
|
||||
# flags/libs to be tested by setting these environment variables.)
|
||||
#
|
||||
# Also sets PTHREAD_CC to any special C compiler that is needed for
|
||||
# multi-threaded programs (defaults to the value of CC otherwise). (This
|
||||
# is necessary on AIX to use the special cc_r compiler alias.)
|
||||
#
|
||||
# NOTE: You are assumed to not only compile your program with these flags,
|
||||
# but also link it with them as well. e.g. you should link with
|
||||
# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
|
||||
#
|
||||
# If you are only building threads programs, you may wish to use these
|
||||
# variables in your default LIBS, CFLAGS, and CC:
|
||||
#
|
||||
# LIBS="$PTHREAD_LIBS $LIBS"
|
||||
# CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
# CC="$PTHREAD_CC"
|
||||
#
|
||||
# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
|
||||
# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
|
||||
# (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
|
||||
#
|
||||
# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
|
||||
# PTHREAD_PRIO_INHERIT symbol is defined when compiling with
|
||||
# PTHREAD_CFLAGS.
|
||||
#
|
||||
# ACTION-IF-FOUND is a list of shell commands to run if a threads library
|
||||
# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
|
||||
# is not found. If ACTION-IF-FOUND is not specified, the default action
|
||||
# will define HAVE_PTHREAD.
|
||||
#
|
||||
# Please let the authors know if this macro fails on any platform, or if
|
||||
# you have any other suggestions or comments. This macro was based on work
|
||||
# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
|
||||
# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
|
||||
# Alejandro Forero Cuervo to the autoconf macro repository. We are also
|
||||
# grateful for the helpful feedback of numerous users.
|
||||
#
|
||||
# Updated for Autoconf 2.68 by Daniel Richard G.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
|
||||
# Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation, either version 3 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 18
|
||||
|
||||
AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
|
||||
AC_DEFUN([AX_PTHREAD], [
|
||||
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||
AC_LANG_PUSH([C])
|
||||
ax_pthread_ok=no
|
||||
|
||||
# We used to check for pthread.h first, but this fails if pthread.h
|
||||
# requires special compiler flags (e.g. on True64 or Sequent).
|
||||
# It gets checked for in the link test anyway.
|
||||
|
||||
# First of all, check if the user has set any of the PTHREAD_LIBS,
|
||||
# etcetera environment variables, and if threads linking works using
|
||||
# them:
|
||||
if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
|
||||
save_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
save_LIBS="$LIBS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
|
||||
AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes)
|
||||
AC_MSG_RESULT($ax_pthread_ok)
|
||||
if test x"$ax_pthread_ok" = xno; then
|
||||
PTHREAD_LIBS=""
|
||||
PTHREAD_CFLAGS=""
|
||||
fi
|
||||
LIBS="$save_LIBS"
|
||||
CFLAGS="$save_CFLAGS"
|
||||
fi
|
||||
|
||||
# We must check for the threads library under a number of different
|
||||
# names; the ordering is very important because some systems
|
||||
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
|
||||
# libraries is broken (non-POSIX).
|
||||
|
||||
# Create a list of thread flags to try. Items starting with a "-" are
|
||||
# C compiler flags, and other items are library names, except for "none"
|
||||
# which indicates that we try without any flags at all, and "pthread-config"
|
||||
# which is a program returning the flags for the Pth emulation library.
|
||||
|
||||
ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
|
||||
|
||||
# The ordering *is* (sometimes) important. Some notes on the
|
||||
# individual items follow:
|
||||
|
||||
# pthreads: AIX (must check this before -lpthread)
|
||||
# none: in case threads are in libc; should be tried before -Kthread and
|
||||
# other compiler flags to prevent continual compiler warnings
|
||||
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
|
||||
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
|
||||
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
|
||||
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
|
||||
# -pthreads: Solaris/gcc
|
||||
# -mthreads: Mingw32/gcc, Lynx/gcc
|
||||
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
|
||||
# doesn't hurt to check since this sometimes defines pthreads too;
|
||||
# also defines -D_REENTRANT)
|
||||
# ... -mt is also the pthreads flag for HP/aCC
|
||||
# pthread: Linux, etcetera
|
||||
# --thread-safe: KAI C++
|
||||
# pthread-config: use pthread-config program (for GNU Pth library)
|
||||
|
||||
case ${host_os} in
|
||||
solaris*)
|
||||
|
||||
# On Solaris (at least, for some versions), libc contains stubbed
|
||||
# (non-functional) versions of the pthreads routines, so link-based
|
||||
# tests will erroneously succeed. (We need to link with -pthreads/-mt/
|
||||
# -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
|
||||
# a function called by this macro, so we could check for that, but
|
||||
# who knows whether they'll stub that too in a future libc.) So,
|
||||
# we'll just look for -pthreads and -lpthread first:
|
||||
|
||||
ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
|
||||
;;
|
||||
|
||||
darwin*)
|
||||
ax_pthread_flags="-pthread $ax_pthread_flags"
|
||||
;;
|
||||
esac
|
||||
|
||||
if test x"$ax_pthread_ok" = xno; then
|
||||
for flag in $ax_pthread_flags; do
|
||||
|
||||
case $flag in
|
||||
none)
|
||||
AC_MSG_CHECKING([whether pthreads work without any flags])
|
||||
;;
|
||||
|
||||
-*)
|
||||
AC_MSG_CHECKING([whether pthreads work with $flag])
|
||||
PTHREAD_CFLAGS="$flag"
|
||||
;;
|
||||
|
||||
pthread-config)
|
||||
AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no)
|
||||
if test x"$ax_pthread_config" = xno; then continue; fi
|
||||
PTHREAD_CFLAGS="`pthread-config --cflags`"
|
||||
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
|
||||
;;
|
||||
|
||||
*)
|
||||
AC_MSG_CHECKING([for the pthreads library -l$flag])
|
||||
PTHREAD_LIBS="-l$flag"
|
||||
;;
|
||||
esac
|
||||
|
||||
save_LIBS="$LIBS"
|
||||
save_CFLAGS="$CFLAGS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
|
||||
# Check for various functions. We must include pthread.h,
|
||||
# since some functions may be macros. (On the Sequent, we
|
||||
# need a special flag -Kthread to make this header compile.)
|
||||
# We check for pthread_join because it is in -lpthread on IRIX
|
||||
# while pthread_create is in libc. We check for pthread_attr_init
|
||||
# due to DEC craziness with -lpthreads. We check for
|
||||
# pthread_cleanup_push because it is one of the few pthread
|
||||
# functions on Solaris that doesn't have a non-functional libc stub.
|
||||
# We try pthread_create on general principles.
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
|
||||
static void routine(void *a) { a = 0; }
|
||||
static void *start_routine(void *a) { return a; }],
|
||||
[pthread_t th; pthread_attr_t attr;
|
||||
pthread_create(&th, 0, start_routine, 0);
|
||||
pthread_join(th, 0);
|
||||
pthread_attr_init(&attr);
|
||||
pthread_cleanup_push(routine, 0);
|
||||
pthread_cleanup_pop(0) /* ; */])],
|
||||
[ax_pthread_ok=yes],
|
||||
[])
|
||||
|
||||
LIBS="$save_LIBS"
|
||||
CFLAGS="$save_CFLAGS"
|
||||
|
||||
AC_MSG_RESULT($ax_pthread_ok)
|
||||
if test "x$ax_pthread_ok" = xyes; then
|
||||
break;
|
||||
fi
|
||||
|
||||
PTHREAD_LIBS=""
|
||||
PTHREAD_CFLAGS=""
|
||||
done
|
||||
fi
|
||||
|
||||
# Various other checks:
|
||||
if test "x$ax_pthread_ok" = xyes; then
|
||||
save_LIBS="$LIBS"
|
||||
LIBS="$PTHREAD_LIBS $LIBS"
|
||||
save_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
|
||||
# Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
|
||||
AC_MSG_CHECKING([for joinable pthread attribute])
|
||||
attr_name=unknown
|
||||
for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
|
||||
[int attr = $attr; return attr /* ; */])],
|
||||
[attr_name=$attr; break],
|
||||
[])
|
||||
done
|
||||
AC_MSG_RESULT($attr_name)
|
||||
if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
|
||||
AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
|
||||
[Define to necessary symbol if this constant
|
||||
uses a non-standard name on your system.])
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([if more special flags are required for pthreads])
|
||||
flag=no
|
||||
case ${host_os} in
|
||||
aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
|
||||
osf* | hpux*) flag="-D_REENTRANT";;
|
||||
solaris*)
|
||||
if test "$GCC" = "yes"; then
|
||||
flag="-D_REENTRANT"
|
||||
else
|
||||
flag="-mt -D_REENTRANT"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
AC_MSG_RESULT(${flag})
|
||||
if test "x$flag" != xno; then
|
||||
PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
|
||||
fi
|
||||
|
||||
AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
|
||||
ax_cv_PTHREAD_PRIO_INHERIT, [
|
||||
AC_LINK_IFELSE([
|
||||
AC_LANG_PROGRAM([[#include <pthread.h>]], [[int i = PTHREAD_PRIO_INHERIT;]])],
|
||||
[ax_cv_PTHREAD_PRIO_INHERIT=yes],
|
||||
[ax_cv_PTHREAD_PRIO_INHERIT=no])
|
||||
])
|
||||
AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"],
|
||||
AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], 1, [Have PTHREAD_PRIO_INHERIT.]))
|
||||
|
||||
LIBS="$save_LIBS"
|
||||
CFLAGS="$save_CFLAGS"
|
||||
|
||||
# More AIX lossage: must compile with xlc_r or cc_r
|
||||
if test x"$GCC" != xyes; then
|
||||
AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
|
||||
else
|
||||
PTHREAD_CC=$CC
|
||||
fi
|
||||
else
|
||||
PTHREAD_CC="$CC"
|
||||
fi
|
||||
|
||||
AC_SUBST(PTHREAD_LIBS)
|
||||
AC_SUBST(PTHREAD_CFLAGS)
|
||||
AC_SUBST(PTHREAD_CC)
|
||||
|
||||
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
||||
if test x"$ax_pthread_ok" = xyes; then
|
||||
ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
|
||||
:
|
||||
else
|
||||
ax_pthread_ok=no
|
||||
$2
|
||||
fi
|
||||
AC_LANG_POP
|
||||
])dnl AX_PTHREAD
|
|
@ -89,8 +89,7 @@ build_triplet = @build@
|
|||
host_triplet = @host@
|
||||
subdir = readers
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
|
||||
$(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
|
||||
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
||||
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
|
@ -220,7 +219,6 @@ am__tar = @am__tar@
|
|||
am__untar = @am__untar@
|
||||
ax_pthread_config = @ax_pthread_config@
|
||||
bindir = @bindir@
|
||||
bindir_exp = @bindir_exp@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
|
@ -260,7 +258,6 @@ serialconfdir = @serialconfdir@
|
|||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
sysconfdir_exp = @sysconfdir_exp@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#
|
||||
# List of readers supported by the CCID driver
|
||||
# Generated: 2021-01-20
|
||||
# Generated: 2021-06-22
|
||||
#
|
||||
# DO NOT EDIT BY HAND
|
||||
|
||||
|
@ -192,6 +192,9 @@
|
|||
0x2406:0x5004:appidkey GmbH ID100L-USB-SC-Reader
|
||||
0x2406:0x5006:appidkey GmbH ID60-USB
|
||||
|
||||
# ArkSigner
|
||||
0x33B6:0x0001:ArkSigner Connect2Sign
|
||||
|
||||
# ASK-RFID
|
||||
0x1FD3:0xCC1D:ASK-RFID CPL108
|
||||
|
||||
|
@ -239,10 +242,12 @@
|
|||
0x25DD:0x2361:Bit4id Digital-DNA Key BT
|
||||
0x25DD:0x2362:Bit4id Digital-DNA Key
|
||||
0x25DD:0x2371:Bit4id TokenME EVO v2
|
||||
0x25DD:0x3111:Bit4id miniLector
|
||||
0x25DD:0x3211:Bit4id miniLector AIR EVO
|
||||
0x25DD:0xB001:Bit4id miniLector Blue
|
||||
|
||||
# bit4id
|
||||
0x25DD:0x3111:bit4id miniLector-EVO
|
||||
|
||||
# BIT4ID
|
||||
0x25DD:0x3403:BIT4ID miniLector AIR NFC v3
|
||||
0x25DD:0x3503:BIT4ID mLector AIR DI V3
|
||||
|
@ -307,6 +312,19 @@
|
|||
0x03F0:0x124A:Chicony HP USB Smartcard CCID Keyboard JP
|
||||
0x04F2:0x1469:Chicony HP Skylab USB Smartcard Keyboard
|
||||
|
||||
# Circle
|
||||
0x31AA:0x0224:Circle Idaxis SecurePIV
|
||||
0x31AA:0x1000:Circle CIR115 ICC
|
||||
0x31AA:0x2000:Circle CIR215 PICC
|
||||
0x31AA:0x2001:Circle CIR215 CL
|
||||
0x31AA:0x3000:Circle CIR315 Dual & 1S
|
||||
0x31AA:0x3001:Circle CIR315
|
||||
0x31AA:0x3002:Circle CIR315 CL
|
||||
0x31AA:0x3100:Circle CIR315
|
||||
0x31AA:0x4000:Circle CIR415 CL & 1S
|
||||
0x31AA:0x7001:Circle CCR7115 ICC
|
||||
0x31AA:0x7003:Circle CCR7315
|
||||
|
||||
# COVADIS
|
||||
0x0982:0x0008:COVADIS VEGA-ALPHA
|
||||
0x0982:0x0040:COVADIS Auriga
|
||||
|
@ -326,6 +344,7 @@
|
|||
|
||||
# DUALi
|
||||
0x1DB2:0x0801:DUALi DE-620 Combi
|
||||
0x1DB2:0x080C:DUALi DE-ABCM6 RFRW
|
||||
0x1DB2:0x088B:DUALi DRAGON NFC READER
|
||||
|
||||
# eID_R6 001
|
||||
|
@ -346,6 +365,7 @@
|
|||
0x096E:0x0621:Feitian BLE CCID Dongle
|
||||
0x096E:0x0622:Feitian VR504 VHBR Contactless & Contact Card Reader
|
||||
0x096E:0x0623:Feitian bR500
|
||||
0x096E:0x062E:Feitian R701
|
||||
0x096E:0x0685:Feitian R805
|
||||
0x096E:0x0807:Feitian ePass2003
|
||||
0x096E:0x080F:Feitian eJAVA Token
|
||||
|
@ -405,6 +425,7 @@
|
|||
# Generic
|
||||
0x0BDA:0x0169:Generic USB2.0-CRW
|
||||
0x048D:0x1366:Generic MultiCard Device
|
||||
0x058C:0x9590:Generic EMV Smartcard Reader
|
||||
|
||||
# Generic USB
|
||||
0x076B:0x3A21:Generic USB Smart Card Reader
|
||||
|
@ -472,8 +493,10 @@
|
|||
|
||||
# Identiv
|
||||
0x04E6:0x5612:Identiv uTrust 3720 Contactless Reader
|
||||
0x04E6:0x5613:Identiv uTrust 3721 Contactless Reader
|
||||
0x04E6:0x5713:Identiv CLOUD 2980 F Smart Card Reader
|
||||
0x04E6:0x5724:Identiv Identiv uTrust 4701 F Dual Interface Reader
|
||||
0x04E6:0x5725:Identiv Identiv uTrust 4711 F CL + SAM Reader
|
||||
0x04E6:0x5790:Identiv uTrust 3700 F CL Reader
|
||||
0x04E6:0x5791:Identiv uTrust 3701 F CL Reader
|
||||
0x04E6:0x5811:Identiv uTrust 2900 R Smart Card Reader
|
||||
|
@ -509,10 +532,18 @@
|
|||
# InfoCert
|
||||
0x2FD2:0x0100:InfoCert WirelessKey
|
||||
|
||||
# Infocrypt
|
||||
0x2FB0:0x003A:Infocrypt Token++ lite
|
||||
0x2022:0x016C:Infocrypt HWDSSL DEVICE
|
||||
|
||||
# InfoThink
|
||||
0x1FC9:0x0102:InfoThink IT-102MU Reader
|
||||
0x1403:0x7506:InfoThink IT-500U Reader
|
||||
|
||||
# INMAX
|
||||
0x1403:0x750C:INMAX DWR18 HC
|
||||
0x1403:0x750D:INMAX DWR18 HPC
|
||||
|
||||
# Inside Secure
|
||||
0x2406:0x6300:Inside Secure VaultIC 420 Smart Object
|
||||
0x2406:0x6301:Inside Secure VaultIC 440 Smart Object
|
||||
|
@ -580,6 +611,7 @@
|
|||
|
||||
# MK Technology
|
||||
0x0416:0xC136:MK Technology KeyPass S1
|
||||
0x0416:0xC137:MK Technology KeyPass D1
|
||||
|
||||
# Morpho
|
||||
0x079B:0x0026:Morpho MSO350/MSO351 Fingerprint Sensor & SmartCard Reader
|
||||
|
@ -707,6 +739,14 @@
|
|||
# Softforum Co., Ltd
|
||||
0x04E8:0x0007:Softforum Co., Ltd XecureHSM
|
||||
|
||||
# SoloKeys
|
||||
0x1209:0xBEEE:SoloKeys Solo 2
|
||||
|
||||
# SONY
|
||||
0x054C:0x0D8F:SONY Felica RC-S660/U
|
||||
0x054C:0x0DC8:SONY Felica RC-S300/S
|
||||
0x054C:0x0DC9:SONY Felica RC-S300/P
|
||||
|
||||
# SPECINFOSYSTEMS
|
||||
0x316E:0x0001:SPECINFOSYSTEMS DIAMOND token
|
||||
0x316E:0x0002:SPECINFOSYSTEMS DIAMOND PRO token
|
||||
|
@ -738,6 +778,7 @@
|
|||
0x08DF:0x3115:Spyrus Inc WorkSafe Pro
|
||||
0x08DF:0x3117:Spyrus Inc WorkSafe Pro
|
||||
0x08DF:0x3201:Spyrus Inc PocketVault P-3X
|
||||
0x08DF:0x3203:Spyrus Inc PocketVault P-3X
|
||||
|
||||
# Sunrex
|
||||
0x05AF:0x605A:Sunrex HP USB Business Slim Smartcard CCID Keyboard
|
||||
|
@ -747,6 +788,7 @@
|
|||
|
||||
# SYNNIX
|
||||
0x1206:0x2105:SYNNIX STD200
|
||||
0x1206:0x2107:SYNNIX CL-2100R
|
||||
|
||||
# Sysking
|
||||
0x0E6A:0x5083:Sysking MII136C
|
||||
|
|
|
@ -54,7 +54,7 @@ PROVIDED_BY_PCSC = debug.c
|
|||
endif
|
||||
|
||||
libccid_la_SOURCES = $(COMMON) $(USB) $(TOKEN_PARSER) $(PROVIDED_BY_PCSC) $(T1)
|
||||
libccid_la_LIBADD = $(LEXLIB) $(LIBUSB_LIBS) $(PTHREAD_LIBS)
|
||||
libccid_la_LIBADD = $(LIBUSB_LIBS) $(PTHREAD_LIBS)
|
||||
libccid_la_CFLAGS = $(PCSC_CFLAGS) $(LIBUSB_CFLAGS) $(PTHREAD_CFLAGS) \
|
||||
$(SYMBOL_VISIBILITY) -D$(CCID_VERSION) -DSIMCLIST_NO_DUMPRESTORE
|
||||
libccid_la_LDFLAGS = -avoid-version
|
||||
|
|
|
@ -98,8 +98,7 @@ host_triplet = @host@
|
|||
@WITH_TWIN_SERIAL_TRUE@am__append_6 = uninstall_ccidtwin
|
||||
subdir = src
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \
|
||||
$(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
|
||||
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
|
||||
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
||||
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
|
@ -141,8 +140,7 @@ am__uninstall_files_from_dir = { \
|
|||
am__installdirs = "$(DESTDIR)$(libdir)"
|
||||
LTLIBRARIES = $(lib_LTLIBRARIES)
|
||||
am__DEPENDENCIES_1 =
|
||||
libccid_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
|
||||
$(am__DEPENDENCIES_1)
|
||||
libccid_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
|
||||
am__libccid_la_SOURCES_DIST = ccid.c ccid.h ccid_ifdhandler.h \
|
||||
commands.c commands.h debug.h defs.h ifdhandler.c utils.c \
|
||||
utils.h ccid_usb.c ccid_usb.h tokenparser.l parser.h strlcpy.c \
|
||||
|
@ -410,7 +408,6 @@ am__tar = @am__tar@
|
|||
am__untar = @am__untar@
|
||||
ax_pthread_config = @ax_pthread_config@
|
||||
bindir = @bindir@
|
||||
bindir_exp = @bindir_exp@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
|
@ -450,7 +447,6 @@ serialconfdir = @serialconfdir@
|
|||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
sysconfdir_exp = @sysconfdir_exp@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
|
@ -497,7 +493,7 @@ TOKEN_PARSER = tokenparser.l parser.h \
|
|||
|
||||
@WITHOUT_PCSC_TRUE@PROVIDED_BY_PCSC = debug.c
|
||||
libccid_la_SOURCES = $(COMMON) $(USB) $(TOKEN_PARSER) $(PROVIDED_BY_PCSC) $(T1)
|
||||
libccid_la_LIBADD = $(LEXLIB) $(LIBUSB_LIBS) $(PTHREAD_LIBS)
|
||||
libccid_la_LIBADD = $(LIBUSB_LIBS) $(PTHREAD_LIBS)
|
||||
libccid_la_CFLAGS = $(PCSC_CFLAGS) $(LIBUSB_CFLAGS) $(PTHREAD_CFLAGS) \
|
||||
$(SYMBOL_VISIBILITY) -D$(CCID_VERSION) -DSIMCLIST_NO_DUMPRESTORE
|
||||
|
||||
|
|
12
src/ccid.c
12
src/ccid.c
|
@ -505,6 +505,12 @@ int ccid_open_hack_post(unsigned int reader_index)
|
|||
ccid_descriptor->dwFeatures |= CCID_CLASS_EXTENDED_APDU;
|
||||
break;
|
||||
|
||||
case KOBIL_TRIBANK:
|
||||
/* Firmware does NOT supported extended APDU */
|
||||
ccid_descriptor->dwFeatures &= ~CCID_CLASS_EXCHANGE_MASK;
|
||||
ccid_descriptor->dwFeatures |= CCID_CLASS_SHORT_APDU;
|
||||
break;
|
||||
|
||||
#if 0
|
||||
/* SCM SCR331-DI contactless */
|
||||
case SCR331DI:
|
||||
|
@ -564,6 +570,12 @@ int ccid_open_hack_post(unsigned int reader_index)
|
|||
/* restore default timeout (modified in ccid_open_hack_pre()) */
|
||||
ccid_descriptor->readTimeout = DEFAULT_COM_READ_TIMEOUT;
|
||||
break;
|
||||
|
||||
case BIT4ID_MINILECTOR:
|
||||
/* The firmware 1.11 advertises pinpad but actually doesn't
|
||||
* have one */
|
||||
ccid_descriptor->bPINSupport = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Gemalto readers may report additional information */
|
||||
|
|
|
@ -238,6 +238,7 @@ typedef struct
|
|||
#define IDENTIV_uTrust3700F 0x04E65790
|
||||
#define IDENTIV_uTrust3701F 0x04E65791
|
||||
#define IDENTIV_uTrust4701F 0x04E65724
|
||||
#define BIT4ID_MINILECTOR 0x25DD3111
|
||||
|
||||
#define VENDOR_GEMALTO 0x08E6
|
||||
#define GET_VENDOR(readerID) ((readerID >> 16) & 0xFFFF)
|
||||
|
|
|
@ -385,7 +385,11 @@ int get_bytes(unsigned int reader_index, unsigned char *buffer, int length)
|
|||
rv = ReadChunk(reader_index, serialDevice[reader_index].buffer,
|
||||
sizeof(serialDevice[reader_index].buffer), length - present);
|
||||
if (rv < 0)
|
||||
{
|
||||
serialDevice[reader_index].buffer_offset = 0;
|
||||
serialDevice[reader_index].buffer_offset_last = 0;
|
||||
return STATUS_COMM_ERROR;
|
||||
}
|
||||
|
||||
/* fill the buffer */
|
||||
memcpy(buffer + present, serialDevice[reader_index].buffer,
|
||||
|
|
|
@ -464,6 +464,7 @@ again_libusb:
|
|||
* 0: R502 Contactless Reader (CCID)
|
||||
* 1: R502 Contact Reader (CCID)
|
||||
* 2: R502 SAM1 Reader (CCID)
|
||||
* 3: R502 SAM2 Reader (CCID)
|
||||
*
|
||||
* For the HID Omnikey 5422 the interfaces are:
|
||||
* 0: OMNIKEY 5422CL Smartcard Reader
|
||||
|
@ -474,6 +475,10 @@ again_libusb:
|
|||
if (HID_OMNIKEY_5422 == readerID)
|
||||
/* only 2 interfaces for this device */
|
||||
max_interface_number = 1;
|
||||
|
||||
if (FEITIANR502DUAL == readerID)
|
||||
/* 4 interfaces for Feitian R502 reader */
|
||||
max_interface_number = 3;
|
||||
}
|
||||
#endif
|
||||
/* is it already opened? */
|
||||
|
@ -1205,13 +1210,21 @@ static unsigned int *get_data_rates(unsigned int reader_index,
|
|||
int n, i, len;
|
||||
unsigned char buffer[256*sizeof(int)]; /* maximum is 256 records */
|
||||
unsigned int *uint_array;
|
||||
int bNumDataRatesSupported;
|
||||
|
||||
bNumDataRatesSupported = get_ccid_device_descriptor(get_ccid_usb_interface(desc, &num))[27];
|
||||
if (0 == bNumDataRatesSupported)
|
||||
/* read up to the buffer size */
|
||||
len = sizeof(buffer) / sizeof(int);
|
||||
else
|
||||
len = bNumDataRatesSupported;
|
||||
|
||||
/* See CCID 3.7.3 page 25 */
|
||||
n = ControlUSB(reader_index,
|
||||
0xA1, /* request type */
|
||||
0x03, /* GET_DATA_RATES */
|
||||
0x00, /* value */
|
||||
buffer, sizeof(buffer));
|
||||
buffer, len * sizeof(int));
|
||||
|
||||
/* we got an error? */
|
||||
if (n <= 0)
|
||||
|
@ -1231,8 +1244,7 @@ static unsigned int *get_data_rates(unsigned int reader_index,
|
|||
n /= sizeof(int);
|
||||
|
||||
/* we do not get the expected number of data rates */
|
||||
len = get_ccid_device_descriptor(get_ccid_usb_interface(desc, &num))[27]; /* bNumDataRatesSupported */
|
||||
if ((n != len) && len)
|
||||
if ((n != bNumDataRatesSupported) && bNumDataRatesSupported)
|
||||
{
|
||||
DEBUG_INFO3("Got %d data rates but was expecting %d", n, len);
|
||||
|
||||
|
@ -1538,7 +1550,7 @@ static void *Multi_PollingProc(void *p_ext)
|
|||
change = (slot_status & 2) ? "status changed" : "no change";
|
||||
|
||||
DEBUG_COMM3("slot %d status: %d",
|
||||
s + b*4, slot_status);
|
||||
s + slot, slot_status);
|
||||
DEBUG_COMM3("ICC %s, %s", present, change);
|
||||
}
|
||||
slot += 4;
|
||||
|
|
|
@ -268,7 +268,7 @@ again:
|
|||
if (voltage)
|
||||
{
|
||||
#ifndef NO_LOG
|
||||
const char *voltage_code[] = { "auto", "5V", "3V", "1.8V" };
|
||||
const char *voltage_code[] = { "1.8V", "5V", "3V", "1.8V" };
|
||||
#endif
|
||||
|
||||
DEBUG_INFO3("Power up with %s failed. Try with %s.",
|
||||
|
@ -390,6 +390,18 @@ RESPONSECODE SecurePINVerify(unsigned int reader_index,
|
|||
|
||||
}
|
||||
|
||||
if ((VENDOR_GEMALTO == GET_VENDOR(ccid_descriptor->readerID))
|
||||
&& (ccid_descriptor->gemalto_firmware_features))
|
||||
{
|
||||
int bEntryValidationCondition = ccid_descriptor->gemalto_firmware_features->bEntryValidationCondition;
|
||||
if (TxBuffer[7] & ~bEntryValidationCondition)
|
||||
{
|
||||
DEBUG_INFO2("Correct bEntryValidationCondition (was 0x%02X)",
|
||||
TxBuffer[7]);
|
||||
TxBuffer[7] &= bEntryValidationCondition;
|
||||
}
|
||||
}
|
||||
|
||||
if ((DELLSCRK == ccid_descriptor->readerID)
|
||||
|| (DELLSK == ccid_descriptor->readerID))
|
||||
{
|
||||
|
@ -747,6 +759,18 @@ RESPONSECODE SecurePINModify(unsigned int reader_index,
|
|||
}
|
||||
}
|
||||
|
||||
if ((VENDOR_GEMALTO == GET_VENDOR(ccid_descriptor->readerID))
|
||||
&& (ccid_descriptor->gemalto_firmware_features))
|
||||
{
|
||||
int bEntryValidationCondition = ccid_descriptor->gemalto_firmware_features->bEntryValidationCondition;
|
||||
if (TxBuffer[10] & ~bEntryValidationCondition)
|
||||
{
|
||||
DEBUG_INFO2("Correct bEntryValidationCondition (was 0x%02X)",
|
||||
TxBuffer[10]);
|
||||
TxBuffer[10] &= bEntryValidationCondition;
|
||||
}
|
||||
}
|
||||
|
||||
gemalto_modify_pin_bug = has_gemalto_modify_pin_bug(ccid_descriptor);
|
||||
if (gemalto_modify_pin_bug)
|
||||
{
|
||||
|
@ -1864,7 +1888,7 @@ static RESPONSECODE T0ProcACK(unsigned int reader_index,
|
|||
|
||||
DEBUG_COMM2("Enter, is_rcv = %d", is_rcv);
|
||||
|
||||
if (proc_len > 0x20000)
|
||||
if (proc_len > 0x200)
|
||||
return IFD_COMMUNICATION_ERROR;
|
||||
|
||||
if (is_rcv == 1)
|
||||
|
@ -1912,29 +1936,29 @@ static RESPONSECODE T0ProcACK(unsigned int reader_index,
|
|||
|
||||
#ifdef O2MICRO_OZ776_PATCH
|
||||
if((0 != remain_len) && (0 == (remain_len + 10) % 64))
|
||||
{
|
||||
/* special hack to avoid a command of size modulo 64
|
||||
* we send two commands instead */
|
||||
ret_len = 1;
|
||||
return_value = CCID_Transmit(reader_index, 0, *snd_buf, ret_len, 0);
|
||||
if (return_value != IFD_SUCCESS)
|
||||
return return_value;
|
||||
return_value = CCID_Receive(reader_index, &ret_len, tmp_buf, NULL);
|
||||
if (return_value != IFD_SUCCESS)
|
||||
return return_value;
|
||||
{
|
||||
/* special hack to avoid a command of size modulo 64
|
||||
* we send two commands instead */
|
||||
ret_len = 1;
|
||||
return_value = CCID_Transmit(reader_index, 0, *snd_buf, ret_len, 0);
|
||||
if (return_value != IFD_SUCCESS)
|
||||
return return_value;
|
||||
return_value = CCID_Receive(reader_index, &ret_len, tmp_buf, NULL);
|
||||
if (return_value != IFD_SUCCESS)
|
||||
return return_value;
|
||||
|
||||
ret_len = remain_len - 1;
|
||||
return_value = CCID_Transmit(reader_index, 0, *snd_buf, ret_len, 0);
|
||||
if (return_value != IFD_SUCCESS)
|
||||
return return_value;
|
||||
return_value = CCID_Receive(reader_index, &ret_len, &tmp_buf[1],
|
||||
NULL);
|
||||
if (return_value != IFD_SUCCESS)
|
||||
return return_value;
|
||||
ret_len = remain_len - 1;
|
||||
return_value = CCID_Transmit(reader_index, 0, *snd_buf, ret_len, 0);
|
||||
if (return_value != IFD_SUCCESS)
|
||||
return return_value;
|
||||
return_value = CCID_Receive(reader_index, &ret_len, &tmp_buf[1],
|
||||
NULL);
|
||||
if (return_value != IFD_SUCCESS)
|
||||
return return_value;
|
||||
|
||||
ret_len += 1;
|
||||
}
|
||||
else
|
||||
ret_len += 1;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
ret_len = remain_len;
|
||||
|
|
|
@ -476,9 +476,9 @@ EXTERNAL RESPONSECODE IFDHGetCapabilities(DWORD Lun, DWORD Tag,
|
|||
|| (HID_OMNIKEY_5422 == readerID))
|
||||
*Value = 2;
|
||||
|
||||
/* 3 CCID interfaces */
|
||||
/* 4 CCID interfaces */
|
||||
if (FEITIANR502DUAL == readerID)
|
||||
*Value = 3;
|
||||
*Value = 4;
|
||||
}
|
||||
#endif
|
||||
DEBUG_INFO2("Reader supports %d slot(s)", *Value);
|
||||
|
@ -723,14 +723,6 @@ EXTERNAL RESPONSECODE IFDHSetProtocolParameters(DWORD Lun, DWORD Protocol,
|
|||
ccid_slot = get_ccid_slot(reader_index);
|
||||
ccid_desc = get_ccid_descriptor(reader_index);
|
||||
|
||||
/* Do not send CCID command SetParameters or PPS to the CCID
|
||||
* The CCID will do this himself */
|
||||
if (ccid_desc->dwFeatures & CCID_CLASS_AUTO_PPS_PROP)
|
||||
{
|
||||
DEBUG_COMM2("Timeout: %d ms", ccid_desc->readTimeout);
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* check the protocol is supported by the reader */
|
||||
if (!(Protocol & ccid_desc->dwProtocols))
|
||||
{
|
||||
|
@ -796,6 +788,14 @@ EXTERNAL RESPONSECODE IFDHSetProtocolParameters(DWORD Lun, DWORD Protocol,
|
|||
}
|
||||
}
|
||||
|
||||
/* Do not send CCID command SetParameters or PPS to the CCID
|
||||
* The CCID will do this himself */
|
||||
if (ccid_desc->dwFeatures & CCID_CLASS_AUTO_PPS_PROP)
|
||||
{
|
||||
DEBUG_COMM2("Timeout: %d ms", ccid_desc->readTimeout);
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* PTS1? */
|
||||
if (Flags & IFD_NEGOTIATE_PTS1)
|
||||
{
|
||||
|
@ -1092,8 +1092,10 @@ EXTERNAL RESPONSECODE IFDHSetProtocolParameters(DWORD Lun, DWORD Protocol,
|
|||
return ret;
|
||||
}
|
||||
|
||||
end:
|
||||
/* set IFSC & IFSD in T=1 */
|
||||
if (SCARD_PROTOCOL_T1 == Protocol)
|
||||
if ((SCARD_PROTOCOL_T1 == Protocol)
|
||||
&& (CCID_CLASS_TPDU == (ccid_desc->dwFeatures & CCID_CLASS_EXCHANGE_MASK)))
|
||||
{
|
||||
t1_state_t *t1 = &(ccid_slot -> t1);
|
||||
int i, ifsc;
|
||||
|
@ -1117,7 +1119,6 @@ EXTERNAL RESPONSECODE IFDHSetProtocolParameters(DWORD Lun, DWORD Protocol,
|
|||
DEBUG_COMM3("T=1: IFSC=%d, IFSD=%d", t1->ifsc, t1->ifsd);
|
||||
}
|
||||
|
||||
end:
|
||||
/* store used protocol for use by the secure commands (verify/change PIN) */
|
||||
ccid_desc->cardProtocol = Protocol;
|
||||
|
||||
|
|
66
src/parse.c
66
src/parse.c
|
@ -74,14 +74,15 @@ int main(int argc, char *argv[])
|
|||
r = libusb_init(NULL);
|
||||
if (r < 0)
|
||||
{
|
||||
(void)printf("libusb_init() failed\n");
|
||||
(void)printf("libusb_init() failed: %s\n", libusb_error_name(r));
|
||||
return r;
|
||||
}
|
||||
|
||||
cnt = libusb_get_device_list(NULL, &devs);
|
||||
if (cnt < 0)
|
||||
{
|
||||
(void)printf("libusb_get_device_list() failed\n");
|
||||
(void)printf("libusb_get_device_list() failed: %s\n",
|
||||
libusb_error_name(r));
|
||||
return (int)cnt;
|
||||
}
|
||||
|
||||
|
@ -116,7 +117,8 @@ int main(int argc, char *argv[])
|
|||
if (r < 0)
|
||||
{
|
||||
(void)fprintf(stderr,
|
||||
BRIGHT_RED "failed to get device descriptor" NORMAL);
|
||||
BRIGHT_RED "failed to get device descriptor: %s" NORMAL,
|
||||
libusb_error_name(r));
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -130,7 +132,8 @@ int main(int argc, char *argv[])
|
|||
buffer, sizeof(buffer));
|
||||
if (r < 0)
|
||||
{
|
||||
(void)fprintf(stderr, " Can't get iManufacturer string\n");
|
||||
(void)fprintf(stderr, " Can't get iManufacturer string: %s\n",
|
||||
libusb_error_name(r));
|
||||
if (getuid())
|
||||
{
|
||||
(void)fprintf(stderr,
|
||||
|
@ -146,7 +149,8 @@ int main(int argc, char *argv[])
|
|||
r = libusb_get_string_descriptor_ascii(handle, desc.iProduct,
|
||||
buffer, sizeof(buffer));
|
||||
if (r < 0)
|
||||
(void)fprintf(stderr, " Can't get iProduct string\n");
|
||||
(void)fprintf(stderr, " Can't get iProduct string: %s\n",
|
||||
libusb_error_name(r));
|
||||
else
|
||||
(void)fprintf(stderr, " iProduct: " BLUE "%s\n" NORMAL, buffer);
|
||||
|
||||
|
@ -155,7 +159,8 @@ again:
|
|||
r = libusb_get_active_config_descriptor(dev, &config_desc);
|
||||
if (r < 0)
|
||||
{
|
||||
(void)fprintf(stderr, " Can't get config descriptor: %d\n", r);
|
||||
(void)fprintf(stderr, " Can't get config descriptor: %s\n",
|
||||
libusb_error_name(r));
|
||||
(void)libusb_close(handle);
|
||||
continue;
|
||||
}
|
||||
|
@ -262,7 +267,8 @@ static int ccid_parse_interface_descriptor(libusb_device_handle *handle,
|
|||
buffer, sizeof(buffer));
|
||||
if (r < 0)
|
||||
{
|
||||
(void)printf(" Can't get iManufacturer string\n");
|
||||
(void)printf(" Can't get iManufacturer string: %s\n",
|
||||
libusb_error_name(r));
|
||||
if (getuid())
|
||||
{
|
||||
(void)fprintf(stderr,
|
||||
|
@ -277,7 +283,8 @@ static int ccid_parse_interface_descriptor(libusb_device_handle *handle,
|
|||
r = libusb_get_string_descriptor_ascii(handle, desc.iProduct,
|
||||
buffer, sizeof(buffer));
|
||||
if (r < 0)
|
||||
(void)printf(" Can't get iProduct string\n");
|
||||
(void)printf(" Can't get iProduct string: %s\n",
|
||||
libusb_error_name(r));
|
||||
else
|
||||
(void)printf(" iProduct: %s\n", buffer);
|
||||
|
||||
|
@ -350,7 +357,8 @@ static int ccid_parse_interface_descriptor(libusb_device_handle *handle,
|
|||
r = libusb_get_string_descriptor_ascii(handle, usb_interface_descriptor->iInterface,
|
||||
buffer, sizeof(buffer));
|
||||
if (r < 0)
|
||||
(void)printf(" Can't get iInterface string\n");
|
||||
(void)printf(" Can't get iInterface string: %s\n",
|
||||
libusb_error_name(r));
|
||||
else
|
||||
(void)printf(" iInterface: %s\n", buffer);
|
||||
|
||||
|
@ -404,11 +412,16 @@ static int ccid_parse_interface_descriptor(libusb_device_handle *handle,
|
|||
|
||||
(void)printf(" dwDefaultClock: %.3f MHz\n", dw2i(device_descriptor, 10)/1000.0);
|
||||
(void)printf(" dwMaximumClock: %.3f MHz\n", dw2i(device_descriptor, 14)/1000.0);
|
||||
(void)printf(" bNumClockSupported: %d%s\n", device_descriptor[18],
|
||||
device_descriptor[18] ? "" : " (will use whatever is returned)");
|
||||
int bNumClockSupported = device_descriptor[18];
|
||||
(void)printf(" bNumClockSupported: %d%s\n", bNumClockSupported,
|
||||
bNumClockSupported ? "" : " (will use whatever is returned)");
|
||||
{
|
||||
int n;
|
||||
|
||||
if (0 == bNumClockSupported)
|
||||
/* read up to the buffer size */
|
||||
bNumClockSupported = sizeof(buffer) / sizeof(int);
|
||||
|
||||
/* See CCID 5.3.2 page 24 */
|
||||
n = libusb_control_transfer(handle,
|
||||
0xA1, /* request type */
|
||||
|
@ -416,7 +429,7 @@ static int ccid_parse_interface_descriptor(libusb_device_handle *handle,
|
|||
0x00, /* value */
|
||||
usb_interface_descriptor->bInterfaceNumber, /* interface */
|
||||
buffer,
|
||||
sizeof(buffer),
|
||||
bNumClockSupported * sizeof(int),
|
||||
2 * 1000);
|
||||
|
||||
/* we got an error? */
|
||||
|
@ -438,15 +451,15 @@ static int ccid_parse_interface_descriptor(libusb_device_handle *handle,
|
|||
int i;
|
||||
|
||||
/* we do not get the expected number of data rates */
|
||||
if ((n != device_descriptor[18]*4) && device_descriptor[18])
|
||||
if ((n != bNumClockSupported*4) && bNumClockSupported)
|
||||
{
|
||||
(void)printf(" Got %d clock frequencies but was expecting %d\n",
|
||||
n/4, device_descriptor[18]);
|
||||
n/4, bNumClockSupported);
|
||||
|
||||
/* we got more data than expected */
|
||||
#ifndef DISPLAY_EXTRA_VALUES
|
||||
if (n > device_descriptor[18]*4)
|
||||
n = device_descriptor[18]*4;
|
||||
if (n > bNumClockSupported*4)
|
||||
n = bNumClockSupported*4;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -456,11 +469,16 @@ static int ccid_parse_interface_descriptor(libusb_device_handle *handle,
|
|||
}
|
||||
(void)printf(" dwDataRate: %d bps\n", dw2i(device_descriptor, 19));
|
||||
(void)printf(" dwMaxDataRate: %d bps\n", dw2i(device_descriptor, 23));
|
||||
(void)printf(" bNumDataRatesSupported: %d%s\n", device_descriptor[27],
|
||||
device_descriptor[27] ? "" : " (will use whatever is returned)");
|
||||
int bNumDataRatesSupported = device_descriptor[27];
|
||||
(void)printf(" bNumDataRatesSupported: %d%s\n", bNumDataRatesSupported,
|
||||
bNumDataRatesSupported ? "" : " (will use whatever is returned)");
|
||||
{
|
||||
int n;
|
||||
|
||||
if (0 == bNumDataRatesSupported)
|
||||
/* read up to the buffer size */
|
||||
bNumDataRatesSupported = sizeof(buffer) / sizeof(int);
|
||||
|
||||
/* See CCID 5.3.3 page 24 */
|
||||
n = libusb_control_transfer(handle,
|
||||
0xA1, /* request type */
|
||||
|
@ -468,7 +486,7 @@ static int ccid_parse_interface_descriptor(libusb_device_handle *handle,
|
|||
0x00, /* value */
|
||||
usb_interface_descriptor->bInterfaceNumber, /* interface */
|
||||
buffer,
|
||||
sizeof(buffer),
|
||||
bNumDataRatesSupported * sizeof(int),
|
||||
2 * 1000);
|
||||
|
||||
/* we got an error? */
|
||||
|
@ -483,15 +501,15 @@ static int ccid_parse_interface_descriptor(libusb_device_handle *handle,
|
|||
int i;
|
||||
|
||||
/* we do not get the expected number of data rates */
|
||||
if ((n != device_descriptor[27]*4) && device_descriptor[27])
|
||||
if ((n != bNumDataRatesSupported*4) && bNumDataRatesSupported)
|
||||
{
|
||||
(void)printf(" Got %d data rates but was expecting %d\n", n/4,
|
||||
device_descriptor[27]);
|
||||
bNumDataRatesSupported);
|
||||
|
||||
/* we got more data than expected */
|
||||
#ifndef DISPLAY_EXTRA_VALUES
|
||||
if (n > device_descriptor[27]*4)
|
||||
n = device_descriptor[27]*4;
|
||||
if (n > bNumDataRatesSupported*4)
|
||||
n = bNumDataRatesSupported*4;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -544,7 +562,7 @@ static int ccid_parse_interface_descriptor(libusb_device_handle *handle,
|
|||
if (device_descriptor[41] & 0x04)
|
||||
(void)printf(" ..04.. Automatic IFSD exchange as first exchange (T=1)\n");
|
||||
if (device_descriptor[41] & 0x08)
|
||||
(void)printf(" ..08.. Unknown (ICCD?)\n");
|
||||
(void)printf(" ..08.. ICCD token\n");
|
||||
switch (device_descriptor[42] & 0x07)
|
||||
{
|
||||
case 0x00:
|
||||
|
|
|
@ -376,17 +376,17 @@ static const YY_CHAR yy_ec[256] =
|
|||
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 2, 4, 4, 5, 4, 4, 4, 4, 4,
|
||||
4, 4, 4, 4, 4, 4, 6, 7, 7, 7,
|
||||
7, 7, 7, 7, 7, 7, 7, 4, 4, 8,
|
||||
4, 9, 4, 4, 10, 10, 10, 10, 10, 10,
|
||||
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
|
||||
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
|
||||
4, 1, 4, 4, 4, 1, 11, 11, 11, 11,
|
||||
1, 2, 1, 1, 4, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 5, 6, 6, 6,
|
||||
6, 6, 6, 6, 6, 6, 6, 1, 1, 7,
|
||||
1, 8, 1, 1, 9, 9, 9, 9, 9, 9,
|
||||
9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
|
||||
9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
|
||||
1, 1, 1, 1, 1, 1, 10, 10, 10, 10,
|
||||
|
||||
12, 11, 13, 11, 14, 11, 15, 11, 11, 16,
|
||||
11, 11, 11, 17, 18, 19, 11, 11, 11, 11,
|
||||
20, 11, 1, 1, 1, 4, 1, 1, 1, 1,
|
||||
11, 10, 12, 10, 13, 10, 14, 10, 10, 15,
|
||||
10, 10, 10, 16, 17, 18, 10, 10, 10, 10,
|
||||
19, 10, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
|
@ -403,50 +403,52 @@ static const YY_CHAR yy_ec[256] =
|
|||
1, 1, 1, 1, 1
|
||||
} ;
|
||||
|
||||
static const YY_CHAR yy_meta[21] =
|
||||
static const YY_CHAR yy_meta[20] =
|
||||
{ 0,
|
||||
1, 2, 3, 4, 4, 4, 2, 1, 1, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2
|
||||
1, 2, 3, 1, 1, 2, 1, 1, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 2, 2
|
||||
} ;
|
||||
|
||||
static const flex_int16_t yy_base[43] =
|
||||
{ 0,
|
||||
0, 7, 49, 50, 50, 50, 0, 1, 0, 36,
|
||||
28, 26, 28, 35, 29, 0, 26, 33, 27, 33,
|
||||
29, 22, 0, 24, 27, 14, 27, 23, 13, 50,
|
||||
10, 9, 4, 1, 0, 2, 50, 50, 19, 23,
|
||||
2, 26
|
||||
0, 6, 54, 55, 55, 55, 0, 0, 0, 42,
|
||||
34, 32, 34, 41, 35, 0, 32, 39, 33, 39,
|
||||
35, 28, 0, 30, 33, 20, 11, 30, 4, 55,
|
||||
5, 8, 12, 13, 15, 22, 19, 55, 30, 33,
|
||||
3, 35
|
||||
} ;
|
||||
|
||||
static const flex_int16_t yy_def[43] =
|
||||
{ 0,
|
||||
39, 39, 38, 38, 38, 38, 40, 38, 40, 38,
|
||||
38, 38, 38, 38, 38, 41, 38, 41, 38, 38,
|
||||
38, 38, 42, 38, 42, 38, 38, 38, 38, 38,
|
||||
38, 38, 38, 38, 38, 38, 38, 0, 38, 38,
|
||||
38, 38, 42, 38, 42, 38, 42, 38, 42, 38,
|
||||
42, 42, 42, 42, 42, 42, 42, 0, 38, 38,
|
||||
38, 38
|
||||
} ;
|
||||
|
||||
static const flex_int16_t yy_nxt[71] =
|
||||
static const flex_int16_t yy_nxt[75] =
|
||||
{ 0,
|
||||
38, 5, 6, 18, 7, 38, 38, 8, 5, 6,
|
||||
37, 7, 36, 38, 8, 10, 35, 34, 11, 4,
|
||||
4, 4, 4, 9, 9, 33, 9, 25, 32, 25,
|
||||
31, 30, 29, 28, 27, 26, 24, 23, 22, 21,
|
||||
20, 19, 17, 16, 15, 14, 13, 12, 38, 3,
|
||||
38, 5, 6, 7, 18, 38, 8, 5, 6, 7,
|
||||
27, 27, 8, 10, 27, 29, 11, 27, 27, 27,
|
||||
31, 27, 32, 33, 34, 27, 36, 35, 27, 37,
|
||||
4, 4, 4, 9, 9, 25, 25, 30, 28, 27,
|
||||
26, 24, 23, 22, 21, 20, 19, 17, 16, 15,
|
||||
14, 13, 12, 38, 3, 38, 38, 38, 38, 38,
|
||||
38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
|
||||
38, 38, 38, 38, 38, 38, 38, 38, 38, 38
|
||||
38, 38, 38, 38
|
||||
} ;
|
||||
|
||||
static const flex_int16_t yy_chk[71] =
|
||||
static const flex_int16_t yy_chk[75] =
|
||||
{ 0,
|
||||
0, 1, 1, 41, 1, 0, 0, 1, 2, 2,
|
||||
36, 2, 35, 0, 2, 8, 34, 33, 8, 39,
|
||||
39, 39, 39, 40, 40, 32, 40, 42, 31, 42,
|
||||
29, 28, 27, 26, 25, 24, 22, 21, 20, 19,
|
||||
18, 17, 15, 14, 13, 12, 11, 10, 3, 38,
|
||||
0, 1, 1, 1, 41, 0, 1, 2, 2, 2,
|
||||
29, 31, 2, 8, 32, 27, 8, 27, 33, 34,
|
||||
29, 35, 31, 32, 33, 37, 35, 34, 36, 36,
|
||||
39, 39, 39, 40, 40, 42, 42, 28, 26, 25,
|
||||
24, 22, 21, 20, 19, 18, 17, 15, 14, 13,
|
||||
12, 11, 10, 3, 38, 38, 38, 38, 38, 38,
|
||||
38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
|
||||
38, 38, 38, 38, 38, 38, 38, 38, 38, 38
|
||||
38, 38, 38, 38
|
||||
} ;
|
||||
|
||||
static yy_state_type yy_last_accepting_state;
|
||||
|
@ -508,7 +510,9 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#ifndef NDEBUG
|
||||
#define NDEBUG
|
||||
#endif
|
||||
#include <assert.h>
|
||||
|
||||
#include "simclist.h"
|
||||
|
@ -522,9 +526,9 @@ void tperrorCheck (char *pcToken_error);
|
|||
static list_t *ListKeys;
|
||||
static list_t *ListValues;
|
||||
|
||||
#line 526 "tokenparser.c"
|
||||
#line 530 "tokenparser.c"
|
||||
#define YY_NO_INPUT 1
|
||||
#line 528 "tokenparser.c"
|
||||
#line 532 "tokenparser.c"
|
||||
|
||||
#define INITIAL 0
|
||||
|
||||
|
@ -739,10 +743,10 @@ YY_DECL
|
|||
}
|
||||
|
||||
{
|
||||
#line 67 "tokenparser.l"
|
||||
#line 69 "tokenparser.l"
|
||||
|
||||
|
||||
#line 746 "tokenparser.c"
|
||||
#line 750 "tokenparser.c"
|
||||
|
||||
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
|
||||
{
|
||||
|
@ -775,7 +779,7 @@ yy_match:
|
|||
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
|
||||
++yy_cp;
|
||||
}
|
||||
while ( yy_base[yy_current_state] != 50 );
|
||||
while ( yy_base[yy_current_state] != 55 );
|
||||
|
||||
yy_find_action:
|
||||
yy_act = yy_accept[yy_current_state];
|
||||
|
@ -801,41 +805,41 @@ do_action: /* This label is used only to access EOF actions. */
|
|||
|
||||
case 1:
|
||||
YY_RULE_SETUP
|
||||
#line 69 "tokenparser.l"
|
||||
#line 71 "tokenparser.l"
|
||||
{}
|
||||
YY_BREAK
|
||||
case 2:
|
||||
/* rule 2 can match eol */
|
||||
YY_RULE_SETUP
|
||||
#line 70 "tokenparser.l"
|
||||
#line 72 "tokenparser.l"
|
||||
{}
|
||||
YY_BREAK
|
||||
case 3:
|
||||
YY_RULE_SETUP
|
||||
#line 71 "tokenparser.l"
|
||||
#line 73 "tokenparser.l"
|
||||
{ eval_key(yytext, ListKeys); }
|
||||
YY_BREAK
|
||||
case 4:
|
||||
YY_RULE_SETUP
|
||||
#line 72 "tokenparser.l"
|
||||
#line 74 "tokenparser.l"
|
||||
{}
|
||||
YY_BREAK
|
||||
case 5:
|
||||
YY_RULE_SETUP
|
||||
#line 73 "tokenparser.l"
|
||||
#line 75 "tokenparser.l"
|
||||
{ eval_value(yytext, ListValues); }
|
||||
YY_BREAK
|
||||
case 6:
|
||||
YY_RULE_SETUP
|
||||
#line 74 "tokenparser.l"
|
||||
#line 76 "tokenparser.l"
|
||||
{ tperrorCheck(yytext); }
|
||||
YY_BREAK
|
||||
case 7:
|
||||
YY_RULE_SETUP
|
||||
#line 75 "tokenparser.l"
|
||||
#line 77 "tokenparser.l"
|
||||
ECHO;
|
||||
YY_BREAK
|
||||
#line 839 "tokenparser.c"
|
||||
#line 843 "tokenparser.c"
|
||||
case YY_STATE_EOF(INITIAL):
|
||||
yyterminate();
|
||||
|
||||
|
@ -1803,7 +1807,7 @@ void yyfree (void * ptr )
|
|||
|
||||
#define YYTABLES_NAME "yytables"
|
||||
|
||||
#line 75 "tokenparser.l"
|
||||
#line 77 "tokenparser.l"
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue