New upstream version 1.9.6
This commit is contained in:
parent
8360e0e1aa
commit
6bed2b05f1
18
ChangeLog
18
ChangeLog
|
@ -1,3 +1,19 @@
|
|||
1.9.6: Ludovic Rousseau
|
||||
11 May 2022
|
||||
- do not fail reader removal in some specific cases (USB/Thunderbolt port)
|
||||
- improve documentation regarding /etc/reader.conf.d/
|
||||
- SCardGetStatusChange: speedup the case DISABLE_AUTO_POWER_ON
|
||||
- configure:
|
||||
. add --disable-strict option
|
||||
By default the compiler arguments are now:
|
||||
-Wall -Wextra -Wno-unused-parameter -Werror ${CFLAGS}
|
||||
. fail if flex is not found
|
||||
- fix different data races
|
||||
- pcscdaemon: -v displays internal constants values:
|
||||
MAX_READERNAME & PCSCLITE_MAX_READERS_CONTEXTS
|
||||
- Some other minor improvements
|
||||
|
||||
|
||||
1.9.5: Ludovic Rousseau
|
||||
4 December 2021
|
||||
- pcscd: autoexit even if no client connects
|
||||
|
@ -6,11 +22,13 @@
|
|||
- Add and use tag TAG_IFD_DEVICE_REMOVED
|
||||
- UnitaryTests: port code to Python 3
|
||||
|
||||
|
||||
1.9.4: Ludovic Rousseau
|
||||
1 October 2021
|
||||
- fix a memory leak when libusb is used for hotplug (i.e. non-Linux
|
||||
systems)
|
||||
|
||||
|
||||
1.9.3: Ludovic Rousseau
|
||||
6 August 2021
|
||||
- fix a stupid regression with systemd introduced in the previous version
|
||||
|
|
736
ChangeLog.git
736
ChangeLog.git
|
@ -1,4 +1,736 @@
|
|||
commit d92b5d4fad5dea95ce8d12fac07fe1eec2150ad1 (HEAD -> master)
|
||||
commit c783224e5109258a17856f9ef90c044093bfc949 (HEAD -> master, zotac/master, origin/master, origin/HEAD, github/master)
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Wed May 11 17:06:28 2022 +0200
|
||||
|
||||
Release 1.9.6
|
||||
|
||||
Signed-off-by: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
|
||||
ChangeLog | 18 ++++++++++++++++++
|
||||
configure.ac | 2 +-
|
||||
2 files changed, 19 insertions(+), 1 deletion(-)
|
||||
|
||||
commit 28f9f0e249d9378e34e887bc6006acdcd0b9f539
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Tue May 10 21:52:37 2022 +0200
|
||||
|
||||
Fix warning reported by clang scan-build
|
||||
|
||||
readerfactory.c:622:7: warning: Value stored to 'ret' is never read [deadcode.DeadStores]
|
||||
ret = IFDSetCapabilities(sReadersContexts[i],
|
||||
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
src/readerfactory.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
commit c906ccf5ccfb8ac0fb0e8fece0a1405f2327e269
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Tue May 10 21:50:26 2022 +0200
|
||||
|
||||
Fix warning reported by clang scan-build
|
||||
|
||||
pcscdaemon.c:750:2: warning: Value stored to 'rv' is never read [deadcode.DeadStores]
|
||||
rv = HPSearchHotPluggables();
|
||||
^ ~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
src/pcscdaemon.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
commit a3e09df033e024541314bc6bb7dba6f4b5d05d6e
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Tue May 3 21:23:13 2022 +0200
|
||||
|
||||
libudev: do not fail removal if the device has no parent
|
||||
|
||||
With some USB devices (like Yubikey) a new USB bus is created when the
|
||||
device is inserted. The USB bus is then destroyed when the token is
|
||||
removed.
|
||||
The USB device has no parent any more and the call to
|
||||
udev_device_get_parent_with_subsystem_devtype() fails. The device is
|
||||
then NOT removed and you get a loop of:
|
||||
|
||||
ccid_usb.c:886:WriteUSB() write failed (3/2): LIBUSB_ERROR_NO_DEVICE
|
||||
src/ifdwrapper.c:364:IFDStatusICC() Card not transacted: 617
|
||||
src/eventhandler.c:336:EHStatusHandlerThread() Error communicating to: Yubico YubiKey OTP+FIDO+CCID 00 00
|
||||
|
||||
Closes: https://github.com/LudovicRousseau/PCSC/issues/125
|
||||
Thanks to oddlama for the bug report
|
||||
|
||||
src/hotplug_libudev.c | 20 --------------------
|
||||
1 file changed, 20 deletions(-)
|
||||
|
||||
commit a2f8a23685d2ff7bd607bafbea4ab3c0ecfc6c37 (debug/master)
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sun Apr 3 15:37:26 2022 +0200
|
||||
|
||||
SCardTransmit(): check the reception buffer is large enough
|
||||
|
||||
This check is already made on the server side at winscard_svc.c line
|
||||
683.
|
||||
But the client may be connected to a rogue server. So double check does
|
||||
not hurt.
|
||||
|
||||
Thanks to Coverity for the bug report:
|
||||
CID 1503364 (#1 of 1): Untrusted loop bound (TAINTED_SCALAR)
|
||||
15. tainted_data: Passing tainted expression scTransmitStruct.pcbRecvLength to MessageReceive, which uses it as a loop boundary.
|
||||
|
||||
src/winscard_clnt.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
commit 2977de7b4101e53f7b1fde7df32fd4173e6af51b
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sun Apr 3 15:28:41 2022 +0200
|
||||
|
||||
SCardControl(): check the reception buffer is large enough
|
||||
|
||||
This check is already made on the server side at winscard_svc.c line
|
||||
737.
|
||||
But the client may be connected to a rogue server. So double check does
|
||||
not hurt.
|
||||
|
||||
Thanks to Coverity for the bug report:
|
||||
CID 1503367 (#1 of 1): Untrusted loop bound (TAINTED_SCALAR)
|
||||
10. tainted_data: Passing tainted expression scControlStruct.dwBytesReturned to MessageReceive, which uses it as a loop boundary.
|
||||
|
||||
src/winscard_clnt.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
commit a07ca483f24bcefcf0c81c4bf497f4225ee9227b
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sun Apr 3 15:12:48 2022 +0200
|
||||
|
||||
testpcsc: simplify code
|
||||
|
||||
Remove a test code duplication
|
||||
|
||||
Thanks to Coverity for the bug report:
|
||||
CID 1503368 (#1 of 1): Untrusted loop bound (TAINTED_SCALAR)
|
||||
45. tainted_data: Using tainted variable iReader as a loop boundary.
|
||||
|
||||
src/testpcsc.c | 9 ++++++++-
|
||||
1 file changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
commit cda0df14731c6b5e11521564b0b13eb89c1fe0eb
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sun Apr 3 14:58:01 2022 +0200
|
||||
|
||||
HPAddDevice(): fix memory leak in case of error
|
||||
|
||||
Thansk to Coverity for the bug report:
|
||||
CID 1503363 (#1 of 1): Resource leak (RESOURCE_LEAK)
|
||||
26. leaked_storage: Variable deviceName going out of scope leaks the storage it points to.
|
||||
|
||||
src/hotplug_libudev.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
commit 3f89340785934785cf1490d3e788eefb25c50a69
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Fri Mar 25 17:26:14 2022 +0100
|
||||
|
||||
configure.ac: fail if flex is not found
|
||||
|
||||
Thanks to Ian Norton for the bug report
|
||||
Closes https://github.com/LudovicRousseau/PCSC/issues/124
|
||||
|
||||
configure.ac | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
commit dfd05d56b7a0f415e2d8c44cd4de7eb9091eb2f3
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Fri Feb 18 10:35:44 2022 +0100
|
||||
|
||||
Makefile.am: do not include pcsclite.h in archive
|
||||
|
||||
The file src/PCSC/pcsclite.h is generated from src/PCSC/pcsclite.h.in by
|
||||
./configure
|
||||
No need to include it in the tarball archive.
|
||||
|
||||
Also no need to patch the .h in additon to the .h.in to update the value
|
||||
of PCSCLITE_MAX_READERS_CONTEXTS as done in the Fedora package.
|
||||
|
||||
src/Makefile.am | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
commit c7e62a42e8536f4657b35a08e619fc62da09d83e
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Fri Feb 18 10:30:50 2022 +0100
|
||||
|
||||
Makefile.am: do not include pcscd.h in archive
|
||||
|
||||
The file pcscd.h is generated from pcscd.h.in by ./configure
|
||||
No need to include it in the tarball archive.
|
||||
|
||||
src/Makefile.am | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
commit 3835a22cd359c95940b10fd9eec3c76c77b97c14
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Wed Feb 16 11:59:11 2022 +0100
|
||||
|
||||
Fix compiler warning: comparison of integers of different signs
|
||||
|
||||
winscard_svc.c:441:18: warning: comparison of integers of different signs: 'uint32_t' (aka 'unsigned int') and 'LONG' (aka 'int') [-Wsign-compare]
|
||||
if (waStr.rv != SCARD_F_INTERNAL_ERROR)
|
||||
~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Thanks to Александр for the bug report
|
||||
Fixes: https://github.com/LudovicRousseau/PCSC/issues/120
|
||||
|
||||
src/winscard_svc.c | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
commit 7aa2e8fd024c1ddbaf786a27575d23c7fa1a9d4e
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sat Feb 12 18:39:33 2022 +0100
|
||||
|
||||
pcscdaemon: -v displays internal constants values
|
||||
|
||||
If the option -v|--version is used then pcscd displays 2 constant
|
||||
values: MAX_READERNAME & PCSCLITE_MAX_READERS_CONTEXTS
|
||||
|
||||
It is interesting to display PCSCLITE_MAX_READERS_CONTEXTS because
|
||||
Fedora includes a patch to increase the value from 16 (default) to 48.
|
||||
|
||||
This change will help diagnose problems like Fedora + flatpak
|
||||
https://github.com/LudovicRousseau/PCSC/issues/118
|
||||
|
||||
src/pcscdaemon.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
commit c88055cebe0cd435c5415832726fc978538c563f
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sat Feb 12 18:37:50 2022 +0100
|
||||
|
||||
pcscdaemon: update copyright date
|
||||
|
||||
src/pcscdaemon.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
commit 8d3ac33ff515e4eb61b8903efa68771347d530a8
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sat Feb 12 18:36:52 2022 +0100
|
||||
|
||||
pcscdaemon: code reformat
|
||||
|
||||
src/pcscdaemon.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
commit 7e56d2773be27bb2e2935ee80a6deb5f47f1c936
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sat Feb 12 18:25:45 2022 +0100
|
||||
|
||||
pcscd.h.in: remove unused MAX_DEVICENAME
|
||||
|
||||
src/pcscd.h.in | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
commit 9b485539159396ad866edc9ede7548feed3623c4
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sat Feb 12 18:18:38 2022 +0100
|
||||
|
||||
hotplug_libusb: use asprintf(3) instead of MAX_DEVICENAME
|
||||
|
||||
src/hotplug_libusb.c | 9 +++++----
|
||||
1 file changed, 5 insertions(+), 4 deletions(-)
|
||||
|
||||
commit d0cebfb784a9e22e9fa0d4dc29f84c9cf1f8b33c
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sat Feb 12 18:16:51 2022 +0100
|
||||
|
||||
hotplug_macosx: use asprintf(3) instead of MAX_DEVICENAME
|
||||
|
||||
src/hotplug_macosx.c | 7 +++----
|
||||
1 file changed, 3 insertions(+), 4 deletions(-)
|
||||
|
||||
commit 111788c902daf09c81b47487e014c2cd9bcce19d
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Fri Feb 11 17:15:53 2022 +0100
|
||||
|
||||
Fix compiler warning: variable ‘newReaderConfig’ set but not used
|
||||
|
||||
If "--disable-serial" is used we get:
|
||||
pcscdaemon.c:263:15: warning: variable ‘newReaderConfig’ set but not used [-Wunused-but-set-variable]
|
||||
263 | char *newReaderConfig;
|
||||
| ^~~~~~~~~~~~~~~
|
||||
|
||||
This issue was discovered while playing with PC/SC in flatpak(1)
|
||||
projects.
|
||||
|
||||
src/pcscdaemon.c | 11 +++++++++--
|
||||
1 file changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
commit c49ea4bf88f08070a695f7d05f28db72a0dbad7b
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sun Feb 6 16:52:53 2022 +0100
|
||||
|
||||
ISSUE_TEMPLATE.md: add "Issue" section
|
||||
|
||||
### Issue
|
||||
|
||||
* What do you do?
|
||||
* What result do you expect?
|
||||
* What result do you get instead?
|
||||
|
||||
.github/ISSUE_TEMPLATE.md | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
commit dcee5370b33f2e2ff6556d6a435e817cc0eca969
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sat Jan 22 17:19:01 2022 +0100
|
||||
|
||||
SCardGetStatusChange: speedup the case DISABLE_AUTO_POWER_ON
|
||||
|
||||
If DISABLE_AUTO_POWER_ON is defined then we do not waste time waiting
|
||||
for the card to be powered. The card may not be powered before long.
|
||||
|
||||
Since we wait PCSCLITE_STATUS_POLL_RATE (400000 µs) for each card, the
|
||||
delay can be very long for an 8 slots reader (sysmoOCTSIM):
|
||||
400ms * 8 = 3.2 seconds
|
||||
|
||||
or very very long for a 96 slots reader (sysmoSIMBANK-96):
|
||||
400ms * 96 = 38.4 seconds
|
||||
|
||||
src/winscard_clnt.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
commit 731e929d2f1c1d6c6db03a6337f35cf4fd1c12fb (debug-zotac/master)
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sun Dec 19 17:42:02 2021 +0100
|
||||
|
||||
Initialize Atomic field of struct RdrCliHandles
|
||||
|
||||
src/readerfactory.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
commit 0e78fde711a28c0de8a46371207469466f41e490
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sun Dec 19 17:34:38 2021 +0100
|
||||
|
||||
Initialize Atomic fields of struct ReaderContext
|
||||
|
||||
The elements of array READER_CONTEXT *
|
||||
sReadersContexts[PCSCLITE_MAX_READERS_CONTEXTS] are dynamically allocated
|
||||
so they also need to be dynamically initialized for atomic fields.
|
||||
|
||||
src/readerfactory.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
commit 84555bcdcdd3b014f414710ffca2c4350cb25aba
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Wed Dec 15 18:57:17 2021 +0100
|
||||
|
||||
github actions: add --enable-debugatr
|
||||
|
||||
.github/workflows/build.yml | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
commit 9d54ed3fe1d89d539bdadcc63b5a7ef098c9231e
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Wed Dec 15 18:56:56 2021 +0100
|
||||
|
||||
github actions: reformat
|
||||
|
||||
.github/workflows/build.yml | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
commit d942a8c895760191257ddcb792fdeb7ac2a7ef24
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Wed Dec 15 18:48:06 2021 +0100
|
||||
|
||||
github actions: run "make distcheck" only for --disable-strict
|
||||
|
||||
.github/workflows/build.yml | 6 ++----
|
||||
1 file changed, 2 insertions(+), 4 deletions(-)
|
||||
|
||||
commit 451daab067b23718e179f4b6931c5f07fd21487a
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Wed Dec 15 18:40:20 2021 +0100
|
||||
|
||||
github action; remove double make
|
||||
|
||||
.github/workflows/build.yml | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
commit 8d2e26ddfa613c0a411fcf4d07aa7e5f374eecc4
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Wed Dec 15 12:06:19 2021 +0100
|
||||
|
||||
github actions: build default config
|
||||
|
||||
.github/workflows/build.yml | 53 +++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 53 insertions(+)
|
||||
|
||||
commit 5d920fb14b8320f6ea82036df89bde7431e0f828
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Wed Dec 15 14:58:04 2021 +0100
|
||||
|
||||
Fix compiler warning for --enable-embedded
|
||||
|
||||
debuglog.c: In function ‘DebugLogSetCategory’:
|
||||
debuglog.c:89:9: error: ‘return’ with a value, in function returning void [-Werror=return-type]
|
||||
89 | return 0;
|
||||
| ^
|
||||
debuglog.c:85:15: note: declared here
|
||||
85 | INTERNAL void DebugLogSetCategory(const int dbginfo)
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
|
||||
src/debuglog.c | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
commit 8650c062eed45e25fa05e35dbc8b5130cf8ab061
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Wed Dec 15 15:03:53 2021 +0100
|
||||
|
||||
Fix compiler warnings for --enable-embedded
|
||||
|
||||
readerfactory.c: In function ‘RFAddReader’:
|
||||
readerfactory.c:392:7: error: variable ‘log_level’ set but not used [-Werror=unused-but-set-variable]
|
||||
392 | int log_level = PCSC_LOG_ERROR;
|
||||
| ^~~~~~~~~
|
||||
CC pcscd-hotplug_libusb.o
|
||||
readerfactory.c: In function ‘RFInitializeReader’:
|
||||
readerfactory.c:1143:7: error: variable ‘log_level’ set but not used [-Werror=unused-but-set-variable]
|
||||
1143 | int log_level = PCSC_LOG_CRITICAL;
|
||||
| ^~~~~~~~~
|
||||
|
||||
src/PCSC/debuglog.h | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
commit 9124a59d8f1a8536f0b46f5ef2a1b4a1711f96b2
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Wed Dec 15 14:34:05 2021 +0100
|
||||
|
||||
configure: add --disable-strict option
|
||||
|
||||
By default the compiler arguments are now:
|
||||
-Wall -Wextra -Wno-unused-parameter -Werror ${CFLAGS}
|
||||
|
||||
configure.ac | 11 +++++++++++
|
||||
1 file changed, 11 insertions(+)
|
||||
|
||||
commit 5f6519a7b25b31d1d5fbfde70a3083741f824715
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Wed Dec 15 11:51:15 2021 +0100
|
||||
|
||||
hotplug_generic: remove useless #include
|
||||
|
||||
src/hotplug_generic.c | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
commit 618359945ede2de12bbe53f5cbafea3c3c608111
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Wed Dec 15 11:49:42 2021 +0100
|
||||
|
||||
hotplug_generic: remove dead code
|
||||
|
||||
src/hotplug_generic.c | 5 -----
|
||||
1 file changed, 5 deletions(-)
|
||||
|
||||
commit 25db7bc5504cb74336d45224ed33bd4ea88e835f
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Wed Dec 15 11:48:52 2021 +0100
|
||||
|
||||
hotplug_generic: Fix compiler warnings:
|
||||
|
||||
hotplug_generic.c:53:6: warning: no previous prototype for ‘HPSearchHotPluggables’ [-Wmissing-prototypes]
|
||||
53 | LONG HPSearchHotPluggables(void)
|
||||
| ^~~~~~~~~~~~~~~~~~~~~
|
||||
hotplug_generic.c:58:7: warning: no previous prototype for ‘HPRegisterForHotplugEvents’ [-Wmissing-prototypes]
|
||||
58 | ULONG HPRegisterForHotplugEvents(void)
|
||||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
hotplug_generic.c:63:6: warning: no previous prototype for ‘HPStopHotPluggables’ [-Wmissing-prototypes]
|
||||
63 | LONG HPStopHotPluggables(void)
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
hotplug_generic.c:68:6: warning: no previous prototype for ‘HPReCheckSerialReaders’ [-Wmissing-prototypes]
|
||||
68 | void HPReCheckSerialReaders(void)
|
||||
| ^~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
src/hotplug_generic.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
commit a4bdfd2eb6e908c8306fe421137a83573ba05d8c
|
||||
Author: Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
||||
Date: Tue Dec 14 08:20:59 2021 +0100
|
||||
|
||||
src/hotplug_generic.c: fix build without lib{udev,usb}
|
||||
|
||||
Fix the following build failure without lib{udev,usb} raised since
|
||||
version 1.9.5 and
|
||||
https://github.com/LudovicRousseau/PCSC/commit/6f8f170db3c88c59a5ddb5ae5319b921a901a6aa:
|
||||
|
||||
/home/giuliobenetti/autobuild/run/instance-2/output-1/host/lib/gcc/arm-buildroot-linux-gnueabihf/11.2.0/../../../../arm-buildroot-linux-gnueabihf/bin/ld: pcscd-pcscdaemon.o: in function `signal_thread':
|
||||
pcscdaemon.c:(.text+0x444): undefined reference to `HPReCheckSerialReaders'
|
||||
|
||||
Fixes:
|
||||
- http://autobuild.buildroot.org/results/6cf323229f32967aa554418410dc94b7094d09af
|
||||
|
||||
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
||||
|
||||
src/hotplug_generic.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
commit d56ed18dbebc4423506ce7f61d3e3bcf4bdc4cb0
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sun Dec 12 17:26:09 2021 +0100
|
||||
|
||||
Remove mutex and use _Atomic instead
|
||||
|
||||
Remove the mutex "reference_lock" used to protect modifications of
|
||||
"reference".
|
||||
"reference" is now "_Atomic int" so +1 and -1 operations are managed by
|
||||
C11 language itself.
|
||||
|
||||
src/readerfactory.c | 8 --------
|
||||
src/readerfactory.h | 3 +--
|
||||
2 files changed, 1 insertion(+), 10 deletions(-)
|
||||
|
||||
commit c2d6e38e0a3d871718b8f06b37fa04aa4c245eb2
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sun Dec 12 16:56:32 2021 +0100
|
||||
|
||||
Fix race with dwEventStatus
|
||||
|
||||
The problem is (in part) with the switch() that may read the variable
|
||||
more than once.
|
||||
|
||||
==================
|
||||
WARNING: ThreadSanitizer: data race (pid=10828)
|
||||
Write of size 8 at 0x7b040000ae78 by thread T6 (mutexes: write M0):
|
||||
#0 RFSetReaderEventState PCSC/src/readerfactory.c:1321:32 (pcscd+0x4c45ce)
|
||||
#1 EHStatusHandlerThread PCSC/src/eventhandler.c:382:11 (pcscd+0x4bee54)
|
||||
|
||||
Previous read of size 8 at 0x7b040000ae78 by thread T8:
|
||||
#0 RFCheckReaderEventState PCSC/src/readerfactory.c:1350:24 (pcscd+0x4c46c6)
|
||||
#1 SCardStatus PCSC/src/winscard.c:1286:7 (pcscd+0x4ce7b5)
|
||||
#2 ContextThread PCSC/src/winscard_svc.c:635:16 (pcscd+0x4d0cc1)
|
||||
|
||||
Location is heap block of size 16 at 0x7b040000ae70 allocated by thread T8:
|
||||
#0 malloc <null> (pcscd+0x42a65c)
|
||||
#1 RFAddReaderHandle PCSC/src/readerfactory.c:1249:14 (pcscd+0x4c43b4)
|
||||
#2 SCardConnect PCSC/src/winscard.c:491:7 (pcscd+0x4ccc16)
|
||||
#3 ContextThread PCSC/src/winscard_svc.c:502:16 (pcscd+0x4d0a70)
|
||||
|
||||
Mutex M0 (0x7b4c000000a0) created at:
|
||||
#0 pthread_mutex_init <null> (pcscd+0x42d2fd)
|
||||
#1 RFAddReader PCSC/src/readerfactory.c:329:8 (pcscd+0x4c1d18)
|
||||
#2 HPAddDevice PCSC/src/hotplug_libudev.c:534:8 (pcscd+0x4cba1c)
|
||||
#3 HPEstablishUSBNotifications PCSC/src/hotplug_libudev.c:668:6 (pcscd+0x4cb4d4)
|
||||
|
||||
Thread T6 (tid=11122, running) created by thread T2 at:
|
||||
#0 pthread_create <null> (pcscd+0x42be8b)
|
||||
#1 ThreadCreate PCSC/src/utils.c:184:8 (pcscd+0x4cc2dc)
|
||||
#2 EHSpawnEventHandler PCSC/src/eventhandler.c:237:7 (pcscd+0x4beb59)
|
||||
#3 RFAddReader PCSC/src/readerfactory.c:426:8 (pcscd+0x4c21b9)
|
||||
#4 HPAddDevice PCSC/src/hotplug_libudev.c:534:8 (pcscd+0x4cba1c)
|
||||
#5 HPEstablishUSBNotifications PCSC/src/hotplug_libudev.c:668:6 (pcscd+0x4cb4d4)
|
||||
|
||||
Thread T8 (tid=11173, running) created by main thread at:
|
||||
#0 pthread_create <null> (pcscd+0x42be8b)
|
||||
#1 ThreadCreate PCSC/src/utils.c:184:8 (pcscd+0x4cc2dc)
|
||||
#2 CreateContextThread PCSC/src/winscard_svc.c:236:7 (pcscd+0x4cfd8b)
|
||||
#3 SVCServiceRunLoop PCSC/src/pcscdaemon.c:134:9 (pcscd+0x4c1082)
|
||||
#4 main PCSC/src/pcscdaemon.c:786:2 (pcscd+0x4c09c4)
|
||||
|
||||
SUMMARY: ThreadSanitizer: data race PCSC/src/readerfactory.c:1321:32 in RFSetReaderEventState
|
||||
==================
|
||||
|
||||
src/readerfactory.c | 4 +++-
|
||||
src/readerfactory.h | 2 +-
|
||||
2 files changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
commit 4a2fb8f770ec307c6bca50b8176674dedab2a205
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sun Dec 12 15:44:24 2021 +0100
|
||||
|
||||
readerfactory.h: fix data race with contexts field
|
||||
|
||||
The .contexts field is used in read/write from different threads. We
|
||||
must protect the accesses by declaring it _Atomic (from C11).
|
||||
|
||||
Thanks to andrei-datcu for the patch
|
||||
"No data races in EHStatusHandlerThread #112"
|
||||
https://github.com/LudovicRousseau/PCSC/pull/112
|
||||
|
||||
src/readerfactory.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
commit 49655255c7c5519cdd61045ea5d3cefb72f8ae7b
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sun Dec 12 15:40:27 2021 +0100
|
||||
|
||||
readerfactory.h: fix data race with hLockId
|
||||
|
||||
"volatile" does not help solve data races in multi-thread programs.
|
||||
|
||||
See https://en.cppreference.com/w/c/language/volatile
|
||||
" Note that volatile variables are not suitable for communication
|
||||
between threads; they do not offer atomicity, synchronization, or memory
|
||||
ordering. A read from a volatile variable that is modified by another
|
||||
thread without synchronization or concurrent modification from two
|
||||
unsynchronized threads is undefined behavior due to a data race. "
|
||||
|
||||
We must use "_Atomic" from C11 instead.
|
||||
|
||||
Thanks to andrei-datcu for the patch
|
||||
"No data races in EHStatusHandlerThread #112"
|
||||
https://github.com/LudovicRousseau/PCSC/pull/112
|
||||
|
||||
src/readerfactory.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
commit e46aad0c3571bd5f9da4cd4544fa3d6201dc3890
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sun Dec 12 15:25:32 2021 +0100
|
||||
|
||||
pcscdaemon.c: Fix data race for AraKiri variable
|
||||
|
||||
Issue reported by clang ThreadSanitizer
|
||||
|
||||
WARNING: ThreadSanitizer: data race (pid=14419)
|
||||
Read of size 1 at 0x000000f3a9c8 by main thread:
|
||||
#0 SVCServiceRunLoop <null> (pcscd+0x4c0da9)
|
||||
#1 main <null> (pcscd+0x4c0694)
|
||||
|
||||
Previous write of size 1 at 0x000000f3a9c8 by thread T1:
|
||||
#0 signal_thread <null> (pcscd+0x4c0aca)
|
||||
|
||||
As if synchronized via sleep:
|
||||
#0 nanosleep <null> (pcscd+0x4297dd)
|
||||
#1 SYS_USleep <null> (pcscd+0x4c6c36)
|
||||
#2 SVCServiceRunLoop <null> (pcscd+0x4c0cef)
|
||||
#3 main <null> (pcscd+0x4c0694)
|
||||
|
||||
Location is global 'AraKiri' of size 1 at 0x000000f3a9c8 (pcscd+0x000000f3a9c8)
|
||||
|
||||
Thread T1 (tid=14421, running) created by main thread at:
|
||||
#0 pthread_create <null> (pcscd+0x42be9b)
|
||||
#1 main <null> (pcscd+0x4c01c8)
|
||||
|
||||
SUMMARY: ThreadSanitizer: data race (/home/rousseau/sc/costa/PCSC/src/pcscd+0x4c0da9) in SVCServiceRunLoop
|
||||
|
||||
src/pcscdaemon.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
commit 7e63856e6661b67a84871bfd4f4783f9b971509a
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sun Dec 5 14:31:44 2021 +0100
|
||||
|
||||
pcscd.8: improve documentation of --config
|
||||
|
||||
doc/pcscd.8.in | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
commit e706590870f2422921bf24b680df84efedf52b1f
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sun Dec 5 14:21:30 2021 +0100
|
||||
|
||||
pcscd: improve messages about reader.conf.d
|
||||
|
||||
Thanks to Kirill Elagin
|
||||
" Misleading references to /etc/reader.conf throughout the documentation #115 "
|
||||
https://github.com/LudovicRousseau/PCSC/issues/115
|
||||
|
||||
src/pcscdaemon.c | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
commit 68da917fb086e318eac2910877e2c87f9f49b370
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sat Dec 4 21:46:42 2021 +0100
|
||||
|
||||
configure.ac: better documentation for --disable-serial
|
||||
|
||||
Thanks to Kirill Elagin
|
||||
" Misleading references to /etc/reader.conf throughout the documentation #115 "
|
||||
https://github.com/LudovicRousseau/PCSC/issues/115
|
||||
|
||||
configure.ac | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
commit 0fb14511c3820499837e2e6c1ec4f760816ed0fc
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sat Dec 4 21:45:02 2021 +0100
|
||||
|
||||
configfile.l: update reader.conf warning for USB
|
||||
|
||||
Thanks to Kirill Elagin
|
||||
" Misleading references to /etc/reader.conf throughout the documentation #115 "
|
||||
https://github.com/LudovicRousseau/PCSC/issues/115
|
||||
|
||||
src/configfile.l | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
commit ded8c3246fb16d133ed5a5c3f288583f016ba462
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sat Dec 4 21:43:12 2021 +0100
|
||||
|
||||
pcscd.8: update /etc/reader.conf.d/ documentation
|
||||
|
||||
Thanks to Kirill Elagin
|
||||
" Misleading references to /etc/reader.conf throughout the documentation #115 "
|
||||
https://github.com/LudovicRousseau/PCSC/issues/115
|
||||
|
||||
doc/pcscd.8.in | 24 ++++++++++++------------
|
||||
1 file changed, 12 insertions(+), 12 deletions(-)
|
||||
|
||||
commit e4afdbad265601170e4cfa2f304a513d863c3b77
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sat Dec 4 17:54:09 2021 +0100
|
||||
|
||||
reader.conf.5: update /etc/reader.conf.d/ documentation
|
||||
|
||||
Thanks to Kirill Elagin
|
||||
" Misleading references to /etc/reader.conf throughout the documentation #115 "
|
||||
https://github.com/LudovicRousseau/PCSC/issues/115
|
||||
|
||||
doc/reader.conf.5.in | 17 +++++++++--------
|
||||
1 file changed, 9 insertions(+), 8 deletions(-)
|
||||
|
||||
commit 1f99fa0bc497db6c376968d7fe996b7c669b11e4
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sat Dec 4 17:37:13 2021 +0100
|
||||
|
||||
Remove useless src/utils/
|
||||
|
||||
"installifd" is for non-USB drivers. Not very usefull any more
|
||||
"formaticc" can be replaced by scriptor from pcsc-tools
|
||||
|
||||
src/utils/Makefile.am | 14 ---
|
||||
src/utils/README | 27 -----
|
||||
src/utils/formaticc.c | 316 -------------------------------------------------
|
||||
src/utils/installifd.c | 166 --------------------------
|
||||
src/utils/sample.ibm | 1 -
|
||||
src/utils/sample.in | 6 -
|
||||
src/utils/sample.out | 1 -
|
||||
7 files changed, 531 deletions(-)
|
||||
|
||||
commit 2d52b510be2b77d266f8de89d10029fd67b46783
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sat Dec 4 17:32:21 2021 +0100
|
||||
|
||||
README: improve documentation about /etc/reader.conf.d/
|
||||
|
||||
Thanks to Kirill Elagin
|
||||
" Misleading references to /etc/reader.conf throughout the documentation #115 "
|
||||
https://github.com/LudovicRousseau/PCSC/issues/115
|
||||
|
||||
README | 23 ++++++++++-------------
|
||||
1 file changed, 10 insertions(+), 13 deletions(-)
|
||||
|
||||
commit 9a24ac2f978d6a762eaf62b56a65a3426c39e822
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sat Dec 4 17:19:31 2021 +0100
|
||||
|
||||
configure.ac: update --enable-confdir= documentation
|
||||
|
||||
The default value is "${sysconfdir}/reader.conf.d" and not
|
||||
"/etc/reader.conf.d".
|
||||
|
||||
This makes it more explicit that ${sysconfdir} is used.
|
||||
|
||||
configure.ac | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
commit d92b5d4fad5dea95ce8d12fac07fe1eec2150ad1 (tag: 1.9.5)
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sat Dec 4 13:16:36 2021 +0100
|
||||
|
||||
|
@ -36,7 +768,7 @@ Date: Sat Dec 4 13:23:53 2021 +0100
|
|||
etc/Makefile.am | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
commit 4b39499ac201116a90dee5151dcc7b5af6ac153d (origin/master, origin/HEAD, github/master)
|
||||
commit 4b39499ac201116a90dee5151dcc7b5af6ac153d
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sat Dec 4 12:46:18 2021 +0100
|
||||
|
||||
|
|
|
@ -235,6 +235,7 @@ EGREP = @EGREP@
|
|||
ETAGS = @ETAGS@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
FILECMD = @FILECMD@
|
||||
GREP = @GREP@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
|
|
23
README
23
README
|
@ -61,23 +61,20 @@ By running pcscd under a priveledged account you can link to
|
|||
libpcsclite.so and it will act as a client to the pcscd allowing multiple
|
||||
applications to be run under non-priveledged accounts.
|
||||
|
||||
Then type make install to copy etc/reader.conf to
|
||||
/etc/reader.conf and the libraries to /usr/local/lib. If you choose
|
||||
not to have your reader.conf in /etc then use --enable-confdir=DIR
|
||||
Then type "make install" to copy the libraries to /usr/local/lib. If you
|
||||
choose not to have your reader configuration file in /etc/reader.conf.d/
|
||||
then use --enable-confdir=DIR
|
||||
|
||||
You must be root to do make install in the default locations.
|
||||
|
||||
Be sure to edit the /etc/reader.conf file to fit your needs and make sure
|
||||
your IFD Handler driver is located in the path specified as LIBRARYPATH
|
||||
in reader.conf. If you are using a reader with multiple smart card slots
|
||||
all you have to do is define a different FRIENDLYNAME in the reader.conf
|
||||
for each reader. Both will have the same information otherwise.
|
||||
Be sure to edit the /etc/reader.conf.d/my_reader.conf file for your
|
||||
reader to fit your needs and make sure your IFD Handler driver is
|
||||
located in the path specified as LIBRARYPATH in my_reader.conf. If you
|
||||
are using a reader with multiple smart card slots all you have to do is
|
||||
define a different FRIENDLYNAME in the my_reader.conf for each reader.
|
||||
Both will have the same information otherwise.
|
||||
|
||||
There is an config file generator in the utils directory. It is called
|
||||
installifd. You may use this to generate the /etc/reader.conf file.
|
||||
|
||||
USB users shall not use /etc/reader.conf. pcscd will give
|
||||
a warning that the file does not exist or contain anything useful.
|
||||
USB users shall not use /etc/reader.conf.d/ to configure USB drivers.
|
||||
|
||||
There is a test program with this package:
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.71 for pcsc-lite 1.9.5.
|
||||
# Generated by GNU Autoconf 2.71 for pcsc-lite 1.9.6.
|
||||
#
|
||||
#
|
||||
# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
|
||||
|
@ -618,8 +618,8 @@ MAKEFLAGS=
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='pcsc-lite'
|
||||
PACKAGE_TARNAME='pcsc-lite'
|
||||
PACKAGE_VERSION='1.9.5'
|
||||
PACKAGE_STRING='pcsc-lite 1.9.5'
|
||||
PACKAGE_VERSION='1.9.6'
|
||||
PACKAGE_STRING='pcsc-lite 1.9.6'
|
||||
PACKAGE_BUGREPORT=''
|
||||
PACKAGE_URL=''
|
||||
|
||||
|
@ -701,6 +701,7 @@ MANIFEST_TOOL
|
|||
RANLIB
|
||||
DLLTOOL
|
||||
OBJDUMP
|
||||
FILECMD
|
||||
NM
|
||||
ac_ct_DUMPBIN
|
||||
DUMPBIN
|
||||
|
@ -852,6 +853,7 @@ enable_debugatr
|
|||
enable_ipcdir
|
||||
enable_confdir
|
||||
enable_filter
|
||||
enable_strict
|
||||
'
|
||||
ac_precious_vars='build_alias
|
||||
host_alias
|
||||
|
@ -1422,7 +1424,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 pcsc-lite 1.9.5 to adapt to many kinds of systems.
|
||||
\`configure' configures pcsc-lite 1.9.6 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
|
@ -1493,7 +1495,7 @@ fi
|
|||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of pcsc-lite 1.9.5:";;
|
||||
short | recursive ) echo "Configuration of pcsc-lite 1.9.6:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
|
@ -1517,7 +1519,7 @@ Optional Features:
|
|||
--disable-libtool-lock avoid locking (might break parallel builds)
|
||||
--disable-documentation do not build documentation
|
||||
--disable-libsystemd do not use libsystemd
|
||||
--disable-serial do not use serial reader.conf file
|
||||
--disable-serial do not use serial reader.conf files
|
||||
--disable-usb do not use usb hotplug
|
||||
--disable-libudev do not use libudev
|
||||
--enable-libusb use libusb
|
||||
|
@ -1529,10 +1531,11 @@ Optional Features:
|
|||
--enable-debugatr enable ATR debug messages from pcscd
|
||||
--enable-ipcdir=DIR directory containing IPC files (default /run/pcscd)
|
||||
--enable-confdir=DIR directory containing reader configurations (default
|
||||
/etc/reader.conf.d)
|
||||
${sysconfdir}/reader.conf.d)
|
||||
--disable-filter disable reader filtering using
|
||||
PCSCLITE_FILTER_IGNORE_READER_NAMES and
|
||||
PCSCLITE_FILTER_EXTEND_READER_NAMES
|
||||
--disable-strict disable strict compile mode [enabled]
|
||||
|
||||
Optional Packages:
|
||||
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
|
||||
|
@ -1646,7 +1649,7 @@ fi
|
|||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
pcsc-lite configure 1.9.5
|
||||
pcsc-lite configure 1.9.6
|
||||
generated by GNU Autoconf 2.71
|
||||
|
||||
Copyright (C) 2021 Free Software Foundation, Inc.
|
||||
|
@ -2062,7 +2065,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 pcsc-lite $as_me 1.9.5, which was
|
||||
It was created by pcsc-lite $as_me 1.9.6, which was
|
||||
generated by GNU Autoconf 2.71. Invocation command line was
|
||||
|
||||
$ $0$ac_configure_args_raw
|
||||
|
@ -3333,7 +3336,7 @@ fi
|
|||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='pcsc-lite'
|
||||
VERSION='1.9.5'
|
||||
VERSION='1.9.6'
|
||||
|
||||
|
||||
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
|
||||
|
@ -5529,6 +5532,10 @@ fi
|
|||
rm -f conftest.l $LEX_OUTPUT_ROOT.c
|
||||
|
||||
fi
|
||||
if test $LEX = ":"
|
||||
then
|
||||
as_fn_error $? "no lex or flex found" "$LINENO" 5
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
@ -6859,8 +6866,8 @@ esac
|
|||
|
||||
|
||||
|
||||
macro_version='2.4.6'
|
||||
macro_revision='2.4.6'
|
||||
macro_version='2.4.7'
|
||||
macro_revision='2.4.7'
|
||||
|
||||
|
||||
|
||||
|
@ -7271,13 +7278,13 @@ else
|
|||
mingw*) lt_bad_file=conftest.nm/nofile ;;
|
||||
*) lt_bad_file=/dev/null ;;
|
||||
esac
|
||||
case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
|
||||
case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in
|
||||
*$lt_bad_file* | *'Invalid file or object type'*)
|
||||
lt_cv_path_NM="$tmp_nm -B"
|
||||
break 2
|
||||
;;
|
||||
*)
|
||||
case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
|
||||
case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in
|
||||
*/dev/null*)
|
||||
lt_cv_path_NM="$tmp_nm -p"
|
||||
break 2
|
||||
|
@ -7415,7 +7422,7 @@ esac
|
|||
fi
|
||||
fi
|
||||
|
||||
case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
|
||||
case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
|
||||
*COFF*)
|
||||
DUMPBIN="$DUMPBIN -symbols -headers"
|
||||
;;
|
||||
|
@ -7508,7 +7515,7 @@ else $as_nop
|
|||
lt_cv_sys_max_cmd_len=8192;
|
||||
;;
|
||||
|
||||
bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
|
||||
bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
|
||||
# This has been around since 386BSD, at least. Likely further.
|
||||
if test -x /sbin/sysctl; then
|
||||
lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
|
||||
|
@ -7551,7 +7558,7 @@ else $as_nop
|
|||
sysv5* | sco5v6* | sysv4.2uw2*)
|
||||
kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
|
||||
if test -n "$kargmax"; then
|
||||
lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
|
||||
lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'`
|
||||
else
|
||||
lt_cv_sys_max_cmd_len=32768
|
||||
fi
|
||||
|
@ -7756,6 +7763,114 @@ esac
|
|||
|
||||
|
||||
|
||||
if test -n "$ac_tool_prefix"; then
|
||||
# Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args.
|
||||
set dummy ${ac_tool_prefix}file; ac_word=$2
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
|
||||
printf %s "checking for $ac_word... " >&6; }
|
||||
if test ${ac_cv_prog_FILECMD+y}
|
||||
then :
|
||||
printf %s "(cached) " >&6
|
||||
else $as_nop
|
||||
if test -n "$FILECMD"; then
|
||||
ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test.
|
||||
else
|
||||
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||
for as_dir in $PATH
|
||||
do
|
||||
IFS=$as_save_IFS
|
||||
case $as_dir in #(((
|
||||
'') as_dir=./ ;;
|
||||
*/) ;;
|
||||
*) as_dir=$as_dir/ ;;
|
||||
esac
|
||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||
if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
|
||||
ac_cv_prog_FILECMD="${ac_tool_prefix}file"
|
||||
printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
|
||||
break 2
|
||||
fi
|
||||
done
|
||||
done
|
||||
IFS=$as_save_IFS
|
||||
|
||||
fi
|
||||
fi
|
||||
FILECMD=$ac_cv_prog_FILECMD
|
||||
if test -n "$FILECMD"; then
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5
|
||||
printf "%s\n" "$FILECMD" >&6; }
|
||||
else
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
printf "%s\n" "no" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
fi
|
||||
if test -z "$ac_cv_prog_FILECMD"; then
|
||||
ac_ct_FILECMD=$FILECMD
|
||||
# Extract the first word of "file", so it can be a program name with args.
|
||||
set dummy file; ac_word=$2
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
|
||||
printf %s "checking for $ac_word... " >&6; }
|
||||
if test ${ac_cv_prog_ac_ct_FILECMD+y}
|
||||
then :
|
||||
printf %s "(cached) " >&6
|
||||
else $as_nop
|
||||
if test -n "$ac_ct_FILECMD"; then
|
||||
ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # Let the user override the test.
|
||||
else
|
||||
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||
for as_dir in $PATH
|
||||
do
|
||||
IFS=$as_save_IFS
|
||||
case $as_dir in #(((
|
||||
'') as_dir=./ ;;
|
||||
*/) ;;
|
||||
*) as_dir=$as_dir/ ;;
|
||||
esac
|
||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||
if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
|
||||
ac_cv_prog_ac_ct_FILECMD="file"
|
||||
printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
|
||||
break 2
|
||||
fi
|
||||
done
|
||||
done
|
||||
IFS=$as_save_IFS
|
||||
|
||||
fi
|
||||
fi
|
||||
ac_ct_FILECMD=$ac_cv_prog_ac_ct_FILECMD
|
||||
if test -n "$ac_ct_FILECMD"; then
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5
|
||||
printf "%s\n" "$ac_ct_FILECMD" >&6; }
|
||||
else
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
printf "%s\n" "no" >&6; }
|
||||
fi
|
||||
|
||||
if test "x$ac_ct_FILECMD" = x; then
|
||||
FILECMD=":"
|
||||
else
|
||||
case $cross_compiling:$ac_tool_warned in
|
||||
yes:)
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
|
||||
printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
|
||||
ac_tool_warned=yes ;;
|
||||
esac
|
||||
FILECMD=$ac_ct_FILECMD
|
||||
fi
|
||||
else
|
||||
FILECMD="$ac_cv_prog_FILECMD"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if test -n "$ac_tool_prefix"; then
|
||||
# Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
|
||||
set dummy ${ac_tool_prefix}objdump; ac_word=$2
|
||||
|
@ -7899,7 +8014,7 @@ beos*)
|
|||
|
||||
bsdi[45]*)
|
||||
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
|
||||
lt_cv_file_magic_cmd='/usr/bin/file -L'
|
||||
lt_cv_file_magic_cmd='$FILECMD -L'
|
||||
lt_cv_file_magic_test_file=/shlib/libc.so
|
||||
;;
|
||||
|
||||
|
@ -7933,14 +8048,14 @@ darwin* | rhapsody*)
|
|||
lt_cv_deplibs_check_method=pass_all
|
||||
;;
|
||||
|
||||
freebsd* | dragonfly*)
|
||||
freebsd* | dragonfly* | midnightbsd*)
|
||||
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
|
||||
case $host_cpu in
|
||||
i*86 )
|
||||
# Not sure whether the presence of OpenBSD here was a mistake.
|
||||
# Let's accept both of them until this is cleared up.
|
||||
lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
|
||||
lt_cv_file_magic_cmd=/usr/bin/file
|
||||
lt_cv_file_magic_cmd=$FILECMD
|
||||
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
|
||||
;;
|
||||
esac
|
||||
|
@ -7954,7 +8069,7 @@ haiku*)
|
|||
;;
|
||||
|
||||
hpux10.20* | hpux11*)
|
||||
lt_cv_file_magic_cmd=/usr/bin/file
|
||||
lt_cv_file_magic_cmd=$FILECMD
|
||||
case $host_cpu in
|
||||
ia64*)
|
||||
lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
|
||||
|
@ -8001,7 +8116,7 @@ netbsd* | netbsdelf*-gnu)
|
|||
|
||||
newos6*)
|
||||
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
|
||||
lt_cv_file_magic_cmd=/usr/bin/file
|
||||
lt_cv_file_magic_cmd=$FILECMD
|
||||
lt_cv_file_magic_test_file=/usr/lib/libnls.so
|
||||
;;
|
||||
|
||||
|
@ -8374,13 +8489,29 @@ esac
|
|||
fi
|
||||
|
||||
: ${AR=ar}
|
||||
: ${AR_FLAGS=cr}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Use ARFLAGS variable as AR's operation code to sync the variable naming with
|
||||
# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have
|
||||
# higher priority because thats what people were doing historically (setting
|
||||
# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS
|
||||
# variable obsoleted/removed.
|
||||
|
||||
test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr}
|
||||
lt_ar_flags=$AR_FLAGS
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override
|
||||
# by AR_FLAGS because that was never working and AR_FLAGS is about to die.
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -8797,7 +8928,7 @@ esac
|
|||
|
||||
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
|
||||
# Gets list of data symbols to import.
|
||||
lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
|
||||
lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'"
|
||||
# Adjust the below global symbol transforms to fixup imported variables.
|
||||
lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
|
||||
lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
|
||||
|
@ -8815,20 +8946,20 @@ fi
|
|||
# Transform an extracted symbol line into a proper C declaration.
|
||||
# Some systems (esp. on ia64) link data and code symbols differently,
|
||||
# so use this general approach.
|
||||
lt_cv_sys_global_symbol_to_cdecl="sed -n"\
|
||||
lt_cv_sys_global_symbol_to_cdecl="$SED -n"\
|
||||
$lt_cdecl_hook\
|
||||
" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
|
||||
" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
|
||||
|
||||
# Transform an extracted symbol line into symbol name and symbol address
|
||||
lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
|
||||
lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\
|
||||
$lt_c_name_hook\
|
||||
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
|
||||
" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
|
||||
|
||||
# Transform an extracted symbol line into symbol name with lib prefix and
|
||||
# symbol address.
|
||||
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
|
||||
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\
|
||||
$lt_c_name_lib_hook\
|
||||
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
|
||||
" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
|
||||
|
@ -8852,7 +8983,7 @@ for ac_symprfx in "" "_"; do
|
|||
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
|
||||
# Fake it for dumpbin and say T for any non-static function,
|
||||
# D for any global variable and I for any imported variable.
|
||||
# Also find C++ and __fastcall symbols from MSVC++,
|
||||
# Also find C++ and __fastcall symbols from MSVC++ or ICC,
|
||||
# which start with @ or ?.
|
||||
lt_cv_sys_global_symbol_pipe="$AWK '"\
|
||||
" {last_section=section; section=\$ 3};"\
|
||||
|
@ -8870,9 +9001,9 @@ for ac_symprfx in "" "_"; do
|
|||
" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
|
||||
" ' prfx=^$ac_symprfx"
|
||||
else
|
||||
lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
|
||||
lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
|
||||
fi
|
||||
lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
|
||||
lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'"
|
||||
|
||||
# Check to see that the pipe works correctly.
|
||||
pipe_works=no
|
||||
|
@ -9072,7 +9203,7 @@ case $with_sysroot in #(
|
|||
fi
|
||||
;; #(
|
||||
/*)
|
||||
lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
|
||||
lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
|
||||
;; #(
|
||||
no|'')
|
||||
;; #(
|
||||
|
@ -9197,7 +9328,7 @@ ia64-*-hpux*)
|
|||
ac_status=$?
|
||||
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; then
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*ELF-32*)
|
||||
HPUX_IA64_MODE=32
|
||||
;;
|
||||
|
@ -9218,7 +9349,7 @@ ia64-*-hpux*)
|
|||
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; then
|
||||
if test yes = "$lt_cv_prog_gnu_ld"; then
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*32-bit*)
|
||||
LD="${LD-ld} -melf32bsmip"
|
||||
;;
|
||||
|
@ -9230,7 +9361,7 @@ ia64-*-hpux*)
|
|||
;;
|
||||
esac
|
||||
else
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*32-bit*)
|
||||
LD="${LD-ld} -32"
|
||||
;;
|
||||
|
@ -9256,7 +9387,7 @@ mips64*-*linux*)
|
|||
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; then
|
||||
emul=elf
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*32-bit*)
|
||||
emul="${emul}32"
|
||||
;;
|
||||
|
@ -9264,7 +9395,7 @@ mips64*-*linux*)
|
|||
emul="${emul}64"
|
||||
;;
|
||||
esac
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*MSB*)
|
||||
emul="${emul}btsmip"
|
||||
;;
|
||||
|
@ -9272,7 +9403,7 @@ mips64*-*linux*)
|
|||
emul="${emul}ltsmip"
|
||||
;;
|
||||
esac
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*N32*)
|
||||
emul="${emul}n32"
|
||||
;;
|
||||
|
@ -9296,14 +9427,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
|
|||
ac_status=$?
|
||||
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; then
|
||||
case `/usr/bin/file conftest.o` in
|
||||
case `$FILECMD conftest.o` in
|
||||
*32-bit*)
|
||||
case $host in
|
||||
x86_64-*kfreebsd*-gnu)
|
||||
LD="${LD-ld} -m elf_i386_fbsd"
|
||||
;;
|
||||
x86_64-*linux*)
|
||||
case `/usr/bin/file conftest.o` in
|
||||
case `$FILECMD conftest.o` in
|
||||
*x86-64*)
|
||||
LD="${LD-ld} -m elf32_x86_64"
|
||||
;;
|
||||
|
@ -9411,7 +9542,7 @@ printf "%s\n" "$lt_cv_cc_needs_belf" >&6; }
|
|||
ac_status=$?
|
||||
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; then
|
||||
case `/usr/bin/file conftest.o` in
|
||||
case `$FILECMD conftest.o` in
|
||||
*64-bit*)
|
||||
case $lt_cv_prog_gnu_ld in
|
||||
yes*)
|
||||
|
@ -10194,8 +10325,8 @@ int forced_loaded() { return 2;}
|
|||
_LT_EOF
|
||||
echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
|
||||
$LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
|
||||
echo "$AR cr libconftest.a conftest.o" >&5
|
||||
$AR cr libconftest.a conftest.o 2>&5
|
||||
echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5
|
||||
$AR $AR_FLAGS libconftest.a conftest.o 2>&5
|
||||
echo "$RANLIB libconftest.a" >&5
|
||||
$RANLIB libconftest.a 2>&5
|
||||
cat > conftest.c << _LT_EOF
|
||||
|
@ -10222,16 +10353,11 @@ printf "%s\n" "$lt_cv_ld_force_load" >&6; }
|
|||
_lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
|
||||
darwin1.*)
|
||||
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
|
||||
darwin*) # darwin 5.x on
|
||||
# if running on 10.5 or later, the deployment target defaults
|
||||
# to the OS version, if on x86, and 10.4, the deployment
|
||||
# target defaults to 10.4. Don't you love it?
|
||||
case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
|
||||
10.0,*86*-darwin8*|10.0,*-darwin[912]*)
|
||||
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
|
||||
10.[012][,.]*)
|
||||
darwin*)
|
||||
case $MACOSX_DEPLOYMENT_TARGET,$host in
|
||||
10.[012],*|,*powerpc*-darwin[5-8]*)
|
||||
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
|
||||
10.*|11.*)
|
||||
*)
|
||||
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
|
||||
esac
|
||||
;;
|
||||
|
@ -10590,8 +10716,8 @@ esac
|
|||
ofile=libtool
|
||||
can_build_shared=yes
|
||||
|
||||
# All known linkers require a '.a' archive for static linking (except MSVC,
|
||||
# which needs '.lib').
|
||||
# All known linkers require a '.a' archive for static linking (except MSVC and
|
||||
# ICC, which need '.lib').
|
||||
libext=a
|
||||
|
||||
with_gnu_ld=$lt_cv_prog_gnu_ld
|
||||
|
@ -11109,7 +11235,7 @@ lt_prog_compiler_static=
|
|||
lt_prog_compiler_static='-qstaticlink'
|
||||
;;
|
||||
*)
|
||||
case `$CC -V 2>&1 | sed 5q` in
|
||||
case `$CC -V 2>&1 | $SED 5q` in
|
||||
*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
|
||||
# Sun Fortran 8.3 passes all unrecognized flags to the linker
|
||||
lt_prog_compiler_pic='-KPIC'
|
||||
|
@ -11532,15 +11658,15 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
|
|||
|
||||
case $host_os in
|
||||
cygwin* | mingw* | pw32* | cegcc*)
|
||||
# FIXME: the MSVC++ port hasn't been tested in a loooong time
|
||||
# FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
|
||||
# When not using gcc, we currently assume that we are using
|
||||
# Microsoft Visual C++.
|
||||
# Microsoft Visual C++ or Intel C++ Compiler.
|
||||
if test yes != "$GCC"; then
|
||||
with_gnu_ld=no
|
||||
fi
|
||||
;;
|
||||
interix*)
|
||||
# we just hope/assume this is gcc and not c89 (= MSVC++)
|
||||
# we just hope/assume this is gcc and not c89 (= MSVC++ or ICC)
|
||||
with_gnu_ld=yes
|
||||
;;
|
||||
openbsd* | bitrig*)
|
||||
|
@ -11595,7 +11721,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
|
|||
whole_archive_flag_spec=
|
||||
fi
|
||||
supports_anon_versioning=no
|
||||
case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
|
||||
case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
|
||||
*GNU\ gold*) supports_anon_versioning=yes ;;
|
||||
*\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
|
||||
*\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
|
||||
|
@ -11707,6 +11833,7 @@ _LT_EOF
|
|||
emximp -o $lib $output_objdir/$libname.def'
|
||||
old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
|
||||
enable_shared_with_static_runtimes=yes
|
||||
file_list_spec='@'
|
||||
;;
|
||||
|
||||
interix[3-9]*)
|
||||
|
@ -11721,7 +11848,7 @@ _LT_EOF
|
|||
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
|
||||
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
|
||||
archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
||||
archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
||||
archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
||||
;;
|
||||
|
||||
gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
|
||||
|
@ -11764,7 +11891,7 @@ _LT_EOF
|
|||
compiler_needs_object=yes
|
||||
;;
|
||||
esac
|
||||
case `$CC -V 2>&1 | sed 5q` in
|
||||
case `$CC -V 2>&1 | $SED 5q` in
|
||||
*Sun\ C*) # Sun C 5.9
|
||||
whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
|
||||
compiler_needs_object=yes
|
||||
|
@ -11776,13 +11903,14 @@ _LT_EOF
|
|||
|
||||
if test yes = "$supports_anon_versioning"; then
|
||||
archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
|
||||
cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
echo "local: *; };" >> $output_objdir/$libname.ver~
|
||||
$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
|
||||
fi
|
||||
|
||||
case $cc_basename in
|
||||
tcc*)
|
||||
hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
|
||||
export_dynamic_flag_spec='-rdynamic'
|
||||
;;
|
||||
xlf* | bgf* | bgxlf* | mpixlf*)
|
||||
|
@ -11792,7 +11920,7 @@ _LT_EOF
|
|||
archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
|
||||
if test yes = "$supports_anon_versioning"; then
|
||||
archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
|
||||
cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
echo "local: *; };" >> $output_objdir/$libname.ver~
|
||||
$LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
|
||||
fi
|
||||
|
@ -11924,7 +12052,7 @@ _LT_EOF
|
|||
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
|
||||
export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
|
||||
else
|
||||
export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
|
||||
export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
|
||||
fi
|
||||
aix_use_runtimelinking=no
|
||||
|
||||
|
@ -12195,12 +12323,12 @@ fi
|
|||
|
||||
cygwin* | mingw* | pw32* | cegcc*)
|
||||
# When not using gcc, we currently assume that we are using
|
||||
# Microsoft Visual C++.
|
||||
# Microsoft Visual C++ or Intel C++ Compiler.
|
||||
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||
# no search path for DLLs.
|
||||
case $cc_basename in
|
||||
cl*)
|
||||
# Native MSVC
|
||||
cl* | icl*)
|
||||
# Native MSVC or ICC
|
||||
hardcode_libdir_flag_spec=' '
|
||||
allow_undefined_flag=unsupported
|
||||
always_export_symbols=yes
|
||||
|
@ -12241,7 +12369,7 @@ fi
|
|||
fi'
|
||||
;;
|
||||
*)
|
||||
# Assume MSVC wrapper
|
||||
# Assume MSVC and ICC wrapper
|
||||
hardcode_libdir_flag_spec=' '
|
||||
allow_undefined_flag=unsupported
|
||||
# Tell ltmain to make .lib files, not .a files.
|
||||
|
@ -12282,8 +12410,8 @@ fi
|
|||
output_verbose_link_cmd=func_echo_all
|
||||
archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
|
||||
module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
|
||||
archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
|
||||
module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
|
||||
archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
|
||||
module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
|
||||
|
||||
else
|
||||
ld_shlibs=no
|
||||
|
@ -12317,7 +12445,7 @@ fi
|
|||
;;
|
||||
|
||||
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
|
||||
freebsd* | dragonfly*)
|
||||
freebsd* | dragonfly* | midnightbsd*)
|
||||
archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
|
||||
hardcode_libdir_flag_spec='-R$libdir'
|
||||
hardcode_direct=yes
|
||||
|
@ -12498,6 +12626,7 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
|
|||
# Fabrice Bellard et al's Tiny C Compiler
|
||||
ld_shlibs=yes
|
||||
archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
|
||||
hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
|
@ -12569,6 +12698,7 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
|
|||
emximp -o $lib $output_objdir/$libname.def'
|
||||
old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
|
||||
enable_shared_with_static_runtimes=yes
|
||||
file_list_spec='@'
|
||||
;;
|
||||
|
||||
osf3*)
|
||||
|
@ -13261,7 +13391,7 @@ cygwin* | mingw* | pw32* | cegcc*)
|
|||
case $host_os in
|
||||
cygwin*)
|
||||
# Cygwin DLLs use 'cyg' prefix rather than 'lib'
|
||||
soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
|
||||
soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
|
||||
|
||||
sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
|
||||
;;
|
||||
|
@ -13271,14 +13401,14 @@ cygwin* | mingw* | pw32* | cegcc*)
|
|||
;;
|
||||
pw32*)
|
||||
# pw32 DLLs use 'pw' prefix rather than 'lib'
|
||||
library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
|
||||
library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
|
||||
;;
|
||||
esac
|
||||
dynamic_linker='Win32 ld.exe'
|
||||
;;
|
||||
|
||||
*,cl*)
|
||||
# Native MSVC
|
||||
*,cl* | *,icl*)
|
||||
# Native MSVC or ICC
|
||||
libname_spec='$name'
|
||||
soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
|
||||
library_names_spec='$libname.dll.lib'
|
||||
|
@ -13297,7 +13427,7 @@ cygwin* | mingw* | pw32* | cegcc*)
|
|||
done
|
||||
IFS=$lt_save_ifs
|
||||
# Convert to MSYS style.
|
||||
sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
|
||||
sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
|
||||
;;
|
||||
cygwin*)
|
||||
# Convert to unix form, then to dos form, then back to unix form
|
||||
|
@ -13334,7 +13464,7 @@ cygwin* | mingw* | pw32* | cegcc*)
|
|||
;;
|
||||
|
||||
*)
|
||||
# Assume MSVC wrapper
|
||||
# Assume MSVC and ICC wrapper
|
||||
library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
|
||||
dynamic_linker='Win32 ld.exe'
|
||||
;;
|
||||
|
@ -13367,7 +13497,7 @@ dgux*)
|
|||
shlibpath_var=LD_LIBRARY_PATH
|
||||
;;
|
||||
|
||||
freebsd* | dragonfly*)
|
||||
freebsd* | dragonfly* | midnightbsd*)
|
||||
# DragonFly does not have aout. When/if they implement a new
|
||||
# versioning mechanism, adjust this.
|
||||
if test -x /usr/bin/objformat; then
|
||||
|
@ -14532,19 +14662,29 @@ striplib=
|
|||
old_striplib=
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
|
||||
printf %s "checking whether stripping libraries is possible... " >&6; }
|
||||
if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
|
||||
test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
|
||||
test -z "$striplib" && striplib="$STRIP --strip-unneeded"
|
||||
if test -z "$STRIP"; then
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
printf "%s\n" "no" >&6; }
|
||||
else
|
||||
if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
|
||||
old_striplib="$STRIP --strip-debug"
|
||||
striplib="$STRIP --strip-unneeded"
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
printf "%s\n" "yes" >&6; }
|
||||
else
|
||||
# FIXME - insert some real tests, host_os isn't really good enough
|
||||
case $host_os in
|
||||
darwin*)
|
||||
if test -n "$STRIP"; then
|
||||
# FIXME - insert some real tests, host_os isn't really good enough
|
||||
striplib="$STRIP -x"
|
||||
old_striplib="$STRIP -S"
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
printf "%s\n" "yes" >&6; }
|
||||
;;
|
||||
freebsd*)
|
||||
if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
|
||||
old_striplib="$STRIP --strip-debug"
|
||||
striplib="$STRIP --strip-unneeded"
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
printf "%s\n" "yes" >&6; }
|
||||
else
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
|
@ -14557,6 +14697,7 @@ printf "%s\n" "no" >&6; }
|
|||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
@ -16458,6 +16599,20 @@ printf "%s\n" "#define FILTER_NAMES 1" >>confdefs.h
|
|||
PCSCLITE_FEATURES="${PCSCLITE_FEATURES} filter"
|
||||
fi
|
||||
|
||||
# --disable-strict
|
||||
# Check whether --enable-strict was given.
|
||||
if test ${enable_strict+y}
|
||||
then :
|
||||
enableval=$enable_strict;
|
||||
else $as_nop
|
||||
enable_strict="yes"
|
||||
|
||||
fi
|
||||
|
||||
if test "${enable_strict}" = "yes"; then
|
||||
CFLAGS="-Wall -Wextra -Wno-unused-parameter -Werror ${CFLAGS}"
|
||||
fi
|
||||
|
||||
# Setup dist stuff
|
||||
|
||||
|
||||
|
@ -17081,7 +17236,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 pcsc-lite $as_me 1.9.5, which was
|
||||
This file was extended by pcsc-lite $as_me 1.9.6, which was
|
||||
generated by GNU Autoconf 2.71. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
@ -17149,7 +17304,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
|
|||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config='$ac_cs_config_escaped'
|
||||
ac_cs_version="\\
|
||||
pcsc-lite config.status 1.9.5
|
||||
pcsc-lite config.status 1.9.6
|
||||
configured by $0, generated by GNU Autoconf 2.71,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
@ -17312,6 +17467,7 @@ lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_q
|
|||
lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
|
||||
reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
|
||||
reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
|
||||
FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`'
|
||||
OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
|
||||
deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
|
||||
file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
|
||||
|
@ -17320,6 +17476,7 @@ want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
|
|||
DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
|
||||
sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
|
||||
AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
|
||||
lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`'
|
||||
AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
|
||||
archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
|
||||
STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
|
||||
|
@ -17440,6 +17597,7 @@ LN_S \
|
|||
lt_SP2NL \
|
||||
lt_NL2SP \
|
||||
reload_flag \
|
||||
FILECMD \
|
||||
OBJDUMP \
|
||||
deplibs_check_method \
|
||||
file_magic_cmd \
|
||||
|
@ -17448,7 +17606,6 @@ want_nocaseglob \
|
|||
DLLTOOL \
|
||||
sharedlib_from_linklib_cmd \
|
||||
AR \
|
||||
AR_FLAGS \
|
||||
archiver_list_spec \
|
||||
STRIP \
|
||||
RANLIB \
|
||||
|
@ -18401,6 +18558,9 @@ to_host_file_cmd=$lt_cv_to_host_file_cmd
|
|||
# convert \$build files to toolchain format.
|
||||
to_tool_file_cmd=$lt_cv_to_tool_file_cmd
|
||||
|
||||
# A file(cmd) program that detects file types.
|
||||
FILECMD=$lt_FILECMD
|
||||
|
||||
# An object symbol dumper.
|
||||
OBJDUMP=$lt_OBJDUMP
|
||||
|
||||
|
@ -18425,8 +18585,11 @@ sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
|
|||
# The archiver.
|
||||
AR=$lt_AR
|
||||
|
||||
# Flags to create an archive (by configure).
|
||||
lt_ar_flags=$lt_ar_flags
|
||||
|
||||
# Flags to create an archive.
|
||||
AR_FLAGS=$lt_AR_FLAGS
|
||||
AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"}
|
||||
|
||||
# How to feed a file listing to the archiver.
|
||||
archiver_list_spec=$lt_archiver_list_spec
|
||||
|
@ -18802,7 +18965,7 @@ ltmain=$ac_aux_dir/ltmain.sh
|
|||
# if finds mixed CR/LF and LF-only lines. Since sed operates in
|
||||
# text mode, it properly converts lines to CR/LF. This bash problem
|
||||
# is reportedly fixed, but why not run on old versions too?
|
||||
sed '$q' "$ltmain" >> "$cfgfile" \
|
||||
$SED '$q' "$ltmain" >> "$cfgfile" \
|
||||
|| (rm -f "$cfgfile"; exit 1)
|
||||
|
||||
mv -f "$cfgfile" "$ofile" ||
|
||||
|
|
21
configure.ac
21
configure.ac
|
@ -3,7 +3,7 @@
|
|||
|
||||
AC_PREREQ([2.69])
|
||||
|
||||
AC_INIT([pcsc-lite],[1.9.5])
|
||||
AC_INIT([pcsc-lite],[1.9.6])
|
||||
AC_CONFIG_SRCDIR(src/pcscdaemon.c)
|
||||
AM_INIT_AUTOMAKE(1.8 dist-bzip2 no-dist-gzip)
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
|
@ -61,6 +61,10 @@ AC_PROG_INSTALL
|
|||
AC_PROG_LN_S
|
||||
AC_PROG_MAKE_SET
|
||||
AC_PROG_LEX([noyywrap])
|
||||
if test $LEX = ":"
|
||||
then
|
||||
AC_MSG_ERROR([no lex or flex found])
|
||||
fi
|
||||
PKG_PROG_PKG_CONFIG
|
||||
AM_PROG_CC_C_O
|
||||
AM_PROG_AR
|
||||
|
@ -167,7 +171,7 @@ fi
|
|||
|
||||
# --disable-serial
|
||||
AC_ARG_ENABLE(serial,
|
||||
AS_HELP_STRING([--disable-serial],[do not use serial reader.conf file]),
|
||||
AS_HELP_STRING([--disable-serial],[do not use serial reader.conf files]),
|
||||
[ use_serial="${enableval}" ], [ use_serial="yes" ] )
|
||||
AM_CONDITIONAL(ENABLE_SERIAL, test "$use_serial" != "no")
|
||||
if test "$use_serial" != "no"; then
|
||||
|
@ -383,7 +387,7 @@ CPPFLAGS="-I\${top_srcdir}/src $CPPFLAGS"
|
|||
|
||||
# --enable-confdir=DIR
|
||||
AC_ARG_ENABLE(confdir,
|
||||
AS_HELP_STRING([--enable-confdir=DIR],[directory containing reader configurations (default /etc/reader.conf.d)]),
|
||||
AS_HELP_STRING([--enable-confdir=DIR],[directory containing reader configurations (default ${sysconfdir}/reader.conf.d)]),
|
||||
[confdir="${enableval}"],
|
||||
[confdir="${sysconfdir}/reader.conf.d"])
|
||||
|
||||
|
@ -398,6 +402,17 @@ if test x$use_filter = xyes; then
|
|||
PCSCLITE_FEATURES="${PCSCLITE_FEATURES} filter"
|
||||
fi
|
||||
|
||||
# --disable-strict
|
||||
AC_ARG_ENABLE(
|
||||
[strict],
|
||||
[AS_HELP_STRING([--disable-strict],[disable strict compile mode @<:@enabled@:>@])],
|
||||
,
|
||||
[enable_strict="yes"]
|
||||
)
|
||||
if test "${enable_strict}" = "yes"; then
|
||||
CFLAGS="-Wall -Wextra -Wno-unused-parameter -Werror ${CFLAGS}"
|
||||
fi
|
||||
|
||||
# Setup dist stuff
|
||||
AC_SUBST(usbdropdir)
|
||||
AC_SUBST(ipcdir)
|
||||
|
|
|
@ -248,6 +248,7 @@ EGREP = @EGREP@
|
|||
ETAGS = @ETAGS@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
FILECMD = @FILECMD@
|
||||
GREP = @GREP@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
|
|
|
@ -206,6 +206,7 @@ EGREP = @EGREP@
|
|||
ETAGS = @ETAGS@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
FILECMD = @FILECMD@
|
||||
GREP = @GREP@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH PCSCD 8 "January 2007" Muscle "PC/SC Lite"
|
||||
.TH PCSCD 8 "December 2021" Muscle "PC/SC Lite"
|
||||
.SH NAME
|
||||
pcscd \- PC/SC Smart Card Daemon
|
||||
.
|
||||
|
@ -12,9 +12,11 @@ pcscd \- PC/SC Smart Card Daemon
|
|||
log APDUs and SW using the debug method (see
|
||||
.BR \-\-debug ).
|
||||
.TP
|
||||
.BR \-c ", " \-\-config " \fIfile\fP"
|
||||
Specifies the file \fIfile\fP as an alternate location for
|
||||
.IR @PCSCLITE_CONFIG_DIR@/reader.conf .
|
||||
.BR \-c ", " \-\-config " \fIdir\fP"
|
||||
Specifies the directory \fIdir\fP as an alternate location for
|
||||
.IR @PCSCLITE_CONFIG_DIR@/ .
|
||||
The argument can also be a single configuration file (for backward
|
||||
compatibility).
|
||||
.TP
|
||||
.BR \-f ", " \-\-foreground
|
||||
Runs pcscd in the foreground and sends log messages to stderr instead of
|
||||
|
@ -68,8 +70,8 @@ Displays the program version number
|
|||
.TP
|
||||
.BR \-H ", " \-\-hotplug
|
||||
Ask pcscd to re-read the
|
||||
.I @PCSCLITE_CONFIG_DIR@/reader.conf
|
||||
file to detect added or removed non-USB readers (serial or PCMCIA).
|
||||
.I @PCSCLITE_CONFIG_DIR@/my_reader.conf
|
||||
files to detect added or removed non-USB readers (serial or PCMCIA).
|
||||
.
|
||||
.TP
|
||||
.BR \-x ", " \-\-auto\-exit
|
||||
|
@ -98,8 +100,8 @@ Smart card reader drivers are placed in the
|
|||
directory. Each driver is simply an
|
||||
.I .so
|
||||
file. pcscd locates the driver using the
|
||||
.I @PCSCLITE_CONFIG_DIR@/reader.conf
|
||||
file. See the
|
||||
.I @PCSCLITE_CONFIG_DIR@/my_reader.conf
|
||||
files. See the
|
||||
.BR reader.conf (5)
|
||||
manual page for more information.
|
||||
.PP
|
||||
|
@ -108,18 +110,18 @@ Some drivers are available at \fIhttps://muscle.apdu.fr/musclecard.com/drivers.h
|
|||
.SH "USB SMART CARD READER DRIVERS"
|
||||
USB smart card reader drivers are located in
|
||||
.I @usbdropdir@
|
||||
directory as a bundle. You shall not add a USB driver in
|
||||
.I @PCSCLITE_CONFIG_DIR@/reader.conf
|
||||
directory as a bundle. You shall NOT add a USB driver in a
|
||||
.I @PCSCLITE_CONFIG_DIR@/my_reader.conf
|
||||
file.
|
||||
.
|
||||
.SH FILES
|
||||
.I @PCSCLITE_CONFIG_DIR@/reader.conf
|
||||
: Reader configuration file
|
||||
.I @PCSCLITE_CONFIG_DIR@/*
|
||||
: Serial reader configuration files
|
||||
.PP
|
||||
.I @ipcdir@/pcscd.pid
|
||||
: process id of the running pcscd
|
||||
.PP
|
||||
.I @usbdropdir@
|
||||
.I @usbdropdir@/
|
||||
: directory containing bundles for USB drivers
|
||||
.
|
||||
.SH "SEE ALSO"
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
.TH READER.CONF 5 "August 2005" Muscle "PC/SC Lite"
|
||||
.TH READER.CONF 5 "December 2021" Muscle "PC/SC Lite"
|
||||
.SH NAME
|
||||
reader.conf \- configuration file for pcscd readers' drivers
|
||||
.
|
||||
.SH DESCRIPTION
|
||||
The
|
||||
.I @PCSCLITE_CONFIG_DIR@/reader.conf
|
||||
file contains configuration information for serial and (some) PCMCIA
|
||||
.I @PCSCLITE_CONFIG_DIR@/*
|
||||
files contain configuration information for serial and (some) PCMCIA
|
||||
smart card readers.
|
||||
.PP
|
||||
USB readers SHALL NOT be configured using this file.
|
||||
USB readers SHALL NOT be configured using these files.
|
||||
.B pcscd
|
||||
uses another mechanism to automatically load USB drivers.
|
||||
.
|
||||
.SH SYNTAX
|
||||
The
|
||||
.I @PCSCLITE_CONFIG_DIR@/reader.conf
|
||||
is a regular text file. Each reader must be defined by four fields:
|
||||
.I @PCSCLITE_CONFIG_DIR@/*
|
||||
files are regular text file. Each reader must be defined by four fields:
|
||||
.PP
|
||||
FRIENDLYNAME TEXT_STRING
|
||||
DEVICENAME FILENAME
|
||||
|
@ -39,7 +39,8 @@ under FreeBSD.
|
|||
.PP
|
||||
The "LIBPATH" field is the filename of the driver code. The driver is
|
||||
a dynamically loaded piece of code (generally a
|
||||
.IR drivername.so* file).
|
||||
.IR drivername.so.*
|
||||
file).
|
||||
.PP
|
||||
The "CHANNELID" is no more used for recent drivers (IFD handler 3.0) and
|
||||
has been superseded by "DEVICENAME". If you have an old driver this
|
||||
|
@ -57,7 +58,7 @@ serial port number for a serial reader.
|
|||
.
|
||||
.SH DEBUGGING
|
||||
In order to set up your
|
||||
.I @PCSCLITE_CONFIG_DIR@/reader.conf
|
||||
.I @PCSCLITE_CONFIG_DIR@/my_reader.conf
|
||||
file correctly you may want to have debug messages from
|
||||
.BR pcscd .
|
||||
I recommend you to start
|
||||
|
|
|
@ -182,6 +182,7 @@ EGREP = @EGREP@
|
|||
ETAGS = @ETAGS@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
FILECMD = @FILECMD@
|
||||
GREP = @GREP@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
|
||||
#
|
||||
# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software
|
||||
# Foundation, Inc.
|
||||
# Written by Gordon Matzigkeit, 1996
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
|
@ -31,7 +32,7 @@ m4_define([_LT_COPYING], [dnl
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
])
|
||||
|
||||
# serial 58 LT_INIT
|
||||
# serial 59 LT_INIT
|
||||
|
||||
|
||||
# LT_PREREQ(VERSION)
|
||||
|
@ -181,6 +182,7 @@ m4_require([_LT_FILEUTILS_DEFAULTS])dnl
|
|||
m4_require([_LT_CHECK_SHELL_FEATURES])dnl
|
||||
m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
|
||||
m4_require([_LT_CMD_RELOAD])dnl
|
||||
m4_require([_LT_DECL_FILECMD])dnl
|
||||
m4_require([_LT_CHECK_MAGIC_METHOD])dnl
|
||||
m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
|
||||
m4_require([_LT_CMD_OLD_ARCHIVE])dnl
|
||||
|
@ -219,8 +221,8 @@ esac
|
|||
ofile=libtool
|
||||
can_build_shared=yes
|
||||
|
||||
# All known linkers require a '.a' archive for static linking (except MSVC,
|
||||
# which needs '.lib').
|
||||
# All known linkers require a '.a' archive for static linking (except MSVC and
|
||||
# ICC, which need '.lib').
|
||||
libext=a
|
||||
|
||||
with_gnu_ld=$lt_cv_prog_gnu_ld
|
||||
|
@ -777,7 +779,7 @@ _LT_EOF
|
|||
# if finds mixed CR/LF and LF-only lines. Since sed operates in
|
||||
# text mode, it properly converts lines to CR/LF. This bash problem
|
||||
# is reportedly fixed, but why not run on old versions too?
|
||||
sed '$q' "$ltmain" >> "$cfgfile" \
|
||||
$SED '$q' "$ltmain" >> "$cfgfile" \
|
||||
|| (rm -f "$cfgfile"; exit 1)
|
||||
|
||||
mv -f "$cfgfile" "$ofile" ||
|
||||
|
@ -1041,8 +1043,8 @@ int forced_loaded() { return 2;}
|
|||
_LT_EOF
|
||||
echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
|
||||
$LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
|
||||
echo "$AR cr libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
|
||||
$AR cr libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
|
||||
echo "$AR $AR_FLAGS libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
|
||||
$AR $AR_FLAGS libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
|
||||
echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
|
||||
$RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
|
||||
cat > conftest.c << _LT_EOF
|
||||
|
@ -1066,16 +1068,11 @@ _LT_EOF
|
|||
_lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
|
||||
darwin1.*)
|
||||
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
|
||||
darwin*) # darwin 5.x on
|
||||
# if running on 10.5 or later, the deployment target defaults
|
||||
# to the OS version, if on x86, and 10.4, the deployment
|
||||
# target defaults to 10.4. Don't you love it?
|
||||
case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
|
||||
10.0,*86*-darwin8*|10.0,*-darwin[[912]]*)
|
||||
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
|
||||
10.[[012]][[,.]]*)
|
||||
darwin*)
|
||||
case $MACOSX_DEPLOYMENT_TARGET,$host in
|
||||
10.[[012]],*|,*powerpc*-darwin[[5-8]]*)
|
||||
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
|
||||
10.*|11.*)
|
||||
*)
|
||||
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
|
||||
esac
|
||||
;;
|
||||
|
@ -1125,12 +1122,12 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
|
|||
output_verbose_link_cmd=func_echo_all
|
||||
_LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
|
||||
_LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
|
||||
_LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
|
||||
_LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
|
||||
_LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
|
||||
_LT_TAGVAR(module_expsym_cmds, $1)="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
|
||||
m4_if([$1], [CXX],
|
||||
[ if test yes != "$lt_cv_apple_cc_single_mod"; then
|
||||
_LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
|
||||
_LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
|
||||
_LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
|
||||
fi
|
||||
],[])
|
||||
else
|
||||
|
@ -1244,7 +1241,8 @@ _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
|
|||
# _LT_WITH_SYSROOT
|
||||
# ----------------
|
||||
AC_DEFUN([_LT_WITH_SYSROOT],
|
||||
[AC_MSG_CHECKING([for sysroot])
|
||||
[m4_require([_LT_DECL_SED])dnl
|
||||
AC_MSG_CHECKING([for sysroot])
|
||||
AC_ARG_WITH([sysroot],
|
||||
[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
|
||||
[Search for dependent libraries within DIR (or the compiler's sysroot
|
||||
|
@ -1261,7 +1259,7 @@ case $with_sysroot in #(
|
|||
fi
|
||||
;; #(
|
||||
/*)
|
||||
lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
|
||||
lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
|
||||
;; #(
|
||||
no|'')
|
||||
;; #(
|
||||
|
@ -1291,7 +1289,7 @@ ia64-*-hpux*)
|
|||
# options accordingly.
|
||||
echo 'int i;' > conftest.$ac_ext
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*ELF-32*)
|
||||
HPUX_IA64_MODE=32
|
||||
;;
|
||||
|
@ -1308,7 +1306,7 @@ ia64-*-hpux*)
|
|||
echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
if test yes = "$lt_cv_prog_gnu_ld"; then
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*32-bit*)
|
||||
LD="${LD-ld} -melf32bsmip"
|
||||
;;
|
||||
|
@ -1320,7 +1318,7 @@ ia64-*-hpux*)
|
|||
;;
|
||||
esac
|
||||
else
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*32-bit*)
|
||||
LD="${LD-ld} -32"
|
||||
;;
|
||||
|
@ -1342,7 +1340,7 @@ mips64*-*linux*)
|
|||
echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
emul=elf
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*32-bit*)
|
||||
emul="${emul}32"
|
||||
;;
|
||||
|
@ -1350,7 +1348,7 @@ mips64*-*linux*)
|
|||
emul="${emul}64"
|
||||
;;
|
||||
esac
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*MSB*)
|
||||
emul="${emul}btsmip"
|
||||
;;
|
||||
|
@ -1358,7 +1356,7 @@ mips64*-*linux*)
|
|||
emul="${emul}ltsmip"
|
||||
;;
|
||||
esac
|
||||
case `/usr/bin/file conftest.$ac_objext` in
|
||||
case `$FILECMD conftest.$ac_objext` in
|
||||
*N32*)
|
||||
emul="${emul}n32"
|
||||
;;
|
||||
|
@ -1378,14 +1376,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
|
|||
# not appear in the list.
|
||||
echo 'int i;' > conftest.$ac_ext
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
case `/usr/bin/file conftest.o` in
|
||||
case `$FILECMD conftest.o` in
|
||||
*32-bit*)
|
||||
case $host in
|
||||
x86_64-*kfreebsd*-gnu)
|
||||
LD="${LD-ld} -m elf_i386_fbsd"
|
||||
;;
|
||||
x86_64-*linux*)
|
||||
case `/usr/bin/file conftest.o` in
|
||||
case `$FILECMD conftest.o` in
|
||||
*x86-64*)
|
||||
LD="${LD-ld} -m elf32_x86_64"
|
||||
;;
|
||||
|
@ -1453,7 +1451,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
|
|||
# options accordingly.
|
||||
echo 'int i;' > conftest.$ac_ext
|
||||
if AC_TRY_EVAL(ac_compile); then
|
||||
case `/usr/bin/file conftest.o` in
|
||||
case `$FILECMD conftest.o` in
|
||||
*64-bit*)
|
||||
case $lt_cv_prog_gnu_ld in
|
||||
yes*)
|
||||
|
@ -1492,9 +1490,22 @@ need_locks=$enable_libtool_lock
|
|||
m4_defun([_LT_PROG_AR],
|
||||
[AC_CHECK_TOOLS(AR, [ar], false)
|
||||
: ${AR=ar}
|
||||
: ${AR_FLAGS=cr}
|
||||
_LT_DECL([], [AR], [1], [The archiver])
|
||||
_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
|
||||
|
||||
# Use ARFLAGS variable as AR's operation code to sync the variable naming with
|
||||
# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have
|
||||
# higher priority because thats what people were doing historically (setting
|
||||
# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS
|
||||
# variable obsoleted/removed.
|
||||
|
||||
test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr}
|
||||
lt_ar_flags=$AR_FLAGS
|
||||
_LT_DECL([], [lt_ar_flags], [0], [Flags to create an archive (by configure)])
|
||||
|
||||
# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override
|
||||
# by AR_FLAGS because that was never working and AR_FLAGS is about to die.
|
||||
_LT_DECL([], [AR_FLAGS], [\@S|@{ARFLAGS-"\@S|@lt_ar_flags"}],
|
||||
[Flags to create an archive])
|
||||
|
||||
AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
|
||||
[lt_cv_ar_at_file=no
|
||||
|
@ -1713,7 +1724,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
|
|||
lt_cv_sys_max_cmd_len=8192;
|
||||
;;
|
||||
|
||||
bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
|
||||
bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
|
||||
# This has been around since 386BSD, at least. Likely further.
|
||||
if test -x /sbin/sysctl; then
|
||||
lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
|
||||
|
@ -1756,7 +1767,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
|
|||
sysv5* | sco5v6* | sysv4.2uw2*)
|
||||
kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
|
||||
if test -n "$kargmax"; then
|
||||
lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
|
||||
lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[[ ]]//'`
|
||||
else
|
||||
lt_cv_sys_max_cmd_len=32768
|
||||
fi
|
||||
|
@ -2206,18 +2217,26 @@ m4_defun([_LT_CMD_STRIPLIB],
|
|||
striplib=
|
||||
old_striplib=
|
||||
AC_MSG_CHECKING([whether stripping libraries is possible])
|
||||
if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
|
||||
test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
|
||||
test -z "$striplib" && striplib="$STRIP --strip-unneeded"
|
||||
if test -z "$STRIP"; then
|
||||
AC_MSG_RESULT([no])
|
||||
else
|
||||
if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
|
||||
old_striplib="$STRIP --strip-debug"
|
||||
striplib="$STRIP --strip-unneeded"
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
# FIXME - insert some real tests, host_os isn't really good enough
|
||||
case $host_os in
|
||||
darwin*)
|
||||
if test -n "$STRIP"; then
|
||||
# FIXME - insert some real tests, host_os isn't really good enough
|
||||
striplib="$STRIP -x"
|
||||
old_striplib="$STRIP -S"
|
||||
AC_MSG_RESULT([yes])
|
||||
;;
|
||||
freebsd*)
|
||||
if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
|
||||
old_striplib="$STRIP --strip-debug"
|
||||
striplib="$STRIP --strip-unneeded"
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
fi
|
||||
|
@ -2227,6 +2246,7 @@ else
|
|||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
|
||||
_LT_DECL([], [striplib], [1])
|
||||
])# _LT_CMD_STRIPLIB
|
||||
|
@ -2548,7 +2568,7 @@ cygwin* | mingw* | pw32* | cegcc*)
|
|||
case $host_os in
|
||||
cygwin*)
|
||||
# Cygwin DLLs use 'cyg' prefix rather than 'lib'
|
||||
soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
|
||||
soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
|
||||
m4_if([$1], [],[
|
||||
sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
|
||||
;;
|
||||
|
@ -2558,14 +2578,14 @@ m4_if([$1], [],[
|
|||
;;
|
||||
pw32*)
|
||||
# pw32 DLLs use 'pw' prefix rather than 'lib'
|
||||
library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
|
||||
library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
|
||||
;;
|
||||
esac
|
||||
dynamic_linker='Win32 ld.exe'
|
||||
;;
|
||||
|
||||
*,cl*)
|
||||
# Native MSVC
|
||||
*,cl* | *,icl*)
|
||||
# Native MSVC or ICC
|
||||
libname_spec='$name'
|
||||
soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
|
||||
library_names_spec='$libname.dll.lib'
|
||||
|
@ -2584,7 +2604,7 @@ m4_if([$1], [],[
|
|||
done
|
||||
IFS=$lt_save_ifs
|
||||
# Convert to MSYS style.
|
||||
sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
|
||||
sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
|
||||
;;
|
||||
cygwin*)
|
||||
# Convert to unix form, then to dos form, then back to unix form
|
||||
|
@ -2621,7 +2641,7 @@ m4_if([$1], [],[
|
|||
;;
|
||||
|
||||
*)
|
||||
# Assume MSVC wrapper
|
||||
# Assume MSVC and ICC wrapper
|
||||
library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib'
|
||||
dynamic_linker='Win32 ld.exe'
|
||||
;;
|
||||
|
@ -2654,7 +2674,7 @@ dgux*)
|
|||
shlibpath_var=LD_LIBRARY_PATH
|
||||
;;
|
||||
|
||||
freebsd* | dragonfly*)
|
||||
freebsd* | dragonfly* | midnightbsd*)
|
||||
# DragonFly does not have aout. When/if they implement a new
|
||||
# versioning mechanism, adjust this.
|
||||
if test -x /usr/bin/objformat; then
|
||||
|
@ -3465,7 +3485,7 @@ beos*)
|
|||
|
||||
bsdi[[45]]*)
|
||||
lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
|
||||
lt_cv_file_magic_cmd='/usr/bin/file -L'
|
||||
lt_cv_file_magic_cmd='$FILECMD -L'
|
||||
lt_cv_file_magic_test_file=/shlib/libc.so
|
||||
;;
|
||||
|
||||
|
@ -3499,14 +3519,14 @@ darwin* | rhapsody*)
|
|||
lt_cv_deplibs_check_method=pass_all
|
||||
;;
|
||||
|
||||
freebsd* | dragonfly*)
|
||||
freebsd* | dragonfly* | midnightbsd*)
|
||||
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
|
||||
case $host_cpu in
|
||||
i*86 )
|
||||
# Not sure whether the presence of OpenBSD here was a mistake.
|
||||
# Let's accept both of them until this is cleared up.
|
||||
lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
|
||||
lt_cv_file_magic_cmd=/usr/bin/file
|
||||
lt_cv_file_magic_cmd=$FILECMD
|
||||
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
|
||||
;;
|
||||
esac
|
||||
|
@ -3520,7 +3540,7 @@ haiku*)
|
|||
;;
|
||||
|
||||
hpux10.20* | hpux11*)
|
||||
lt_cv_file_magic_cmd=/usr/bin/file
|
||||
lt_cv_file_magic_cmd=$FILECMD
|
||||
case $host_cpu in
|
||||
ia64*)
|
||||
lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
|
||||
|
@ -3567,7 +3587,7 @@ netbsd* | netbsdelf*-gnu)
|
|||
|
||||
newos6*)
|
||||
lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
|
||||
lt_cv_file_magic_cmd=/usr/bin/file
|
||||
lt_cv_file_magic_cmd=$FILECMD
|
||||
lt_cv_file_magic_test_file=/usr/lib/libnls.so
|
||||
;;
|
||||
|
||||
|
@ -3694,13 +3714,13 @@ else
|
|||
mingw*) lt_bad_file=conftest.nm/nofile ;;
|
||||
*) lt_bad_file=/dev/null ;;
|
||||
esac
|
||||
case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
|
||||
case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in
|
||||
*$lt_bad_file* | *'Invalid file or object type'*)
|
||||
lt_cv_path_NM="$tmp_nm -B"
|
||||
break 2
|
||||
;;
|
||||
*)
|
||||
case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
|
||||
case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in
|
||||
*/dev/null*)
|
||||
lt_cv_path_NM="$tmp_nm -p"
|
||||
break 2
|
||||
|
@ -3726,7 +3746,7 @@ else
|
|||
# Let the user override the test.
|
||||
else
|
||||
AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
|
||||
case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
|
||||
case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
|
||||
*COFF*)
|
||||
DUMPBIN="$DUMPBIN -symbols -headers"
|
||||
;;
|
||||
|
@ -3966,7 +3986,7 @@ esac
|
|||
|
||||
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
|
||||
# Gets list of data symbols to import.
|
||||
lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
|
||||
lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'"
|
||||
# Adjust the below global symbol transforms to fixup imported variables.
|
||||
lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
|
||||
lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
|
||||
|
@ -3984,20 +4004,20 @@ fi
|
|||
# Transform an extracted symbol line into a proper C declaration.
|
||||
# Some systems (esp. on ia64) link data and code symbols differently,
|
||||
# so use this general approach.
|
||||
lt_cv_sys_global_symbol_to_cdecl="sed -n"\
|
||||
lt_cv_sys_global_symbol_to_cdecl="$SED -n"\
|
||||
$lt_cdecl_hook\
|
||||
" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
|
||||
" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
|
||||
|
||||
# Transform an extracted symbol line into symbol name and symbol address
|
||||
lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
|
||||
lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\
|
||||
$lt_c_name_hook\
|
||||
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
|
||||
" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
|
||||
|
||||
# Transform an extracted symbol line into symbol name with lib prefix and
|
||||
# symbol address.
|
||||
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
|
||||
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\
|
||||
$lt_c_name_lib_hook\
|
||||
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
|
||||
" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
|
||||
|
@ -4021,7 +4041,7 @@ for ac_symprfx in "" "_"; do
|
|||
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
|
||||
# Fake it for dumpbin and say T for any non-static function,
|
||||
# D for any global variable and I for any imported variable.
|
||||
# Also find C++ and __fastcall symbols from MSVC++,
|
||||
# Also find C++ and __fastcall symbols from MSVC++ or ICC,
|
||||
# which start with @ or ?.
|
||||
lt_cv_sys_global_symbol_pipe="$AWK ['"\
|
||||
" {last_section=section; section=\$ 3};"\
|
||||
|
@ -4039,9 +4059,9 @@ for ac_symprfx in "" "_"; do
|
|||
" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
|
||||
" ' prfx=^$ac_symprfx]"
|
||||
else
|
||||
lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
|
||||
lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
|
||||
fi
|
||||
lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
|
||||
lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'"
|
||||
|
||||
# Check to see that the pipe works correctly.
|
||||
pipe_works=no
|
||||
|
@ -4329,7 +4349,7 @@ m4_if([$1], [CXX], [
|
|||
;;
|
||||
esac
|
||||
;;
|
||||
freebsd* | dragonfly*)
|
||||
freebsd* | dragonfly* | midnightbsd*)
|
||||
# FreeBSD uses GNU C++
|
||||
;;
|
||||
hpux9* | hpux10* | hpux11*)
|
||||
|
@ -4412,7 +4432,7 @@ m4_if([$1], [CXX], [
|
|||
_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
|
||||
;;
|
||||
*)
|
||||
case `$CC -V 2>&1 | sed 5q` in
|
||||
case `$CC -V 2>&1 | $SED 5q` in
|
||||
*Sun\ C*)
|
||||
# Sun C++ 5.9
|
||||
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
|
||||
|
@ -4754,7 +4774,7 @@ m4_if([$1], [CXX], [
|
|||
_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
|
||||
;;
|
||||
*)
|
||||
case `$CC -V 2>&1 | sed 5q` in
|
||||
case `$CC -V 2>&1 | $SED 5q` in
|
||||
*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
|
||||
# Sun Fortran 8.3 passes all unrecognized flags to the linker
|
||||
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
|
||||
|
@ -4937,7 +4957,7 @@ m4_if([$1], [CXX], [
|
|||
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
|
||||
_LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
|
||||
else
|
||||
_LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
|
||||
_LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
|
||||
fi
|
||||
;;
|
||||
pw32*)
|
||||
|
@ -4945,7 +4965,7 @@ m4_if([$1], [CXX], [
|
|||
;;
|
||||
cygwin* | mingw* | cegcc*)
|
||||
case $cc_basename in
|
||||
cl*)
|
||||
cl* | icl*)
|
||||
_LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
|
||||
;;
|
||||
*)
|
||||
|
@ -5005,15 +5025,15 @@ dnl Note also adjust exclude_expsyms for C++ above.
|
|||
|
||||
case $host_os in
|
||||
cygwin* | mingw* | pw32* | cegcc*)
|
||||
# FIXME: the MSVC++ port hasn't been tested in a loooong time
|
||||
# FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
|
||||
# When not using gcc, we currently assume that we are using
|
||||
# Microsoft Visual C++.
|
||||
# Microsoft Visual C++ or Intel C++ Compiler.
|
||||
if test yes != "$GCC"; then
|
||||
with_gnu_ld=no
|
||||
fi
|
||||
;;
|
||||
interix*)
|
||||
# we just hope/assume this is gcc and not c89 (= MSVC++)
|
||||
# we just hope/assume this is gcc and not c89 (= MSVC++ or ICC)
|
||||
with_gnu_ld=yes
|
||||
;;
|
||||
openbsd* | bitrig*)
|
||||
|
@ -5068,7 +5088,7 @@ dnl Note also adjust exclude_expsyms for C++ above.
|
|||
_LT_TAGVAR(whole_archive_flag_spec, $1)=
|
||||
fi
|
||||
supports_anon_versioning=no
|
||||
case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
|
||||
case `$LD -v | $SED -e 's/([[^)]]\+)\s\+//' 2>&1` in
|
||||
*GNU\ gold*) supports_anon_versioning=yes ;;
|
||||
*\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
|
||||
*\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
|
||||
|
@ -5180,6 +5200,7 @@ _LT_EOF
|
|||
emximp -o $lib $output_objdir/$libname.def'
|
||||
_LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
|
||||
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
|
||||
_LT_TAGVAR(file_list_spec, $1)='@'
|
||||
;;
|
||||
|
||||
interix[[3-9]]*)
|
||||
|
@ -5194,7 +5215,7 @@ _LT_EOF
|
|||
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
|
||||
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
|
||||
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
||||
_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
||||
_LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
||||
;;
|
||||
|
||||
gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
|
||||
|
@ -5237,7 +5258,7 @@ _LT_EOF
|
|||
_LT_TAGVAR(compiler_needs_object, $1)=yes
|
||||
;;
|
||||
esac
|
||||
case `$CC -V 2>&1 | sed 5q` in
|
||||
case `$CC -V 2>&1 | $SED 5q` in
|
||||
*Sun\ C*) # Sun C 5.9
|
||||
_LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
|
||||
_LT_TAGVAR(compiler_needs_object, $1)=yes
|
||||
|
@ -5249,13 +5270,14 @@ _LT_EOF
|
|||
|
||||
if test yes = "$supports_anon_versioning"; then
|
||||
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
|
||||
cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
echo "local: *; };" >> $output_objdir/$libname.ver~
|
||||
$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
|
||||
fi
|
||||
|
||||
case $cc_basename in
|
||||
tcc*)
|
||||
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
|
||||
_LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic'
|
||||
;;
|
||||
xlf* | bgf* | bgxlf* | mpixlf*)
|
||||
|
@ -5265,7 +5287,7 @@ _LT_EOF
|
|||
_LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
|
||||
if test yes = "$supports_anon_versioning"; then
|
||||
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
|
||||
cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
echo "local: *; };" >> $output_objdir/$libname.ver~
|
||||
$LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
|
||||
fi
|
||||
|
@ -5397,7 +5419,7 @@ _LT_EOF
|
|||
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
|
||||
_LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
|
||||
else
|
||||
_LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
|
||||
_LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
|
||||
fi
|
||||
aix_use_runtimelinking=no
|
||||
|
||||
|
@ -5580,12 +5602,12 @@ _LT_EOF
|
|||
|
||||
cygwin* | mingw* | pw32* | cegcc*)
|
||||
# When not using gcc, we currently assume that we are using
|
||||
# Microsoft Visual C++.
|
||||
# Microsoft Visual C++ or Intel C++ Compiler.
|
||||
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||
# no search path for DLLs.
|
||||
case $cc_basename in
|
||||
cl*)
|
||||
# Native MSVC
|
||||
cl* | icl*)
|
||||
# Native MSVC or ICC
|
||||
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
|
||||
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
|
||||
_LT_TAGVAR(always_export_symbols, $1)=yes
|
||||
|
@ -5626,7 +5648,7 @@ _LT_EOF
|
|||
fi'
|
||||
;;
|
||||
*)
|
||||
# Assume MSVC wrapper
|
||||
# Assume MSVC and ICC wrapper
|
||||
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
|
||||
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
|
||||
# Tell ltmain to make .lib files, not .a files.
|
||||
|
@ -5674,7 +5696,7 @@ _LT_EOF
|
|||
;;
|
||||
|
||||
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
|
||||
freebsd* | dragonfly*)
|
||||
freebsd* | dragonfly* | midnightbsd*)
|
||||
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
|
||||
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
|
||||
_LT_TAGVAR(hardcode_direct, $1)=yes
|
||||
|
@ -5815,6 +5837,7 @@ _LT_EOF
|
|||
# Fabrice Bellard et al's Tiny C Compiler
|
||||
_LT_TAGVAR(ld_shlibs, $1)=yes
|
||||
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
|
||||
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
|
@ -5886,6 +5909,7 @@ _LT_EOF
|
|||
emximp -o $lib $output_objdir/$libname.def'
|
||||
_LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
|
||||
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
|
||||
_LT_TAGVAR(file_list_spec, $1)='@'
|
||||
;;
|
||||
|
||||
osf3*)
|
||||
|
@ -6656,8 +6680,8 @@ if test yes != "$_lt_caught_CXX_error"; then
|
|||
|
||||
cygwin* | mingw* | pw32* | cegcc*)
|
||||
case $GXX,$cc_basename in
|
||||
,cl* | no,cl*)
|
||||
# Native MSVC
|
||||
,cl* | no,cl* | ,icl* | no,icl*)
|
||||
# Native MSVC or ICC
|
||||
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||
# no search path for DLLs.
|
||||
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
|
||||
|
@ -6755,6 +6779,7 @@ if test yes != "$_lt_caught_CXX_error"; then
|
|||
emximp -o $lib $output_objdir/$libname.def'
|
||||
_LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
|
||||
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
|
||||
_LT_TAGVAR(file_list_spec, $1)='@'
|
||||
;;
|
||||
|
||||
dgux*)
|
||||
|
@ -6785,7 +6810,7 @@ if test yes != "$_lt_caught_CXX_error"; then
|
|||
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
|
||||
;;
|
||||
|
||||
freebsd* | dragonfly*)
|
||||
freebsd* | dragonfly* | midnightbsd*)
|
||||
# FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
|
||||
# conventions
|
||||
_LT_TAGVAR(ld_shlibs, $1)=yes
|
||||
|
@ -6922,7 +6947,7 @@ if test yes != "$_lt_caught_CXX_error"; then
|
|||
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
|
||||
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
|
||||
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
||||
_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
||||
_LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
|
||||
;;
|
||||
irix5* | irix6*)
|
||||
case $cc_basename in
|
||||
|
@ -7062,13 +7087,13 @@ if test yes != "$_lt_caught_CXX_error"; then
|
|||
_LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
|
||||
if test yes = "$supports_anon_versioning"; then
|
||||
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
|
||||
cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
|
||||
echo "local: *; };" >> $output_objdir/$libname.ver~
|
||||
$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
case `$CC -V 2>&1 | sed 5q` in
|
||||
case `$CC -V 2>&1 | $SED 5q` in
|
||||
*Sun\ C*)
|
||||
# Sun C++ 5.9
|
||||
_LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
|
||||
|
@ -8214,6 +8239,14 @@ _LT_DECL([], [DLLTOOL], [1], [DLL creation program])
|
|||
AC_SUBST([DLLTOOL])
|
||||
])
|
||||
|
||||
# _LT_DECL_FILECMD
|
||||
# ----------------
|
||||
# Check for a file(cmd) program that can be used to detect file type and magic
|
||||
m4_defun([_LT_DECL_FILECMD],
|
||||
[AC_CHECK_TOOL([FILECMD], [file], [:])
|
||||
_LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types])
|
||||
])# _LD_DECL_FILECMD
|
||||
|
||||
# _LT_DECL_SED
|
||||
# ------------
|
||||
# Check for a fully-functional sed program, that truncates
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# ltversion.m4 -- version numbers -*- Autoconf -*-
|
||||
#
|
||||
# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation,
|
||||
# Inc.
|
||||
# Written by Scott James Remnant, 2004
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
|
@ -9,15 +10,15 @@
|
|||
|
||||
# @configure_input@
|
||||
|
||||
# serial 4179 ltversion.m4
|
||||
# serial 4245 ltversion.m4
|
||||
# This file is part of GNU Libtool
|
||||
|
||||
m4_define([LT_PACKAGE_VERSION], [2.4.6])
|
||||
m4_define([LT_PACKAGE_REVISION], [2.4.6])
|
||||
m4_define([LT_PACKAGE_VERSION], [2.4.7])
|
||||
m4_define([LT_PACKAGE_REVISION], [2.4.7])
|
||||
|
||||
AC_DEFUN([LTVERSION_VERSION],
|
||||
[macro_version='2.4.6'
|
||||
macro_revision='2.4.6'
|
||||
[macro_version='2.4.7'
|
||||
macro_revision='2.4.7'
|
||||
_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
|
||||
_LT_DECL(, macro_revision, 0)
|
||||
])
|
||||
|
|
|
@ -52,10 +52,10 @@ pcscd_SOURCES = \
|
|||
misc.h \
|
||||
parser.h \
|
||||
pcscdaemon.c \
|
||||
pcscd.h \
|
||||
pcscd.h.in \
|
||||
PCSC/debuglog.h \
|
||||
PCSC/ifdhandler.h \
|
||||
PCSC/pcsclite.h \
|
||||
PCSC/pcsclite.h.in \
|
||||
PCSC/winscard.h \
|
||||
PCSC/wintypes.h \
|
||||
prothandler.c \
|
||||
|
|
|
@ -167,8 +167,8 @@ am__pcscd_SOURCES_DIST = auth.c auth.h atrhandler.c atrhandler.h \
|
|||
configfile.h configfile.l debuglog.c dyn_generic.h dyn_hpux.c \
|
||||
dyn_macosx.c dyn_unix.c eventhandler.c eventhandler.h \
|
||||
hotplug_generic.c hotplug.h ifdwrapper.c ifdwrapper.h misc.h \
|
||||
parser.h pcscdaemon.c pcscd.h PCSC/debuglog.h \
|
||||
PCSC/ifdhandler.h PCSC/pcsclite.h PCSC/winscard.h \
|
||||
parser.h pcscdaemon.c pcscd.h.in PCSC/debuglog.h \
|
||||
PCSC/ifdhandler.h PCSC/pcsclite.h.in PCSC/winscard.h \
|
||||
PCSC/wintypes.h prothandler.c prothandler.h readerfactory.c \
|
||||
readerfactory.h simclist.c simclist.h sys_generic.h sys_unix.c \
|
||||
tokenparser.l hotplug_libudev.c hotplug_libusb.c \
|
||||
|
@ -380,6 +380,7 @@ EGREP = @EGREP@
|
|||
ETAGS = @ETAGS@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
FILECMD = @FILECMD@
|
||||
GREP = @GREP@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
|
@ -547,10 +548,10 @@ pcscd_SOURCES = \
|
|||
misc.h \
|
||||
parser.h \
|
||||
pcscdaemon.c \
|
||||
pcscd.h \
|
||||
pcscd.h.in \
|
||||
PCSC/debuglog.h \
|
||||
PCSC/ifdhandler.h \
|
||||
PCSC/pcsclite.h \
|
||||
PCSC/pcsclite.h.in \
|
||||
PCSC/winscard.h \
|
||||
PCSC/wintypes.h \
|
||||
prothandler.c \
|
||||
|
|
|
@ -89,8 +89,8 @@ enum {
|
|||
|
||||
#define Log0(priority) do { } while(0)
|
||||
#define Log1(priority, fmt) do { } while(0)
|
||||
#define Log2(priority, fmt, data) do { } while(0)
|
||||
#define Log3(priority, fmt, data1, data2) do { } while(0)
|
||||
#define Log2(priority, fmt, data) do {(void)priority; } while(0)
|
||||
#define Log3(priority, fmt, data1, data2) do {int p = priority; (void)p; } while(0)
|
||||
#define Log4(priority, fmt, data1, data2, data3) do { } while(0)
|
||||
#define Log5(priority, fmt, data1, data2, data3, data4) do { } while(0)
|
||||
#define Log9(priority, fmt, data1, data2, data3, data4, data5, data6, data7, data8) do { } while(0)
|
||||
|
|
|
@ -1,309 +0,0 @@
|
|||
/*
|
||||
* MUSCLE SmartCard Development ( https://pcsclite.apdu.fr/ )
|
||||
*
|
||||
* Copyright (C) 1999-2004
|
||||
* David Corcoran <corcoran@musclecard.com>
|
||||
* Copyright (C) 2002-2011
|
||||
* Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
* Copyright (C) 2005
|
||||
* Martin Paljak <martin@paljak.pri.ee>
|
||||
*
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
3. The name of the author may not be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* @brief This keeps a list of defines for pcsc-lite.
|
||||
*
|
||||
* Error codes from http://msdn.microsoft.com/en-us/library/aa924526.aspx
|
||||
*/
|
||||
|
||||
#ifndef __pcsclite_h__
|
||||
#define __pcsclite_h__
|
||||
|
||||
#include <wintypes.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
typedef LONG SCARDCONTEXT; /**< \p hContext returned by SCardEstablishContext() */
|
||||
typedef SCARDCONTEXT *PSCARDCONTEXT;
|
||||
typedef SCARDCONTEXT *LPSCARDCONTEXT;
|
||||
typedef LONG SCARDHANDLE; /**< \p hCard returned by SCardConnect() */
|
||||
typedef SCARDHANDLE *PSCARDHANDLE;
|
||||
typedef SCARDHANDLE *LPSCARDHANDLE;
|
||||
|
||||
#define MAX_ATR_SIZE 33 /**< Maximum ATR size */
|
||||
|
||||
/* Set structure elements aligment on bytes
|
||||
* http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html */
|
||||
#ifdef __APPLE__
|
||||
#pragma pack(1)
|
||||
#endif
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const char *szReader;
|
||||
void *pvUserData;
|
||||
DWORD dwCurrentState;
|
||||
DWORD dwEventState;
|
||||
DWORD cbAtr;
|
||||
unsigned char rgbAtr[MAX_ATR_SIZE];
|
||||
}
|
||||
SCARD_READERSTATE, *LPSCARD_READERSTATE;
|
||||
|
||||
/** Protocol Control Information (PCI) */
|
||||
typedef struct
|
||||
{
|
||||
unsigned long dwProtocol; /**< Protocol identifier */
|
||||
unsigned long cbPciLength; /**< Protocol Control Inf Length */
|
||||
}
|
||||
SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
|
||||
|
||||
typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST;
|
||||
|
||||
extern const SCARD_IO_REQUEST g_rgSCardT0Pci, g_rgSCardT1Pci, g_rgSCardRawPci;
|
||||
|
||||
/* restore default structure elements alignment */
|
||||
#ifdef __APPLE__
|
||||
#pragma pack()
|
||||
#endif
|
||||
|
||||
#define SCARD_PCI_T0 (&g_rgSCardT0Pci) /**< protocol control information (PCI) for T=0 */
|
||||
#define SCARD_PCI_T1 (&g_rgSCardT1Pci) /**< protocol control information (PCI) for T=1 */
|
||||
#define SCARD_PCI_RAW (&g_rgSCardRawPci) /**< protocol control information (PCI) for RAW protocol */
|
||||
|
||||
/**
|
||||
* @defgroup ErrorCodes ErrorCodes
|
||||
* @brief Error code documentation
|
||||
*
|
||||
* The error codes descriptions are from
|
||||
* http://msdn.microsoft.com/en-us/library/aa924526.aspx
|
||||
*/
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_S_SUCCESS ((LONG)0x00000000) /**< No error was encountered. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_F_INTERNAL_ERROR ((LONG)0x80100001) /**< An internal consistency check failed. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_CANCELLED ((LONG)0x80100002) /**< The action was cancelled by an SCardCancel request. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_INVALID_HANDLE ((LONG)0x80100003) /**< The supplied handle was invalid. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_INVALID_PARAMETER ((LONG)0x80100004) /**< One or more of the supplied parameters could not be properly interpreted. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_INVALID_TARGET ((LONG)0x80100005) /**< Registry startup information is missing or invalid. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_NO_MEMORY ((LONG)0x80100006) /**< Not enough memory available to complete this command. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_F_WAITED_TOO_LONG ((LONG)0x80100007) /**< An internal consistency timer has expired. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_INSUFFICIENT_BUFFER ((LONG)0x80100008) /**< The data buffer to receive returned data is too small for the returned data. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_UNKNOWN_READER ((LONG)0x80100009) /**< The specified reader name is not recognized. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_TIMEOUT ((LONG)0x8010000A) /**< The user-specified timeout value has expired. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_SHARING_VIOLATION ((LONG)0x8010000B) /**< The smart card cannot be accessed because of other connections outstanding. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_NO_SMARTCARD ((LONG)0x8010000C) /**< The operation requires a Smart Card, but no Smart Card is currently in the device. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_UNKNOWN_CARD ((LONG)0x8010000D) /**< The specified smart card name is not recognized. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_CANT_DISPOSE ((LONG)0x8010000E) /**< The system could not dispose of the media in the requested manner. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_PROTO_MISMATCH ((LONG)0x8010000F) /**< The requested protocols are incompatible with the protocol currently in use with the smart card. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_NOT_READY ((LONG)0x80100010) /**< The reader or smart card is not ready to accept commands. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_INVALID_VALUE ((LONG)0x80100011) /**< One or more of the supplied parameters values could not be properly interpreted. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_SYSTEM_CANCELLED ((LONG)0x80100012) /**< The action was cancelled by the system, presumably to log off or shut down. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_F_COMM_ERROR ((LONG)0x80100013) /**< An internal communications error has been detected. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_F_UNKNOWN_ERROR ((LONG)0x80100014) /**< An internal error has been detected, but the source is unknown. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_INVALID_ATR ((LONG)0x80100015) /**< An ATR obtained from the registry is not a valid ATR string. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_NOT_TRANSACTED ((LONG)0x80100016) /**< An attempt was made to end a non-existent transaction. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_READER_UNAVAILABLE ((LONG)0x80100017) /**< The specified reader is not currently available for use. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_P_SHUTDOWN ((LONG)0x80100018) /**< The operation has been aborted to allow the server application to exit. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_PCI_TOO_SMALL ((LONG)0x80100019) /**< The PCI Receive buffer was too small. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_READER_UNSUPPORTED ((LONG)0x8010001A) /**< The reader driver does not meet minimal requirements for support. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_DUPLICATE_READER ((LONG)0x8010001B) /**< The reader driver did not produce a unique reader name. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_CARD_UNSUPPORTED ((LONG)0x8010001C) /**< The smart card does not meet minimal requirements for support. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_NO_SERVICE ((LONG)0x8010001D) /**< The Smart card resource manager is not running. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_SERVICE_STOPPED ((LONG)0x8010001E) /**< The Smart card resource manager has shut down. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_UNEXPECTED ((LONG)0x8010001F) /**< An unexpected card error has occurred. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_UNSUPPORTED_FEATURE ((LONG)0x8010001F) /**< This smart card does not support the requested feature. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_ICC_INSTALLATION ((LONG)0x80100020) /**< No primary provider can be found for the smart card. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_ICC_CREATEORDER ((LONG)0x80100021) /**< The requested order of object creation is not supported. */
|
||||
/** @ingroup ErrorCodes */
|
||||
/* #define SCARD_E_UNSUPPORTED_FEATURE ((LONG)0x80100022) / **< This smart card does not support the requested feature. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_DIR_NOT_FOUND ((LONG)0x80100023) /**< The identified directory does not exist in the smart card. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_FILE_NOT_FOUND ((LONG)0x80100024) /**< The identified file does not exist in the smart card. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_NO_DIR ((LONG)0x80100025) /**< The supplied path does not represent a smart card directory. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_NO_FILE ((LONG)0x80100026) /**< The supplied path does not represent a smart card file. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_NO_ACCESS ((LONG)0x80100027) /**< Access is denied to this file. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_WRITE_TOO_MANY ((LONG)0x80100028) /**< The smart card does not have enough memory to store the information. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_BAD_SEEK ((LONG)0x80100029) /**< There was an error trying to set the smart card file object pointer. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_INVALID_CHV ((LONG)0x8010002A) /**< The supplied PIN is incorrect. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_UNKNOWN_RES_MNG ((LONG)0x8010002B) /**< An unrecognized error code was returned from a layered component. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_NO_SUCH_CERTIFICATE ((LONG)0x8010002C) /**< The requested certificate does not exist. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_CERTIFICATE_UNAVAILABLE ((LONG)0x8010002D) /**< The requested certificate could not be obtained. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_NO_READERS_AVAILABLE ((LONG)0x8010002E) /**< Cannot find a smart card reader. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_COMM_DATA_LOST ((LONG)0x8010002F) /**< A communications error with the smart card has been detected. Retry the operation. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_NO_KEY_CONTAINER ((LONG)0x80100030) /**< The requested key container does not exist on the smart card. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_E_SERVER_TOO_BUSY ((LONG)0x80100031) /**< The Smart Card Resource Manager is too busy to complete this operation. */
|
||||
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_W_UNSUPPORTED_CARD ((LONG)0x80100065) /**< The reader cannot communicate with the card, due to ATR string configuration conflicts. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_W_UNRESPONSIVE_CARD ((LONG)0x80100066) /**< The smart card is not responding to a reset. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_W_UNPOWERED_CARD ((LONG)0x80100067) /**< Power has been removed from the smart card, so that further communication is not possible. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_W_RESET_CARD ((LONG)0x80100068) /**< The smart card has been reset, so any shared state information is invalid. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_W_REMOVED_CARD ((LONG)0x80100069) /**< The smart card has been removed, so further communication is not possible. */
|
||||
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_W_SECURITY_VIOLATION ((LONG)0x8010006A) /**< Access was denied because of a security violation. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_W_WRONG_CHV ((LONG)0x8010006B) /**< The card cannot be accessed because the wrong PIN was presented. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_W_CHV_BLOCKED ((LONG)0x8010006C) /**< The card cannot be accessed because the maximum number of PIN entry attempts has been reached. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_W_EOF ((LONG)0x8010006D) /**< The end of the smart card file has been reached. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_W_CANCELLED_BY_USER ((LONG)0x8010006E) /**< The user pressed "Cancel" on a Smart Card Selection Dialog. */
|
||||
/** @ingroup ErrorCodes */
|
||||
#define SCARD_W_CARD_NOT_AUTHENTICATED ((LONG)0x8010006F) /**< No PIN was presented to the smart card. */
|
||||
|
||||
#define SCARD_AUTOALLOCATE (DWORD)(-1) /**< see SCardFreeMemory() */
|
||||
#define SCARD_SCOPE_USER 0x0000 /**< Scope in user space */
|
||||
#define SCARD_SCOPE_TERMINAL 0x0001 /**< Scope in terminal */
|
||||
#define SCARD_SCOPE_SYSTEM 0x0002 /**< Scope in system */
|
||||
#define SCARD_SCOPE_GLOBAL 0x0003 /**< Scope is global */
|
||||
|
||||
#define SCARD_PROTOCOL_UNDEFINED 0x0000 /**< protocol not set */
|
||||
#define SCARD_PROTOCOL_UNSET SCARD_PROTOCOL_UNDEFINED /* backward compat */
|
||||
#define SCARD_PROTOCOL_T0 0x0001 /**< T=0 active protocol. */
|
||||
#define SCARD_PROTOCOL_T1 0x0002 /**< T=1 active protocol. */
|
||||
#define SCARD_PROTOCOL_RAW 0x0004 /**< Raw active protocol. */
|
||||
#define SCARD_PROTOCOL_T15 0x0008 /**< T=15 protocol. */
|
||||
|
||||
#define SCARD_PROTOCOL_ANY (SCARD_PROTOCOL_T0|SCARD_PROTOCOL_T1) /**< IFD determines prot. */
|
||||
|
||||
#define SCARD_SHARE_EXCLUSIVE 0x0001 /**< Exclusive mode only */
|
||||
#define SCARD_SHARE_SHARED 0x0002 /**< Shared mode only */
|
||||
#define SCARD_SHARE_DIRECT 0x0003 /**< Raw mode only */
|
||||
|
||||
#define SCARD_LEAVE_CARD 0x0000 /**< Do nothing on close */
|
||||
#define SCARD_RESET_CARD 0x0001 /**< Reset on close */
|
||||
#define SCARD_UNPOWER_CARD 0x0002 /**< Power down on close */
|
||||
#define SCARD_EJECT_CARD 0x0003 /**< Eject on close */
|
||||
|
||||
#define SCARD_UNKNOWN 0x0001 /**< Unknown state */
|
||||
#define SCARD_ABSENT 0x0002 /**< Card is absent */
|
||||
#define SCARD_PRESENT 0x0004 /**< Card is present */
|
||||
#define SCARD_SWALLOWED 0x0008 /**< Card not powered */
|
||||
#define SCARD_POWERED 0x0010 /**< Card is powered */
|
||||
#define SCARD_NEGOTIABLE 0x0020 /**< Ready for PTS */
|
||||
#define SCARD_SPECIFIC 0x0040 /**< PTS has been set */
|
||||
|
||||
#define SCARD_STATE_UNAWARE 0x0000 /**< App wants status */
|
||||
#define SCARD_STATE_IGNORE 0x0001 /**< Ignore this reader */
|
||||
#define SCARD_STATE_CHANGED 0x0002 /**< State has changed */
|
||||
#define SCARD_STATE_UNKNOWN 0x0004 /**< Reader unknown */
|
||||
#define SCARD_STATE_UNAVAILABLE 0x0008 /**< Status unavailable */
|
||||
#define SCARD_STATE_EMPTY 0x0010 /**< Card removed */
|
||||
#define SCARD_STATE_PRESENT 0x0020 /**< Card inserted */
|
||||
#define SCARD_STATE_ATRMATCH 0x0040 /**< ATR matches card */
|
||||
#define SCARD_STATE_EXCLUSIVE 0x0080 /**< Exclusive Mode */
|
||||
#define SCARD_STATE_INUSE 0x0100 /**< Shared Mode */
|
||||
#define SCARD_STATE_MUTE 0x0200 /**< Unresponsive card */
|
||||
#define SCARD_STATE_UNPOWERED 0x0400 /**< Unpowered card */
|
||||
|
||||
#ifndef INFINITE
|
||||
#define INFINITE 0xFFFFFFFF /**< Infinite timeout */
|
||||
#endif
|
||||
|
||||
#define PCSCLITE_VERSION_NUMBER "1.9.5" /**< Current version */
|
||||
/** Maximum readers context (a slot is count as a reader) */
|
||||
#define PCSCLITE_MAX_READERS_CONTEXTS 16
|
||||
|
||||
#define MAX_READERNAME 128
|
||||
|
||||
#ifndef SCARD_ATR_LENGTH
|
||||
#define SCARD_ATR_LENGTH MAX_ATR_SIZE /**< Maximum ATR size */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The message and buffer sizes must be multiples of 16.
|
||||
* The max message size must be at least large enough
|
||||
* to accomodate the transmit_struct
|
||||
*/
|
||||
#define MAX_BUFFER_SIZE 264 /**< Maximum Tx/Rx Buffer for short APDU */
|
||||
#define MAX_BUFFER_SIZE_EXTENDED (4 + 3 + (1<<16) + 3 + 2) /**< enhanced (64K + APDU + Lc + Le + SW) Tx/Rx Buffer */
|
||||
|
||||
/*
|
||||
* Gets a stringified error response
|
||||
*/
|
||||
const char *pcsc_stringify_error(const LONG);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -1889,7 +1889,7 @@ int evaluatetoken(char *pcToken)
|
|||
if (strstr(pcLibpath, ".bundle") != NULL)
|
||||
{
|
||||
Log1(PCSC_LOG_ERROR, "WARNING *************************************");
|
||||
Log2(PCSC_LOG_ERROR, "WARNING: USB drivers SHOULD NOT be declared in reader.conf: %s", pcLibpath);
|
||||
Log2(PCSC_LOG_ERROR, "WARNING: USB drivers SHOULD NOT be declared in a reader.conf file: %s", pcLibpath);
|
||||
Log1(PCSC_LOG_ERROR, "WARNING *************************************");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -168,7 +168,7 @@ int evaluatetoken(char *pcToken)
|
|||
if (strstr(pcLibpath, ".bundle") != NULL)
|
||||
{
|
||||
Log1(PCSC_LOG_ERROR, "WARNING *************************************");
|
||||
Log2(PCSC_LOG_ERROR, "WARNING: USB drivers SHOULD NOT be declared in reader.conf: %s", pcLibpath);
|
||||
Log2(PCSC_LOG_ERROR, "WARNING: USB drivers SHOULD NOT be declared in a reader.conf file: %s", pcLibpath);
|
||||
Log1(PCSC_LOG_ERROR, "WARNING *************************************");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -85,8 +85,6 @@ void DebugLogSetLevel(const int level)
|
|||
INTERNAL void DebugLogSetCategory(const int dbginfo)
|
||||
{
|
||||
(void)dbginfo;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
INTERNAL void DebugLogCategory(const int category, const unsigned char *buffer,
|
||||
|
|
|
@ -41,14 +41,9 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "pcsclite.h"
|
||||
#include "hotplug.h"
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
#endif
|
||||
|
||||
#if !defined(__APPLE__) && !defined(HAVE_LIBUSB) && !defined(__linux__) && !defined(HAVE_LIBUDEV)
|
||||
#if !defined(__APPLE__) && !defined(HAVE_LIBUSB) && !defined(HAVE_LIBUDEV)
|
||||
|
||||
LONG HPSearchHotPluggables(void)
|
||||
{
|
||||
|
|
|
@ -331,28 +331,8 @@ static LONG HPReadBundleValues(void)
|
|||
static void HPRemoveDevice(struct udev_device *dev)
|
||||
{
|
||||
int i;
|
||||
const char *devpath;
|
||||
struct udev_device *parent;
|
||||
const char *sysname;
|
||||
|
||||
/* The device pointed to by dev contains information about
|
||||
the interface. In order to get information about the USB
|
||||
device, get the parent device with the subsystem/devtype pair
|
||||
of "usb"/"usb_device". This will be several levels up the
|
||||
tree, but the function will find it.*/
|
||||
parent = udev_device_get_parent_with_subsystem_devtype(dev, "usb",
|
||||
"usb_device");
|
||||
if (!parent)
|
||||
return;
|
||||
|
||||
devpath = udev_device_get_devnode(parent);
|
||||
if (!devpath)
|
||||
{
|
||||
/* the device disapeared? */
|
||||
Log1(PCSC_LOG_ERROR, "udev_device_get_devnode() failed");
|
||||
return;
|
||||
}
|
||||
|
||||
sysname = udev_device_get_sysname(dev);
|
||||
if (!sysname)
|
||||
{
|
||||
|
@ -465,7 +445,7 @@ static void HPAddDevice(struct udev_device *dev)
|
|||
{
|
||||
Log2(PCSC_LOG_ERROR,
|
||||
"Not enough reader entries. Already found %d readers", index);
|
||||
return;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (Add_Interface_In_Name)
|
||||
|
|
|
@ -42,6 +42,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#include "config.h"
|
||||
#ifdef HAVE_LIBUSB
|
||||
|
||||
#define _GNU_SOURCE /* for asprintf(3) */
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <stdio.h>
|
||||
|
@ -606,15 +607,13 @@ static LONG HPAddHotPluggable(struct libusb_device *dev,
|
|||
int i;
|
||||
uint8_t iInterface = 0;
|
||||
uint8_t iSerialNumber = 0;
|
||||
char deviceName[MAX_DEVICENAME];
|
||||
char *deviceName;
|
||||
|
||||
Log2(PCSC_LOG_INFO, "Adding USB device: %s", bus_device);
|
||||
|
||||
snprintf(deviceName, sizeof(deviceName), "usb:%04x/%04x:libusb-1.0:%s",
|
||||
asprintf(&deviceName, "usb:%04x/%04x:libusb-1.0:%s",
|
||||
desc.idVendor, desc.idProduct, bus_device);
|
||||
|
||||
deviceName[sizeof(deviceName) -1] = '\0';
|
||||
|
||||
pthread_mutex_lock(&usbNotifierMutex);
|
||||
|
||||
/* find a free entry */
|
||||
|
@ -751,6 +750,8 @@ static LONG HPAddHotPluggable(struct libusb_device *dev,
|
|||
|
||||
pthread_mutex_unlock(&usbNotifierMutex);
|
||||
|
||||
free(deviceName);
|
||||
|
||||
return 1;
|
||||
} /* End of function */
|
||||
|
||||
|
|
|
@ -788,17 +788,16 @@ static int HPScan(void)
|
|||
}
|
||||
if (!found)
|
||||
{
|
||||
char deviceName[MAX_DEVICENAME];
|
||||
char *deviceName;
|
||||
|
||||
/* the format should be "usb:%04x/%04x" but Apple uses the
|
||||
* friendly name instead */
|
||||
snprintf(deviceName, sizeof(deviceName),
|
||||
"%s", a->m_driver->m_friendlyName);
|
||||
deviceName[sizeof(deviceName)-1] = '\0';
|
||||
asprintf(&deviceName, "%s", a->m_driver->m_friendlyName);
|
||||
|
||||
RFAddReader(a->m_driver->m_friendlyName,
|
||||
PCSCLITE_HP_BASE_PORT + a->m_address, a->m_driver->m_libPath,
|
||||
deviceName);
|
||||
free(deviceName);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
86
src/pcscd.h
86
src/pcscd.h
|
@ -1,86 +0,0 @@
|
|||
/*
|
||||
* MUSCLE SmartCard Development ( https://pcsclite.apdu.fr/ )
|
||||
*
|
||||
* Copyright (C) 2006-2011
|
||||
* Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* @brief This keeps a list of defines for pcsc-lite.
|
||||
*/
|
||||
|
||||
#ifndef __pcscd_h__
|
||||
#define __pcscd_h__
|
||||
|
||||
#define TIME_BEFORE_SUICIDE 60
|
||||
|
||||
#define SCARD_RESET 0x0001 /**< Card was reset */
|
||||
#define SCARD_INSERTED 0x0002 /**< Card was inserted */
|
||||
#define SCARD_REMOVED 0x0004 /**< Card was removed */
|
||||
|
||||
#define PCSCLITE_CONFIG_DIR "/usr/local/etc/reader.conf.d"
|
||||
|
||||
#define PCSCLITE_IPC_DIR USE_IPCDIR
|
||||
#define PCSCLITE_RUN_PID PCSCLITE_IPC_DIR "/pcscd.pid"
|
||||
|
||||
#define PCSCLITE_CSOCK_NAME PCSCLITE_IPC_DIR "/pcscd.comm"
|
||||
|
||||
#define PCSCLITE_VERSION_NUMBER "1.9.5" /**< Current version */
|
||||
#define PCSCLITE_STATUS_POLL_RATE 400000 /**< Status polling rate */
|
||||
#define PCSCLITE_LOCK_POLL_RATE 100000 /**< Lock polling rate */
|
||||
|
||||
#define PCSC_MAX_CONTEXT_THREADS 200
|
||||
#define PCSC_MAX_CONTEXT_CARD_HANDLES 200
|
||||
#define PCSC_MAX_READER_HANDLES 200
|
||||
|
||||
#define PCSCLITE_STATUS_WAIT 200000 /**< Status Change Sleep */
|
||||
#define MAX_DEVICENAME 255
|
||||
|
||||
/** Different values for struct ReaderContext powerState field */
|
||||
enum
|
||||
{
|
||||
POWER_STATE_UNPOWERED, /**< auto power off */
|
||||
POWER_STATE_POWERED, /**< powered */
|
||||
POWER_STATE_GRACE_PERIOD, /**< card was in use */
|
||||
POWER_STATE_IN_USE /**< card is used */
|
||||
};
|
||||
|
||||
/** time to wait before powering down an unused card */
|
||||
#define PCSCLITE_POWER_OFF_GRACE_PERIOD 5*1000 /* 5 second */
|
||||
|
||||
/** normal timeout for pthCardEvent driver function when
|
||||
* no card or card in use */
|
||||
#define PCSCLITE_STATUS_EVENT_TIMEOUT 10*60*1000 /* 10 minutes */
|
||||
|
||||
/* Uncomment the next line if you do NOT want to use auto power off */
|
||||
/* #define DISABLE_ON_DEMAND_POWER_ON */
|
||||
|
||||
/* Uncomment the next line if you do not want the card to be powered on
|
||||
* when inserted */
|
||||
/* #define DISABLE_AUTO_POWER_ON */
|
||||
|
||||
#endif
|
|
@ -58,7 +58,6 @@
|
|||
#define PCSC_MAX_READER_HANDLES 200
|
||||
|
||||
#define PCSCLITE_STATUS_WAIT 200000 /**< Status Change Sleep */
|
||||
#define MAX_DEVICENAME 255
|
||||
|
||||
/** Different values for struct ReaderContext powerState field */
|
||||
enum
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Copyright (C) 1999-2002
|
||||
* David Corcoran <corcoran@musclecard.com>
|
||||
* Copyright (C) 2002-2018
|
||||
* Copyright (C) 2002-2022
|
||||
* Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
*
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
@ -75,7 +75,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#define FALSE 0
|
||||
#endif
|
||||
|
||||
char AraKiri = FALSE;
|
||||
_Atomic char AraKiri = FALSE;
|
||||
static char Init = TRUE;
|
||||
char AutoExit = FALSE;
|
||||
char SocketActivated = FALSE;
|
||||
|
@ -260,7 +260,9 @@ int main(int argc, char **argv)
|
|||
int rv;
|
||||
char setToForeground;
|
||||
char HotPlug;
|
||||
char *newReaderConfig;
|
||||
#ifdef USE_SERIAL
|
||||
char *newReaderConfig = NULL;
|
||||
#endif
|
||||
struct stat fStatBuf;
|
||||
int customMaxThreadCounter = 0;
|
||||
int customMaxReaderHandles = 0;
|
||||
|
@ -293,7 +295,6 @@ int main(int argc, char **argv)
|
|||
#endif
|
||||
#define OPT_STRING "c:fTdhvaieCHt:r:s:xSI"
|
||||
|
||||
newReaderConfig = NULL;
|
||||
setToForeground = FALSE;
|
||||
HotPlug = FALSE;
|
||||
|
||||
|
@ -335,10 +336,12 @@ int main(int argc, char **argv)
|
|||
HPForceReaderPolling = optarg ? abs(atoi(optarg)) : 1;
|
||||
break;
|
||||
#endif
|
||||
#ifdef USE_SERIAL
|
||||
case 'c':
|
||||
Log2(PCSC_LOG_INFO, "using new config file: %s", optarg);
|
||||
Log2(PCSC_LOG_INFO, "using new config directory: %s", optarg);
|
||||
newReaderConfig = optarg;
|
||||
break;
|
||||
#endif
|
||||
|
||||
case 'f':
|
||||
setToForeground = TRUE;
|
||||
|
@ -640,14 +643,14 @@ int main(int argc, char **argv)
|
|||
|
||||
#ifdef USE_SERIAL
|
||||
/*
|
||||
* Grab the information from the reader.conf
|
||||
* Grab the information from the reader.conf files
|
||||
*/
|
||||
if (newReaderConfig)
|
||||
{
|
||||
rv = RFStartSerialReaders(newReaderConfig);
|
||||
if (rv != 0)
|
||||
{
|
||||
Log3(PCSC_LOG_CRITICAL, "invalid file %s: %s", newReaderConfig,
|
||||
Log3(PCSC_LOG_CRITICAL, "invalid directory %s: %s", newReaderConfig,
|
||||
strerror(errno));
|
||||
at_exit();
|
||||
}
|
||||
|
@ -748,6 +751,8 @@ int main(int argc, char **argv)
|
|||
#ifndef USE_SERIAL
|
||||
if (rv)
|
||||
at_exit();
|
||||
#else
|
||||
(void)rv;
|
||||
#endif
|
||||
|
||||
rv = HPRegisterForHotplugEvents();
|
||||
|
@ -844,11 +849,13 @@ static void print_version(void)
|
|||
{
|
||||
printf("%s version %s.\n", PACKAGE, VERSION);
|
||||
printf("Copyright (C) 1999-2002 by David Corcoran <corcoran@musclecard.com>.\n");
|
||||
printf("Copyright (C) 2001-2018 by Ludovic Rousseau <ludovic.rousseau@free.fr>.\n");
|
||||
printf("Copyright (C) 2001-2022 by Ludovic Rousseau <ludovic.rousseau@free.fr>.\n");
|
||||
printf("Copyright (C) 2003-2004 by Damien Sauveron <sauveron@labri.fr>.\n");
|
||||
printf("Report bugs to <pcsclite-muscle@lists.infradead.org>.\n");
|
||||
|
||||
printf("Enabled features:%s\n", PCSCLITE_FEATURES);
|
||||
printf("MAX_READERNAME: %d, PCSCLITE_MAX_READERS_CONTEXTS: %d\n",
|
||||
MAX_READERNAME, PCSCLITE_MAX_READERS_CONTEXTS);
|
||||
}
|
||||
|
||||
static void print_usage(char const * const progname)
|
||||
|
@ -857,7 +864,9 @@ static void print_usage(char const * const progname)
|
|||
printf("Options:\n");
|
||||
#ifdef HAVE_GETOPT_LONG
|
||||
printf(" -a, --apdu log APDU commands and results\n");
|
||||
printf(" -c, --config path to reader.conf\n");
|
||||
#ifdef USE_SERIAL
|
||||
printf(" -c, --config new reader.conf.d path\n");
|
||||
#endif
|
||||
printf(" -f, --foreground run in foreground (no daemon),\n");
|
||||
printf(" send logs to stdout instead of syslog\n");
|
||||
printf(" -T, --color force use of colored logs\n");
|
||||
|
@ -877,7 +886,9 @@ static void print_usage(char const * const progname)
|
|||
printf(" -I, --reader-name-no-interface do not include the USB interface name in the name\n");
|
||||
#else
|
||||
printf(" -a log APDU commands and results\n");
|
||||
printf(" -c path to reader.conf\n");
|
||||
#ifdef USE_SERIAL
|
||||
printf(" -c new reader.conf.d path\n");
|
||||
#endif
|
||||
printf(" -f run in foreground (no daemon), send logs to stdout instead of syslog\n");
|
||||
printf(" -T force use of colored logs\n");
|
||||
printf(" -d display debug messages.\n");
|
||||
|
|
|
@ -52,6 +52,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#ifdef HAVE_ALLOCA_H
|
||||
#include <alloca.h>
|
||||
#endif
|
||||
#include <stdatomic.h>
|
||||
|
||||
#include "misc.h"
|
||||
#include "pcscd.h"
|
||||
|
@ -107,9 +108,7 @@ LONG _RefReader(READER_CONTEXT * sReader)
|
|||
if (0 == sReader->reference)
|
||||
return SCARD_E_READER_UNAVAILABLE;
|
||||
|
||||
pthread_mutex_lock(&sReader->reference_lock);
|
||||
sReader->reference += 1;
|
||||
pthread_mutex_unlock(&sReader->reference_lock);
|
||||
|
||||
return SCARD_S_SUCCESS;
|
||||
}
|
||||
|
@ -119,9 +118,7 @@ LONG _UnrefReader(READER_CONTEXT * sReader)
|
|||
if (0 == sReader->reference)
|
||||
return SCARD_E_READER_UNAVAILABLE;
|
||||
|
||||
pthread_mutex_lock(&sReader->reference_lock);
|
||||
sReader->reference -= 1;
|
||||
pthread_mutex_unlock(&sReader->reference_lock);
|
||||
|
||||
if (0 == sReader->reference)
|
||||
removeReader(sReader);
|
||||
|
@ -141,6 +138,9 @@ LONG RFAllocateReaderSpace(unsigned int customMaxReaderHandles)
|
|||
{
|
||||
sReadersContexts[i] = malloc(sizeof(READER_CONTEXT));
|
||||
sReadersContexts[i]->vHandle = NULL;
|
||||
atomic_init(&sReadersContexts[i]->hLockId, 0);
|
||||
atomic_init(&sReadersContexts[i]->contexts, 0);
|
||||
atomic_init(&sReadersContexts[i]->reference, 0);
|
||||
|
||||
/* Zero out each value in the struct */
|
||||
memset(readerStates[i].readerName, 0, MAX_READERNAME);
|
||||
|
@ -311,8 +311,6 @@ LONG RFAddReader(const char *readerNameLong, int port, const char *library,
|
|||
sReadersContexts[dwContext]->powerState = POWER_STATE_UNPOWERED;
|
||||
|
||||
/* reference count */
|
||||
(void)pthread_mutex_init(&sReadersContexts[dwContext]->reference_lock,
|
||||
NULL);
|
||||
sReadersContexts[dwContext]->reference = 1;
|
||||
|
||||
/* If a clone to this reader exists take some values from that clone */
|
||||
|
@ -514,8 +512,6 @@ LONG RFAddReader(const char *readerNameLong, int port, const char *library,
|
|||
sReadersContexts[dwContextB]->powerState = POWER_STATE_UNPOWERED;
|
||||
|
||||
/* reference count */
|
||||
(void)pthread_mutex_init(&sReadersContexts[dwContextB]->reference_lock,
|
||||
NULL);
|
||||
sReadersContexts[dwContextB]->reference = 1;
|
||||
|
||||
/* Call on the parent driver to see if the slots are thread safe */
|
||||
|
@ -623,7 +619,7 @@ LONG RFRemoveReader(const char *readerName, int port, int flags)
|
|||
if ((IFD_SUCCESS) == ret && (1 == tagValue[0]))
|
||||
{
|
||||
tagValue[0] = 1;
|
||||
ret = IFDSetCapabilities(sReadersContexts[i],
|
||||
IFDSetCapabilities(sReadersContexts[i],
|
||||
TAG_IFD_DEVICE_REMOVED, sizeof tagValue, tagValue);
|
||||
}
|
||||
}
|
||||
|
@ -1232,7 +1228,7 @@ LONG RFAddReaderHandle(READER_CONTEXT * rContext, SCARDHANDLE hCard)
|
|||
}
|
||||
|
||||
newHandle->hCard = hCard;
|
||||
newHandle->dwEventStatus = 0;
|
||||
atomic_init(&newHandle->dwEventStatus, 0);
|
||||
|
||||
lrv = list_append(&rContext->handlesList, newHandle);
|
||||
if (lrv < 0)
|
||||
|
@ -1313,6 +1309,7 @@ LONG RFCheckReaderEventState(READER_CONTEXT * rContext, SCARDHANDLE hCard)
|
|||
{
|
||||
LONG rv;
|
||||
RDR_CLIHANDLES *currentHandle;
|
||||
DWORD dwEventStatus;
|
||||
|
||||
(void)pthread_mutex_lock(&rContext->handlesList_lock);
|
||||
currentHandle = list_seek(&rContext->handlesList, &hCard);
|
||||
|
@ -1324,7 +1321,8 @@ LONG RFCheckReaderEventState(READER_CONTEXT * rContext, SCARDHANDLE hCard)
|
|||
return SCARD_E_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
switch(currentHandle->dwEventStatus)
|
||||
dwEventStatus = currentHandle->dwEventStatus;
|
||||
switch(dwEventStatus)
|
||||
{
|
||||
case 0:
|
||||
rv = SCARD_S_SUCCESS;
|
||||
|
|
|
@ -98,7 +98,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
struct RdrCliHandles
|
||||
{
|
||||
SCARDHANDLE hCard; /**< hCard for this connection */
|
||||
DWORD dwEventStatus; /**< Recent event that must be sent */
|
||||
_Atomic DWORD dwEventStatus; /**< Recent event that must be sent */
|
||||
};
|
||||
|
||||
typedef struct RdrCliHandles RDR_CLIHANDLES;
|
||||
|
@ -123,15 +123,14 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
int version; /**< IFD Handler version number */
|
||||
int port; /**< Port ID */
|
||||
int slot; /**< Current Reader Slot */
|
||||
volatile SCARDHANDLE hLockId; /**< Lock Id */
|
||||
_Atomic SCARDHANDLE hLockId; /**< Lock Id */
|
||||
int LockCount; /**< number of recursive locks */
|
||||
int32_t contexts; /**< Number of open contexts */
|
||||
_Atomic int32_t contexts; /**< Number of open contexts */
|
||||
int * pFeeds; /**< Number of shared client to lib */
|
||||
int * pMutex; /**< Number of client to mutex */
|
||||
int powerState; /**< auto power off state */
|
||||
pthread_mutex_t powerState_lock; /**< powerState mutex */
|
||||
int reference; /**< number of users of the structure */
|
||||
pthread_mutex_t reference_lock; /**< reference mutex */
|
||||
_Atomic int reference; /**< number of users of the structure */
|
||||
|
||||
struct pubReaderStatesList *readerState; /**< link to the reader state */
|
||||
/* we can't use READER_STATE * here since eventhandler.h can't be
|
||||
|
|
|
@ -235,6 +235,7 @@ EGREP = @EGREP@
|
|||
ETAGS = @ETAGS@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
FILECMD = @FILECMD@
|
||||
GREP = @GREP@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
|
|
|
@ -203,6 +203,9 @@ wait_for_card_again:
|
|||
}
|
||||
|
||||
if (p > 1)
|
||||
{
|
||||
int again = 0;
|
||||
|
||||
do
|
||||
{
|
||||
char input[80];
|
||||
|
@ -216,9 +219,13 @@ wait_for_card_again:
|
|||
iReader = atoi(input);
|
||||
|
||||
if (iReader > p || iReader <= 0)
|
||||
{
|
||||
printf("Invalid Value - try again\n");
|
||||
again = 1;
|
||||
}
|
||||
}
|
||||
while (again);
|
||||
}
|
||||
while (iReader > p || iReader <= 0);
|
||||
else
|
||||
iReader = 1;
|
||||
|
||||
|
|
|
@ -1916,10 +1916,12 @@ LONG SCardGetStatusChange(SCARDCONTEXT hContext, DWORD dwTimeout,
|
|||
/* Check for card presence in the reader */
|
||||
if (readerState & SCARD_PRESENT)
|
||||
{
|
||||
#ifndef DISABLE_AUTO_POWER_ON
|
||||
/* card present but not yet powered up */
|
||||
if (0 == rContext->cardAtrLength)
|
||||
/* Allow the status thread to convey information */
|
||||
(void)SYS_USleep(PCSCLITE_STATUS_POLL_RATE + 10);
|
||||
#endif
|
||||
|
||||
currReader->cbAtr = rContext->cardAtrLength;
|
||||
memcpy(currReader->rgbAtr, rContext->cardAtr,
|
||||
|
@ -2269,6 +2271,14 @@ LONG SCardControl(SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID pbSendBuffer,
|
|||
|
||||
if (SCARD_S_SUCCESS == scControlStruct.rv)
|
||||
{
|
||||
if (scControlStruct.dwBytesReturned > cbRecvLength)
|
||||
{
|
||||
if (NULL != lpBytesReturned)
|
||||
*lpBytesReturned = scControlStruct.dwBytesReturned;
|
||||
rv = SCARD_E_INSUFFICIENT_BUFFER;
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* read the received buffer */
|
||||
rv = MessageReceive(pbRecvBuffer, scControlStruct.dwBytesReturned,
|
||||
currentContextMap->dwClientID);
|
||||
|
@ -2728,6 +2738,13 @@ retry:
|
|||
|
||||
if (SCARD_S_SUCCESS == scTransmitStruct.rv)
|
||||
{
|
||||
if (scTransmitStruct.pcbRecvLength > *pcbRecvLength)
|
||||
{
|
||||
*pcbRecvLength = scTransmitStruct.pcbRecvLength;
|
||||
rv = SCARD_E_INSUFFICIENT_BUFFER;
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* read the received buffer */
|
||||
rv = MessageReceive(pbRecvBuffer, scTransmitStruct.pcbRecvLength,
|
||||
currentContextMap->dwClientID);
|
||||
|
|
|
@ -432,15 +432,19 @@ static void * ContextThread(LPVOID newContext)
|
|||
.timeOut = 0,
|
||||
.rv = 0
|
||||
};
|
||||
LONG rv;
|
||||
|
||||
/* remove the client fd from the list */
|
||||
waStr.rv = EHUnregisterClientForEvent(filedes);
|
||||
rv = EHUnregisterClientForEvent(filedes);
|
||||
|
||||
/* send the response only if the client was still in the
|
||||
* list */
|
||||
if (waStr.rv != SCARD_F_INTERNAL_ERROR)
|
||||
if (rv != SCARD_F_INTERNAL_ERROR)
|
||||
{
|
||||
waStr.rv = rv;
|
||||
WRITE_BODY(waStr);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SCARD_ESTABLISH_CONTEXT:
|
||||
|
|
Loading…
Reference in New Issue