From 9f0df515dea0f079ed0015522a71407e271225f7 Mon Sep 17 00:00:00 2001 From: Packit Date: Sep 30 2020 10:25:24 +0000 Subject: ccid-1.4.29 base --- diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..5c30a1d --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Ludovic Rousseau diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..2d2d780 --- /dev/null +++ b/COPYING @@ -0,0 +1,510 @@ + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations +below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it +becomes a de-facto standard. To achieve this, non-free programs must +be allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control +compilation and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at least + three years, to give the same user the materials specified in + Subsection 6a, above, for a charge no more than the cost of + performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply, and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License +may add an explicit geographical distribution limitation excluding those +countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms +of the ordinary General Public License). + + To apply these terms, attach the following notices to the library. +It is safest to attach them to the start of each source file to most +effectively convey the exclusion of warranty; and each file should +have at least the "copyright" line and a pointer to where the full +notice is found. + + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or +your school, if any, to sign a "copyright disclaimer" for the library, +if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James + Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..73ecb99 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,32750 @@ +commit 70379da0cf79444d7035e0f42bea6f759f0a0886 (HEAD -> master, origin/master, origin/HEAD) +Author: Ludovic Rousseau +Date: Wed Oct 11 14:00:57 2017 +0200 + + Release 1.4.28 + + Signed-off-by: Ludovic Rousseau + + README | 26 ++++++++++++++++++++++++++ + configure.ac | 2 +- + 2 files changed, 27 insertions(+), 1 deletion(-) + +commit 7fd10bfab0c9c9fd4903d7b8e4d33a9dc3347273 +Author: Ludovic Rousseau +Date: Wed Oct 4 14:02:48 2017 +0200 + + Add Unicept GmbH AirID USB Dongle + + readers/Unicept_AirID_USB_Dongle.txt | 51 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 53 insertions(+), 1 deletion(-) + +commit ebe042a757dc85e2ecc9609edc3b4ced588c6eba +Author: Ludovic Rousseau +Date: Mon Oct 2 15:35:02 2017 +0200 + + Makefile: add support of spaces in DESTDIR + + It is now possible to use space characters in the destination directory + name (DESTDIR). + + This is inspired by Apple patch destDirFix.patch + https://opensource.apple.com/source/SmartcardCCID/SmartcardCCID-55017/ccid/files/destDirFix.patch.auto.html + + src/Makefile.am | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +commit 94f90761bbedd0325fe321303b1871825927267d +Author: Ludovic Rousseau +Date: Wed Sep 27 17:54:45 2017 +0200 + + Add HID Global OMNIKEY 5122 Dual + + readers/HID_Global_OMNIKEY_5122_Dual.txt | 329 +++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 330 insertions(+) + +commit 9a1b284329f88ef8eda2b7361096c05eda84f57a +Author: Ludovic Rousseau +Date: Wed Sep 27 17:53:32 2017 +0200 + + Add HID Global OMNIKEY 5122 Smartcard Reader + + .../HID_Global_OMNIKEY_5122_Smartcard_Reader.txt | 329 +++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 331 insertions(+), 1 deletion(-) + +commit 7077b050b699e72471348877ca221a8641e858dc +Author: Ludovic Rousseau +Date: Mon Sep 25 18:40:48 2017 +0200 + + Add KRONEGGER Micro Core Platform + + readers/KRONEGGER_Micro_Core_Platform.txt | 310 ++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 311 insertions(+) + +commit e95a7204b24346297ca64c11b63078bb25e8556d +Author: Ludovic Rousseau +Date: Mon Sep 25 18:36:17 2017 +0200 + + Add KRONEGGER NFC blue Reader Platform + + readers/KRONEGGER_NFC_blue_Reader_Platform.txt | 310 +++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +- + 2 files changed, 314 insertions(+), 1 deletion(-) + +commit 502dd6c9bb285d92e6aee2578eb36c19eba87a40 +Author: Ludovic Rousseau +Date: Wed Sep 20 10:45:46 2017 +0200 + + Move Athena IDProtect Flash in Unsupported list + + The reader does not work with a GnuPG card V2 card. All APDUs are + rejected with "Card absent or mute". + + readers/supported_readers.txt | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit a06440b70d2b7898ac813d5e87d5349f18fcd166 +Author: Ludovic Rousseau +Date: Mon Sep 18 21:33:25 2017 +0200 + + Add Athena IDProtect Flash + + readers/Athena_IDProtect_Flash.txt | 53 ++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 55 insertions(+), 1 deletion(-) + +commit 7f3a5207e30e83af3d95dcd9ba3576e603cf6fb8 +Author: Rodrigo +Date: Sat Sep 9 01:13:06 2017 +0200 + + udev rules: Disable USB autosuspend on C3PO LTC31 v1 reader + + The device doesn't seem to work fine when resuming from suspension mode. + By preventing autosuspension the device doesn't fail anymore. + + See Github issue #36 + "USB autosuspend problem: libusb_open returns LIBUSB_ERROR_IO" + https://github.com/LudovicRousseau/CCID/issues/36 + + src/92_pcscd_ccid.rules | 3 +++ + 1 file changed, 3 insertions(+) + +commit 12cd7a1a0a7761ee4c98c9647473b1e754ea8d75 +Author: Ludovic Rousseau +Date: Fri Sep 8 23:23:31 2017 +0200 + + Add REINER SCT cyberJack RFID standard + + readers/ReinerSCT_cyberJack_RFID_standard.txt | 59 +++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 61 insertions(+), 1 deletion(-) + +commit abed9dff59d7d049e3323a66b0ab710f31fb546e +Author: Ludovic Rousseau +Date: Thu Aug 31 10:07:33 2017 +0200 + + udev rule: allow rule overwrite + + Use: + ATTR{power/control}="auto" + instead of: + RUN+="/bin/sh -c 'echo auto > /sys/$devpath/power/control'" + + It looks like this allows to add udev rules after that to change again + the power/control behavior. + + Closes github issue #36 + "USB autosuspend problem: libusb_open returns LIBUSB_ERROR_IO" + https://github.com/LudovicRousseau/CCID/issues/36 + + src/92_pcscd_ccid.rules | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 00aed9f2a147e24df2050617f6560c2b76e1f051 +Author: Ludovic Rousseau +Date: Wed Aug 30 13:26:02 2017 +0200 + + Add Watchdata USB Key + + ProductID: 0x0417 + + readers/Watchdata_USB_Key2.txt | 47 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 49 insertions(+), 1 deletion(-) + +commit 3b29cc5afbbe27bb5421d334623bbd07c574bbf8 +Author: Ludovic Rousseau +Date: Sat Aug 19 23:20:09 2017 +0200 + + Fix non-pinpad HID global devices + + The HID Aviator is not the only reader that declares pinpad support in + the USB descriptor but that has no physical keyboard to enter a PIN. + The USB descriptor is bogus. + + The readers also support Extended APDU even if they declare Short APDU. + + Bogus readers are: + - OMNIKEY Generic + - OMNIKEY 3121 or 3021 or 1021 + - OMNIKEY 6121 + - Cherry Smart Terminal xx44 + - Fujitsu Smartcard Reader D323 + + Thanks to hidglobal.com for the patch. + + src/ccid.c | 7 ++++++- + src/ccid.h | 4 ++++ + 2 files changed, 10 insertions(+), 1 deletion(-) + +commit 10fd29a365f1f664063bee320c06e37253a86b60 +Author: Ludovic Rousseau +Date: Sat Aug 19 23:39:15 2017 +0200 + + Add Ledger Nano S + + readers/Ledger_Nano_S.txt | 51 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++++- + 2 files changed, 55 insertions(+), 1 deletion(-) + +commit 44aab2ddbc6dea6125e9d8f407296957511039c1 +Author: Ludovic Rousseau +Date: Sat Aug 5 16:02:31 2017 +0200 + + Add SAFETRUST SABRE SCR + + readers/SAFETRUST_SABRE_SCR.txt | 81 +++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++- + 2 files changed, 85 insertions(+), 1 deletion(-) + +commit dd1ea045cacafe1d5d2b063be66a23ee858ffc14 +Author: Ludovic Rousseau +Date: Sat Jul 29 12:01:40 2017 +0200 + + Add IIT E.Key Crystal-1 + + readers/IIT_E.Key_Crystal-1.txt | 50 +++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 52 insertions(+), 1 deletion(-) + +commit 32deeb888d324c7d4056c23f60749efa17c1856c +Author: Ludovic Rousseau +Date: Fri Jul 28 18:54:32 2017 +0200 + + Firmware upgrade for 0x0BDA:0x0169 + + "Generic" device. + + readers/iMONO.txt | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 8d2bcc81fdd38abceb9a3b4a2c4b5b054a70c14c +Author: Ludovic Rousseau +Date: Fri Jul 28 18:49:55 2017 +0200 + + Add REINER SCT cyberJack one + + readers/ReinerSCT_cyberJack_one.txt | 56 +++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 58 insertions(+), 1 deletion(-) + +commit 643869e86d770222c0d48140e0fabef5ef4e4785 +Author: Ludovic Rousseau +Date: Wed Jul 5 10:40:07 2017 +0200 + + Enable Elatec TWN4/B1.06/CPF3.05/S1SC1.32/P (Beta 3) + + The reader has moved from the "disabled" to the "should work" list after + patch in d5f2f893a0f513cdda0821c6dca7cdc337d54ba8 + + readers/supported_readers.txt | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +commit d5f2f893a0f513cdda0821c6dca7cdc337d54ba8 +Author: Ludovic Rousseau +Date: Wed Jul 5 10:34:47 2017 +0200 + + Improve support of ElatecTWN4_CCID reader + + The reader answers after up to 1 second when no card is present in the + field. So a 100ms timeoutx was too short. + + Thanks to Elatec for the patch. + + src/ccid.c | 15 ++++++++++----- + src/ccid.h | 3 ++- + 2 files changed, 12 insertions(+), 6 deletions(-) + +commit 3c0cacc5935282c35fe206b5ac91fd628605c3e5 +Author: Ludovic Rousseau +Date: Mon Jul 3 18:38:33 2017 +0200 + + Add mCore SCard-Reader + + readers/mCore_SCard-Reader.txt | 64 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 68 insertions(+), 1 deletion(-) + +commit 44f79e83bb26fe7b7fc38a36c2c02609b01b1581 +Author: Ludovic Rousseau +Date: Wed Jun 28 20:09:53 2017 +0200 + + Add Elatec TWN4/B1.06/CPF3.05/S1SC1.32/P (Beta 3) + + in the disabled list + + readers/Elatec_TWN4_MULTITECH.txt | 56 +++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 60 insertions(+), 1 deletion(-) + +commit 5763d30af330767f266b4897fe1b55152b4d3fa6 +Author: Ludovic Rousseau +Date: Thu Jun 22 18:23:24 2017 +0200 + + Add SafeNet eToken 5300 + + readers/SafeNet_eToken_5300.txt | 97 +++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 99 insertions(+), 1 deletion(-) + +commit e3cc4f94624db4d7b197ce1106280baedb6b3cf3 +Author: Ludovic Rousseau +Date: Mon Jun 12 18:40:37 2017 +0200 + + Disable Jinmuyu Electronics Co., Ltd. MR800 + + readers/Jinmuyu_Electronics_MR800.txt | 53 +++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 57 insertions(+), 1 deletion(-) + +commit a7dcbf296492f5056e1ba7abb8388531bb0a6708 (tag: ccid-1.4.27, github/master) +Author: Ludovic Rousseau +Date: Sun May 21 14:41:20 2017 +0200 + + Release 1.4.27 + + Signed-off-by: Ludovic Rousseau + + README | 29 +++++++++++++++++++++++++++++ + configure.ac | 2 +- + 2 files changed, 30 insertions(+), 1 deletion(-) + +commit 647fe54d8b66cabcd8bc13b68ae46fbc4bd05be5 +Author: Ludovic Rousseau +Date: Wed May 17 13:26:52 2017 +0200 + + ccid_serial: reformat reader detection code + + The Microchip SEC 1210 does not support the command 0x02 (get firmware + version): + "03 06 6B 01 00 00 00 00 00 00 00 00 02 6D" + returns + frame: "83 00 00 00 00 00 00 41 00 00" - "Command not supported." + + The command 0x06 returns a result, even if I, and Fabio Araujo, don't + know what this command does. + "03 06 6B 01 00 00 00 00 00 00 00 00 06 69" + we received + frame: "83 01 00 00 00 00 00 01 00 00 22", "Everything OK." + + src/ccid_serial.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit ec652d249dc81c647bf80d5d3c21665ef00c6d8b +Author: Fabio Araujo +Date: Mon May 15 09:09:26 2017 -0300 + + Add Microchip SEC1210 UART support. + + The Microchip SEC1210 can be connected on a serial port instead of USB. + + src/ccid.h | 1 + + src/ccid_serial.c | 23 +++++++++++++++++++++++ + src/reader.conf.in | 1 + + 3 files changed, 25 insertions(+) + +commit 582f882bd14b9a35f27348b0b80e571451a626b6 +Author: Ludovic Rousseau +Date: Fri May 5 20:03:58 2017 +0200 + + Add MK Technology KeyPass S1 + + readers/MK_Technology_KeyPass_S1.txt | 72 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 13 ++++--- + 2 files changed, 80 insertions(+), 5 deletions(-) + +commit 5eac48f6c7a62b3820b190536d5390efeecb09d4 +Author: Ludovic Rousseau +Date: Tue Apr 18 18:37:12 2017 +0200 + + Add FT U2F CCID KB + + readers/FT_U2F_CCID_KB.txt | 56 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 57 insertions(+) + +commit f28ad399ec87a57efa06169599a7347f30df8a63 +Author: Ludovic Rousseau +Date: Tue Apr 18 18:36:04 2017 +0200 + + Upgrade FT_U2F_CCID.txt + + New firmware. + + readers/FT_U2F_CCID.txt | 8 ++++---- + readers/supported_readers.txt | 2 +- + 2 files changed, 5 insertions(+), 5 deletions(-) + +commit 8f9a773149cf26aedc9beefb0bfabbd3213e4999 +Author: Ludovic Rousseau +Date: Tue Apr 18 18:34:44 2017 +0200 + + Rename FT_U2F_CCID.txt + + readers/{FT_U2F_CCID_KBOARD.txt => FT_U2F_CCID.txt} | 0 + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit 0db790a5c6c5be9647fded4868e2d8b7bc99728d +Author: Ludovic Rousseau +Date: Tue Apr 18 18:26:19 2017 +0200 + + Add FT CCID + + readers/FT_CCID.txt | 56 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 57 insertions(+) + +commit e7a7784cb17527458a2bc96fa16129097b1bb7fa +Author: Ludovic Rousseau +Date: Tue Apr 18 18:24:50 2017 +0200 + + Add FT CCID KB + + readers/FT_CCID_KB.txt | 56 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 58 insertions(+), 1 deletion(-) + +commit af00591a4a3c437045cc9923f6477e6f2e467bf4 +Author: Ludovic Rousseau +Date: Wed Apr 5 18:33:05 2017 +0200 + + configure.ac: fix error message for SCardEstablishContext + + Do not specify a version any more. pcsc-lite 1.2.9-beta9 was released in + February 2006. + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c84acab1a27326edf5e833e94a25e5856e5726c1 +Author: Ludovic Rousseau +Date: Fri Mar 31 17:39:34 2017 +0200 + + Add InfoThink IT-102MU Reader + + readers/InfoThink_IT-102MU_Reader.txt | 310 ++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +- + 2 files changed, 314 insertions(+), 1 deletion(-) + +commit 59380a8dd99357963b8842548131873d3427d6f9 +Author: Ludovic Rousseau +Date: Thu Mar 23 15:06:36 2017 +0100 + + scardcontrol: fix bmPINBlockString value + + The sample code uses a (default) maximum PIN size of 8 digits. + + bmPINBlockString is defined as "Defines the length in bytes of the PIN + block to present in the APDU command" so shoudl also be 8. + + Thanks to Martin Elshuber for the bug report + "[#315675] scardcontrol.c - bmPINBlockString - shouldn't it be 8?" + https://alioth.debian.org/tracker/?func=detail&atid=410085&aid=315675&group_id=30105 + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9f06f630ec4ce8502613fd18cffd28430478e8e1 +Author: Ludovic Rousseau +Date: Wed Mar 22 20:17:24 2017 +0100 + + Add ACS CryptoMate (T2) + + readers/ACS_CryptoMate_(T2).txt | 54 +++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 56 insertions(+), 1 deletion(-) + +commit 7e20d8d978d92194e05ab5e6dd51a2d3415f4487 +Author: Ludovic Rousseau +Date: Tue Mar 21 18:26:51 2017 +0100 + + ZLP: enable the patch only if --enable-zlp is used + + The Zero Length Packet patch has issues with some non-bogus readers. So + the patch is _disabled_ by default. + + If your Gemalto reader suffer from the ZLP problem then recompile the CCID + reader with: + $ ./configure --enable-zlp + + configure.ac | 9 +++++++++ + src/ccid.c | 2 ++ + src/ccid.h | 2 ++ + src/ccid_serial.c | 2 ++ + src/ccid_usb.c | 4 ++++ + 5 files changed, 19 insertions(+) + +commit 0b557087017e27e13356a6455cad1e94b9620a00 +Author: Ludovic Rousseau +Date: Thu Jan 26 13:29:38 2017 +0100 + + Add Zero Length Packet (ZLP) support for Gemalto IDBridge CT30 and K30 + + The Gemalto IDBridge CT30 and IDBridge K30 readers may send a ZLP after + some commands. Only the readers with firmware 2.00 have the problem. + + The solution is to use a short read before every USB write. + This patch uses a timeout of 10 ms instead of 1 ms in the original patch. + + src/ccid.c | 13 +++++++++++++ + src/ccid.h | 5 +++++ + src/ccid_serial.c | 1 + + src/ccid_usb.c | 11 +++++++++++ + 4 files changed, 30 insertions(+) + +commit 467fe3681306ddcbb2fe131d370bf096e2ebf0e8 +Author: Ludovic Rousseau +Date: Tue Mar 21 18:12:46 2017 +0100 + + Add Kapsch TrafficCom USB SAM reader + + readers/Kapsch_TrafficCom_USB_SAM_reader.txt | 45 ++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 49 insertions(+), 1 deletion(-) + +commit 7a6f5af88a462ce3734a947734fda8e6b449e2ab +Author: Ludovic Rousseau +Date: Fri Mar 17 18:22:33 2017 +0100 + + Add ACS ACR1255U-J1 + + readers/ACS_ACR1255U-J1.txt | 48 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 50 insertions(+), 1 deletion(-) + +commit 2866e535d1bf01909b42d53fe8a29e827e5982d4 +Author: Ludovic Rousseau +Date: Thu Mar 16 21:42:58 2017 +0100 + + Add ANCUD CCID USB Reader & RNG + + readers/ANCUD_CCID_USB_Reader_RNG.txt | 52 +++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 56 insertions(+), 1 deletion(-) + +commit 120d81d2c4e4ca28889b352476cabf1f0884792a +Author: Ludovic Rousseau +Date: Tue Mar 14 20:44:49 2017 +0100 + + Add Spyrus Inc PocketVault P-3X + + readers/Spyrus_PocketVault_P-3X.txt | 49 +++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 53 insertions(+), 1 deletion(-) + +commit b59ba6321c9dcafae2cb153ce3c8bee6d31b39f1 +Author: Ludovic Rousseau +Date: Sat Mar 11 11:57:05 2017 +0100 + + Add HID Global OMNIKEY 5422 Smartcard Reader + + readers/HID_OMNIKEY_5422.txt | 322 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 324 insertions(+), 1 deletion(-) + +commit b3f88d9596c6379f11e52119d931876539e012df +Author: Ludovic Rousseau +Date: Fri Mar 10 18:22:33 2017 +0100 + + Add support of HID Omnikey 5422 as multi slot + + The HID Omnikey 5422 device is a composite device with 2 CCID + interfaces. + This device can be seen as a multi-slot device if + USE_COMPOSITE_AS_MULTISLOT is used. + + src/ccid.h | 1 + + src/ccid_usb.c | 13 ++++++++++++- + src/ifdhandler.c | 6 +++++- + 3 files changed, 18 insertions(+), 2 deletions(-) + +commit 4349e40dd8c2e37a19f2b85b59b98b4ec584695e +Author: Ludovic Rousseau +Date: Fri Mar 10 17:58:55 2017 +0100 + + OpenUSBByName(): simplify USE_COMPOSITE_AS_MULTISLOT code + + The code do not hardcode the interface number of the first CCID interface. + The first CCID interface found will be used on the first call. + + The code to reset the interface number for the next reader is then much + simpler: set to -1. + + src/ccid_usb.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +commit b15c8f96ca80005c3da024c031e9607051a9fe1a +Author: Ludovic Rousseau +Date: Tue Feb 28 16:46:20 2017 +0100 + + CmdEscapeCheck(): signals buffer overflow + + If the RxBuffer[] buffer is too small to contain the reader response + then IFD_ERROR_INSUFFICIENT_BUFFER is returned. + + Before the patch the returned buffer was silently truncated and + IFD_SUCCESS was returned. + + Thanks to Maximilian Stein for the bug report + "[Pcsclite-muscle] libccid IFDHControl() / CmdEscape() might truncate reader response" + http://lists.alioth.debian.org/pipermail/pcsclite-muscle/Week-of-Mon-20170213/000816.html + + src/commands.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 8c57dcc5f73009359dcdaa0decba7f703172e9df +Author: Ludovic Rousseau +Date: Thu Feb 16 17:14:14 2017 +0100 + + OpenUSBByName(): the device bus & addr must match + + Patch similar to 8b9f6f33b16e808a5769dbc4193e5f107a09a693 but for + libusb-1.0 instead of libudev. + + "In Linux, before this change, if there were multiple card readers of + the same model connected, a new Reader could be initialized by opening + the wrong USB device." + + Thanks to Maximilian Stein for the patch + "[Pcsclite-muscle] Apply fix "OpenUSBByName(): the device bus & addr + must match" (8b9f6f33) for libusb" + https://lists.alioth.debian.org/pipermail/pcsclite-muscle/Week-of-Mon-20170213/000812.html + + src/ccid_usb.c | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +commit bf2b3f73c051e15be6bc5563766bb74c7dd66dcc +Author: Ludovic Rousseau +Date: Wed Feb 15 16:05:16 2017 +0100 + + Makefile.am: do not display udev message in red + + The src/92_pcscd_ccid.rules file is not mandatory since pcscd is started + by systemd (pcsc-lite 1.8.0, November 2011). + + This udev file is now only used to enable selective suspend. + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d7adceca5bfe2a5bd64163f9fac784ae323bf50a +Author: Ludovic Rousseau +Date: Wed Feb 1 09:27:29 2017 +0100 + + Add Morpho ypsID Key E in the Disabled list + + This device is not a real CCID device. You need to patch my CCID driver. + Contact Morpho for support. + + readers/Morpho_ypsID_Key_E.txt | 49 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++++- + 2 files changed, 53 insertions(+), 1 deletion(-) + +commit 3aff5f95ce6efc8d7f76f4194f4098e1da4638d0 +Author: Ludovic Rousseau +Date: Sat Jan 28 17:28:25 2017 +0100 + + Add FT U2F CCID KBOARD + + readers/FT_U2F_CCID_KBOARD.txt | 56 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 58 insertions(+), 1 deletion(-) + +commit 980e2afbeb2ec2b5daabb1b02dc4c58e6bd2d0cb +Author: Ludovic Rousseau +Date: Sat Jan 21 15:42:11 2017 +0100 + + Add Regula RFID Reader + + readers/Regula_RFID_Reader.txt | 50 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 13 ++++++----- + 2 files changed, 58 insertions(+), 5 deletions(-) + +commit cd1e76fa4ff44aa6f4240fa8990e78328b443a05 +Author: Ludovic Rousseau +Date: Wed Jan 18 18:56:08 2017 +0100 + + ccid_usb.c: document CCID composite devices + + Document how the Gemalto Prox-DU/SU and Feitian R502 devices are + architectured. These devices are composite CCID devices (2 or 3 CCID + devices in the same USB device) and are simulated as a multi slot reader + if USE_COMPOSITE_AS_MULTISLOT is defined (macOS for example). + + src/ccid_usb.c | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +commit fef7e851b81897d4e44fb887708daf4ca988de5b +Author: Ludovic Rousseau +Date: Wed Jan 18 17:40:48 2017 +0100 + + scardcontrol.c: remove extra space at end of line + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 627f356e8800144f2661069de92195efcc7f2637 +Author: Ludovic Rousseau +Date: Tue Jan 17 18:34:21 2017 +0100 + + Add Mulann PVT + + readers/Mulann_PVT.txt | 104 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +- + 2 files changed, 108 insertions(+), 1 deletion(-) + +commit e5697f33cc8dfa89d562c8abf859024bfe9e95a8 +Author: Ludovic Rousseau +Date: Thu Jan 12 17:32:54 2017 +0100 + + InterruptRead(): return a valid IFDHandler code + + If libusb reports an error then return IFD_COMMUNICATION_ERROR instead + of the libusb error code. + + That should not be a problem since pcsc-lite only check for the value + IFD_SUCCESS and anything else, including a libusb error code, is an error. + + src/ccid_usb.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 09025bb4044f7992d9ad70483086a8c63d4d54d2 +Author: Ludovic Rousseau +Date: Wed Jan 11 16:58:55 2017 +0100 + + Add Unicept GmbH AirID USB + + readers/Unicept_AirID_USB.txt | 51 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++++- + 2 files changed, 55 insertions(+), 1 deletion(-) + +commit 167dfa6b578ab8bebfff076cfbb7336a2a8b7621 +Author: Petr Vaněk +Date: Tue Jan 10 15:00:06 2017 +0100 + + README: fix typos + + README | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +commit 52f796f6e6882ae9791d5c578956f0077a8eb848 +Author: Petr Vaněk +Date: Tue Jan 10 15:00:05 2017 +0100 + + README: fix links for USB CCID and ICCD documentation + + README | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit b5870d85d891fab0445d8b9b1a150de1c44c2b33 +Author: Ludovic Rousseau +Date: Tue Jan 10 17:55:09 2017 +0100 + + OMNIKEY 5321 CLi USB is NOT supported + + This reader is contactless only and is NOT A CCID DEVICE. + + readers/OMNIKEY_5321_CLi_USB.txt | 172 +++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +- + 2 files changed, 176 insertions(+), 1 deletion(-) + +commit 569b257d64ccd50c6e6b60a2e74549e07c87d7dd +Author: Ludovic Rousseau +Date: Mon Jan 9 10:27:36 2017 +0100 + + Add DUALi DE-620 Combi + + readers/DUALi_DE-620_Combi.txt | 59 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 61 insertions(+), 1 deletion(-) + +commit a421896644f6439a453fb313a8c3efaa8b7cbcc5 +Author: Ludovic Rousseau +Date: Sat Jan 7 16:04:17 2017 +0100 + + README: remove extra line + + README | 1 - + 1 file changed, 1 deletion(-) + +commit 666a72c342f433fda1b77ff815fdfe728afc3ce7 (tag: ccid-1.4.26) +Author: Ludovic Rousseau +Date: Sat Jan 7 15:44:45 2017 +0100 + + Release 1.4.26 + + README | 19 +++++++++++++++++-- + configure.ac | 2 +- + 2 files changed, 18 insertions(+), 3 deletions(-) + +commit 7f71007a47f77620b2ed50c9298c94fe01b6aaf1 +Author: Ludovic Rousseau +Date: Fri Jan 6 18:55:20 2017 +0100 + + Add appidkey GmbH ID60-USB + + readers/appidkey_ID60-USB.txt | 51 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 52 insertions(+) + +commit 62756a636c6991d9c9c36f01923823e7230de732 +Author: Ludovic Rousseau +Date: Fri Jan 6 18:50:55 2017 +0100 + + Update appidkey ID100L-USB-SC-Reader firmware + + readers/appidkey_ID100-USB_SC_Reader.txt | 4 ++-- + readers/supported_readers.txt | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit e05426c6c426fc46ef18c7bd17cfb7ad74cabd1c +Author: Ludovic Rousseau +Date: Wed Jan 4 13:41:34 2017 +0100 + + FreeChannel(): release reader_index only after use + + Call ReleaseReaderIndex() to free the reader_index only after it is no + more used. + + It was not problematic since the complete code block is protected by the + ifdh_context_mutex, but this may change. + + src/ifdhandler.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit d1a15209f818b5de139d691841e56613bbca9727 +Author: Ludovic Rousseau +Date: Wed Jan 4 13:34:41 2017 +0100 + + ifdhandler: only GetNewReaderIndex() has to be thread protected + + Once a new reader_index has been attribuyed the functions are thread + safe. Only the call to GetNewReaderIndex() need to be protected. + + The mutex was introduced in 8c6ed32fa1649a3648eb768d7c692e0e1e67f2ed + "add support of thread safe (APDU multiplexing on different readers)" in + September 2003 and, at that time, GetNewReaderIndex() was not yet used + or implemented. + + src/ifdhandler.c | 20 +++++++++++--------- + 1 file changed, 11 insertions(+), 9 deletions(-) + +commit eea7b5835a7b91cb26d52bf3b9548afc322e83d9 +Author: Ludovic Rousseau +Date: Fri Dec 16 10:35:35 2016 +0100 + + MacOSX/configure: check for UB only on Mavericks and less + + On Yosemite (10.10) and later we will provide only a 64-bit driver. + So no need to check if a Universal Binary libusb is available. + + Support of 32-bits computers has been droped with Lion 10.7. + + MacOSX/configure | 30 +++++++++++++++++------------- + 1 file changed, 17 insertions(+), 13 deletions(-) + +commit 3a7f9b26418991ffff10fc61a8c56ddccbc901aa +Author: Ludovic Rousseau +Date: Fri Dec 16 10:30:16 2016 +0100 + + MacOSX/configure: move definition of MAC_VERSION + + MAC_VERSION can now be used by the code checking Universal Binary. + + MacOSX/configure | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit 2811a89260bbc4dfabd91dc87c2de991257df755 +Author: Ludovic Rousseau +Date: Fri Dec 16 10:22:21 2016 +0100 + + MacOSX/configure: check static libusb will be used + + If a _dynamic_ version of libusb is present then it will be used by the + linker. This is problematic since we want to use the _static_ version of + libusb to avoid an external dependency. + + MacOSX/configure | 14 +++++++++++++- + 1 file changed, 13 insertions(+), 1 deletion(-) + +commit f66d361b0ad8346c68afb2e6351e7d1e444d561b +Author: Ludovic Rousseau +Date: Fri Dec 16 09:37:17 2016 +0100 + + MacOSX/configure: remove reference to libusbx + + libusbx is a dead project and has been replaced by libusb. + + MacOSX/configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2f89a002a05b2576159e035b368feff3e34d5452 +Author: Ludovic Rousseau +Date: Sat Dec 3 14:56:13 2016 +0100 + + Add Bit4id Digital DNA Key + + readers/Bit4id_Digital_DNA_Key.txt | 54 ++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 55 insertions(+) + +commit 80f7c5300871c91639b3d50cb4b62e73bf7fce75 +Author: Ludovic Rousseau +Date: Sat Dec 3 14:52:56 2016 +0100 + + Add Bit4id tokenME FIPS v3 + + readers/Bit4id_tokenME_FIPS_v3.txt | 54 ++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 56 insertions(+), 1 deletion(-) + +commit 683dd88400cece36da222f93bfa385624c473e52 +Author: Ludovic Rousseau +Date: Fri Nov 18 17:50:28 2016 +0100 + + HID OMNIKEY 5021 CL is NOT supported + + This reader is contactless only and is NOT A CCID DEVICE. + + readers/HID_5021_CL.txt | 510 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +- + 2 files changed, 514 insertions(+), 1 deletion(-) + +commit 05902a01bd9cdcd5a3eab8523d8dc5b85e86bac2 +Author: Ludovic Rousseau +Date: Sat Oct 22 22:12:55 2016 +0200 + + Add INGENICO Leo + + readers/Ingenico_Leo.txt | 76 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++- + 2 files changed, 80 insertions(+), 1 deletion(-) + +commit 9ed43b008894ad6984a06400aec4bb2c9b87bce2 +Author: Ludovic Rousseau +Date: Thu Oct 13 11:42:03 2016 +0200 + + INSTALL: update documentation for serial readers + + - Update the documentation + - add a reference about the IDBridge CR30 that should use the + "GemCoreSIMPro2" configuration argument. + + INSTALL | 35 ++++++++++++++++++++++------------- + 1 file changed, 22 insertions(+), 13 deletions(-) + +commit 33888a88cdcdf16e98c3d0d42593ebc743719e11 +Author: Ludovic Rousseau +Date: Wed Oct 5 14:57:42 2016 +0200 + + Negociate maximum baud rate when bNumDataRatesSupported = 0 + + From CCID 1.1 page 18: + " bNumDataRatesSupported + The number of data rates that are supported by the CCID. + If the value is 00h, all data rates between the default data rate + dwDataRate and the maximum data rate dwMaxDataRate are supported. " + + Before, if the card baud rate was greater than the reader dwMaxDataRate + then the driver used the default (lowest) baud rate. + + Now the driver tries to find the maximal baud rate supported by both the + card and the driver. + + The algorithm was already used when the reader reports a baud rate list + but not when the reader reports bNumDataRatesSupported = 0. + + Thanks to Abraham Macías Paredes for the bug report + "[Pcsclite-muscle] Bug in CCID library" + https://lists.alioth.debian.org/pipermail/pcsclite-muscle/Week-of-Mon-20161003/000729.html + + Thanks to Godfrey Chung for the patch idea + "Fix the optimal baud rate problem in IFDHSetProtocolParameters()." + https://github.com/acshk/acsccid/commit/4a7631d014781d36a2d21210b0b8768c07ef8c6d + + src/ifdhandler.c | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +commit 097436681d554999d125b9fe56bb4a5194a36f92 +Author: Ludovic Rousseau +Date: Tue Oct 4 15:29:56 2016 +0200 + + PowerOn: default value comes from Info.plist + + The value set in ifdhandler.c is always overwritten by the value + extracted from the Info.plist file in init_driver(). + + The change in ea7bedd2b3d30a884f43544c44f87ef779f011ef was useless and + had no effect. + + Since the default value of ifdDriverOptions for voltage selection is + 0x00 the first voltage used is 5V. + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit df1173ee2f33ca0cf79090e4eb817b24a15c2d00 +Author: Ludovic Rousseau +Date: Tue Oct 4 15:05:40 2016 +0200 + + PowerOn: always try every possible voltage values + + The default voltage value is 5V. + It is possible to change the driver configuration (ifdDriverOptions in + Info.plist) to start at 1.8V or 3V. + + The algorithms was to try: + 5V then fail (default) + 3V then 5V then fail + 1.8V then 3V then 5V then fail + + Some cards do not support 5V (like the Coolkey cards, see "Coolkey cards + do not work in Fedora" https://bugzilla.redhat.com/show_bug.cgi?id=1380615) + It is possible to change the driver configuration to start at 3V or 1.8V + but then for cards that work only at 5V we will have 1 or 2 PowerOn + commands in error before the card returns the ATR. + + I made some tests and the SCardConnect() call can take 0.110129 ms when + starting at 5V and 0.216057 ms when starting at 1.8V and errors for 1.8V + and 3V. That is "speed" factor of x1.96. + + 00000005 ifdhandler.c:1146:IFDHPowerICC() action: PowerUp, + usb:08e6/3437:libudev:0:/dev/bus/usb/001/041 (lun: 0) + 00000007 -> 000000 62 00 00 00 00 00 08 03 00 00 + 00054697 <- 000000 80 00 00 00 00 00 08 41 FE 00 + 00000014 commands.c:249:CmdPowerOn Card absent or mute + 00000005 commands.c:278:CmdPowerOn() Power up with 1.8V failed. Try with 3V. + 00000006 -> 000000 62 00 00 00 00 00 09 02 00 00 + 00054723 <- 000000 80 00 00 00 00 00 09 41 FE 00 + 00000015 commands.c:249:CmdPowerOn Card absent or mute + 00000004 commands.c:278:CmdPowerOn() Power up with 3V failed. Try with 5V. + 00000006 -> 000000 62 00 00 00 00 00 0A 01 00 00 + 00037738 <- 000000 80 0C 00 00 00 00 0A 00 00 00 3B 29 00 80 72 A4 45 64 00 00 87 14 + + The idea is to change the algotithm to start at 5V as that is the + standard voltage for a smart card (according to my card collection) but + be able to continue with 1.8V and 3V is power on failed at 5V. + + The default algorithm is now 5V then 1.8V then 3V then fail. + + It is still possible to change the initial voltage. Now, in any case, all + the values are tried before failing. + Other possible values are: + 1.8V then 3V then 5V then fail + 3V then 5V then 1.8V then fail + + Thanks to Robert Relyea for the patch, used by RedHat since 2013. + https://git.centos.org/commitdiff/rpms!pcsc-lite-ccid/3dd85f55c8aacfa0704849e7b6cf46d4970b747b + + src/Info.plist.src | 4 ++-- + src/ccid.h | 11 +++-------- + src/commands.c | 15 ++++++++++++--- + 3 files changed, 17 insertions(+), 13 deletions(-) + +commit a0815cfa7b70d96ae4b793285b92b70f2b95a487 +Author: Ludovic Rousseau +Date: Tue Oct 4 14:56:45 2016 +0200 + + PowerOn: move from 1.8V to 5V if 1.8V is not supported + + If the reader does not support 1.8V we do not move to auto but to 5V and + check that 5V is supported by the reader. + The reader may not support Automatic Voltage Selection and may not + support 1.8V either. + + src/commands.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit ea7bedd2b3d30a884f43544c44f87ef779f011ef +Author: Ludovic Rousseau +Date: Mon Oct 3 11:50:24 2016 +0200 + + PowerOn: change default voltage strategy + + The CCID 1.1 indicates page 105 in ch. "9.3 Voltage management" that the + driver should use growing voltage when supported by the reader. + + So the default is now to use the sequence 1.8V, 3V and 5V. + + ISO 7816-3 is not clear about this point. No specific order is given in + ch. 6.2.4 "Class selection" of ISO/IEC 7816-3:2006(E). + + This change should fix RedHat bug 1380615 "Coolkey cards do not work in + Fedora" and avoid the RedHat only patch described in RedHat bug 1033788 + "Safenet SC650 smart cards are not detected" + + The RedHat patch is + https://git.centos.org/blob/rpms!pcsc-lite-ccid/3dd85f55c8aacfa0704849e7b6cf46d4970b747b/SOURCES!ccid-1.4.10-voltage.patch + + src/ccid.h | 7 ++++++- + src/ifdhandler.c | 2 +- + 2 files changed, 7 insertions(+), 2 deletions(-) + +commit 84966dfaae8c37702512774c5e4d510998b0e8b2 +Author: Ludovic Rousseau +Date: Mon Oct 3 11:37:25 2016 +0200 + + PowerOn: use automatic voltage selection when needed + + CCID standard 1.1, page 26, ch 6.1.1 PC_to_RDR_IccPowerOn + " For a CCID which features “automatic activation of ICC on inserting”, + the bPowerSelect field must be 00h (Automatic Voltage Selection) in the + first PC_to_RDR_IccPowerOn message received for a slot which was + previously inactive. " + + src/ccid.h | 1 + + src/commands.c | 3 ++- + 2 files changed, 3 insertions(+), 1 deletion(-) + +commit 64d6ed4a0c6196108f1044ccfd080fbdd9da62ae +Author: Ludovic Rousseau +Date: Fri Sep 30 10:48:43 2016 +0200 + + Fix spelling in log message + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3da71e26b368b39814618a83c2fc64e492941dc4 (tag: ccid-1.4.25) +Author: Ludovic Rousseau +Date: Fri Sep 30 10:36:54 2016 +0200 + + Release 1.4.25 + + README | 21 +++++++++++++++++++++ + configure.ac | 2 +- + 2 files changed, 22 insertions(+), 1 deletion(-) + +commit 4fc7bcf1f3e70ee436d1a8cdde3e0474284d9fb3 +Author: Ludovic Rousseau +Date: Thu Sep 29 22:08:54 2016 +0200 + + Add/disable Precise Biometrics Precise 200 MC Upgrade + + The reader is added in the "Disabled CCID readers" list + + readers/Precise_200_MC_Upgrade.txt | 52 ++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 56 insertions(+), 1 deletion(-) + +commit f0a26a9b17b9c94d7b87124a6d0a0c824ae9d561 +Author: Ludovic Rousseau +Date: Tue Aug 23 14:45:01 2016 +0200 + + Remove extra spaces + + A space character before a tabulation characteri is not needed. + + src/towitoko/atr.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 3675760e70d28648972e96060213150e63fd9101 +Author: Ludovic Rousseau +Date: Wed Aug 3 16:45:17 2016 +0200 + + Add Gemalto K50 + + This device has the same idProduct 0x3437 as the Gemalto IDBridge CT30 + and Gemalto PC Twin Reader. + This device should then be usable since CCID 0.1.0 (August 2003) + + readers/Gemalto_K50.txt | 103 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 104 insertions(+) + +commit ec413e5b6b93ee066280ceeaea095ee80ffd261f +Author: Ludovic Rousseau +Date: Wed Aug 3 16:31:31 2016 +0200 + + Add Broadcom Corp 5880 (idProduct: 0x5834) + + readers/Broadcom_5880_0x5834.txt | 106 +++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 107 insertions(+) + +commit 297ab15f4e9ecb6130f826de3bed1b5536d895ed +Author: Ludovic Rousseau +Date: Wed Aug 3 16:29:38 2016 +0200 + + Add Broadcom Corp 5880 (idProduct: 0x5833) + + readers/Broadcom_5880_0x5833.txt | 54 ++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 55 insertions(+) + +commit 7211ce71b1bb0866efc2dad6eba7058743f7eed7 +Author: Ludovic Rousseau +Date: Wed Aug 3 16:24:37 2016 +0200 + + Add Broadcom Corp 5880 (idProduct: 0x5832) + + readers/Broadcom_5880_0x5832.txt | 106 +++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 108 insertions(+), 1 deletion(-) + +commit d144044621ded81d21bb59f7452676d969fb27e6 +Author: Ludovic Rousseau +Date: Sun Jul 31 15:49:37 2016 +0200 + + supported_readers.txt: remove extra duplicates + + generate_supported_readers.py no more generate useless duplicates for + composite devices. + + readers/supported_readers.txt | 56 ------------------------------------------- + 1 file changed, 56 deletions(-) + +commit 6bb10bb145878989db5c0318421ecdf2405b5f83 +Author: Ludovic Rousseau +Date: Sun Jul 31 15:47:10 2016 +0200 + + Add Feitian VR504 VHBR Contactless & Contact Card Reader + + readers/Feitian_vR504.txt | 120 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 4 ++ + 2 files changed, 124 insertions(+) + +commit 2c72558784abb88c7dc00369e8032b5b9377d7a7 +Author: Ludovic Rousseau +Date: Sun Jul 31 15:18:19 2016 +0200 + + Add Feitian bR500 + + readers/Feitian_bR500.txt | 76 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 77 insertions(+) + +commit 4f3e5748ec467ef9e5a2f567f492a1d6754f59a1 +Author: Ludovic Rousseau +Date: Sun Jul 31 14:08:04 2016 +0200 + + New firmware for Feitian_R502-CL.txt + + readers/Feitian_R502-CL.txt | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +commit e56e6c38e717bac8bdc32a585717a6d86b7909a4 +Author: Ludovic Rousseau +Date: Sun Jul 31 14:05:02 2016 +0200 + + New firmware for Feitian_R502.txt + + readers/Feitian_R502.txt | 92 +++++++++++++++++++++++++++++++++++-------- + readers/supported_readers.txt | 1 + + 2 files changed, 77 insertions(+), 16 deletions(-) + +commit b7e8564a58386456b0aa4320f8de6563ab57d880 +Author: Ludovic Rousseau +Date: Sun Jul 31 14:02:15 2016 +0200 + + Firmware update for Feitian_SCR301.txt + + readers/Feitian_SCR301.txt | 56 +++++++++++++++++++++++++--------------------- + 1 file changed, 31 insertions(+), 25 deletions(-) + +commit 706ad62ef036a3d5a5a0eff9709db8a767e975ce +Author: Ludovic Rousseau +Date: Sun Jul 31 13:59:44 2016 +0200 + + New firmware version for Feitian_bR301_BLE.txt + + readers/Feitian_bR301_BLE.txt | 16 +++++++++------- + readers/supported_readers.txt | 2 +- + 2 files changed, 10 insertions(+), 8 deletions(-) + +commit 65553b4facf097fbfa674daf7ee5f886d72885f0 +Author: Ludovic Rousseau +Date: Sun Jul 31 13:40:45 2016 +0200 + + Add Aladdin R.D. JaCarta (idProduct: 0x0402) + + readers/Aladdin_R.D._JaCarta2.txt | 47 +++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 49 insertions(+), 1 deletion(-) + +commit 7916c4b3ca3be3037c2d74f6d42db59af7058843 +Author: Godfrey Chung +Date: Tue Jul 5 16:17:52 2016 +0800 + + create_Info_plist.pl: fix typos in comment + + Infor.plist -> Info.plist + suported -> supported + + src/create_Info_plist.pl | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit e6a7548623f35d428f9f410f4b885fd04e34070a +Author: Ludovic Rousseau +Date: Sun Jul 3 18:40:52 2016 +0200 + + Move Broadcom Corp 5880 0x5800 in unsupported + + Frames bigger than 64 bytes (wMaxPacketSize) fails on the contact reader + with: + 00000002 commands.c:1740:CmdXfrBlockTPDU_T0() T=0: 5 bytes + 00000003 -> 000000 6F 05 00 00 00 00 17 00 00 00 00 C0 00 00 BA + 00014454 <- 000000 80 BC 00 00 00 00 17 00 00 00 A0 00 00 00 79 03 02 40 + 70 50 72 47 67 00 ED CB C7 00 ED CB C7 21 21 A0 00 00 00 79 01 02 00 01 + 00 00 00 00 00 00 00 A0 00 00 00 79 01 02 01 01 00 00 00 00 00 00 + 00000013 commands.c:1551:CCID_Receive() Can't read all data (54 out of + 188 expected) + + See https://bugs.launchpad.net/ubuntu/+source/pcsc-lite/+bug/1596662 + + The problem is similar to Broadcom_5880_0x5805.txt that also moved in + the unsupported list. + + readers/supported_readers.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2f68054ce81aa10ec60adf9a92c66dca64bdd415 +Author: Ludovic Rousseau +Date: Sun Jul 3 15:34:29 2016 +0200 + + Move Broadcom Corp 5880 0x5805 in unsupported + + The Broadcom Corp 5880 with productID 0x5805 has some serious issues. + + The contact interface of the reader is bogus. + Frames bigger than 64 bytes (wMaxPacketSize) fails on the contact reader + with: + 00000006 commands.c:1740:CmdXfrBlockTPDU_T0() T=0: 5 bytes + 00000011 -> 000000 6F 05 00 00 00 00 5A 00 00 00 80 34 01 00 00 + 00345316 <- 000000 80 02 01 00 00 00 5A 00 00 00 00 01 02 03 04 05 06 + 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E + 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 + 00000095 commands.c:1551:CCID_Receive() Can't read all data (54 out of + 258 expected) + + The reader _MAY_ work with a T=1 card since it is in TPDU. + + This reader is present in Dell Latitude serie 5000 laptops. + + readers/supported_readers.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 105a9672ed0a2cee88e977ec8a63e1f55af1d625 +Author: Ludovic Rousseau +Date: Fri Jul 1 17:42:18 2016 +0200 + + Move KEBTechnology KONA USB SmartCard in unsupported + + Move from "should work" to "unsupported" list. + + The tokend fails to send the first APDU. Maybe the support of Character + level is bogus in the CCID driver. + + Trace example at + https://anonscm.debian.org/cgit/pcsclite/CCID.git/commit/?id=05e86c6d5ac7db2cc5a184a52d33b403575c848e + + readers/supported_readers.txt | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 6fe851996a1ebd4691fa7bb427c42b456b6c2623 +Author: Ludovic Rousseau +Date: Fri Jul 1 11:01:06 2016 +0200 + + scardcontrol: initialize the bRecvBuffer buffer + + Fill the bRecvBuffer receiving buffer with the "magic" value 0xAA to + detect what part of the buffer is filled by the reader. + + examples/scardcontrol.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 38d8ff72eb2f92bcf5ba2daa9074b24fb887973e +Author: Ludovic Rousseau +Date: Fri Jul 1 10:58:35 2016 +0200 + + scardcontrol: improve outout for change Pin + + For the change PIN sequence we print a new line for non-keyboard pinpad + so that the output is nicer. + + examples/scardcontrol.c | 20 ++++++++++++++------ + 1 file changed, 14 insertions(+), 6 deletions(-) + +commit d346df1f4e5262f766b320450fa899126934ed77 +Author: Ludovic Rousseau +Date: Tue Jun 28 18:31:43 2016 +0200 + + Rename "ESMART Token GOST" + + readers/supported_readers.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 05e86c6d5ac7db2cc5a184a52d33b403575c848e +Author: Ludovic Rousseau +Date: Tue Jun 28 15:28:37 2016 +0200 + + CmdXfrBlockCHAR_T0: returns an error when needed + + If an "Unrecognized Procedure byte" is found then the driver returns + with the error IFD_COMMUNICATION_ERROR instead of no error. + + Example of problematic trace with a "KEBTechnology KONA USB SmartCard": + + 00000018 winscard.c:1618:SCardTransmit() Send Protocol: T=0 + 00000016 APDU: 00 00 00 00 + 00000015 ifdhandler.c:1295:IFDHTransmitToICC() usb:04cc/5072:libudev:0:/dev/bus/usb/003/073 (lun: 0) + 00000024 commands.c:1997:CmdXfrBlockCHAR_T0() T=0: 4 bytes + 00000015 commands.c:1324:CCID_Transmit() chain parameter: 1 + 00000014 ccid_usb.c:1191:ControlUSB() request: 0x65 + 00000014 send: 00 00 00 00 00 + 00000926 ccid_usb.c:1191:ControlUSB() request: 0x6F + 00000724 receive: 00 00 + 00000036 commands.c:2192:CmdXfrBlockCHAR_T0() Unrecognized Procedure byte (0x24) found! + 00000016 SW: + 00000013 winscard.c:1663:SCardTransmit() UnrefReader() count was: 2 + + src/commands.c | 1 + + 1 file changed, 1 insertion(+) + +commit 3816150f3e2bf4e9ce3afca2478653dfcdad0ce4 +Author: Ludovic Rousseau +Date: Mon Jun 27 10:47:33 2016 +0200 + + Fix crash with GemCore Pos Pro and GemCore Sim Pro + + The buffer .ccid.arrayOfSupportedDataRates is freed by free() in + CloseUSB(). + So it must be allocated by malloc() and not just reference a static + memory buffer. + + The crash occured when CloseUSB() called free() on reader disconnection: + [Thread 0x7fffe7fff700 (LWP 4050) exited] + *** Error in `.../PCSC/src/pcscd': free(): invalid pointer: 0x00007ffff61f54c0 *** + + Program received signal SIGABRT, Aborted. + [Switching to Thread 0x7ffff69f7700 (LWP 4021)] + 0x00007ffff722e067 in __GI_raise (sig=sig@entry=6) + at ../nptl/sysdeps/unix/sysv/linux/raise.c:56 + 56 ../nptl/sysdeps/unix/sysv/linux/raise.c: Aucun fichier ou dossier de ce type. + (gdb) bt + at ../nptl/sysdeps/unix/sysv/linux/raise.c:56 + fmt=fmt@entry=0x7ffff7361530 "*** Error in `%s': %s: 0x%s ***\n") + at ../sysdeps/posix/libc_fatal.c:175 + str=0x7ffff735d646 "free(): invalid pointer", ptr=) + at malloc.c:4996 + have_lock=0) at malloc.c:3840 + at ccid_usb.c:913 + at ifdwrapper.c:190 + rContext=rContext@entry=0x61e2d0) at readerfactory.c:1134 + at readerfactory.c:632 + at readerfactory.c:119 + readerName=0x7ffff00024b0 "Gemalto GemCore SIM Pro Smart Card Reader", + port=2097152) at readerfactory.c:608 + at hotplug_libudev.c:362 + at pthread_create.c:309 + at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111 + + src/ccid_serial.c | 13 ++++++++++++- + src/ccid_usb.c | 11 ++++++++++- + 2 files changed, 22 insertions(+), 2 deletions(-) + +commit ab374afe54dd5c0d97dad93df6cca27b8c527ccf +Author: Godfrey Chung +Date: Mon Jun 27 11:34:44 2016 +0800 + + Add missing openct/README in distribution + + The file openct/README was not included in the generated .tar.bz2 + archive. + This file is only used for information and documentation. + + Thanks to Godfrey Chung for the bug report + https://github.com/LudovicRousseau/CCID/pull/20 + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5edb61353e4a99313f670743e351abc26d561c14 +Author: Ludovic Rousseau +Date: Sun Jun 26 11:05:11 2016 +0200 + + Add ESMART Token GOST X2 ET1020-A + + readers/ISBC_ESMART_reader.txt | 62 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 66 insertions(+), 1 deletion(-) + +commit 8ea1815745692c38e1c07fc8d460aae85efe123a +Author: Ludovic Rousseau +Date: Fri Jun 24 10:02:24 2016 +0200 + + Fix spelling error in a log message + + The Correct spelling is: successful + + Thanks to lintian(1) for the bug report + I: libacsccid1: spelling-error-in-binary usr/lib/pcsc/drivers/ifd-acsccid.bundle/Contents/Linux/libacsccid.so successfull successful + + src/ccid.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6123a4cc07a2c5b980021c70b89f02da96ee855a +Author: Godfrey Chung +Date: Wed Jun 22 10:46:37 2016 +0800 + + Fix fake composite device code to use a fixed order + + The value static_interface shall be incremented only for composite devices. + Otherwise any other reader would increase the value and the next + composite reader connected will have its interfaces enumerated in a + different order. + + The problem occurs only on Mac OS X (pcscd) that still does not support + composite CCID devices. The CCID driver has to be configured with + --enable-composite-as-multislot and composite CCID devices are + "emulated" as a multi-slot device. + + Thanks to Godfrey Chung for the patch + https://github.com/LudovicRousseau/CCID/pull/19 + + src/ccid_usb.c | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +commit 32c8a429a2654e16a195ba42f5a9bbf18f34d87b +Author: Ludovic Rousseau +Date: Fri Jun 17 22:09:01 2016 +0200 + + log_msg(): log up to 3 lines of 80 characters + + The log of the CCID driver license was truncated. It is now possible to + log up to 3 * 80 = 240 characters instead of 2 * 80 = 160. + + The problem is only present on Mac OS X and other systems (Android) + where the log is not done by pcscd. + pcscd has a limit of 2048 bytes and does not have this problem. + + Thanks to Maksim Ivanov for the bug report. + "[Pcsclite-muscle] Small fix suggestion for CCID (logging issue)" + https://lists.alioth.debian.org/pipermail/pcsclite-muscle/Week-of-Mon-20160613/000634.html + + src/debug.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bfb75dd02f8a1ca9f8ebbd86658819d2721416cb +Author: Ludovic Rousseau +Date: Thu Jun 9 21:10:59 2016 +0200 + + Add appidkey GmbH ID50 -USB + + readers/appidkey_ID50-USB.txt | 51 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 52 insertions(+) + +commit ec94d1fa6beebfdb39a2f81c20a54bded01e28db +Author: Ludovic Rousseau +Date: Thu Jun 9 21:07:10 2016 +0200 + + Add appidkey GmbH ID100-USB SC Reader + + readers/appidkey_ID100-USB_SC_Reader.txt | 51 ++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 55 insertions(+), 1 deletion(-) + +commit 6ed3a9f1ccf024d9101c87219d7b1850992ff9bb +Author: Ludovic Rousseau +Date: Mon Jun 6 18:59:18 2016 +0200 + + Resync PCSC and contrib_libPCSCv2part10 modules + + Benefit from the configfile.l: Fix issue on SunOS + + PCSC | 2 +- + contrib_libPCSCv2part10 | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 24f8659452bfb5d2a357bfca3e99c3fceef16bd3 +Author: Ludovic Rousseau +Date: Sat May 28 20:38:31 2016 +0200 + + Add Broadcom Corp 5880 with ProductID 0x5805 + + readers/Broadcom_5880_0x5805.txt | 106 +++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 6 ++- + 2 files changed, 111 insertions(+), 1 deletion(-) + +commit 1808d28d196a1c45b9d846aa7aab5123fe062706 +Author: Ludovic Rousseau +Date: Sun May 22 18:08:19 2016 +0200 + + README: add G&D StarSign CUT S in release 1.4.24 + + I forgot to add this reader in the changes. + + README | 1 + + 1 file changed, 1 insertion(+) + +commit a1197c49cee479f4187dfd05c900224b99127e17 (tag: ccid-1.4.24) +Author: Ludovic Rousseau +Date: Sun May 22 17:07:03 2016 +0200 + + Release 1.4.24 + + README | 12 ++++++++++++ + configure.ac | 2 +- + 2 files changed, 13 insertions(+), 1 deletion(-) + +commit b4c2cae5f311eef313777124937520c780d002fd +Author: Ludovic Rousseau +Date: Fri May 20 15:19:05 2016 +0200 + + IFDHGetCapabilities: fix SCARD_ATTR_VENDOR_IFD_SERIAL_NO size + + We use strlcpy() to copy the IFD (reader) serial number string. So we + must must take into account the terminating NUL byte. + + Without the patch the size was "correctly" reported on the first call + (without including the final NUL byte). So the application allocates a + buffer for this size and the next strlcpy() tuncates the string to add + the NUL byte. + + Thanks to Daniel Kucera for the bug report. + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5eaa22bbaac16ca3e20e49418c37291ac128c3ad +Author: Ludovic Rousseau +Date: Thu May 19 21:16:48 2016 +0200 + + Add Giesecke & Devrient GmbH StarSign CUT S + + readers/GnD_StarSign_CUT_S.txt | 56 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 57 insertions(+) + +commit b3eedaf7873e5438f5f2e8b163b2c0362099e318 +Author: Ludovic Rousseau +Date: Thu May 19 20:56:13 2016 +0200 + + Add Generic USB Smart Card Reader + + This reader is the same as the "HID AVIATOR Generic" except that it + supports "Short and Extended APDU level exchange" instead of "Short APDU + level exchange". + + readers/Generic_USB_Smart_Card_Reader.txt | 161 ++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 9 +- + 2 files changed, 168 insertions(+), 2 deletions(-) + +commit e039760f0ab57a0e66e2f6dabebfdf6ba3134b14 +Author: Ludovic Rousseau +Date: Mon May 9 10:05:45 2016 +0200 + + Fix support of HID Aviator generic + + This reader firmware is bogus: + - it declares pinpad support but as no keyboard + - it declares short APDU but uses chaining as for extended APDU + + Thanks to Martin Paljak for the bug report + https://github.com/LudovicRousseau/CCID/pull/16 + + src/ccid.c | 7 +++++++ + src/ccid.h | 1 + + 2 files changed, 8 insertions(+) + +commit c18293616c834362555a61b3d84624ec24522bb3 +Author: Ludovic Rousseau +Date: Mon May 9 20:10:13 2016 +0200 + + Add HID AVIATOR Generic + + readers/HID_Aviator.txt | 161 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +- + 2 files changed, 165 insertions(+), 1 deletion(-) + +commit b5673dfae8ab054557938abea864e5c34f61d2ed +Author: Ludovic Rousseau +Date: Mon May 9 09:53:35 2016 +0200 + + Update c.sh link + + The c.sh script is used call ./configure with "correct" parameter for + me (maintainer). + This file comes from PCSC and is a symbolic link. + + Thanks to Martin Paljak for the bug report + https://github.com/LudovicRousseau/CCID/pull/15 + + c.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5c9dbb25abb9fed9882b7c28b65fe55d4d7924fb +Author: Ludovic Rousseau +Date: Sat May 7 12:12:28 2016 +0200 + + SCM SCL011: use a 400 ms timeout instead of 100 ms + + The SCM SCL011 reader is a contactless reader that needs 350 ms to + answer to the PC_to_RDR_GetSlotStatus CCID command when no card is in + the field. + + We use the same patch as for the ElatecTWN4. + + Thanks to Chris Calvesbert for the bug report. + + src/ccid.c | 3 +++ + src/ccid.h | 1 + + 2 files changed, 4 insertions(+) + +commit 5bea205f085a6b5ddd263843f410abab728550b7 +Author: Ludovic Rousseau +Date: Wed May 4 18:31:57 2016 +0200 + + ElatecTWN4: use a 400 ms timeout instead of 100 ms + + The ElatecTWN4 reader is a contactless reader that needs 280 ms to + answer to the PC_to_RDR_GetSlotStatus CCID command when no card is in + the field. + + src/ccid.c | 12 ++++++++++++ + src/ccid.h | 1 + + 2 files changed, 13 insertions(+) + +commit 1e3c6c14683e3b5a9bc27fed55ae32b7dc2ee157 +Author: Ludovic Rousseau +Date: Wed May 4 18:20:13 2016 +0200 + + CreateChannel: allow to use a non default timeout + + By default the read timeout is set to 100 ms for the double call of + CmdGetSlotStatus() in CreateChannelByNameOrChannel() use to resync the + USB toggle bits. + This is a short delay so that a failing reader will not block for too + long. The defaut timeout value is 3 seconds so a total of 6 seconds + would be lost is the reader is not responding. + + Unfortunately some readers (in particular contactless readers) are very + long to anwser to the PC_to_RDR_GetSlotStatus CCID command. I guess it + is to be sure no contactless card is present in the field. + + It is now possible to change the 100 ms timeout to something else for a + specific reader by adding code in ccid_open_hack_pre() and + ccid_open_hack_post(). + + src/ifdhandler.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 2c8ffab9962484653b6445a6c85a6c690a5948b3 +Author: Ludovic Rousseau +Date: Fri Apr 22 14:59:21 2016 +0200 + + ccid_usb.c: fix a race condition on multi reader + + When using multiple threads we shall use libusb function + libusb_handle_events_completed() instead of libusb_handle_events() as + documented in http://libusb.sourceforge.net/api-1.0/mtasync.html#Using + + Problems may occur when using more than one reader. In that case a card + movement notification may be missed and reported only after a 60 seconds + timeout. + + Thanks to Maksim Ivanov for the bug report + "CCID handling of multiple devices" + http://lists.alioth.debian.org/pipermail/pcsclite-muscle/Week-of-Mon-20160418/000564.html + + src/ccid_usb.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit d636d54fdd07b416f591f28d84c6f0e3f4bda4f9 (tag: ccid-1.4.23) +Author: Ludovic Rousseau +Date: Wed Apr 20 10:04:45 2016 +0200 + + Release 1.4.23 + + README | 23 +++++++++++++++++++++++ + configure.ac | 2 +- + 2 files changed, 24 insertions(+), 1 deletion(-) + +commit 358952bef37c3a71fce7adbae32388cefdea283f +Author: Ludovic Rousseau +Date: Tue Apr 19 21:02:13 2016 +0200 + + Add IonIDe Smartcard Reader reader + + readers/IonIDe_Smartcard_Reader.txt | 161 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 + + 2 files changed, 164 insertions(+) + +commit 80b4db807ef6d8f52245285fb7e9d6fbe1e3e353 +Author: Ludovic Rousseau +Date: Tue Apr 19 20:59:26 2016 +0200 + + Add HID Global OMNIKEY 6121 Smart Card Reader reader + + .../HID_Global_OMNIKEY_6121_Smart_Card_Reader.txt | 161 +++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 162 insertions(+) + +commit 0991e840b1243cdf9c7f375077e68ac6efa35af7 +Author: Ludovic Rousseau +Date: Tue Apr 19 20:58:02 2016 +0200 + + Add HID Global OMNIKEY 5022 Smart Card Reader reader + + .../HID_Global_OMNIKEY_5022_Smart_Card_Reader.txt | 163 +++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 164 insertions(+) + +commit 7c943dd36500fdb2d10036c6a1976b51e51daee8 +Author: Ludovic Rousseau +Date: Tue Apr 19 20:55:35 2016 +0200 + + Add HID Global OMNIKEY 3x21 Smart Card Reader reader + + .../HID_Global_OMNIKEY_3x21_Smart_Card_Reader.txt | 161 +++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 163 insertions(+), 1 deletion(-) + +commit 3c21f452543983f3625a1965ce234074cbda6865 +Author: Ludovic Rousseau +Date: Tue Apr 19 20:30:06 2016 +0200 + + Fix a busy loop consuming 100% of CPU + + If opening a reader fails then we must call close_libusb_if_needed() to + free any libusb resources and stop the libusb hotplug thread. + + The problem as been detected with the Yubico Yubikey NEO U2F+CCID and + the 2 Boardcom devices. These devices are composite USB devices so + loading the CCID driver for a non-CCID interface was calling + libusb_init() but not libusb_exit(). The libusb hotplug thread and other + libusb allocated resources were not stopped and unallocated. On the next + USB plug (even if not CCID) then an endless busy loop is started inside + libusb hotplug. + + Fixes: + - Debian bug #812087 + "pcscd takes 100 % cpu each time I insert a mass storage USB key" + - Debian bug #821787 + "cleanup libusb when open fails" + - Ubuntu bug #1572004 + "pcscd consumes 100% CPU" + - Ubuntu bug #1551897 + "Excessive CPU utilization" + + Thanks a lot to Stefan Bühler for the analysis and patch + https://bugs.debian.org/821787 + + src/ccid_usb.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 57b93f4f553e3573b1e857df6c3429c7f017d5d0 +Author: Ludovic Rousseau +Date: Tue Apr 19 20:29:13 2016 +0200 + + ccid_usb.c: improve close_libusb_if_needed() + + If the libusb context (ctx) is already NULL then no need to call + libusb_exit(). + + The idea is to be able to call close_libusb_if_needed() any time + without checking the value of ctx first. + + src/ccid_usb.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit d507a07c855fbead039564f1006144a0d4b9b908 +Author: Ludovic Rousseau +Date: Thu Apr 14 15:36:35 2016 +0200 + + Add Cherry SmartTerminal XX44 reader + + readers/Cherry_SmartTerminal_XX44.txt | 161 ++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 162 insertions(+) + +commit f6942cf1d886394f43233cac7dc40a39a3462dfd +Author: Ludovic Rousseau +Date: Thu Apr 14 15:32:24 2016 +0200 + + Add Fujitsu Smartcard Reader D323 reader + + readers/Fujitsu_Smartcard_Reader_D323.txt | 161 ++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +- + 2 files changed, 165 insertions(+), 1 deletion(-) + +commit c9591e9920bc6f90e61f05a17839b0e05945dd3d +Author: Ludovic Rousseau +Date: Fri Apr 1 15:56:24 2016 +0200 + + Update URL in a comment + + The page at URL + http://martinpaljak.net/2011/03/19/insecure-hp-usb-smart-card-keyboard/ + is no more available. Fortunately a copy of the page is available at the + Way Back Machine service. + + src/ccid.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit dd479b7c62f9a290a5d0994f0cbadd9b3af8d0d5 +Author: Ludovic Rousseau +Date: Tue Mar 15 09:10:38 2016 +0100 + + Remove support of DRIVER_OPTION_RESET_ON_CLOSE + + I do not remember a case of use for DRIVER_OPTION_RESET_ON_CLOSE in the + last 10 years. + + The problem DRIVER_OPTION_RESET_ON_CLOSE is trying to solve is already + solved: + - Resynchronising the USB toggle bits is already done by the 3 calls to + CmdGetSlotStatus() in CreateChannelByNameOrChannel(). + - Resetting bSeq to 0 is not needed. + + src/Info.plist.src | 6 +----- + src/ccid_ifdhandler.h | 1 - + src/ccid_usb.c | 4 ---- + 3 files changed, 1 insertion(+), 10 deletions(-) + +commit 998c7965c69b855d1dbb7a04a8d367cf8dbb1a78 +Author: Ludovic Rousseau +Date: Sun Mar 27 21:43:35 2016 +0200 + + InterruptRead(): log libusb error name + + As in 7a46f702e3c4752304d94efc61a84618a0a566c9 use libusb_error_name() + to display the libusb error name instead of error value. + + src/ccid_usb.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 767fd1b3b8eb20d1fca56288ab29d82de873b9be +Author: Ludovic Rousseau +Date: Mon Mar 14 17:44:13 2016 +0100 + + Add KACST HSID Reader Dual Storage reader + + readers/KACST_HSID_Reader_Dual_Storage.txt | 57 ++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 58 insertions(+) + +commit 01c67d2e16d173b49bb14eb18cb4b54d902424b0 +Author: Ludovic Rousseau +Date: Mon Mar 14 17:40:36 2016 +0100 + + Add KACST HSID Reader Single Storage reader + + readers/KACST_HSID_Reader_Single_Storage.txt | 57 ++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 58 insertions(+) + +commit 0e2133655ae719833fba1e38a518af4113dfcc81 +Author: Ludovic Rousseau +Date: Mon Mar 14 17:38:33 2016 +0100 + + Add KACST HSID Reader reader + + readers/KACST_HSID_Reader.txt | 57 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 61 insertions(+), 1 deletion(-) + +commit f4d5dec7226699878baa4df34b11c7fbaaa1eb6a +Author: Ludovic Rousseau +Date: Wed Mar 2 10:45:17 2016 +0100 + + Add ACS ACR3901U ICC Reader + + readers/ACS_ACR3901U_ICC_Reader.txt | 53 +++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 55 insertions(+), 1 deletion(-) + +commit cda36311338d8624fa6eeef5e8c2a824df5265b3 +Author: Ludovic Rousseau +Date: Mon Feb 29 17:31:04 2016 +0100 + + Add DUALi DE-ABCM6 in _disabled_ list + + readers/DUALi_DE-ABCM6.txt | 56 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 60 insertions(+), 1 deletion(-) + +commit 5cc77fe25299dd8f5ac1d105c298b8c5d0108981 +Author: Ludovic Rousseau +Date: Sat Feb 6 17:02:08 2016 +0100 + + Add VMware Virtual USB CCID + + A reader with the same VendorID and ProductID was already present in the + "should work" list. + This new version of the reader is bogus and is in the "unsupported" + list. See the associated note. + + readers/VMware_Virtual_USB_CCID2.txt | 58 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 7 ++++- + 2 files changed, 64 insertions(+), 1 deletion(-) + +commit 0eaa5bc8e7f5deb77c7f71d3ce231628fe261bca +Author: Ludovic Rousseau +Date: Wed Jan 27 10:45:10 2016 +0100 + + Add Alcor Micro AU9560 + + readers/AlcorMicro_AU9560.txt | 62 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 7 +++-- + 2 files changed, 67 insertions(+), 2 deletions(-) + +commit 43ccf87ea24ade4c5603e0e719383779fe7201bf +Author: Ludovic Rousseau +Date: Fri Jan 15 09:49:09 2016 +0100 + + INSTALL: remove udev use chapter + + It is no more possible to build libccid with udev since 14 Oct 2010 and + the use of libhal. + + The support has been removed from configure.in in + eab2fde6c9327b291267972ee3266a4ab1425fda + + Closes: github issue #11 "--enable-udev switch mentioned in INSTALL, but + not available in configure.ac" + https://github.com/LudovicRousseau/CCID/issues/11 + + INSTALL | 29 ----------------------------- + 1 file changed, 29 deletions(-) + +commit 33964bcc8f9cbbb9898ac6aa9bbfc3ea98569927 +Author: Ludovic Rousseau +Date: Sun Jan 10 17:21:59 2016 +0100 + + MacOSX/configure: exit in error if configure failed + + Exit with the return code from ./configure + It allows to test if the script execution succeeded or not. + + MacOSX/configure | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 894b184b85c6c45b017a0ea9bef6b3892d207942 (tag: ccid-1.4.22) +Author: Ludovic Rousseau +Date: Sun Jan 10 14:40:02 2016 +0100 + + Release 1.4.22 + + README | 31 +++++++++++++++++++++++++++++++ + configure.ac | 2 +- + 2 files changed, 32 insertions(+), 1 deletion(-) + +commit 208b60e48ba38433e3fd36faaf6694daf068f3b3 +Author: Ludovic Rousseau +Date: Wed Jan 6 10:33:10 2016 +0100 + + OpenUSBByName(): fix possible use of uninitialized variable + + The change in bc6124cb44677540fa5d5267e7af759796d6101c was not complete. + Now that the call to GET_KEYS() occurs _before_ libusb_get_device_list() + we should not try to call libusb_free_device_list() if GET_KEYS() fails. + + ccid_usb.c:326:2: warning: variable 'devs' is used uninitialized whenever 'if' + condition is true [-Wsometimes-uninitialized] + GET_KEYS("ifdVendorID", &ifdVendorID) + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ccid_usb.c:319:6: note: expanded from macro 'GET_KEYS' + if (rv) \ + ^~ + ccid_usb.c:739:26: note: uninitialized use occurs here + libusb_free_device_list(devs, 1); + ^~~~ + ccid_usb.c:326:2: note: remove the 'if' if its condition is always false + GET_KEYS("ifdVendorID", &ifdVendorID) + ^ + ccid_usb.c:319:2: note: expanded from macro 'GET_KEYS' + if (rv) \ + ^ + ccid_usb.c:227:22: note: initialize the variable 'devs' to silence this warning + libusb_device **devs, *dev; + ^ + = NULL + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0b0b6e00f6e3e50ec3d015b60c6551ec27fb9ada +Author: Ludovic Rousseau +Date: Mon Jan 4 20:36:30 2016 +0100 + + Patch for Cherry KC 1000 SC + + The Cherry KC 1000 SC is (by default) a "Short APDU level exchange" CCID + reader. But firmware 1.00 is bogus. + With a T=1 card and case 2 APDU (data from card to host) the maximum + size returned by the reader is 128 byes. The reader is then using + chaining as with extended APDU. + + In order to limit the impacts on the driver I just change the dwFeatures + to declare the reader as a "Short and Extended APDU level exchange" CCID + reader to use the chaining even for short APDU. + + Thanks to ZF Friedrichshafen AG for the patch. + + src/ccid.c | 14 ++++++++++++++ + src/ccid.h | 1 + + 2 files changed, 15 insertions(+) + +commit f2abd7954b50ed741d98d78270f7a863f9e18e4a +Author: Ludovic Rousseau +Date: Mon Jan 4 20:25:10 2016 +0100 + + Patch for Microchip SEC1110 on Mac OS X + + The Microchip SEC1110 is bogus and does not report card status correctly + with PC_to_RDR_GetSlotStatus if the Interrupt pipe is not read. + + The problem is that Mac OS X still does not use the + TAG_IFD_POLLING_THREAD_WITH_TIMEOUT and then the Interrupt pipe to + detect card events. Only IFDHICCPresence(), and then GetSlotStatus, is + used. + + The solution is to empty the interrupt pipe by doing a very short read + (10 ms) before each call to PC_to_RDR_GetSlotStatus. + + src/ccid.h | 1 + + src/commands.c | 5 +++++ + 2 files changed, 6 insertions(+) + +commit e49bd051d6398829439a6f5ca47c9be235f67fc9 +Author: Ludovic Rousseau +Date: Mon Jan 4 20:18:22 2016 +0100 + + OpenUSBByName(): add some low level debug + + Log the bus_number, device_address, idVendor and idProduct of the + current libusb device in the loop. + + This debug is mostly useful on Mac OS X since the idVendor and idProduct + of the searched device is _not_ given in the device name. + + src/ccid_usb.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit bc6124cb44677540fa5d5267e7af759796d6101c +Author: Ludovic Rousseau +Date: Thu Dec 31 16:49:07 2015 +0100 + + OpenUSBByName(): read Info.plist only once + + On Mac OS X it is possible to ask libusb to rescan the USB bus waiting + for a device o be available. + See commit 690e90f476c3815c31874e523ba017f7f1d372cd + + The problem was that the code to parse the driver Info.plist was also + re-executed. This code is now moved earlier and is executed only once + even on Mac OS X. + + src/ccid_usb.c | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +commit 325052621ed4280c27ef4f5d24f59424b5d76ecc +Author: Ludovic Rousseau +Date: Sat Dec 12 13:35:34 2015 +0100 + + Add THURSBY SOFTWARE TSS-PK1 + + readers/Thursby_TSS_PK1.txt | 60 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 63 insertions(+) + +commit d6672c33e2c307a1cbd9b022176a17cde1dcecdc +Author: Ludovic Rousseau +Date: Sat Dec 12 13:32:22 2015 +0100 + + Add Thursby Software Systems, Inc. TSS-PK8 + + readers/Thursby_TSS_PK8.txt | 60 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 63 insertions(+) + +commit 5c9edb58c1d5e602f7626554c92766a950bc5174 +Author: Ludovic Rousseau +Date: Sat Dec 12 13:26:38 2015 +0100 + + Add Thursby Software Systems, Inc. TSS-PK7 + + readers/Thursby_TSS_PK7.txt | 60 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 7 ++++- + 2 files changed, 66 insertions(+), 1 deletion(-) + +commit 21d4bc6963b47e1a7baf74b1818cb6c84d08eb05 +Author: Ludovic Rousseau +Date: Sat Dec 5 19:02:19 2015 +0100 + + Add Nitrokey Nitrokey Storage + + "Nitrokey Nitrokey Storage" is the new name for "German Privacy + Foundation Crypto Stick v2.0" + + ...rivacy_Foundation_Crypto_Stick_v2.0.txt => Nitrokey_Storage.txt} | 6 +++--- + readers/supported_readers.txt | 4 ++-- + 2 files changed, 5 insertions(+), 5 deletions(-) + +commit d1fbc9bf2817832f4e8be6282fd09d5e206e4ce9 +Author: Ludovic Rousseau +Date: Fri Dec 4 16:43:42 2015 +0100 + + ccid.h: fix Kobil mIDentity visual identification + + The definition of KOBIL_MIDENTITY_VISUAL reader in + af3d2ae17337508a7e1a49e3f9dc7546195d62a0 (from 2010) was wrong. + + So the support of FEATURE_MCT_READER_DIRECT was broken for this reader. + It looks like this code has never been tested or used. + + src/ccid.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 95a9a0552a8a4020992f65a97ccf0ab1051e1479 +Author: Ludovic Rousseau +Date: Wed Nov 18 20:43:38 2015 +0100 + + Add Aktiv Rutoken PINPad 2 + + readers/Aktiv_Rutoken_PINPad_2.txt | 49 ++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 51 insertions(+), 1 deletion(-) + +commit 8ee6962f08beb1dfd539ae70b819246732019a91 +Author: Ludovic Rousseau +Date: Fri Nov 13 11:27:12 2015 +0100 + + OpenUSBByName(): do not call close_libusb_if_needed() + + close_libusb_if_needed() is no more needed in OpenUSBByName() now that + FreeChannel() is called in case of error. + + FreeChannel() will call ClosePort() and ClosePort() will call + close_libusb_if_needed() + + src/ccid_usb.c | 1 - + 1 file changed, 1 deletion(-) + +commit 522ebb2056b7b2170b142f7ce57b834074abffab +Author: Ludovic Rousseau +Date: Fri Nov 13 11:20:04 2015 +0100 + + CreateChannelByNameOrChannel(): call FreeChannel() in case of error + + If the creation of a channel fails then call FreeChannel() instead of + IFDHCloseChannel(). + The ressources are unalocated but with no access at the lower layer. + + Since the creation failed the channel is not correctly created and + only part of the reader stucture is initialised. + + The problem was discovered with the folowing problem: + Program received signal SIGSEGV, Segmentation fault. + [Switching to Thread 0x7ffff6fe2700 (LWP 6120)] + 0x00007ffff5dca8f2 in CmdPowerOff (reader_index=0) at commands.c:1076 + 1076 cmd[6] = (*ccid_descriptor->pbSeq)++; + (gdb) print ccid_descriptor + $1 = (_ccid_descriptor *) 0x7ffff5fe0468 + (gdb) print ccid_descriptor->pbSeq + $2 = (unsigned char *) 0x0 + + The pbSeq pointer is NULL and can't be dereferenced. + + (gdb) bt + #0 0x00007ffff5dca8f2 in CmdPowerOff (reader_index=0) at commands.c:1076 + #1 0x00007ffff5dce556 in IFDHCloseChannel (Lun=0) at ifdhandler.c:269 + #2 0x00007ffff5dce773 in CreateChannelByNameOrChannel (Lun=0, + lpcDevice=0x269 , Channel=0) + at ifdhandler.c:194 + #3 0x000000000040673a in IFDOpenIFD (rContext=rContext@entry=0x61e010) + at ifdwrapper.c:136 + #4 0x0000000000408151 in RFInitializeReader (rContext=0x61e010) + at readerfactory.c:1036 + #5 0x0000000000408a93 in RFAddReader (readerNameLong=, + port=2097152, library=, + device=0x7ffff6fe1d30 "usb:08e6/3437:libusb-1.0:1:2:0") + at readerfactory.c:329 + #6 0x000000000040d9d4 in HPAddHotPluggable (dev=0x0, + bus_device=0x61d660 "", interface=0, + driver=, driver=, desc=...) + at hotplug_libusb.c:608 + #7 0x000000000040dd2a in HPRescanUsbBus () at hotplug_libusb.c:373 + #8 0x000000000040dfa1 in HPEstablishUSBNotifications (pipefd=0x7fffffffe440) + at hotplug_libusb.c:429 + #9 0x00007ffff75a30a4 in start_thread (arg=0x7ffff6fe2700) + at pthread_create.c:309 + #10 0x00007ffff72d804d in clone () + at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111 + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit eda850192dbd6b5d8dca3a6355174ed9649bad38 +Author: Ludovic Rousseau +Date: Fri Nov 13 11:18:10 2015 +0100 + + IFDHCloseChannel(): use FreeChannel() + + Move part of the code of IFDHCloseChannel() into a new function + FreeChannel(). + Call the new function FreeChannel() from IFDHCloseChannel(). + + No code semantic change. + + src/ifdhandler.c | 30 +++++++++++++++++------------- + 1 file changed, 17 insertions(+), 13 deletions(-) + +commit e46fa30ead3f1eff72769d70be6adf031fafe606 +Author: Ludovic Rousseau +Date: Fri Nov 13 11:48:07 2015 +0100 + + OpenUSBByName(): use device bus and address only when available + + Use the device_bus and device_addr only if they have a value i.e. when + libudev is used by pcscd. + + If pcsc-lite uses libusb instead of libudev for the hotplug mechanism + the driver is called with device="usb:08e6/3437:libusb-1.0:1:10:0" and + then device_bus and device_addr are set to 0. In this case the driver + must not uses these values. + The patch in 8b9f6f33b16e808a5769dbc4193e5f107a09a693 was not complete. + + Thanks to Luka Logar for the bug report and patch. + + src/ccid_usb.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit fdc248ed1dd64c88065d7fcd92c6ce8b04e82b8b +Author: Ludovic Rousseau +Date: Thu Nov 12 18:42:57 2015 +0100 + + Add GEMALTO K1100 + + readers/Gemalto_K1100.txt | 51 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 54 insertions(+) + +commit 5a56181dcaa66899a67e7fbe1b4f00be4b1248e5 +Author: Ludovic Rousseau +Date: Thu Nov 12 18:40:58 2015 +0100 + + Add GEMALTO CT1100 + + readers/Gemalto_CT1100.txt | 51 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++++- + 2 files changed, 55 insertions(+), 1 deletion(-) + +commit 8b9f6f33b16e808a5769dbc4193e5f107a09a693 +Author: Santiago Gimeno +Date: Tue Nov 3 17:24:49 2015 +0100 + + OpenUSBByName(): the device bus & addr must match + + In Linux, before this change, if there were multiple card readers of the same + model connected, a new Reader could be initialized by opening the wrong USB + device. + + src/ccid_usb.c | 18 +++++++++++++++--- + 1 file changed, 15 insertions(+), 3 deletions(-) + +commit a26e6265ad4f8e86d1eea9cdd97dbfd2713194c5 +Author: Ludovic Rousseau +Date: Mon Nov 9 17:21:10 2015 +0100 + + Fix timeout for PPDU commands + + The timeout value is in milliseconds, not in seconds. + + Thanks to Roman Pasechnik for the bug report. + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c2b6e04a9153b198a7f9415847d9dd7273cf11af +Author: Ludovic Rousseau +Date: Sun Nov 8 21:58:45 2015 +0100 + + RSA_SecurID_getpasswd.c: fix compiler warnings on OS X + + Apple defines DWORD as uint32_t so %d is correct + pcsc-lite defines DWORD as unsigned long so %ld is correct + + To get a compilation without warnings on Mac OS X and GNU/Linux you have + to use "%d" on Mac OS X and "%ld" on GNU/Linux. + Using the macro LF you can use: "%"LF"d". + + This change fixes a lot of compiler warnings like: + RSA_SecurID_getpasswd.c:54:77: warning: format specifies type 'unsigned long' + but the argument has type 'LONG' (aka 'int') [-Wformat] + ...Cannot Connect to Resource Manager %lX\n", rv); + ~~~ ^~ + %X + + contrib/RSA_SecurID/RSA_SecurID_getpasswd.c | 25 +++++++++++++++++-------- + 1 file changed, 17 insertions(+), 8 deletions(-) + +commit e4415fd84f7b91e9bebd0bc3ac07204ee6054db1 +Author: Ludovic Rousseau +Date: Sun Nov 8 21:52:53 2015 +0100 + + scardcontrol.c: fix compiler warnings on OS X + + Apple defines DWORD as uint32_t so %d is correct + pcsc-lite defines DWORD as unsigned long so %ld is correct + + To get a compilation without warnings on Mac OS X and GNU/Linux you have + to use "%d" on Mac OS X and "%ld" on GNU/Linux. + Using the macro LF you can use: "%"LF"d". + + This change fixes a lot of compiler warnings like: + scardcontrol.c:253:77: warning: format specifies type 'unsigned long' but the + argument has type 'LONG' (aka 'int') [-Wformat] + ...Cannot Connect to Resource Manager %lX\n", rv); + ~~~ ^~ + %X + + examples/scardcontrol.c | 39 ++++++++++++++++++++++++--------------- + 1 file changed, 24 insertions(+), 15 deletions(-) + +commit cda5ca7aeb1440bfd0215ee9d79cfe1f845b735c +Author: Ludovic Rousseau +Date: Fri Nov 6 20:41:21 2015 +0100 + + IFDHTransmitToICC: Reuse ccid_descriptor + + ccid_descriptor is now already computed. Reuse this value where + possible. + + src/ifdhandler.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 7748ae13bf4c48d2f34993dd6086d62aa0a91cf0 +Author: Ludovic Rousseau +Date: Fri Nov 6 20:21:58 2015 +0100 + + Set timeout to 90 sec for PPDU commands + + PPDU (Pseudo APDU) commands are described in PC/SC v2 part 10 + supplement document. They are defined as CLA=0xFF, INS=0xC2, P1=0x01. + When a PPDU is sent through SCardTransmit() the communication timeout is + changed to 90 seconds (the same as for a SCardControl() command). + + This change allows the use of a Secure Verify command sent as a PPDU + through SCardTransmit(). The calculated timeout of 2.85 seconds was too + short in this case. + + Fix alioth bug [#315217] "Cherry KC 1000 SC direct PIN modification + timeout Pseudo APDU" + https://alioth.debian.org/tracker/?func=detail&atid=410085&aid=315217&group_id=30105 + + Thanks to Roman Pasechnik for the bug report. + + src/ifdhandler.c | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +commit 144a5ff7a61ad3a18c3d4d7ca0ad6639100ee538 +Author: Ludovic Rousseau +Date: Fri Nov 6 20:37:38 2015 +0100 + + Move max() definition in a header file + + The max() macro is now defined in defs.h instead of commands.c. + This allows other .c files to use this macro. + + src/commands.c | 1 - + src/defs.h | 2 ++ + 2 files changed, 2 insertions(+), 1 deletion(-) + +commit 6ec40b99efdebf238f5deb91bdcb5d64c83df8bc +Author: Ludovic Rousseau +Date: Fri Nov 6 09:38:20 2015 +0100 + + Comments: Remove the $Id$ tag + + The $Id$ tag was used by subversion (svn) to indicate the file revision. + This tag is now useless with git. + + INSTALL | 2 -- + MacOSX/configure | 2 -- + bootstrap | 2 -- + configure.ac | 2 -- + examples/scardcontrol.c | 4 ---- + readers/Makefile.am | 2 -- + 6 files changed, 14 deletions(-) + +commit 0f71939d079f4c909f815a90ed64e8ebe26e687d +Author: Ludovic Rousseau +Date: Fri Nov 6 09:34:10 2015 +0100 + + submodule: resync with upstream + + sync git modules PCSC and contrib_libPCSCv2part10 + + PCSC | 2 +- + contrib_libPCSCv2part10 | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 780f7f393b4e49d7c484455b9b04c2aab6056afa +Author: Ludovic Rousseau +Date: Fri Nov 6 09:29:36 2015 +0100 + + Comments: Remove the $Id$ tag + + The $Id$ tag was used by subversion (svn) to indicate the file revision. + This tag is now useless with git. + + README | 2 -- + reconf | 2 -- + src/92_pcscd_ccid.rules | 2 -- + src/Makefile.am | 2 -- + src/ccid.c | 4 ---- + src/ccid.h | 4 ---- + src/ccid_ifdhandler.h | 4 ---- + src/ccid_serial.c | 4 ---- + src/ccid_serial.h | 4 ---- + src/ccid_usb.c | 4 ---- + src/ccid_usb.h | 4 ---- + src/commands.c | 4 ---- + src/commands.h | 4 ---- + src/debug.c | 5 ----- + src/debug.h | 4 ---- + src/defs.h | 4 ---- + src/ifdhandler.c | 2 -- + src/openct/README | 2 -- + src/openct/checksum.h | 2 -- + src/openct/proto-t1.h | 2 -- + src/parse.c | 4 ---- + src/towitoko/README | 2 -- + src/utils.c | 4 ---- + src/utils.h | 4 ---- + 24 files changed, 79 deletions(-) + +commit 53dedae5bf5afb8b07f94a17b812eb57a8910142 +Author: Ludovic Rousseau +Date: Thu Nov 5 15:33:01 2015 +0100 + + .gitignore: ignore libccidtwin .lo files + + .gitignore | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 3c0a6f6a8cf8bb7051ac32a6f089b904747e7ab6 +Author: Ludovic Rousseau +Date: Fri Nov 6 09:00:34 2015 +0100 + + command.c: returns IFD_ERROR_INSUFFICIENT_BUFFER + + If the reader returns an error (cancel or timeout) that the driver + reports as SW=0x6400 or SW=0x6401 and the RX buffer is less than 2 + bytes the driver now returns IFD_ERROR_INSUFFICIENT_BUFFER instead of + IFD_COMMUNICATION_ERROR. + + Thanks to Godfrey Chung and the ACS driver version 1.1.1 for idea. + + src/commands.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 4a222e816baa03d211f898fda227c2dc9c0db323 +Author: Ludovic Rousseau +Date: Wed Nov 4 11:50:46 2015 +0100 + + Add Athena ASEDrive IIIe KB Bio PIV + + readers/Athena_ASEDrive_IIIe_KB_BIO_PIV.txt | 51 +++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 52 insertions(+) + +commit ceaafe4b1a23475afa7573cea3cc422070db0f49 +Author: Ludovic Rousseau +Date: Wed Nov 4 11:42:44 2015 +0100 + + Add Athena ASEDrive IIIe Combo Bio PIV + + readers/Athena_ASEDrive_IIIe_Combo.txt | 58 ++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 60 insertions(+), 1 deletion(-) + +commit 3f801e6ed56508e8b7906e4a162ca7eb80ef15e3 +Author: Ludovic Rousseau +Date: Wed Oct 28 12:58:32 2015 +0100 + + Add Hitachi, Ltd. Hitachi Portable Biometric Reader + + readers/Hitachi_Portable_Biometric_Reader.txt | 49 +++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 50 insertions(+) + +commit 7872d5be115552fa51124009b0b8c90d5d8f88a7 +Author: Ludovic Rousseau +Date: Wed Oct 28 12:57:25 2015 +0100 + + Add Hitachi, Ltd. Hitachi Biometric Reader + + readers/Hitachi_Biometric_Reader.txt | 49 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 53 insertions(+), 1 deletion(-) + +commit 9a1932bed605fb3e38d9853449bb33b8791fa142 +Author: Ludovic Rousseau +Date: Mon Oct 26 16:02:50 2015 +0100 + + CreateChannel(): cleanup in case of error + + If the initialisation fails after the OpenPortByName() (during the check + and hack phases) then we need to correctly close the device. + + The problem occured on OS X with a Gemalto Pinpad reader. + The ccid_open_hack_post() failed and the port was not closed. + usbDevice[reader_index].dev_handle was not set to NULL and the next + reader plug (any reader) failed because the index was already in use. + + src/ifdhandler.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit fe2a1def4207d3be16604a1c2be5381def6eab93 +Author: Ludovic Rousseau +Date: Thu Oct 22 18:41:27 2015 +0200 + + Add Aladdin R.D. JaCarta U2F (JC602) + + readers/Aladdin_R.D._JaCarta_U2F.txt | 50 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 51 insertions(+) + +commit 31369cd4e4cf79bfb94e10d1f9f46f931bc82fa2 +Author: Ludovic Rousseau +Date: Thu Oct 22 18:39:47 2015 +0200 + + Add Aladdin R.D. JC-WebPass (JC600) + + readers/Aladdin_R.D._JaCarta_WebPass.txt | 50 ++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 51 insertions(+) + +commit d1a72e49356e49b3f7e587e4f93984b3525b068d +Author: Ludovic Rousseau +Date: Thu Oct 22 18:35:08 2015 +0200 + + Add Aladdin R.D. JCR-770 + + readers/Aladdin_R.D._JCR-770.txt | 108 +++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 109 insertions(+) + +commit f17347ca7f702885ed6325ce302d49e6a3376dab +Author: Ludovic Rousseau +Date: Thu Oct 22 18:32:03 2015 +0200 + + Add Aladdin R.D. JaCarta Flash + + readers/Aladdin_R.D._JaCarta_Flash.txt | 53 ++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 54 insertions(+) + +commit 001a48795d99195f6263dd5a01cb74bcc69a965c +Author: Ludovic Rousseau +Date: Thu Oct 22 18:28:24 2015 +0200 + + Add Aladdin R.D. JaCarta LT + + readers/Aladdin_R.D._JaCarta_LT.txt | 53 +++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 54 insertions(+) + +commit a48551f30d49fa5188a1df79e99b378cac8b51d9 +Author: Ludovic Rousseau +Date: Thu Oct 22 18:14:48 2015 +0200 + + Remove execution bit from .txt files + + readers/Chicony_HP_USB_Smartcard_CCID_Keyboard_JP.txt | 0 + readers/Chicony_HP_USB_Smartcard_CCID_Keyboard_KR.txt | 0 + readers/Identiv_@MAXX_ID-1_Smart_Card_Reader.txt | 0 + readers/Identiv_@MAXX_Light2_token.txt | 0 + readers/Identiv_CLOUD_2980_F_Smart_Card_Reader.txt | 0 + readers/Identiv_Identiv_uTrust_4701_F_Dual_Interface_Reader.txt | 0 + readers/Identiv_SCR3500_A_Contact_Reader.txt | 0 + readers/Identiv_SCR3500_B_Contact_Reader.txt | 0 + readers/Identiv_SCR35xx_USB_Smart_Card_Reader.txt | 0 + readers/Identiv_uTrust_2900_R_Smart_Card_Reader.txt | 0 + readers/Identiv_uTrust_2910_R_Smart_Card_Reader.txt | 0 + readers/Identiv_uTrust_2910_R_Taglio_SC_Reader.txt | 0 + readers/Identiv_uTrust_3512_SAM_slot_Token.txt | 0 + readers/Identiv_uTrust_3522_embd_SE_RFID_Token.txt | 0 + readers/Identiv_uTrust_3700_F_CL_Reader.txt | 0 + readers/Identiv_uTrust_3701_F_CL_Reader.txt | 0 + readers/Identive_Identive_CLOUD_4000_F_DTC.txt | 0 + readers/Liteon_HP_SC_Keyboard_Apollo_JP_Liteon.txt | 0 + readers/Liteon_HP_SC_Keyboard_Apollo_KR_Liteon.txt | 0 + readers/Liteon_HP_SC_Keyboard_Apollo_Liteon.txt | 0 + 20 files changed, 0 insertions(+), 0 deletions(-) + +commit e1d9a34b9e366361a7ae9411d387bfd2d8bae622 +Author: Ludovic Rousseau +Date: Thu Oct 22 18:14:20 2015 +0200 + + Add Aladdin R.D. JaCarta + + readers/Aladdin_R.D._JaCarta.txt | 53 ++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 57 insertions(+), 1 deletion(-) + +commit 65886986170191a4b825bbf4701428e2d8442f1d (tag: ccid-1.4.21) +Author: Ludovic Rousseau +Date: Wed Oct 21 20:38:46 2015 +0200 + + Release 1.4.21 + + README | 44 ++++++++++++++++++++++++++++++++++++++++++++ + configure.ac | 2 +- + 2 files changed, 45 insertions(+), 1 deletion(-) + +commit f5eebab921f1eb7e93d8c206c72e30c5c0f09e80 +Author: Ludovic Rousseau +Date: Tue Oct 20 18:08:32 2015 +0200 + + Info.plist: use hex values in the documentation + + The value of ifdDriverOptions is an hex value. So the documentation + should also use hex values. + + Thanks to Thomas Capricelli for the bug report + https://lists.alioth.debian.org/pipermail/pcsclite-muscle/Week-of-Mon-20151019/000471.html + + src/Info.plist.src | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +commit 8090d7a49bde4c238e50c825c6d1b06d979d7702 +Author: Ludovic Rousseau +Date: Tue Oct 20 18:03:28 2015 +0200 + + supported_readers.txt: regenerate + + The "Generic Smart Card Reader Interface" (idVendor: 0x0BDA, idProduct: 0x0165) + moved from supported to unsupported. + + https://lists.alioth.debian.org/pipermail/pcsclite-muscle/Week-of-Mon-20151019/000471.html + + readers/supported_readers.txt | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 9ef9abc950bd4ef138d3f505b632cd188e34deab +Author: Ludovic Rousseau +Date: Sat Oct 17 17:55:28 2015 +0200 + + Add FT ePass2003Auto + + readers/FT_ePass2003Auto.txt | 49 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++++- + 2 files changed, 53 insertions(+), 1 deletion(-) + +commit 1e9aa449e14ae71d38f45f6d65741fab43892f3b +Author: Ludovic Rousseau +Date: Thu Oct 15 20:34:22 2015 +0200 + + Add WatchCNPC USB CCID Key + + readers/WatchCNPC_USB_CCID_Key.txt | 49 ++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 53 insertions(+), 1 deletion(-) + +commit 215e9b71209fef5ee8c03fb8913526e4138a2733 +Author: Ludovic Rousseau +Date: Mon Oct 12 20:48:31 2015 +0200 + + .gitignore: ignore src/Info.plist + + src/Info.plist is generated from src/Info.plist.src + + .gitignore | 1 + + 1 file changed, 1 insertion(+) + +commit bfab1f2368bb7c8eb07272a295701e9358f0eff3 +Author: Ludovic Rousseau +Date: Wed Oct 7 09:57:10 2015 +0200 + + Rename FEITIAN readers + + The iManufacturer name is FEITIAN not Feitian. + + readers/supported_readers.txt | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +commit 862e6c97410b0d414b04e0539b42d3ea6928bc77 +Author: Ludovic Rousseau +Date: Wed Oct 7 09:38:02 2015 +0200 + + Feitian bR301: firmware update + + Update firmware from 1.30 to 2.00 + + Changes: + iManufacturer: Feitian -> FEITIAN + iInterface: R502 -> bR301 + + readers/Feitian_bR301.txt | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit 854442af5cc528cd79028892739fa8ee1827336f +Author: Ludovic Rousseau +Date: Sat Oct 3 05:46:44 2015 +0200 + + Feitian 502-CL: firmware update + + Update firmware from 1.60 to 1.64. + No other changes than the firmware version in the CCID descriptor. + + readers/Feitian_R502-CL.txt | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 8f9ef7bdfaccc5cde4688d165aef5fb809d80ee1 +Author: Ludovic Rousseau +Date: Sat Oct 3 05:42:17 2015 +0200 + + Add Feitian iR301 (ProductID 0x0619) + + readers/Feitian_iR301-U_30PIN.txt | 60 +++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 61 insertions(+) + +commit 755a8c3a89012472959bd19020601c9b7d29d91f +Author: Ludovic Rousseau +Date: Sat Oct 3 05:39:30 2015 +0200 + + Add Feitian iR301 (ProductID 0x061C) + + readers/Feitian_iR301-U_8PIN.txt | 60 ++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 61 insertions(+) + +commit 59921cf1553f12b9aff8f6cfca0a941327767850 +Author: Ludovic Rousseau +Date: Sat Oct 3 05:34:46 2015 +0200 + + Feitian R502: firmware update + + Update firmware from 1.63 to 1.64. No other changes than the firmware + version in the CCID descriptor. + + readers/Feitian_R502.txt | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit da357d34ce8e6a7595d71db5d52473c87f4dbfc5 +Author: Ludovic Rousseau +Date: Sat Oct 3 05:32:42 2015 +0200 + + Add Feitian bR301 BLE + + readers/Feitian_bR301_BLE.txt | 102 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 104 insertions(+), 1 deletion(-) + +commit 5c9c548416a9384f855d629bb08d27053e54c601 +Author: Ludovic Rousseau +Date: Wed Sep 23 11:05:56 2015 +0200 + + Cherry SmartTerminal ST-2xxx: new firmware + + Upgrade firmware from 5.08 to 6.01. + dwMaxCCIDMessageLength changed from 263 to 270 bytes. + + readers/CherrySmartTerminalST2XXX.txt | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +commit ea05cef175ad772221386da0d681853339642f98 +Author: Ludovic Rousseau +Date: Mon Sep 21 20:35:39 2015 +0200 + + Add Rocketek RT-SCR1 + + readers/Rocketek_RT-SCR1.txt | 59 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 63 insertions(+), 1 deletion(-) + +commit a5b0723806afd360485149a1c413eb6139dbd9ba +Author: Ludovic Rousseau +Date: Sat Sep 19 16:33:35 2015 +0200 + + Add Liteon HP SC Keyboard - Apollo JP (Liteon) + + readers/Liteon_HP_SC_Keyboard_Apollo_JP_Liteon.txt | 58 ++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 59 insertions(+) + +commit 0c4b19f294fc8954d163bf8d4675ad1ad2ae23b2 +Author: Ludovic Rousseau +Date: Sat Sep 19 16:30:40 2015 +0200 + + Add Liteon HP SC Keyboard - Apollo KR (Liteon) + + readers/Liteon_HP_SC_Keyboard_Apollo_KR_Liteon.txt | 58 ++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 59 insertions(+) + +commit 66cb880bfe5cbffd61f84395eaf5116f322d24e3 +Author: Ludovic Rousseau +Date: Sat Sep 19 16:27:52 2015 +0200 + + Add Liteon HP SC Keyboard - Apollo (Liteon) + + readers/Liteon_HP_SC_Keyboard_Apollo_Liteon.txt | 58 +++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++ + 2 files changed, 61 insertions(+) + +commit a2c88d43ae2d33466fb0095622854e18369d2d47 +Author: Ludovic Rousseau +Date: Sat Sep 19 16:24:18 2015 +0200 + + Add Chicony HP USB Smartcard CCID Keyboard JP + + .../Chicony_HP_USB_Smartcard_CCID_Keyboard_JP.txt | 58 ++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 59 insertions(+) + +commit 307ff853347809021b9ab3ef2a4867e860e7faa3 +Author: Ludovic Rousseau +Date: Sat Sep 19 16:21:21 2015 +0200 + + Add Chicony HP USB Smartcard CCID Keyboard KR + + .../Chicony_HP_USB_Smartcard_CCID_Keyboard_KR.txt | 58 ++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 59 insertions(+) + +commit 7c1f7cc5b27a29306c1cd94b323d0e049b980255 +Author: Ludovic Rousseau +Date: Sat Sep 19 16:17:34 2015 +0200 + + Add Identiv Identiv uTrust 4701 F Dual Interface Reader + + ...Identiv_uTrust_4701_F_Dual_Interface_Reader.txt | 111 +++++++++++++++++++++ + readers/supported_readers.txt | 4 + + 2 files changed, 115 insertions(+) + +commit 7cf39b7a2c9d2e29d87b77f6017fee371b182cd0 +Author: Ludovic Rousseau +Date: Sat Sep 19 16:12:15 2015 +0200 + + Add Identive Identive CLOUD 4000 F DTC + + readers/Identive_Identive_CLOUD_4000_F_DTC.txt | 111 +++++++++++++++++++++++++ + readers/supported_readers.txt | 4 + + 2 files changed, 115 insertions(+) + +commit 28d2e6067f801f2c934630dd91f3a977af612bc0 +Author: Ludovic Rousseau +Date: Sat Sep 19 16:06:23 2015 +0200 + + Add Identiv uTrust 3701 F CL Reader + + readers/Identiv_uTrust_3701_F_CL_Reader.txt | 55 +++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 56 insertions(+) + +commit 5e149e0601ea7715cae37b1706375d11377dd007 +Author: Ludovic Rousseau +Date: Sat Sep 19 16:00:58 2015 +0200 + + Add Identiv uTrust 3700 F CL Reader + + readers/Identiv_uTrust_3700_F_CL_Reader.txt | 55 +++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 56 insertions(+) + +commit 12c073e316fb4b4d694334988e7a571b52d653b9 +Author: Ludovic Rousseau +Date: Sat Sep 19 15:55:23 2015 +0200 + + Add Identiv CLOUD 2980 F Smart Card Reader + + readers/Identiv_CLOUD_2980_F_Smart_Card_Reader.txt | 56 ++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 57 insertions(+) + +commit f0e8382da592e9e29b14138d63bfc8a631cad866 +Author: Ludovic Rousseau +Date: Sat Sep 19 15:49:38 2015 +0200 + + Add Identiv SCR35xx USB Smart Card Reader + + readers/Identiv_SCR35xx_USB_Smart_Card_Reader.txt | 55 +++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 56 insertions(+) + +commit a93ac9367e3a9c990f4fb3bc113a442bdfd42b81 +Author: Ludovic Rousseau +Date: Sat Sep 19 14:59:03 2015 +0200 + + Add Identiv uTrust 2910 R Taglio SC Reader + + readers/Identiv_uTrust_2910_R_Taglio_SC_Reader.txt | 55 ++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 56 insertions(+) + +commit 2188e7708476078d7da476af82dea23be04b069e +Author: Ludovic Rousseau +Date: Sat Sep 19 14:54:26 2015 +0200 + + Add Identiv uTrust 3522 embd SE RFID Token + + readers/Identiv_uTrust_3522_embd_SE_RFID_Token.txt | 55 ++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 56 insertions(+) + +commit 693671c43b2d9da6b41bdc16ef8eefbd079b43eb +Author: Ludovic Rousseau +Date: Sat Sep 19 14:50:23 2015 +0200 + + Add Identiv @MAXX ID-1 Smart Card Reader + + readers/Identiv_@MAXX_ID-1_Smart_Card_Reader.txt | 55 ++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 56 insertions(+) + +commit 24804384c6f0696fefaef942d36d9e9a3534ceef +Author: Ludovic Rousseau +Date: Sat Sep 19 14:43:11 2015 +0200 + + Add Identiv @MAXX Light2 token + + readers/Identiv_@MAXX_Light2_token.txt | 55 ++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 56 insertions(+) + +commit d17dcff104d7980f216a764214544b1c8921010d +Author: Ludovic Rousseau +Date: Sat Sep 19 14:39:18 2015 +0200 + + Add Identiv uTrust 3512 SAM slot Token + + readers/Identiv_uTrust_3512_SAM_slot_Token.txt | 55 ++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 56 insertions(+) + +commit 214cfb01a721c2a1ca21f7e5659fb7603dee1405 +Author: Ludovic Rousseau +Date: Sat Sep 19 14:35:56 2015 +0200 + + Add Identiv SCR3500 B Contact Reader + + readers/Identiv_SCR3500_B_Contact_Reader.txt | 55 ++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 56 insertions(+) + +commit a89995364dbe81dc2741a4662d2e4c9abf9cfca8 +Author: Ludovic Rousseau +Date: Sat Sep 19 14:32:20 2015 +0200 + + Add Identiv SCR3500 A Contact Reader + + readers/Identiv_SCR3500_A_Contact_Reader.txt | 55 ++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 56 insertions(+) + +commit 3bb33cd520bb3cd9b31f3813e27df2875f7dab85 +Author: Ludovic Rousseau +Date: Sat Sep 19 14:24:13 2015 +0200 + + Add Identiv uTrust 2910 R Smart Card Reader + + .../Identiv_uTrust_2910_R_Smart_Card_Reader.txt | 55 ++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 56 insertions(+) + +commit 7e57f1a32e7cba9bff43983365e383275613b46e +Author: Ludovic Rousseau +Date: Sat Sep 19 14:18:32 2015 +0200 + + Add Identiv uTrust 2900 R Smart Card Reader + + .../Identiv_uTrust_2900_R_Smart_Card_Reader.txt | 55 ++++++++++++++++++++++ + readers/supported_readers.txt | 5 +- + 2 files changed, 59 insertions(+), 1 deletion(-) + +commit 4cb29aac717b00bda5e97c9f26eb82279c1f9514 +Author: Ludovic Rousseau +Date: Thu Sep 17 14:16:21 2015 +0200 + + OpenUSBByName(): free the device list in case of error + + If no reader is found the code should release the device list in any + case. + + Either the code will try again to find the reader (in case of Mac OS X) + or return an error code. + + The list of USB devices shall always be released before returning from the + function (in error or normal cases). + + src/ccid_usb.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 2517cbe1672b4af57420131634eff376ede1f58b +Author: Ludovic Rousseau +Date: Wed Sep 16 18:23:36 2015 +0200 + + The Feitian R502 DUAL reader has 3 interfaces + + If USE_COMPOSITE_AS_MULTISLOT is defined the Feitian R502 reader is + reported as 3 slots: + iInterface: R502 Contactless Reader + iInterface: R502 Contact Reader + iInterface: R502 SAM1 Reader + + src/ifdhandler.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 0fe9bda3e9af88d2cd8e2e08edbcb7aad9f4792a +Author: Feitian Technologies +Date: Wed Jul 8 22:46:01 2015 +0200 + + Add Feitain R502 dual interface reader into CCID driver + + Feitian R502 is a composite multislot reader. + Mac OS X does not yet support composite readers. + + src/ccid.h | 1 + + src/ccid_usb.c | 5 +++-- + src/ifdhandler.c | 2 +- + 3 files changed, 5 insertions(+), 3 deletions(-) + +commit 94142da9a4b11bf9cd2b429e1a15139936c751af +Author: Ludovic Rousseau +Date: Wed Sep 16 18:10:45 2015 +0200 + + OpenUSBByName(): fix the order of interfaces in log + + The log message "Found interface %d but expecting %d" has the parameters + inversed. + The order is not corrected. + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e31d36c6003fb3e572895c068c48fd3d22fc3f32 +Author: Ludovic Rousseau +Date: Wed Sep 16 10:43:04 2015 +0200 + + Feitian_R502.txt: new firmware + + Change bcdDevice from 1.60 to 1.63 + + readers/Feitian_R502.txt | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 690e90f476c3815c31874e523ba017f7f1d372cd +Author: Ludovic Rousseau +Date: Wed Sep 16 10:31:55 2015 +0200 + + OpenUSBByName(): add more time on Mac OS X + + The change in 0a295238204b8aef683fa5e69187b1060210f487 (svn revision + 6890) was not enough. Some readers (like SafeNet eToken 7300) need + more than 100 ms to be available at the libusb level. + + The code now: + - waits for 100 ms only if the reader is not found. No more performance + impact in "normal" situations + - loops up to 10 times before returning an error + + The maximum waiting time is now 10 x 100 ms = 1 second. It should be + enough even with slow readers and slow computers. + + src/ccid_usb.c | 18 ++++++++++++++++-- + 1 file changed, 16 insertions(+), 2 deletions(-) + +commit 5d91f63afdd3c8ba00bc645085ea8a2e7fcf6ee0 +Author: Ludovic Rousseau +Date: Fri Sep 11 11:12:16 2015 +0200 + + Add VASCO DIGIPASS 875 + + readers/Vasco_DIGIPASS_875.txt | 108 +++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 110 insertions(+), 1 deletion(-) + +commit 64eec8e84b1cd4dd8653039d967d99b3d5fd945f +Author: Ludovic Rousseau +Date: Mon Aug 31 10:22:23 2015 +0200 + + Add ACS ACR1252 Dual Reader + + readers/ACS_ACR1252_Dual_Reader.txt | 100 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 6 ++- + 2 files changed, 105 insertions(+), 1 deletion(-) + +commit 94445035640e6fa788d961ec00d15ad3e55c9508 +Author: Ludovic Rousseau +Date: Sun Aug 30 16:06:17 2015 +0200 + + Regenerate supported_readers.txt + + Use Nitrokey manufacturer name instead of the old versions + + readers/supported_readers.txt | 14 +++----------- + 1 file changed, 3 insertions(+), 11 deletions(-) + +commit 7d2b26963a3701b4a6258dc561e85af4890c2f61 +Author: Ludovic Rousseau +Date: Sun Aug 30 16:05:07 2015 +0200 + + Remove Free Software Initiative of Japan Gnuk Token + + Free_Software_Initiative_of_Japan_Gnuk_Token.txt is an old version of + Nitrokey_Start.txt + The same VendorID/ProdictID is used. + + ...ree_Software_Initiative_of_Japan_Gnuk_Token.txt | 50 ---------------------- + 1 file changed, 50 deletions(-) + +commit 03d1833fcc9a67d1215e952802e2c0145f3acef6 +Author: Ludovic Rousseau +Date: Sun Aug 30 15:50:59 2015 +0200 + + Remove Crypto Stick Crypto Stick v1.4 + + Crypto_Stick_Crypto_Stick_v1.4.txt is an old version of Nitrokey_Pro.txt + The same VendorID/ProdictID is used. + + " Crypto Stick 1.4 was the name of the old beta version where only <50 + devices were produced. The final product has been renamed to Nitrokey + Pro which is the one being sold in substantial quantities. Hence, I + suggest to drop the "Crypto Stick 1.4" string. " + + readers/Crypto_Stick_Crypto_Stick_v1.4.txt | 51 ------------------------------ + 1 file changed, 51 deletions(-) + +commit b5d3da3aa0faaca911522473a718bab6c02bad14 +Author: Ludovic Rousseau +Date: Sat Aug 29 11:03:55 2015 +0200 + + Add Nitrokey Nitrokey Start + + readers/Nitrokey_Start.txt | 50 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 53 insertions(+) + +commit 87d1cf823355f1798ac1a21e0154a578d889b550 +Author: Ludovic Rousseau +Date: Sat Aug 29 11:01:47 2015 +0200 + + Add Nitrokey Nitrokey Pro + + readers/Nitrokey_Pro.txt | 51 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 54 insertions(+) + +commit b3dbc774e27521be80bb7089419bda0e83f58d5d +Author: Ludovic Rousseau +Date: Sat Aug 29 10:57:35 2015 +0200 + + Add Nitrokey Nitrokey HSM + + readers/Nitrokey_HSM.txt | 51 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 9 ++++++-- + 2 files changed, 58 insertions(+), 2 deletions(-) + +commit 7a46f702e3c4752304d94efc61a84618a0a566c9 +Author: Ludovic Rousseau +Date: Thu Aug 27 09:51:13 2015 +0200 + + Use libusb_error_name() to display the error name + + libusb provides libusb_error_name() to display a human readable + version of the error code returned by libusb. + + LIBUSB_ERROR_BUSY is easier to understand than -6 + + See also changes in 9c3fd753186aa18a56d2bfeee6acac8c6b399de6 + + src/ccid_usb.c | 19 ++++++++++--------- + 1 file changed, 10 insertions(+), 9 deletions(-) + +commit 44e385a91534795864c64d54c481770bc39565fd +Author: Ludovic Rousseau +Date: Fri Aug 7 20:49:15 2015 +0200 + + Update access rights of some .txt files + + Remove the executable bit of some reader .txt files. + + readers/Cherry_KC_1000_SC.txt | 0 + readers/Cherry_KC_1000_SC_DI.txt | 0 + readers/Cherry_KC_1000_SC_DI_Z.txt | 0 + readers/Cherry_KC_1000_SC_Z.txt | 0 + readers/FujitsuTechnologySolutions_Keyboard_KB100_SCR.txt | 0 + readers/FujitsuTechnologySolutions_Keyboard_KB100_SCR_eSIG.txt | 0 + readers/GnD_StarSign_CUT.txt | 0 + readers/Rutoken_PINPad_ex.txt | 0 + readers/Rutoken_PINPad_in.txt | 0 + 9 files changed, 0 insertions(+), 0 deletions(-) + +commit 67b190c1c8144c60110a13fc3c07de9e8b992654 (tag: ccid-1.4.20) +Author: Ludovic Rousseau +Date: Wed Aug 5 13:21:33 2015 +0200 + + Release 1.4.20 + + README | 19 +++++++++++++++++++ + configure.ac | 2 +- + 2 files changed, 20 insertions(+), 1 deletion(-) + +commit 96d9c5a84cee08ff150e7072d68e6d3cb846328a +Author: Ludovic Rousseau +Date: Wed Aug 5 11:40:33 2015 +0200 + + ylwrap: upgrade to automake 1.15 + + Only the copyright date has changed. + + ylwrap | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit be86cb804f394f0c52815bc68036d39eaf851967 +Author: Ludovic Rousseau +Date: Tue Jul 28 20:27:26 2015 +0200 + + Add BIFIT iToken + + readers/BIFIT_iToken.txt | 49 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 51 insertions(+), 1 deletion(-) + +commit fc2789652b77d9fa8dc1154c6b5ff0f3e1fb8456 +Author: Ludovic Rousseau +Date: Mon Jul 27 23:13:24 2015 +0200 + + MacOSX/configure: use /usr/local/libexec/... on El Capitan + + For Mac OS X El Capitan 10.11 it is no more possible to add files in + /usr/libexec/SmartCardServices/drivers/. + + Third party smart card drivers must use + /usr/local/libexec/SmartCardServices/drivers/ instead. + + MacOSX/configure | 14 +++++++++++++- + 1 file changed, 13 insertions(+), 1 deletion(-) + +commit 4c905913c5b6c745737be9b5cfcea225391fe550 +Author: Ludovic Rousseau +Date: Mon Jul 6 18:48:13 2015 +0200 + + Add Yubico Yubikey 4 OTP+U2F+CCID + + readers/Yubico_Yubikey_4_OTP+U2F+CCID.txt | 56 +++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 57 insertions(+) + +commit a03c748989910d95d048da2e4f42c369b2fb0979 +Author: Ludovic Rousseau +Date: Mon Jul 6 18:46:17 2015 +0200 + + Add Yubico Yubikey 4 U2F+CCID + + readers/Yubico_Yubikey_4_U2F+CCID.txt | 56 +++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 57 insertions(+) + +commit cb81d80e3a8651c1ccf101b2f92659a43b69bfe6 +Author: Ludovic Rousseau +Date: Mon Jul 6 18:42:53 2015 +0200 + + Add Yubico Yubikey 4 OTP+CCID + + readers/Yubico_Yubikey_4_OTP+CCID.txt | 56 +++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 57 insertions(+) + +commit 5f7e804e6fa81bb073160c609d13c0fddd716f71 +Author: Ludovic Rousseau +Date: Mon Jul 6 18:35:26 2015 +0200 + + Add Yubico Yubikey 4 CCID + + readers/Yubico_Yubikey_4_CCID.txt | 56 +++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 58 insertions(+), 1 deletion(-) + +commit 205e4657b87aa9367af755f28461436ab43696d5 +Author: Ludovic Rousseau +Date: Sun Jun 21 10:31:42 2015 +0200 + + The O2 Micro Oz776 reader only supports 9600 bps + + The problem for the Oz776 with ProductID 0x7762 is the same as for the + Oz776 with productID 0x7772. + + See 64308e93029bf377d506edaf2748da945a21cd5c for details. + + Thanks to Matt and Tim Banchi for the bug report. + https://bugs.launchpad.net/ubuntu/+source/ccid/+bug/1311273 + + src/ccid.c | 1 + + 1 file changed, 1 insertion(+) + +commit a1ccac6fb4f0df06f28b3960a7e91bc3c42f4cd1 +Author: Ludovic Rousseau +Date: Fri Jun 19 18:08:37 2015 +0200 + + Add Access IS NFC Smart Module + + readers/Access_IS_NFC_Smart_Module.txt | 53 ++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 55 insertions(+), 1 deletion(-) + +commit fcd1230befbc90dafca06618336a2c44d6239127 +Author: Ludovic Rousseau +Date: Thu Jun 11 19:42:33 2015 +0200 + + Add NXP Pegoda 2 N + + readers/NXP_Pegoda_2_N.txt | 60 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 62 insertions(+), 1 deletion(-) + +commit b5795d4eaa0302ca7a71c8135d96ee6154ac2667 +Author: Ludovic Rousseau +Date: Wed Jun 10 17:16:40 2015 +0200 + + Add ACS ACR1251 Dual Reader + + readers/ACS_ACR1251_Dual_Reader.txt | 103 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 6 ++- + 2 files changed, 108 insertions(+), 1 deletion(-) + +commit b105c389fbb43f897c1eac0fb2e241dcd91d2ad4 +Author: Ludovic Rousseau +Date: Wed Jun 3 15:52:05 2015 +0200 + + Depends on libusb version 1.0.9 instead of 1.0.8 + + The CCID driver uses libusb_error_name() since release 1.4.19 (the + previous one). + libusb_error_name() has been introduced in version 1.0.9 of libusb. We + now need to depend on this version (or a later one). + + Thanks to Godfrey Chung for the bug report. + https://github.com/LudovicRousseau/CCID/commit/9c3fd753186aa18a56d2bfeee6acac8c6b399de6#commitcomment-11490300 + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1be0bc1c47ecf5ed53cb5bdf2833e42c9115f8f2 +Author: Ludovic Rousseau +Date: Thu May 28 15:18:38 2015 +0200 + + Add SafeNet eToken 5100 + + readers/SafeNet_Token_JC.txt | 53 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 57 insertions(+), 1 deletion(-) + +commit 827edb3f5934d573d3312eb36db8984348cca3f3 +Author: Ludovic Rousseau +Date: Thu May 28 10:50:43 2015 +0200 + + Add SafeNet eToken 7300 + + readers/SafeNet_eToken_7300.txt | 54 +++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 57 insertions(+) + +commit 950ad4f9cf6edcb9c596c0ea71fa1e5b1a64bc83 +Author: Ludovic Rousseau +Date: Thu May 28 10:37:26 2015 +0200 + + The BLUTRONICS BLUDRIVE II CCID moved to supported list + + This reflect the changes in the *.ini files + + https://anonscm.debian.org/cgit/pcsclite/website.git/commit/?id=ff798bfe2e10c970442184ecf56d0516d9c1ad99 + + readers/supported_readers.txt | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit b22807b7b205633f544dbf24002456bbd6845d82 +Author: Ludovic Rousseau +Date: Wed May 20 09:26:13 2015 +0200 + + Add BLUTRONICS BLUDRIVE II CCID (idProduct: 0x1079) + + readers/BludriveIIv2.txt | 61 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 63 insertions(+), 1 deletion(-) + +commit b92543712ef2bd9e294a590ca31a5105deba754b +Author: Ludovic Rousseau +Date: Mon May 18 10:30:11 2015 +0200 + + Ignore some files + + .gitignore | 3 +++ + 1 file changed, 3 insertions(+) + +commit 355a894406769842171a796127012b82e5bc233c +Author: Ludovic Rousseau +Date: Thu May 14 21:06:03 2015 +0200 + + Add Generic MultiCard Device + + readers/Generic_MultiCard_Device.txt | 56 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 58 insertions(+), 1 deletion(-) + +commit a2d7335d8e2ccd2b29782edc88e9d82bd67d1891 (tag: ccid-1.4.19) +Author: Ludovic Rousseau +Date: Wed May 13 09:35:00 2015 +0200 + + Release 1.4.19 + + README | 35 +++++++++++++++++++++++++++++++++++ + configure.ac | 2 +- + 2 files changed, 36 insertions(+), 1 deletion(-) + +commit 2b5c83b57a7e16e6412da7a410ea68a5d7a5e8cc +Author: Ludovic Rousseau +Date: Sun May 10 18:42:11 2015 +0200 + + Minor reformat + + README | 2 ++ + 1 file changed, 2 insertions(+) + +commit 9fa3a2243ea597cde4ee4efd7dfdc6c9a6643a27 +Author: Ludovic Rousseau +Date: Sun May 10 18:40:25 2015 +0200 + + Generate ChangeLog file using git instead of svn + + The repository moved from SVN to GIT. + + Makefile.am | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +commit 28a44ae58b5adc1508b78de58686aa64cb4e1f17 +Author: Ludovic Rousseau +Date: Sun May 10 17:22:04 2015 +0200 + + Use git submodules for PCSC and contrib + + PCSC is a relative submodule to ../PCSC.git + + contrib_libPCSCv2part10 is a relative submodule to ../contrib.git + I had to rename the directory to avoid a name clash with an already + existing contrib/ directory. + + Thanks to Martin Paljak for the idea + https://github.com/LudovicRousseau/CCID/issues/3 + + .gitmodules | 6 ++++++ + MacOSX/debuglog.h | 2 +- + MacOSX/ifdhandler.h | 2 +- + MacOSX/reader.h | 2 +- + PCSC | 1 + + contrib_libPCSCv2part10 | 1 + + examples/PCSCv2part10.c | 2 +- + examples/PCSCv2part10.h | 2 +- + m4/as-ac-expand.m4 | 2 +- + m4/ax_pthread.m4 | 2 +- + src/misc.h | 2 +- + src/parser.h | 2 +- + src/simclist.c | 2 +- + src/simclist.h | 2 +- + src/strlcpy.c | 2 +- + src/strlcpycat.h | 2 +- + src/tokenparser.l | 2 +- + 17 files changed, 22 insertions(+), 14 deletions(-) + +commit a013204d28ad2f91c954f06c0375fbf71955fb5d +Author: Ludovic Rousseau +Date: Sat May 9 10:59:51 2015 +0200 + + Add FujitsuTechnologySolutions GmbH Keyboard KB100 SCR eSIG + + ...TechnologySolutions_Keyboard_KB100_SCR_eSIG.txt | 161 +++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 162 insertions(+) + +commit 6ad257a112e189fa7ab86605b7e152b774cf8707 +Author: Ludovic Rousseau +Date: Sat May 9 10:57:57 2015 +0200 + + Add FujitsuTechnologySolutions GmbH Keyboard KB100 SCR + + ...jitsuTechnologySolutions_Keyboard_KB100_SCR.txt | 161 +++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 162 insertions(+) + +commit e546cf025d0768aa3b586d28b3affb2954b551af +Author: Ludovic Rousseau +Date: Sat May 9 10:54:17 2015 +0200 + + Add Cherry KC 1000 SC/DI Z + + readers/Cherry_KC_1000_SC_DI_Z.txt | 161 +++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 162 insertions(+) + +commit 0057db7a7b52b66d3f4c1a809fd953a3182c6b48 +Author: Ludovic Rousseau +Date: Sat May 9 10:52:26 2015 +0200 + + Add Cherry KC 1000 SC Z + + readers/Cherry_KC_1000_SC_Z.txt | 161 ++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 162 insertions(+) + +commit ac86a6a558f2bcabb95a9086d79fb140795ee761 +Author: Ludovic Rousseau +Date: Sat May 9 10:50:29 2015 +0200 + + Add Cherry KC 1000 SC/DI + + readers/Cherry_KC_1000_SC_DI.txt | 161 +++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 162 insertions(+) + +commit 392cfa8da07fa5aa75a18ab79990e6ab7e12e17b +Author: Ludovic Rousseau +Date: Sat May 9 10:43:40 2015 +0200 + + Add Cherry KC 1000 SC + + readers/Cherry_KC_1000_SC.txt | 161 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 163 insertions(+), 1 deletion(-) + +commit f5a7928c47d4a4836e7322303aac9cbd76aae428 +Author: Ludovic Rousseau +Date: Fri May 8 13:28:06 2015 +0200 + + Add files to ignore + + and sort the list. + + .gitignore | 28 ++++++++++++++++++++-------- + 1 file changed, 20 insertions(+), 8 deletions(-) + +commit b5732d967791118def0aad6e576f9083183bf0c7 +Author: Ludovic Rousseau +Date: Tue May 5 21:22:36 2015 +0200 + + Add REINER SCT tanJack Bluetooth + + readers/ReinerSCT_tanJack_BT.txt | 53 ++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 54 insertions(+) + +commit e651ceaf16e2e945a637ec59df31dd8643a461f1 +Author: Ludovic Rousseau +Date: Tue May 5 21:01:34 2015 +0200 + + Add Feitian eJAVA Token + + readers/Feitian_eJava_Token.txt | 49 +++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 50 insertions(+) + +commit 4b0e717d5ce73f3b48ead657f4136de8dddaf793 +Author: Ludovic Rousseau +Date: Tue May 5 20:53:18 2015 +0200 + + Add Feitian 502-CL + + readers/Feitian_R502-CL.txt | 55 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 56 insertions(+) + +commit 06d56926d9e3dfa2f24bcc51a238e95fb58543ba +Author: Ludovic Rousseau +Date: Tue May 5 20:39:56 2015 +0200 + + Add Broadcom Corp 5880 + + Again a new Broadcom 5880 reader. This one has idProduct: 0x5804 + + readers/Broadcom_5880v5.txt | 616 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 8 +- + 2 files changed, 622 insertions(+), 2 deletions(-) + +commit f18a27cda10b3407b53bd65c3338f277c4dc4711 +Author: Martin Paljak +Date: Thu Apr 30 09:31:18 2015 +0300 + + Suppress an error at bootstrap + + "type glibtoolize" will display an error message if glibtoolize is not + found (on non-Mac OS X systems): + ./bootstrap: line 12: type: glibtoolize: not found + + "which glibtoolize" will be quiet. So we use it instead. + + bootstrap | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c9d8a914754ab52ecee7ec7732f4fd0a6c8bf299 +Author: Ludovic Rousseau +Date: Sun Apr 26 14:58:49 2015 +0200 + + Update symbolic links to git repositories + + MacOSX/debuglog.h | 2 +- + MacOSX/ifdhandler.h | 2 +- + MacOSX/reader.h | 2 +- + c.sh | 2 +- + examples/PCSCv2part10.c | 2 +- + examples/PCSCv2part10.h | 2 +- + m4/as-ac-expand.m4 | 2 +- + m4/ax_pthread.m4 | 2 +- + src/misc.h | 2 +- + src/parser.h | 2 +- + src/simclist.c | 2 +- + src/simclist.h | 2 +- + src/strlcpy.c | 2 +- + src/strlcpycat.h | 2 +- + src/tokenparser.l | 2 +- + 15 files changed, 15 insertions(+), 15 deletions(-) + +commit e46cbdf74af6d2409469ea53777e79d67697c0b5 +Author: Ludovic Rousseau +Date: Tue Mar 24 12:03:53 2015 +0000 + + Re-enable syslog logging on Yosemite + + The patch has been applied in revision 7092 and reverted in revision + 7104. + + This new version is a bit different. + - the priority parameter is used and reflect syslog priorities + - the ATR and APDU are not logged since it is not needed + + Use: sudo syslog -c "com.apple.ifdreader PID" -d + to change the logging level. + + See also "Change syslog logging level on Yosemite" + http://ludovicrousseau.blogspot.com/2015/03/change-syslog-logging-level-on-yosemite.html + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7105 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 7 +++++++ + configure.ac | 11 +++++++++++ + src/debug.c | 31 +++++++++++++++++++++++++++++++ + 3 files changed, 49 insertions(+) + +commit 542fc5c2aaf8339e2b48211e70e108ac3423a3a6 +Author: Ludovic Rousseau +Date: Tue Mar 24 09:29:22 2015 +0000 + + Yosemite already provides a APDU + ATR logging + + The logging is enabled using: + $ sudo defaults write /Library/Preferences/com.apple.security.smartcard + Logging -bool yes + + See SmartCardServices(7) or + http://ludovicrousseau.blogspot.fr/2015/02/debug-smart-card-application-on-yosemite.html + + This patch reverts the changes from revision 7092. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7104 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 7 ------- + configure.ac | 10 ---------- + src/Info.plist.src | 4 ---- + src/ccid_ifdhandler.h | 1 - + src/debug.c | 28 ---------------------------- + src/debug.h | 2 -- + src/ifdhandler.c | 9 --------- + 7 files changed, 61 deletions(-) + +commit 9d47332cc4e54c8657b701733c2f440869dbd3e4 +Author: Ludovic Rousseau +Date: Sun Mar 22 19:05:51 2015 +0000 + + Add Cherry TC 1300 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7102 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Cherry_Smart_Card_Reader_USB_0x0092.txt | 168 ++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 170 insertions(+), 1 deletion(-) + +commit 15436916ef24fcc4d2a274b92fe4f7db667f764c +Author: Ludovic Rousseau +Date: Wed Mar 18 19:42:51 2015 +0000 + + Add Watchdata USB Key + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7101 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Watchdata_USB_Key.txt | 49 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++++- + 2 files changed, 53 insertions(+), 1 deletion(-) + +commit 8a752d1e67787455428ddf42c8e0f8bb660755e8 +Author: Ludovic Rousseau +Date: Thu Mar 5 15:42:59 2015 +0000 + + Add Chicony USB Smart Card Keyboard + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7098 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Chicony_USB_Smart_Card_Keyboard.txt | 58 +++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++- + 2 files changed, 62 insertions(+), 1 deletion(-) + +commit 1bb4d9bfe8ce3ec53ad1c6616cac3e5530fea3b3 +Author: Ludovic Rousseau +Date: Fri Feb 20 17:35:53 2015 +0000 + + Regenerate + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7095 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CardMan3021.txt | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit 8d5343569faba3430a6ca8dfec02e25a58b0bc92 +Author: Ludovic Rousseau +Date: Fri Feb 20 17:33:47 2015 +0000 + + Fix typo + + bClassEnveloppe: -> bClassEnvelope: only one 'p' + + Same change as in revision r6641 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7094 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/AK910_ckey_0001.txt | 2 +- + readers/AK910_ckey_0011.txt | 2 +- + readers/AK910_idone_0101.txt | 2 +- + readers/Gemalto_IDBridge_K30.txt | 2 +- + readers/Microchip_SEC1110.txt | 2 +- + readers/Microchip_SEC1210.txt | 4 ++-- + 6 files changed, 7 insertions(+), 7 deletions(-) + +commit f3137c79061494f6a7ad0b4656d3107eeae96e84 +Author: Ludovic Rousseau +Date: Fri Feb 13 14:57:31 2015 +0000 + + Add syslog(3) debug for Mac OS X Yosemite + + New features: + --enable-syslog at build time + DRIVER_OPTION_LOG in Info.plist at run time + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7092 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 7 +++++++ + configure.ac | 12 ++++++++++++ + src/Info.plist.src | 4 ++++ + src/ccid_ifdhandler.h | 1 + + src/debug.c | 28 ++++++++++++++++++++++++++++ + src/debug.h | 2 ++ + src/ifdhandler.c | 9 +++++++++ + 7 files changed, 63 insertions(+) + +commit 9336b6a195539ecc78deabcbe2ea6cea8c15b611 +Author: Ludovic Rousseau +Date: Mon Feb 9 10:23:16 2015 +0000 + + Get bEntryValidationCondition value from FEATURE_IFD_PIN_PROPERTIES + + Some drivers may implement FEATURE_IFD_PIN_PROPERTIES but not + FEATURE_GET_TLV_PROPERTIES. + You should be smart enough to get the bEntryValidationCondition value + from both possible sources. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7091 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit ea3ab287d2bccd1586eec8917592097e38385b8a +Author: Ludovic Rousseau +Date: Fri Feb 6 13:12:48 2015 +0000 + + Let SVN expand $Id$ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7090 0ce88b0d-b2fd-0310-8134-9614164e65ea + + bootstrap | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit df7045d804491720a2fc2e0691cec6dd98b29e88 +Author: Ludovic Rousseau +Date: Fri Feb 6 13:11:02 2015 +0000 + + Use glibtoolize. if found + + brew(1) on Mac OS X provides glibtoolize instead of libtoolize. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7089 0ce88b0d-b2fd-0310-8134-9614164e65ea + + bootstrap | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +commit 2e38fb7350fe87298458189a8be5f492787f2b1f +Author: Ludovic Rousseau +Date: Tue Jan 20 19:34:21 2015 +0000 + + Add PIVKey T800 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7085 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/PIVKey_T800.txt | 49 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++++- + 2 files changed, 53 insertions(+), 1 deletion(-) + +commit c51c13c5a5e75b0c860c35ee9f41c9b0558cf425 +Author: Ludovic Rousseau +Date: Sat Jan 10 11:48:59 2015 +0000 + + IFDHSleep(): timout parameter is in ms not µs + + We convert timeout in ms in the correct value for usleep(3) that takes + a parameter in µs. + + Thanks to Alan Kozlay for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7081 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 432b94e91e278fe151b2abffcbd2735764ac8694 +Author: Ludovic Rousseau +Date: Fri Jan 9 17:21:03 2015 +0000 + + Firmware 5.20 (previous one was 5.00) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7080 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CardMan5321.txt | 14 ++++++-------- + 1 file changed, 6 insertions(+), 8 deletions(-) + +commit 0f4a47d94c98cfa12d504e2db91a478b779a3ffa +Author: Ludovic Rousseau +Date: Wed Dec 17 19:57:58 2014 +0000 + + Multi_InterruptRead(): failed to release a lock in some cases + + "I found that the mutex is not locked in Multi_InterruptRead() if the + code go to again label." + + Thanks to Godfrey Chung for the patch + http://lists.alioth.debian.org/pipermail/pcsclite-muscle/Week-of-Mon-20141215/000293.html + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7054 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 39704170eb9d7b913fe975fc4705bb871103836b +Author: Ludovic Rousseau +Date: Sun Dec 14 14:41:26 2014 +0000 + + Fix a memory leak in an error path + + In Multi_PollingProc, if libusb_submit_transfer() fails then the + transfer libusb structure must be freed. + + Thanks to Godfrey Chung for the patch + http://lists.alioth.debian.org/pipermail/pcsclite-muscle/Week-of-Mon-20141208/000284.html + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7052 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 1 + + 1 file changed, 1 insertion(+) + +commit 208783dbb07176526ae2abbbe7e0ce1b23542c85 +Author: Ludovic Rousseau +Date: Sat Nov 29 13:30:39 2014 +0000 + + Add ACS ACR39U ICC Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7046 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACS_ACR39U_ICC_Reader.txt | 54 +++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 56 insertions(+), 1 deletion(-) + +commit 319dd5c6f777dc2e7f35de4280f77fe428756217 +Author: Ludovic Rousseau +Date: Wed Nov 26 08:03:57 2014 +0000 + + Fix header documentation + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7045 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/checksum.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 02714205d7e24ca5ec777352d00afe09c364030c +Author: Ludovic Rousseau +Date: Wed Nov 19 14:00:49 2014 +0000 + + add CASTLES EZCCID Smart Card Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7044 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CASTLES_EZCCID_Smart_Card_Reader.txt | 65 ++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++- + 2 files changed, 69 insertions(+), 1 deletion(-) + +commit c87812c34374703bd5395be76b6a0b58a9847316 +Author: Ludovic Rousseau +Date: Tue Nov 18 08:16:54 2014 +0000 + + Fix typos in comments + + Thanks to David Woodhouse for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7043 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 372ce33af40e5f3174a689a09bef50289d36fab4 +Author: Ludovic Rousseau +Date: Sun Nov 16 19:04:02 2014 +0000 + + Add Hewlett-Packard HP lt4112 Gobi 4G Module + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7042 0ce88b0d-b2fd-0310-8134-9614164e65ea + + .../Hewlett-Packard_HP_lt4112_Gobi_4G_Module.txt | 51 ++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++- + 2 files changed, 55 insertions(+), 1 deletion(-) + +commit 400dcedf572f60be874b7193da6edd3659e9b29b +Author: Ludovic Rousseau +Date: Sun Nov 9 20:35:19 2014 +0000 + + Use CmdEscapeCheck() in set_gemalto_firmware_features() + + Not all the Gemplus or Gemalto readers do suppoort the proprietary + GET_FIRMWARE_FEATURES command. + + In case the reader is too old to support the command it is annoying and + worrying to get an error message in the log. + + Closes Alioth bug [#314871] "commands.c:979:CmdEscape error on byte 10" + message + https://alioth.debian.org/tracker/index.php?func=detail&aid=314871&group_id=30105&atid=410086 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7040 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit a2dfeab889947029ce3b5957913b0997bb9e676c +Author: Ludovic Rousseau +Date: Sun Nov 9 20:32:32 2014 +0000 + + Add CmdEscapeCheck() + + CmdEscapeCheck() is CmdEscape() with an extra "mayfail" parameter. + + If mayfail is TRUE then the error is logged as PCSC_LOG_INFO instead of + PCSC_LOG_ERROR. + + This is usefull in cases we know the command may fail. So the error is + expected and not really an error. + + See Alioth bug [#314871] "commands.c:979:CmdEscape error on byte 10" + message + https://alioth.debian.org/tracker/index.php?func=detail&aid=314871&group_id=3010+++5&atid=410086 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7039 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 22 ++++++++++++++++++++-- + src/commands.h | 5 +++++ + 2 files changed, 25 insertions(+), 2 deletions(-) + +commit be235604aac83b4e5e5f4d3dfa0087e66c95c986 +Author: Ludovic Rousseau +Date: Sun Nov 9 20:27:05 2014 +0000 + + Add log_level parameter in ccid_error() + + Some CCID errors are not always unexpected. This patch allows to change + the log level from PCSC_LOG_ERROR to something else. + + See alioth bug [#314871] "commands.c:979:CmdEscape error on byte 10" + message + https://alioth.debian.org/tracker/index.php?func=detail&aid=314871&group_id=30105&atid=410086 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7038 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 5 +++-- + src/ccid.h | 3 ++- + src/commands.c | 16 ++++++++-------- + 3 files changed, 13 insertions(+), 11 deletions(-) + +commit 7e42bf7149afbf85bc8b99d2e8baab6ab1cddfaa +Author: Ludovic Rousseau +Date: Fri Nov 7 09:02:36 2014 +0000 + + Add AK910 CKey (idProduct 0x0011) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7032 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/AK910_ckey_0011.txt | 53 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 54 insertions(+) + +commit 959158e06d3bc3694bc1ee91a9f2e80c3d7922d7 +Author: Ludovic Rousseau +Date: Fri Nov 7 09:01:32 2014 +0000 + + Add AK910 CKey (idProduct 0x0001) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7031 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/AK910_ckey_0001.txt | 53 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 54 insertions(+) + +commit d272f8ddeff7eda04ce7eef73369f43c9a81419c +Author: Ludovic Rousseau +Date: Fri Nov 7 08:57:03 2014 +0000 + + Add AK910 IDONE + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7030 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/AK910_idone_0101.txt | 53 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 57 insertions(+), 1 deletion(-) + +commit f0b1b801133a4be14f8592b321084cbd2334219c +Author: Ludovic Rousseau +Date: Tue Nov 4 09:31:00 2014 +0000 + + Ignore errno and use libusb returned value only + + Checking (ENODEV == errno) should always be redundant with + checking (LIBUSB_ERROR_NO_DEVICE == rv) + + Since errno is not a documented way to deal with libusb errors we will + ignore errno now. + + Thanks to Hendrik Donner for the patch + http://lists.alioth.debian.org/pipermail/pcsclite-muscle/Week-of-Mon-20141020/000205.html + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7024 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +commit 9c3fd753186aa18a56d2bfeee6acac8c6b399de6 +Author: Ludovic Rousseau +Date: Tue Nov 4 09:25:52 2014 +0000 + + Use libusb_error_name() instead of strerror() + + libusb provides libusb_error_name() to display a human readable + version of the error code returned by libusb. + + LIBUSB_ERROR_NO_DEVICE is easier to understand than -4. + + Recent versions of libusb (libusb 1.0.16 from 2013-07-11) also provide + libusb_strerror() but Debian stable only provides libusb 1.0.11. Maybe a + future version of libccid will use libusb_strerror(). + + Thanks to Hendrik Donner for the patch + http://lists.alioth.debian.org/pipermail/pcsclite-muscle/Week-of-Mon-20141020/000205.html + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7023 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit eee1ad5aae97cb39e9fe60d199b9379aa50b084e +Author: Ludovic Rousseau +Date: Thu Oct 30 10:56:23 2014 +0000 + + Remove ZLP patch for Gemalto IDBridge CT30 and K30. + + The patch is causing problems with the K50. + A new reader firmware (version F) solved the problem so the patch is no + more needed. + + Closes Alioth bug [#314691] Gemalto ID Bridge K50 Smart card Reader does not work on USB2 with ZLP fix + https://alioth.debian.org/tracker/index.php?func=detail&aid=314691&group_id=30105&atid=410085 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7021 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 13 ------------- + src/ccid.h | 5 ----- + src/ccid_serial.c | 1 - + src/ccid_usb.c | 11 ----------- + 4 files changed, 30 deletions(-) + +commit f683beb8d8a506a257d2d50d771435c5fc498373 +Author: Ludovic Rousseau +Date: Thu Oct 30 10:54:11 2014 +0000 + + New firmware for Gemalto IDBridge CT30 reader. + + Update note about ZLP issue. ZLP patch removed in revision 7021. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7020 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Gemalto_IDBridge_CT30.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0ec3d518ad2a5d75dc15e1ed1741020419ba8860 +Author: Ludovic Rousseau +Date: Tue Oct 28 16:57:45 2014 +0000 + + Add Elatec TWN4 SmartCard NFC + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7019 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Elatec_TWN4_SmartCard_NFC.txt | 54 +++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 9 +++--- + 2 files changed, 59 insertions(+), 4 deletions(-) + +commit 5ea7926c1bf8649ad926e7f3b873a82536f00401 +Author: Ludovic Rousseau +Date: Tue Oct 28 15:29:18 2014 +0000 + + Regenerate + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7018 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/AxaltoV3.txt | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +commit 6c937fba90f2d377eaced6f907aab2170c586084 +Author: Ludovic Rousseau +Date: Thu Oct 2 16:22:49 2014 +0000 + + Add OMNIKEY AG 6121 USB mobile + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7008 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Omnikey_6121.txt | 170 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 172 insertions(+), 1 deletion(-) + +commit af5fb95ab8b47466e0d5f145493a1140e0a843a3 +Author: Ludovic Rousseau +Date: Tue Sep 30 18:27:26 2014 +0000 + + Add Identive SCT3522CC token + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@7003 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Identive_SCT3522CC_token.txt | 56 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 58 insertions(+), 1 deletion(-) + +commit d0742d5f32194a6a8f842ec3ca411e0e5f93db66 (tag: ccid-1.4.18) +Author: Ludovic Rousseau +Date: Sat Sep 13 16:25:24 2014 +0000 + + Release 1.4.18 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6982 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 14 ++++++++++++++ + configure.ac | 2 +- + 2 files changed, 15 insertions(+), 1 deletion(-) + +commit bcb9144a519bc55568e391fd62ae04d98e7d24e9 +Author: Ludovic Rousseau +Date: Thu Sep 4 11:36:54 2014 +0000 + + Fix compiler warning + + ifdhandler.c: In function `IFDHControl': + ifdhandler.c:1442:4: warning: implicit declaration of function `htonl' [-Wimplicit-function-declaration] + ifdhandler.c:1442:4: warning: nested extern declaration of `htonl' [-Wnested-externs] + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6977 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit c064fd2f1657fa08dcc7437a8258ea07db268a47 +Author: Ludovic Rousseau +Date: Thu Sep 4 11:35:46 2014 +0000 + + Fix compiler warning + + ccid.c: In function `ccid_open_hack_pre': + ccid.c:67:4: warning: implicit declaration of function `sleep' [-Wimplicit-function-declaration] + ccid.c:67:4: warning: nested extern declaration of `sleep' [-Wnested-externs] + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6976 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit a78e62ef3e036c0030d4b8b1ffaef537a6b65303 +Author: Ludovic Rousseau +Date: Thu Sep 4 11:33:05 2014 +0000 + + Use instead of "config.h" + + https://www.gnu.org/software/autoconf/manual/autoconf-2.65/html_node/Configuration-Headers.html + With the appropriate -I option, you can use ‘#include ’. + Actually, it's a good habit to use it, because in the rare case when + the source directory contains another config.h, the build directory + should be searched first. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6975 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 2 +- + src/ccid_serial.c | 2 +- + src/ccid_usb.c | 2 +- + src/commands.c | 2 +- + src/debug.c | 2 +- + src/ifdhandler.c | 2 +- + src/openct/buffer.c | 2 +- + src/openct/checksum.c | 2 +- + src/openct/checksum.h | 2 +- + src/openct/proto-t1.c | 2 +- + src/openct/proto-t1.h | 2 +- + src/towitoko/atr.c | 2 +- + src/towitoko/defines.h | 2 +- + src/utils.c | 2 +- + 14 files changed, 14 insertions(+), 14 deletions(-) + +commit ccdbb2ce165a0bb64f188ed168ff2012352e4613 +Author: Ludovic Rousseau +Date: Tue Sep 2 20:37:11 2014 +0000 + + Add Lenovo Lenovo USB Smartcard Keyboard + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6971 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Lenovo_USB_Smartcard_Keyboard.txt | 58 +++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 60 insertions(+), 1 deletion(-) + +commit 6b7f463c1d498c8eab8796ed12165e356c988773 +Author: Ludovic Rousseau +Date: Tue Sep 2 14:07:00 2014 +0000 + + Do not define variables that are not used if NO_LOG is defined + + Unused variables generates a warning with an error level (and stops + the compilation) when building the UEFI driver. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6970 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 ++ + src/ifdhandler.c | 2 ++ + 2 files changed, 4 insertions(+) + +commit e6548c1dc12e1f603b210153b43db775c00d911b +Author: Ludovic Rousseau +Date: Tue Sep 2 13:55:31 2014 +0000 + + Enable effect of --enable-embedded on ccid_error() + + Do nothing in ccid_error() if NO_LOG is defined. + + 'objdump -h --section=.rodata libccid.so' shows a gain of 240 bytes. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6968 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit f1122344304cba75795c41beeb8545e52248107b +Author: Ludovic Rousseau +Date: Tue Sep 2 13:50:50 2014 +0000 + + Enable effect of --enable-embedded on hex dumps + + Use LogXxd() instead of log_xxd() in the definition of DEBUG_XXD and + DEBUG_INFO_XXD. + + LogXxd() is defined as nothing (and removed by the compiler) if NO_LOG + is enabled (using --enable-embedded). So the header text of DEBUG_XXD() + is no more stored in the .rodata section of the binary file. + + 'objdump -h --section=.rodata libccid.so' shows a gain of 38 bytes. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6967 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit fda88cbef5ab3d59af6fbd786a61b056b339aef2 +Author: Ludovic Rousseau +Date: Mon Sep 1 18:27:42 2014 +0000 + + Add eID_R6 001 X8 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6966 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/eID_R6_001_X8.txt | 52 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++++- + 2 files changed, 56 insertions(+), 1 deletion(-) + +commit 01e6cf4112c41c673f74d19072dc2f2e7a76ea3d +Author: Ludovic Rousseau +Date: Tue Aug 26 09:21:53 2014 +0000 + + ATR_GetDefaultProtocol() also returns the available protocols + + Add a new parameter int *availableProtocols to return the available + protocols as defined in the ATR. + + This is needed for the UEFI driver. Getting the available protocols is + done by pcsc-lite but pcsc-lite is not used on UEFI. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6964 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + src/towitoko/atr.c | 25 ++++++++++++++++++++----- + src/towitoko/atr.h | 2 +- + 3 files changed, 22 insertions(+), 7 deletions(-) + +commit 14ccd577fec0a1c61fa2b067e9ab9d88c918b14b +Author: Ludovic Rousseau +Date: Tue Aug 26 09:16:51 2014 +0000 + + ATR_GetDefaultProtocol() do not return an error code. + + If the ATR is invalid then ATR_InitFromArray() will return + ATR_MALFORMED. When ATR_GetDefaultProtocol() is called the ATR has been + checked to be valid. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6963 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 0acc1fcff629c28cd4e56dd7e761c64237f9551d +Author: Ludovic Rousseau +Date: Tue Aug 26 09:14:10 2014 +0000 + + Check value returned by ATR_InitFromArray() + + The ATR may be invalid and ATR_InitFromArray() may return ATR_MALFORMED. + I have not yet seen this problem in the field but it is better to ba + safe. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6962 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 24f3eebec12dcc39a5241794a6eeeff40ba1b09b +Author: Ludovic Rousseau +Date: Mon Aug 25 19:19:03 2014 +0000 + + Add Yubico Yubikey NEO OTP+U2F+CCID + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6961 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Yubico_Yubikey_NEO_OTP+U2F+CCID.txt | 56 +++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 57 insertions(+) + +commit ce85d8a6c9e06642c16c36ea6fedfe14860dd089 +Author: Ludovic Rousseau +Date: Mon Aug 25 19:17:37 2014 +0000 + + Add Yubico Yubikey NEO U2F+CCID + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6960 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Yubico_Yubikey_NEO_U2F+CCID.txt | 56 +++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 58 insertions(+), 1 deletion(-) + +commit 5dd4fb8241530590ad0e5278f2c62ca192433d26 +Author: Ludovic Rousseau +Date: Fri Aug 8 09:27:50 2014 +0000 + + Fix wrong comment + + We need to have a card inserted since we will send APDUs. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6958 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a9d926a6b2c2edfc160e7fe5d908e7e3e6f60969 +Author: Ludovic Rousseau +Date: Mon Jul 21 19:20:29 2014 +0000 + + Remove bogus treatment for CARDMAN3121 + + The code was not used by the old CARDMAN3121 but had a side effect for a + new version of the Cardman 3121 with Product ID increased by 1. + + This code was present since the first version of the file in subversion + or CVS (September 2003). I do not remember why I added this code, more + than 10 years ago. + + Thanks to Maximilian Stein for the bug report + http://lists.alioth.debian.org/pipermail/pcsclite-muscle/Week-of-Mon-20140714/000073.html + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6940 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 6 ------ + 1 file changed, 6 deletions(-) + +commit bfe22cdf3c69ae5e394979e2ec34b696fe578a6e +Author: Ludovic Rousseau +Date: Fri Jul 11 19:41:53 2014 +0000 + + Update FujitsuTechnologySolutions GmbH Keyboard KB SCR2 name + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6939 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c2f225a40779bfa648e42d89805c00d29e25ab50 +Author: Ludovic Rousseau +Date: Fri Jul 11 19:35:14 2014 +0000 + + Add Cherry Cherry TC 1100 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6937 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Cherry_Smart_Card_Reader_USB_2_04.txt | 170 ++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 + + 2 files changed, 173 insertions(+) + +commit a83e3fb09c505eb2621bfd768f42adf7c5519ccb +Author: Ludovic Rousseau +Date: Fri Jul 11 19:25:36 2014 +0000 + + Add Cherry Smartcard Keyboard G87-1xx44 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6936 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Cherry_Smartcard_Keyboard_G87-1xx44.txt | 172 ++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 173 insertions(+) + +commit 479b48ed707a999665ff5de8e8f6434e9db13a52 +Author: Ludovic Rousseau +Date: Fri Jul 11 19:23:48 2014 +0000 + + Add FujitsuTechnologySolutions GmbH Keyboard KB SCR2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6935 0ce88b0d-b2fd-0310-8134-9614164e65ea + + ...FujitsuTechnologySolutions_Keyboard_KB_SCR2.txt | 172 +++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 174 insertions(+), 1 deletion(-) + +commit 5474431e96222a4153ab7a1af29683e3f3739653 +Author: Ludovic Rousseau +Date: Wed Jun 25 16:14:41 2014 +0000 + + Add Cherry Smart Card Reader USB + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6933 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Cherry_Smart_Card_Reader_USB.txt | 170 +++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 11 +- + 2 files changed, 177 insertions(+), 4 deletions(-) + +commit 333d93dbd7c943acba5736dad8bf89b7cb4a5497 +Author: Ludovic Rousseau +Date: Tue Jun 17 15:26:42 2014 +0000 + + Add missing unistd.h header + + On Mac OS X Mavericks: + parse.c:108:8: warning: implicit declaration of function 'getuid' is invalid in C99 [-Wimplicit-function-declaration] + if (getuid()) + ^ + parse.c:233:25: warning: implicit declaration of function 'geteuid' is invalid in C99 [-Wimplicit-function-declaration] + if ((0 == nb) && (0 != geteuid())) + ^ + 2 warnings generated. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6929 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 1 + + 1 file changed, 1 insertion(+) + +commit 5dc1761a47e9979cf7015a37ea09bae5148b5f81 +Author: Ludovic Rousseau +Date: Tue Jun 17 09:43:47 2014 +0000 + + Use #ifdef HAVE_* before including .h files + + Some systems do not have C header files, like UEFI for example. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6928 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 11 ++++++++++- + src/ifdhandler.c | 12 ++++++++++-- + 2 files changed, 20 insertions(+), 3 deletions(-) + +commit 191436959c6fafe4ddb3b208d856f10a2295bf27 +Author: Ludovic Rousseau +Date: Tue Jun 17 09:32:22 2014 +0000 + + Include missing unistd.h for usleep(3) + + Needed for Mac OS X Mavericks + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6927 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 ++ + src/ifdhandler.c | 2 ++ + 2 files changed, 4 insertions(+) + +commit f8d6f7ea8ae3ad852e8816e7fbbf1f8bd5842f86 +Author: Ludovic Rousseau +Date: Tue Jun 17 09:22:00 2014 +0000 + + Use "unsigned char" instead of "UCHAR" + + UCHAR is not a standard C type and is not available on UEFI. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6926 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/defs.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 1a26fd2dd9f70e774bb2848b5bc68b0cdfa4c516 +Author: Ludovic Rousseau +Date: Tue Jun 17 09:19:25 2014 +0000 + + Use #ifdef HAVE_* before including .h files + + Some systems do not have C header files, like UEFI for example. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6925 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/atr.c | 5 ++++- + src/towitoko/pps.c | 5 ++++- + 2 files changed, 8 insertions(+), 2 deletions(-) + +commit b07c4d52273d54c85272c33858aa9851ee80b6c4 +Author: Ludovic Rousseau +Date: Tue Jun 17 09:14:49 2014 +0000 + + Use #ifdef HAVE_* before including .h files + + Some systems do not have C header files, like UEFI for example. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6924 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/buffer.c | 10 +++++----- + src/openct/buffer.h | 2 ++ + src/openct/checksum.h | 2 ++ + src/openct/proto-t1.c | 4 ++++ + src/openct/proto-t1.h | 1 - + 5 files changed, 13 insertions(+), 6 deletions(-) + +commit 0c2c98d5f1a127de742b39109375f62df8838f67 +Author: Ludovic Rousseau +Date: Tue Jun 17 08:56:51 2014 +0000 + + Remove non used header files + + The needed headers are already present in the corresponding .h file + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6923 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/checksum.c | 1 - + src/openct/proto-t1.c | 3 --- + 2 files changed, 4 deletions(-) + +commit d7915f9bad2da46fcdec42915e940a05a3fd9b75 +Author: Ludovic Rousseau +Date: Mon Jun 16 13:55:33 2014 +0000 + + Use "unsigned char" instead of "UCHAR" + + UCHAR is not a standard C type and is not available on UEFI. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6922 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 68 +++++++++++++++++++++++++++++++------------------------------- + 1 file changed, 34 insertions(+), 34 deletions(-) + +commit 2bdf24a7029c730c50a7cfc30e3b75fba0aa7835 +Author: Ludovic Rousseau +Date: Mon Jun 16 13:51:29 2014 +0000 + + Rename DEBUG_INFO() in DEBUG_INFO1() + + DEBUG_INFO is already used by UEFI as a debug level. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6921 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 4 ++-- + src/ccid_serial.c | 6 +++--- + src/ccid_usb.c | 8 ++++---- + src/commands.c | 14 +++++++------- + src/debug.h | 2 +- + src/ifdhandler.c | 22 +++++++++++----------- + src/towitoko/atr.c | 2 +- + 7 files changed, 29 insertions(+), 29 deletions(-) + +commit bd9327644538016337e7359259e0213f6016bc87 +Author: Ludovic Rousseau +Date: Mon Jun 16 13:46:31 2014 +0000 + + Use #ifdef HAVE_* before including .h files + + Some systems do not have C header files, like UEFI for example. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6920 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +commit 74a27620f2597079ef1a14850459dc7844e6144d +Author: Ludovic Rousseau +Date: Mon Jun 16 13:42:45 2014 +0000 + + Add check for stdio.h + + Some systems do not have stdio.h, like UEFI for example. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6919 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b141f937611ffdf6a13e0d4645895af020c62801 (tag: ccid-1.4.17) +Author: Ludovic Rousseau +Date: Wed Jun 11 13:09:57 2014 +0000 + + Release 1.4.17 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6915 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 14 ++++++++++++++ + configure.ac | 2 +- + 2 files changed, 15 insertions(+), 1 deletion(-) + +commit 10d87cb8da226df11f2d069a133e4722f2a58c82 +Author: Ludovic Rousseau +Date: Tue Jun 3 13:09:56 2014 +0000 + + Update firmware from 1.04 to 1.08 + + Update tool is available at + http://support.gemalto.com/index.php?id=prox-du_prox-su + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6908 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemProxDU.txt | 108 +++++++++++++++++++++++++------------------------- + 1 file changed, 54 insertions(+), 54 deletions(-) + +commit 5d1824e50506acd5301eb35f58615cf74c5803cc +Author: Ludovic Rousseau +Date: Sat May 31 15:59:14 2014 +0000 + + Add Feitian R502 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6904 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Feitian_R502.txt | 171 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 7 +- + 2 files changed, 177 insertions(+), 1 deletion(-) + +commit 30854e79aa0400c2e2187f3e04a816cc752ca98f +Author: Ludovic Rousseau +Date: Fri May 23 16:57:34 2014 +0000 + + Add udea MILKO V1. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6902 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 5 +++- + readers/udea_MILKO_V1.txt | 55 +++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 59 insertions(+), 1 deletion(-) + +commit 74456fe601624a55ffdbc12e1e81cbc603a4a03f +Author: Ludovic Rousseau +Date: Wed May 14 17:59:30 2014 +0000 + + Add Free Software Initiative of Japan Gnuk Token + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6901 0ce88b0d-b2fd-0310-8134-9614164e65ea + + ...ree_Software_Initiative_of_Japan_Gnuk_Token.txt | 50 ++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 51 insertions(+) + +commit 00f788a0a9353a8e4eb9998c0d15f1270c40aa9f +Author: Ludovic Rousseau +Date: Wed May 14 16:57:40 2014 +0000 + + Add German Privacy Foundation Crypto Stick v2.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6900 0ce88b0d-b2fd-0310-8134-9614164e65ea + + ...German_Privacy_Foundation_Crypto_Stick_v2.0.txt | 51 ++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 53 insertions(+), 1 deletion(-) + +commit 0e3a5d5e0890f69bf41cf2f51a48354cad82baa6 +Author: Ludovic Rousseau +Date: Wed May 7 11:07:37 2014 +0000 + + Add Identive Technologies Multi-ISO HF Reader - USB + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6899 0ce88b0d-b2fd-0310-8134-9614164e65ea + + ...entive_Technologies_Multi-ISO_HF_Reader_USB.txt | 55 ++++++++++++++++++++++ + readers/supported_readers.txt | 5 +- + 2 files changed, 59 insertions(+), 1 deletion(-) + +commit 6682288548f7192e5d597f5a2462a12f779af284 +Author: Ludovic Rousseau +Date: Sat May 3 19:09:21 2014 +0000 + + Add OMNIKEY 5421 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6897 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/OMNIKEY_5421.txt | 168 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 169 insertions(+) + +commit 7af02d4a982589f67eef78d8c52f51ad74de6127 +Author: Ludovic Rousseau +Date: Sat May 3 18:59:56 2014 +0000 + + Add OMNIKEY AG 3121 USB + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6896 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/OMNIKEY_AG_3121.txt | 170 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 171 insertions(+) + +commit de07950ff024a1517661ba50d922e6ca9dac33d1 +Author: Ludovic Rousseau +Date: Sat May 3 18:42:20 2014 +0000 + + Add HID OMNIKEY 5025-CL + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6894 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/HID_OMNIKEY_5025-CL.txt | 56 +++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 58 insertions(+), 1 deletion(-) + +commit 5a705cead2ed3f618e774c71e1ad166414aa0fa5 +Author: Ludovic Rousseau +Date: Thu Apr 24 16:57:03 2014 +0000 + + Add HID Global veriCLASS Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6892 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/HID_Global_veriCLASS_Reader.txt | 56 +++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++- + 2 files changed, 60 insertions(+), 1 deletion(-) + +commit 0a295238204b8aef683fa5e69187b1060210f487 +Author: Ludovic Rousseau +Date: Thu Apr 24 13:51:03 2014 +0000 + + OpenUSBByName(): add a 100 ms delay on Mac OS X + + The USB device may be detected by the Mac OS X USB layer (used by pcscd) + but not yet by libusb (used by libccid). + + We must give some time (100 ms) before listing the USB devices seen by + libusb. Noticed on OS X Mavericks using libusb 1.0.18. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6890 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit a4012b8d8417981a8b4249de762108cbd11732bd +Author: Ludovic Rousseau +Date: Thu Apr 24 13:48:01 2014 +0000 + + OpenUSBByName(): log an error if the USB device is not found + + If we exit the function without finding the (new) device then we log an + error ""Device not found?". + + This could happen if the device is found by Mac OS X USB layer but not + yet by libusb. Noticed on OS X Mavericks using libusb 1.0.18. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6889 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 1 + + 1 file changed, 1 insertion(+) + +commit 64308e93029bf377d506edaf2748da945a21cd5c +Author: Ludovic Rousseau +Date: Fri Apr 11 18:46:19 2014 +0000 + + The O2 Micro Oz776 reader only supports 9600 bps + + The reader returns bNumDataRatesSupported: 0 and a list with only 1 + value: 9600 bps. + bNumDataRatesSupported: 0 should indicate that all the speeds between + dwDataRate: 9600 bps and dwMaxDataRate: 307200 bps are available. But it + looks like this is not the case. + + The driver behavior changed with revision 6801 "Do not get the data + rates if bNumDataRatesSupported = 0". + + This patch just set dwMaxDataRate to 9600 so only this speed is used. + The O2 Micro Oz776 reader was already in the unsupported list. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6885 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 41d0291d1e2f6e63d902253897eb8042b08fd6c8 (tag: ccid-1.4.16) +Author: Ludovic Rousseau +Date: Sun Mar 23 15:13:34 2014 +0000 + + Release 1.4.16 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6880 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 22 ++++++++++++++++++++++ + configure.ac | 2 +- + 2 files changed, 23 insertions(+), 1 deletion(-) + +commit 2e9cd4c9e03da11ae325867256a01bc3c4eb03fc +Author: Ludovic Rousseau +Date: Sun Mar 23 15:11:20 2014 +0000 + + Fix compiler warning + + commands.c: In function `SecurePINVerify': + commands.c:529:9: warning: variable `n' set but not used [-Wunused-but-set-variable] + int n, oldReadTimeout; + ^ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6879 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit af2d8587717638fe1049d486fcf380c249bbb698 +Author: Ludovic Rousseau +Date: Sun Mar 23 12:15:03 2014 +0000 + + Fix compiler warning + + commands.c:511:19: warning: | has lower precedence than ==; == will be evaluated first [-Wparentheses] + if (T1_S_BLOCK | T1_S_WTX == RxBuffer[PCB]) + ^~~~~~~~~~~~~~~~~~~~~~~~~~~ + commands.c:511:19: note: place parentheses around the '==' expression to silence this warning + if (T1_S_BLOCK | T1_S_WTX == RxBuffer[PCB]) + ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ + commands.c:511:19: note: place parentheses around the | expression to evaluate it first + if (T1_S_BLOCK | T1_S_WTX == RxBuffer[PCB]) + ~~~~~~~~~~~^~~~~~~~~~ + 1 warning generated. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6878 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e21f04e37b39925125c3109c89997683c08e2c5d +Author: Ludovic Rousseau +Date: Sun Mar 23 12:11:35 2014 +0000 + + SecurePINVerify: add support of WTX received before SW + + The Swiss health care card sends a WTX request before returning the SW + code. If the reader is in TPDU and the card is in T=1 the driver must + manage the request itself. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6877 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 65 insertions(+), 1 deletion(-) + +commit 13a2c9d86fd77b402f3292467ad84ba2a694f720 +Author: Ludovic Rousseau +Date: Sun Mar 23 12:00:57 2014 +0000 + + Add DRIVER_OPTION_DISABLE_PIN_RETRIES definition + + This is a missing for revision 6875 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6876 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_ifdhandler.h | 1 + + 1 file changed, 1 insertion(+) + +commit d1d66a245549fcd457d90e0f307a10f7289f33d3 +Author: Ludovic Rousseau +Date: Sat Mar 22 17:38:22 2014 +0000 + + Add support of DRIVER_OPTION_DISABLE_PIN_RETRIES + + The Gemalto pinpad reader sends a VERIFY command with no PIN + value in order to retreive the remaining retries from the card. + Some cards (like the OpenPGP card) do not support this. + + It is now possible to disable this behavior from the Gemalto Pinpad and + Covadis Véga Alpha. + + Closes Alioth bug + https://alioth.debian.org/tracker/index.php?func=detail&aid=314005&group_id=30105&atid=410088 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6875 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist.src | 5 +++++ + src/ccid.c | 15 +++++++++++++++ + 2 files changed, 20 insertions(+) + +commit 9de827c928d1bee8d4f4438237df6bf0c2084cb1 +Author: Ludovic Rousseau +Date: Sat Mar 22 17:18:02 2014 +0000 + + InterruptRead(): log the libusb errors + + Allow an easier debug + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6874 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 89c530269f4576b5406b5b246f63a702767ecf46 +Author: Ludovic Rousseau +Date: Tue Mar 11 17:34:05 2014 +0000 + + Add IID AT90S064 CCID READER + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6873 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/IID_AT90S064_CCID_READER.txt | 49 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 53 insertions(+), 1 deletion(-) + +commit 1c73ab5ea015638fd5a02ddd1b7764548c121205 +Author: Ludovic Rousseau +Date: Sun Mar 9 19:47:30 2014 +0000 + + Add Watchdata W5181 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6871 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Watchdata_W5181.txt | 161 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 9 ++- + 2 files changed, 169 insertions(+), 1 deletion(-) + +commit b649a644f6a34fe3619fe1b3c3d23b9a68f4ed99 +Author: Ludovic Rousseau +Date: Sat Mar 8 16:16:37 2014 +0000 + + t1_transceive(): add a new test on retries + + The driver should not send R-blocks infinitely. + + The problem was detected by a T=1 card on a TPDU pinpad reader with a + VERIFY command that send a WTX request before returning the SW code. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6869 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 115ab274655937b06f20fbbfd7ea4fff3d37a9b8 +Author: Ludovic Rousseau +Date: Sat Mar 8 16:14:39 2014 +0000 + + t1_transceive(): check retries is is positive + + The test was "retries == 0" but it may happen that retries becomes + negative. Then the counter will be decreasing "indefinitely". + + The new test is "retries <= 0" to also get the negative values and + resync if needed. + + The problem was detected by a T=1 card on a TPDU pinpad reader with a + VERIFY command that send a WTX request before returning the SW code. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6868 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +commit e9109e31873bc4fdf1f2d17b80f75719b0fddee4 +Author: Ludovic Rousseau +Date: Fri Mar 7 21:36:24 2014 +0000 + + Add INSIDE Secure VaultIC 441 Smart Object + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6866 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/INSIDE_Secure_VaultIC_441_Smart_Object.txt | 49 ++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 50 insertions(+) + +commit d3794d2170ca6488a063f92ea228bb06d9dbe4c1 +Author: Ludovic Rousseau +Date: Fri Mar 7 21:32:37 2014 +0000 + + Add INSIDE Secure VaultIC 405 Smart Object + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6865 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/INSIDE_Secure_VaultIC_405_Smart_Object.txt | 49 ++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++- + 2 files changed, 53 insertions(+), 1 deletion(-) + +commit 62ba9506d94c82917a65da29168b275721e8d891 +Author: Ludovic Rousseau +Date: Fri Mar 7 21:24:51 2014 +0000 + + Replace HP by Hewlett Packard + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6864 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +commit 5dadd8ee85dcea2ad1985e814e40f42fdedba8ac +Author: Ludovic Rousseau +Date: Wed Feb 26 09:58:54 2014 +0000 + + Indicates the changes are in README. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6862 0ce88b0d-b2fd-0310-8134-9614164e65ea + + NEWS | 1 + + 1 file changed, 1 insertion(+) + +commit aed5daa687bdc1b27438d552a65e57c56f91954e +Author: Ludovic Rousseau +Date: Sun Feb 23 21:28:15 2014 +0000 + + Add HP USB Smartcard CCID Keyboard + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6860 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Chicony_HP_USB_Smartcard_CCID_Keyboard.txt | 58 ++++++++++++++++++++++ + readers/supported_readers.txt | 5 +- + 2 files changed, 62 insertions(+), 1 deletion(-) + +commit b636b96c1b15f4c88cb0d8ad3920cc0e097199dd +Author: Ludovic Rousseau +Date: Tue Feb 18 19:25:23 2014 +0000 + + Add Microchip SEC1210 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6857 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Microchip_SEC1210.txt | 108 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 4 ++ + 2 files changed, 112 insertions(+) + +commit 5a7f62aa99aeec0995069b25f26f01a6b0690163 +Author: Ludovic Rousseau +Date: Tue Feb 18 19:21:30 2014 +0000 + + Add Microchip SEC1110 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6856 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Microchip_SEC1110.txt | 54 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 57 insertions(+) + +commit f9bc083e0b5fca8308476e82d6efab4cf1877e9d +Author: Ludovic Rousseau +Date: Tue Feb 18 19:10:10 2014 +0000 + + Add Crypto Stick Crypto Stick v1.4 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6855 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Crypto_Stick_Crypto_Stick_v1.4.txt | 51 ++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++- + 2 files changed, 55 insertions(+), 1 deletion(-) + +commit ba0142521f7defd81c94ddcad7687ef65f5e1ed1 (tag: ccid-1.4.15) +Author: Ludovic Rousseau +Date: Fri Feb 14 09:19:48 2014 +0000 + + Release 1.4.15 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6846 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 33 ++++++++++++++++++++++++++++++++- + configure.ac | 2 +- + 2 files changed, 33 insertions(+), 2 deletions(-) + +commit c663ec643cfe944dce40fe5fd770475d781750ba +Author: Ludovic Rousseau +Date: Fri Feb 14 09:16:01 2014 +0000 + + Disable pinpad for Fujitsu SmartCase KB SCR eSIG + + Thanks to Maarten for the bug report and patch. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6845 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 1 + + src/ccid.h | 1 + + 2 files changed, 2 insertions(+) + +commit 9e03a8020f7a5ed9e90db2b7249b59a8837a4a7f +Author: Ludovic Rousseau +Date: Sat Feb 8 16:17:17 2014 +0000 + + Add Feitian bR301 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6839 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Feitian_bR301.txt | 60 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 9 ++++--- + 2 files changed, 65 insertions(+), 4 deletions(-) + +commit a88a9900e10666466835e67babbaea776dfb330d +Author: Ludovic Rousseau +Date: Mon Feb 3 14:55:48 2014 +0000 + + Add Gemalto Ezio Shield Pro SC + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6835 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Gemalto_Ezio_Shield_Pro_SC.txt | 56 ++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++- + 2 files changed, 60 insertions(+), 1 deletion(-) + +commit db23fc998ed024d4784fb348e8b90e29f5f16b46 +Author: Ludovic Rousseau +Date: Tue Jan 28 14:53:40 2014 +0000 + + Remove the optional CHANNELID + + Use DEVICENAME only instead. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6833 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/reader.conf.in | 1 - + 1 file changed, 1 deletion(-) + +commit 673d31137066da21fd5b4591b08e7115345b8b53 +Author: Ludovic Rousseau +Date: Tue Jan 28 14:50:43 2014 +0000 + + Add support of Gemalto CR30 reader in serial communication + + The Gemalto CR30 reader is a dual slot reader. The reader can be + connected with a USB cable (normal CCID protocol) or using a serial + cable. + + The serial configuration is made using a special name in + /etc/reader.conf DEVICENAME field like: + DEVICENAME /dev/ttyS0:GemCoreSIMPro2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6832 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 14 ++++++++++++ + src/ccid_serial.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/reader.conf.in | 10 ++++++--- + 3 files changed, 86 insertions(+), 3 deletions(-) + +commit 97ad744e2d33f0752cc8eaab2eaff07c84c4766f +Author: Ludovic Rousseau +Date: Tue Jan 28 13:15:22 2014 +0000 + + set_ccid_descriptor(): initialize .ccid.readTimeout + + The read timeout was not initialized. I don't know how it was working. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6831 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 1 + + 1 file changed, 1 insertion(+) + +commit a1ed8a2923c0fc59e5a1fd731eee6e190a5ea7c0 +Author: Ludovic Rousseau +Date: Tue Jan 21 17:53:14 2014 +0000 + + Add VASCO DIGIPASS 870 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6829 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Vasco_DIGIPASS_870.txt | 107 +++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 109 insertions(+), 1 deletion(-) + +commit 93f3bfabd789dea7df890b2b483df4c79a674dea +Author: Ludovic Rousseau +Date: Tue Jan 21 17:36:11 2014 +0000 + + get_end_points(): be more strict for bInterfaceClass = 255 + + If the bInterfaceClass is 255 (proprietary) and then not, but possibly, + a CCID interface (on an old reader) we also check the extra_length is + valid for a CCID device. + + The problem was with a composite device with 2 interfaces: one non-CCID + interface with bInterfaceClass = 255 and a CCID interface with + bInterfaceClass = 11. The first non-CCID interface must be skipped. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6828 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 6a3105510a13db61a959c39fa64e4def1e163278 +Author: Ludovic Rousseau +Date: Tue Jan 21 17:29:00 2014 +0000 + + Small update + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6827 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Aladdin_eToken_PRO_USB_72K_Java.txt | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 6ca60b6d5ecaf32753132efa113b732803cb95a1 +Author: Ludovic Rousseau +Date: Tue Jan 7 14:23:17 2014 +0000 + + ccid_open_hack_post(): use default read timeout for CmdEscape + + Use the default read timeout (DEFAULT_COM_READ_TIMEOUT at 3 seconds) + instead of the current value of 100 ms (set in + CreateChannelByNameOrChannel) that is too short to load the l10n strings + in a pinpad reader. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6820 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2e422733ef76afd1f3a24349c5d28cbd1276c85d +Author: Ludovic Rousseau +Date: Tue Jan 7 14:12:27 2014 +0000 + + Support Gemalto features for pinpad readers + + MinimumPINSize, MaximumPINSize and bEntryValidationCondition are fetched + from the reader firmware. + No need to hardcode specific values anymore. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6819 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 30 +++++++++++++++++++++++++++++- + 1 file changed, 29 insertions(+), 1 deletion(-) + +commit 1a8c304b7674fcb9603a07efee2530ea81bda662 +Author: Ludovic Rousseau +Date: Tue Jan 7 10:16:28 2014 +0000 + + Fix typo in text + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6818 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 7945372ecba9b63daf306808106995caeac8b7cc +Author: Ludovic Rousseau +Date: Tue Jan 7 10:01:52 2014 +0000 + + Set specific value of bEntryValidationCondition for known readers + + Gemalto Pinpad, Covadis Véga-Alpha and Cherry ST2000 readers only + support validation by key pressed. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6817 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 14 +++++++++++++- + 1 file changed, 13 insertions(+), 1 deletion(-) + +commit 39468bab29a22871e287c3724211805cd406faab +Author: Ludovic Rousseau +Date: Tue Jan 7 09:58:44 2014 +0000 + + Retrieve bEntryValidationCondition from the driver + + Use PCSCv2_PART10_PROPERTY_bEntryValidationCondition to know what + validation conditions aer supported by the pinpad. + + Default value is 7 (as before). + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6816 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 24 +++++++++++++++++------- + 1 file changed, 17 insertions(+), 7 deletions(-) + +commit 39dad973e4627274f8e70bda58919baf0a1716d2 +Author: Ludovic Rousseau +Date: Tue Jan 7 09:52:29 2014 +0000 + + Check value returned by gets(3) + + Fix compiler warning: + scardcontrol.c:649:4: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result] + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6815 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 27f609b142e6ab3f5517fc1558b6825c8f450295 +Author: Ludovic Rousseau +Date: Tue Jan 7 09:49:47 2014 +0000 + + Retrieve min and max PIN sizes from the driver + + Use PCSCv2_PART10_PROPERTY_bMinPINSize and + PCSCv2_PART10_PROPERTY_bMaxPINSize to know the min and max PIN sizes. + + If not defined by the driver the default values are 4 for min and 8 for + max (as before). + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6814 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 21 +++++++++++++++++++-- + 1 file changed, 19 insertions(+), 2 deletions(-) + +commit 19afd55d97cded45e8adda62a373c4b5b60ac3eb +Author: Ludovic Rousseau +Date: Tue Jan 7 09:40:26 2014 +0000 + + Do a PIN verify instead of PIN modify + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6813 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 1398dcfd4b4ccdd97daca9ce2cfa1ac86bafacfd +Author: Ludovic Rousseau +Date: Mon Jan 6 15:32:55 2014 +0000 + + Parse codes returned by a pinpad (as SW1/SW2). + + Known codes for now are: + 0x9000: Success + 0x6400: Timeout + 0x6401: Cancelled by user + 0x6402: PIN mismatch + 0x6403: Too short or too long PIN + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6812 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 35 ++++++++++++++++++++++++++++++++++- + 1 file changed, 34 insertions(+), 1 deletion(-) + +commit fb14487b0aaa31f8a1373365a104b4858dcb28c2 +Author: Ludovic Rousseau +Date: Mon Jan 6 14:18:30 2014 +0000 + + Add specific PIN min & max sizes for SmartTerminal ST-2xxx + + The Cherry GmbH SmartTerminal ST-2xxx reader has a min PIN size of 0 + digits and a max PIN size of 25 (0x19) digits. + + Thanks to Dominik Heidler for the bug report + https://github.com/OpenSC/OpenSC/issues/199 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6811 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +commit 0f30bba8c183fe60b5ab62bf7eb35494098673fe +Author: Ludovic Rousseau +Date: Tue Dec 17 08:57:30 2013 +0000 + + Fix calculation of the command length + + Since pcsc-lite 1.8.9 (October 2013) the structures PIN_MODIFY_STRUCTURE + and PIN_VERIFY_STRUCTURE are different and now use a C99 flexible array + member when available for abData field. uint8_t abData[]; + + The the sizeof(PIN_VERIFY_STRUCTURE) is one byte smaller and the + calculation of the complete command is now simpler. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6809 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit f2135d872cf3290ad2e63a253fe58d1ff81083f6 +Author: Ludovic Rousseau +Date: Thu Dec 12 21:05:14 2013 +0000 + + Add IIT E.Key Almaz-1C + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6806 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/IIT_E.Key_Almaz-1C.txt | 560 +++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +- + 2 files changed, 564 insertions(+), 1 deletion(-) + +commit 8ae07a3ce7d5aec76d30deaf898ed98fd09b2446 +Author: Ludovic Rousseau +Date: Fri Dec 6 13:00:06 2013 +0000 + + Add DUALi DRAGON NFC READER + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6805 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/DUALi_DRAGON_NFC_READER.txt | 118 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 8 ++- + 2 files changed, 125 insertions(+), 1 deletion(-) + +commit 81c82c8852010f362bb48968b4f5df27a4789a48 +Author: Ludovic Rousseau +Date: Tue Nov 26 14:14:49 2013 +0000 + + Do not get the data rates if bNumDataRatesSupported = 0 + + According to CCID spec 1.1: " If the value is 00h, all data rates + between the default data rate dwDataRate and the maximum data rate + dwMaxDataRate are supported. " + + Some readers do not support control request 0x03 GET_DATA_RATES if they + declare bNumDataRatesSupported = 0. That should not generate a critical + error. + + This change will fix bug [#314516] Do not log ccid_usb.c:1142:ControlUSB() control failed (1/4): -9 Success + https://alioth.debian.org/tracker/index.php?func=detail&aid=314516&group_id=30105&atid=410088 + + and also fix bug [#313651] Do not call get_data_rates() if bNumDataRatesSupported is 0 + https://alioth.debian.org/tracker/index.php?func=detail&aid=313651&group_id=30105&atid=410088 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6801 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +commit 0d6bc2f109f12bb94ba817dd80361af766540831 +Author: Ludovic Rousseau +Date: Tue Nov 26 14:10:35 2013 +0000 + + Revert revision 6799 + + We will use a better way to solve the bug. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6800 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 36 +++++++----------------------------- + 1 file changed, 7 insertions(+), 29 deletions(-) + +commit 94184909b4747721106f3f592ae2e02f96c739dc +Author: Ludovic Rousseau +Date: Tue Nov 26 13:51:45 2013 +0000 + + Failing to get the data rates from the reader is not a critical error + + The reader may not respond to control request 0x03 GET_DATA_RATES + In such a case the CCID driver should not report a critical error. + + The driver will now report a info level error.o + + Closes alioth bug [#314516] Do not log ccid_usb.c:1142:ControlUSB() control failed (1/4): -9 Success + https://alioth.debian.org/tracker/index.php?func=detail&aid=314516&group_id=30105&atid=410088 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6799 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 36 +++++++++++++++++++++++++++++------- + 1 file changed, 29 insertions(+), 7 deletions(-) + +commit e2989d7574a0b978dc26f562d9cbadecfb697297 +Author: Ludovic Rousseau +Date: Tue Nov 26 13:49:00 2013 +0000 + + Add DEBUG_INFO5() macro + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6798 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.h | 2 ++ + 1 file changed, 2 insertions(+) + +commit 5a7356dc29f00dc2ba6b3558fb0e1f5a499f9702 (tag: ccid-1.4.14) +Author: Ludovic Rousseau +Date: Mon Nov 25 18:09:17 2013 +0000 + + Release 1.4.14 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6795 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 8 ++++++++ + configure.ac | 2 +- + 2 files changed, 9 insertions(+), 1 deletion(-) + +commit bb894604807ff4a8c91bb1dc218db145081ca965 +Author: Ludovic Rousseau +Date: Mon Nov 25 17:02:26 2013 +0000 + + Reformat the list of readers in the "add support for" section + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6794 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 163 ++++++++++++++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 117 insertions(+), 46 deletions(-) + +commit c1ffbc263cd6d2ab328d1ed78976d45bd2e3dd08 +Author: Ludovic Rousseau +Date: Mon Nov 25 13:09:41 2013 +0000 + + Generalize the management of readers with bDeviceClass = 0xFF + + Some early Gemalto Ezio CB+ readers have bDeviceClass, bDeviceSubClass and + bDeviceProtocol set to 0xFF (proprietary) instead of 0x00. + + So on Mac OS X the reader configuration is not done by the OS/kernel and we do + it ourself. + + The code is no more limited to the GEMALTO_EZIO_CBP (0x08E6/0x34C3) but to any + reader with the problem, like the Todos Argos Mini II CCID. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6793 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 48 +++++++++++++++++++++++++++++------------------- + 1 file changed, 29 insertions(+), 19 deletions(-) + +commit 1abbd489c78700eb9f69f9203b15c0ed181b9ebc +Author: Ludovic Rousseau +Date: Mon Nov 25 13:03:21 2013 +0000 + + Set Xcode SDK to version 10.8 + + With Xcode 5.x the minimum SDK version is 10.8 (Mountain Lion) even on + Mountain Lion. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6792 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e05752b88d548df0b4526d13ff6815587ce09b69 +Author: Ludovic Rousseau +Date: Mon Nov 25 10:11:28 2013 +0000 + + Add Gemalto ING Shield Pro SC + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6791 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Gemalto_Ezio_Shield_Secure_Channel.txt | 56 ++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 58 insertions(+), 1 deletion(-) + +commit 60503d17e0a72fde9c3f2217a0c8592de78e1796 +Author: Ludovic Rousseau +Date: Mon Nov 25 10:02:35 2013 +0000 + + IFDHControl(): report FEATURE_IFD_PIN_PROPERTIES only for pinpad readers + + Some (bogus) applications use the presence of FEATURE_IFD_PIN_PROPERTIES + to know if the reader is a pinpad reader or not. + The application should use FEATURE_VERIFY_PIN_DIRECT and + FEATURE_MODIFY_PIN_DIRECT instead. + + Reporting FEATURE_IFD_PIN_PROPERTIES for a non-pinpad reader is useless + so it should not harm to remove it from CM_IOCTL_GET_FEATURE_REQUEST. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6790 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 15 +++++++++------ + 1 file changed, 9 insertions(+), 6 deletions(-) + +commit c2890b0f37eda0ece4334040e7364db72d9da95f +Author: Ludovic Rousseau +Date: Thu Oct 24 09:46:35 2013 +0000 + + Add support of Gemalto GemCore SIM Pro firmware 2.0 + + The new firmware of the Gemalto GemCore SIM Pro removes a limitation of + the firmware 1.0. The 2 slots now supports the same data rates. The + second slot is no more limited to some values only. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6784 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 7 +++++-- + src/ifdhandler.c | 5 ++++- + 2 files changed, 9 insertions(+), 3 deletions(-) + +commit c760b4ae94e90868aeb3fd6a6837da75eeda5e18 +Author: Ludovic Rousseau +Date: Thu Oct 24 09:36:52 2013 +0000 + + Add a timeout parameter to CmdEscape() + + Not all commands need the same timeout. For example the CmdEscape() used + in ccid_serial.c to check if the reader is alive should have a short + timeout. + The timeout was forced to 30 seconds inside CmdEscape() so it was not + possible to use a different value. The patch fixes this. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6783 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 10 +++++----- + src/ccid_serial.c | 9 ++------- + src/commands.c | 18 ++++++++++++------ + src/commands.h | 2 +- + src/ifdhandler.c | 13 +++++++------ + 5 files changed, 27 insertions(+), 25 deletions(-) + +commit 08a48014ea23142762b2ac0ef206a65edf0d084b +Author: Ludovic Rousseau +Date: Thu Oct 24 08:51:11 2013 +0000 + + Limit GemCore SIM PRO hack to only the specific reader + + If the ATR fails we should mark the card as absent only for the GemCore + SIM PRO. + This reader do not manage slot status for the second slot and a + corresponding hack is present in function IFDHICCPresence() around line + 1713. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6782 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 4a42bf29c4c2b98dfaf1b5c64ec5e832282e3e7e +Author: Ludovic Rousseau +Date: Sat Oct 19 17:55:18 2013 +0000 + + CT710 parse from Martin Paljak + + http://archives.neohapsis.com/archives/dev/muscle/2013-q4/0040.html + https://sourceforge.net/p/opensc/mailman/message/31538801/ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6781 0ce88b0d-b2fd-0310-8134-9614164e65ea + + .../Gemalto_Ezio_Shield_PinPad_Martin_features.txt | 39 ++++++++++++++++++++++ + 1 file changed, 39 insertions(+) + +commit ba79d6270826d4756a446a080b1aa4af5c6d9581 +Author: Ludovic Rousseau +Date: Fri Oct 18 11:59:46 2013 +0000 + + Add reader name, Pid and Vid + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6776 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/extra_features/GemPCPinpadv2_features.txt | 3 +++ + readers/extra_features/Gemalto_Ezio_Shield_PinPad_features.txt | 3 +++ + 2 files changed, 6 insertions(+) + +commit 06283a4020083e7f49c25623e01082014263645f +Author: Ludovic Rousseau +Date: Fri Oct 18 11:41:58 2013 +0000 + + This directory contains extra information about a reader + + For example the result of the + PCSC/UnitaryTests/FEATURE_CCID_ESC_COMMAND_Gemalto_features.py command + on some Gemalto readers. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6774 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/extra_features/GemPCPinpadv2_features.txt | 27 ++++++++++++++++ + .../Gemalto_Ezio_Shield_PinPad_features.txt | 36 ++++++++++++++++++++++ + readers/extra_features/README.txt | 5 +++ + 3 files changed, 68 insertions(+) + +commit 02b9c1c7ec6980322745fa4ae7558fc49c4d61be (tag: ccid-1.4.13) +Author: Ludovic Rousseau +Date: Wed Oct 9 10:00:52 2013 +0000 + + release 1.4.13 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6766 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 17 +++++++++++++++++ + configure.ac | 2 +- + 2 files changed, 18 insertions(+), 1 deletion(-) + +commit a5356503be729155f8216e3d95b175ce7ed8b108 +Author: Ludovic Rousseau +Date: Wed Oct 2 15:18:08 2013 +0000 + + Simplify the code for a NON generic driver + + - do not build a class driver (not yet used by pcsc-lite on Mac OS X) + using --disable-class + + - use a specific bundle name to NOT overwrite the official CCID driver + using --enable-bundle=ifd-ccid-$BUNDLE_ID.bundle + + - differentiate each libccid library by the dynamic linker + using --prefix=/fake/$BUNDLE_ID + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6762 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 16 ++++++++++++---- + 1 file changed, 12 insertions(+), 4 deletions(-) + +commit 98f110646d05d82f5ae88c0da4cb2e8b0616bb31 +Author: Ludovic Rousseau +Date: Wed Oct 2 15:06:45 2013 +0000 + + Document the use of --disable-class + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6761 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 2e4aea9ac82fcd2021f5b9a233a8277aeba8844f +Author: Ludovic Rousseau +Date: Tue Oct 1 12:57:50 2013 +0000 + + Use the COUNT_OF macro + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6760 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + src/debug.c | 3 ++- + 2 files changed, 3 insertions(+), 2 deletions(-) + +commit 2ca58b423c0e7112d9bc8d197e788e6b8af94900 +Author: Ludovic Rousseau +Date: Mon Sep 30 13:35:22 2013 +0000 + + Multislot support: do not crash on exit + + The field multislot_extension should be set to NULL only _after_ the + multi-slot thread management is stopped. This entry is used by the + Multi_PollingProc thread. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6757 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit 1da682ce2179b80284f1b8139455e8837ba682c9 +Author: Ludovic Rousseau +Date: Mon Sep 23 16:41:07 2013 +0000 + + Add Access IS ePassport Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6755 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Access_IS_ePassport_Reader.txt | 53 ++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 57 insertions(+), 1 deletion(-) + +commit dd977b9c7374f637aebb804da7b7963d6f667df6 +Author: Ludovic Rousseau +Date: Mon Sep 23 16:39:18 2013 +0000 + + Update from automake 1.14 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6754 0ce88b0d-b2fd-0310-8134-9614164e65ea + + ylwrap | 26 ++++++++++++-------------- + 1 file changed, 12 insertions(+), 14 deletions(-) + +commit db8401f83472ad40250566227f4f49191f480dcc +Author: Ludovic Rousseau +Date: Sat Sep 21 14:16:17 2013 +0000 + + CreateChannelByNameOrChannel(): reset ccid_descriptor->readTimeout in + all cases + + The value was not restored in the error case. So it was not a bug. But + the Coverity tool complained: + + CID 1090609 (#1 of 1): Failure to restore non-local value + (MISSING_RESTORE)20. end_of_scope: Value of non-local + "ccid_descriptor->readTimeout" that was saved in "oldReadTimeout" is not + restored as it was along other paths. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6753 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 030fe72869f6cae28fe7a0f90a41dffb8e0ca98d +Author: Ludovic Rousseau +Date: Mon Sep 16 18:27:04 2013 +0000 + + Revert change in revision 6735 + + We can't use install-exec-local since we want to overwrite the install + rule. We do not want to _add_ files to install + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6752 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 3dbd62e9147bba9738e67d76053b042de8c0d1c8 +Author: Ludovic Rousseau +Date: Mon Sep 16 18:20:18 2013 +0000 + + Display the warning "No Universal Binary build" in red + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6751 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 2 ++ + 1 file changed, 2 insertions(+) + +commit 0f672f0b17d6c4541597c63afe803dc7667f17db +Author: Ludovic Rousseau +Date: Thu Sep 5 18:33:55 2013 +0000 + + Set LIBUSB_* even if the libusb-1.0 version is too old + + If PKG_CHECK_MODULES(LIBUSB, libusb-1.0 >= $LIBUSB_NEEDED_VERSION,...) + fails then LIBUSB_CFLAGS and LIBUSB_LIBS are not set. + This is problematic since it just displays a warning. + So we recall PKG_CHECK_MODULES(LIBUSB, libusb-1.0) with not version test + + Problem discovered with Debian GNU/kFreeBSD where libusb-1.0 is at + version 1.0.6 (it is not the _real_ libusb). + + ./configure failed with: + [...] + checking for LIBUSB... no + configure: WARNING: install libusb 1.0.8 or later + checking libusb.h usability... yes + checking libusb.h presence... yes + checking for libusb.h... yes + configure: error: libusb not found, use ./configure LIBUSB_LIBS=... + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6746 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.ac | 1 + + 1 file changed, 1 insertion(+) + +commit 8c8dedfc089c4e49bc26e85193eecc120be9d13c +Author: Ludovic Rousseau +Date: Sat Aug 24 09:38:50 2013 +0000 + + Use subdir-objects option + + src/Makefile.am:36: warning: source file 'towitoko/atr.c' is in a + subdirectory, + src/Makefile.am:36: but option 'subdir-objects' is disabled + + automake-1.14: warning: possible forward-incompatibility. + automake-1.14: At least a source file is in a subdirectory, but the 'subdir-objects' + automake-1.14: automake option hasn't been enabled. For now, the corresponding output + automake-1.14: object file(s) will be placed in the top-level directory. However, + automake-1.14: this behaviour will change in future Automake versions: they will + automake-1.14: unconditionally cause object files to be placed in the same subdirectory + automake-1.14: of the corresponding sources. + automake-1.14: You are advised to start using 'subdir-objects' option throughout your + automake-1.14: project, to avoid future incompatibilities. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6740 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8cec07d020effc3c0ea1a85edda6ad5fd97fe15b +Author: Ludovic Rousseau +Date: Fri Aug 23 14:11:18 2013 +0000 + + IFDHControl(): Add support of Windows value for CM_IOCTL_GET_FEATURE_REQUEST + + Windows uses 0x313520 for SCARD_CTL_CODE(3400) + pcsc-lite uses 0x42000D48 for SCARD_CTL_CODE(3400) + + RDP aplications (like rdesktop) will convert SCardControl() commands + from a Windows application (so using 0x313520) to pcsc-lite. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6739 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 951e3a2fe4ae9742a0055dd6b514986f5b2d2026 +Author: Ludovic Rousseau +Date: Fri Aug 23 08:43:37 2013 +0000 + + Silence a "clang --analyze" warning + + commands.c:1936:12: warning: The right operand of '==' is a garbage value + if (0x10 == pcbuffer[0]) + ^ ~~~~~~~~~~~ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6738 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 1 + + 1 file changed, 1 insertion(+) + +commit 0817ece77da2f921c586d6dea79283fc2504ed7c +Author: Ludovic Rousseau +Date: Fri Aug 23 08:41:11 2013 +0000 + + Fix "clang --analyze" warning + + ccid_usb.c:1095:14: warning: Result of 'calloc' is converted to a pointer of + type 'unsigned int', which is incompatible with sizeof operand type 'int' + int_array = calloc(n+1, sizeof(int)); + ^~~~~~ ~~~~~~~~~~~ + + - Change variable name int_array -> uint_array since the type is + "unsigned int" + - Use sizeof(uint_array[0]) to always get the correct type of a + uint_array[] element + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6737 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +commit 2c56311f985df6cf06f862c39ad1e739b6081d65 +Author: Ludovic Rousseau +Date: Fri Aug 23 08:36:37 2013 +0000 + + Uninstall libccidtwin in the uninstall rule + + If libccidtwin is installed in install rule we should also remove it + in the uninstall rule + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6736 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +commit aa546fa397ec785bd5c9a8b7045a36be021f5f34 +Author: Ludovic Rousseau +Date: Fri Aug 23 08:31:02 2013 +0000 + + Use the -local versions for install and uninstall rules + + autoreconf: running: automake --add-missing --no-force --warnings=all + src/Makefile.am:76: warning: user target 'install' defined here ... + /usr/share/automake-1.13/am/install.am: ... overrides Automake target 'install' defined here + src/Makefile.am:99: warning: user target 'uninstall' defined here ... + /usr/share/automake-1.13/am/install.am: ... overrides Automake target 'uninstall' defined here + src/Makefile.am:99: consider using uninstall-local instead of uninstall + + See http://www.gnu.org/software/automake/manual/html_node/Extending.html + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6735 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 74da9a61e21073a499a36cb650428c4b766344bf +Author: Ludovic Rousseau +Date: Tue Aug 20 16:40:33 2013 +0000 + + Add Planeta RC700-NFC CCID + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6732 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Planeta_RC700-NFC_CCID.txt | 52 ++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 56 insertions(+), 1 deletion(-) + +commit 9eb1d0af03e4d00ce7c3cbda8f70964752b23bd7 (tag: ccid-1.4.12) +Author: Ludovic Rousseau +Date: Mon Aug 12 21:43:09 2013 +0000 + + Release 1.4.12 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6729 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 16 ++++++++++++++++ + configure.ac | 2 +- + 2 files changed, 17 insertions(+), 1 deletion(-) + +commit 5101b48f7ee4cadb7bb091deaabe6db2da5e60d3 +Author: Ludovic Rousseau +Date: Mon Aug 12 18:46:18 2013 +0000 + + Add SecuTech SecuTech Token + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6728 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SecuTech_Token.txt | 47 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++++- + 2 files changed, 51 insertions(+), 1 deletion(-) + +commit 9c9d7c6110d34e78f21838b3a22491b282313eb2 +Author: Ludovic Rousseau +Date: Thu Aug 8 20:04:08 2013 +0000 + + Add HID OMNIKEY 5427 CK + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6720 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/HID_OMNIKEY_5427_CK.txt | 56 +++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 58 insertions(+), 1 deletion(-) + +commit 96e5e9a4858d36da42174ff4a1eab88f158fc0fb +Author: Ludovic Rousseau +Date: Mon Aug 5 19:51:03 2013 +0000 + + Add Ingenico WITEO USB Smart Card Reader (Base and Badge) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6715 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Ingenico_WITEO_badge.txt | 55 ++++++++++++++++++++++++++++++++++++++++ + readers/Ingenico_WITEO_base.txt | 55 ++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 6 +++++ + 3 files changed, 116 insertions(+) + +commit 13294eb66c52beff755048c1e0c18309710a4cd8 +Author: Ludovic Rousseau +Date: Mon Aug 5 19:38:26 2013 +0000 + + Regenerate without the duplicates as entries + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6714 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 29 +---------------------------- + 1 file changed, 1 insertion(+), 28 deletions(-) + +commit 0de84c22305f45cfdfdf21ce561cfb4d717283d9 +Author: Ludovic Rousseau +Date: Fri Aug 2 14:14:03 2013 +0000 + + Add Lenovo Lenovo USB Smartcard Keyboard + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6705 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Lenovo2.txt | 65 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 69 insertions(+), 1 deletion(-) + +commit 3b9aff9455a617557634044cb62139f5a69364cc +Author: Ludovic Rousseau +Date: Sun Jul 28 20:00:55 2013 +0000 + + Add HID OMNIKEY 5326 DFR + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6689 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/HID_OMNIKEY_5326_DFR.txt | 56 ++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 58 insertions(+), 1 deletion(-) + +commit 6da9ae04c4eea337f1375f8ebea8ae85ae0a13d7 +Author: Ludovic Rousseau +Date: Sat Jul 6 18:35:26 2013 +0000 + + Firmware upgrade + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6688 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACR122U_PICC.txt | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 5d8bbaa19d59f1aa7a9ea6026cd500efdbabebea +Author: Ludovic Rousseau +Date: Sat Jul 6 17:10:29 2013 +0000 + + Add HID OMNIKEY 5127 CK + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6686 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Omnikey_5127_CK.txt | 56 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 60 insertions(+), 1 deletion(-) + +commit 40f107bb96a0a66af38c7bfc4885abec902c70b7 +Author: Ludovic Rousseau +Date: Fri Jul 5 07:17:05 2013 +0000 + + CreateChannelByNameOrChannel(): correctly fails if the reader disapears + + If we get the error IFD_NO_SUCH_DEVICE then we must exit using the error + path and not directly with a return. + We need to unlock a mutex and free allocated resources. + + Thanks to coverity. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6685 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit ae01cdd90afd77e9ed7e4d201f19ad0139f37195 +Author: Ludovic Rousseau +Date: Fri Jul 5 07:11:41 2013 +0000 + + ATR_InitFromArray(): avoid a possible buffer overflow + + Increment the protocol index _before_ checking it is too big. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6684 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/atr.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit cdc152a03c2d247e8d4f1a95bb716a936da99e7c +Author: Ludovic Rousseau +Date: Mon Jul 1 08:56:09 2013 +0000 + + Code factorisation + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6682 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +commit 9e16e80c510db93b150c69cafee28214ab5db12a +Author: Ludovic Rousseau +Date: Mon Jul 1 08:54:13 2013 +0000 + + CloseUSB(): free arrayOfSupportedDataRates on the last slot close + + Do free .ccid.arrayOfSupportedDataRates array only when the last slot is + closed. + + Multi-slot readers share the same .ccid.arrayOfSupportedDataRates array. + + The GEMCOREPOSPRO and GEMCORESIMPRO are an exception and are not + correctly managed by this patch (memory may leak). + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6681 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 10 +++------- + 1 file changed, 3 insertions(+), 7 deletions(-) + +commit 38faa97872a526e069a856df710167fe4c50486a +Author: Ludovic Rousseau +Date: Sun Jun 30 14:42:36 2013 +0000 + + Add support of multi-slot readers + + Thanks to Johann Dantant for the initial patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6678 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 436 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/ifdhandler.c | 4 - + 2 files changed, 436 insertions(+), 4 deletions(-) + +commit 4984377ffd0aa14a52ee3663ca63678b57cb38c3 +Author: Ludovic Rousseau +Date: Sun Jun 30 14:30:09 2013 +0000 + + ReadUSB(): check libusb return value for LIBUSB_ERROR_NO_DEVICE + + Same change as in revision 6676 but for ReadUSB(). + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6677 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c66f38698ceb418428e6f0356055318acd14e46d +Author: Ludovic Rousseau +Date: Sun Jun 30 14:12:26 2013 +0000 + + WriteUSB(): check return value for LIBUSB_ERROR_NO_DEVICE + + If the device is removed we check for ENODEV == errno and now also for + LIBUSB_ERROR_NO_DEVICE == rv (libusb_bulk_transfer() return value) + + Only the value returned by libusb_bulk_transfer() should be used in the + futur. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6676 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3c9bebdd440e11a5fb6f7b2a41de901a94b4adf6 +Author: Ludovic Rousseau +Date: Fri Jun 28 09:32:26 2013 +0000 + + close_libusb_if_needed(): Reset ctx value to NULL + + Make sure libusb_init() will be called for the next reader. + + This was not a real problem since pcscd will unload the driver when no + more reader is using it. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6675 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 1 + + 1 file changed, 1 insertion(+) + +commit 2540d02d01f942ebd43965253beb7f64a4bf57da +Author: Ludovic Rousseau +Date: Fri Jun 28 08:56:07 2013 +0000 + + Call libusb_exit() when needed + + Starting with libusbx 1.0.16 a hotplug thread is created by libusb. We + must cleanly stop the thread or bad thing can happen (crash on Mac OS X + for exampple) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6674 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 30 +++++++++++++++++++++++++----- + 1 file changed, 25 insertions(+), 5 deletions(-) + +commit ef5bc3ba4d70ab96e5d8160f0c816a66032d3441 +Author: Ludovic Rousseau +Date: Fri Jun 28 08:43:02 2013 +0000 + + Check libusb is at least at version 1.0.8 + + The driver will need to use libusb_exit() for libusbx >= 1.0.16 because + of the libusb hotplug thread. + + libusb_exit() was not working correctly in libusb < 1.0.8. + + So we check the libusb library used will at least provide a working + libusb_exit() function. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6673 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.ac | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 97dd3f2ef6e61ab48815145055233015ef17d6db +Author: Ludovic Rousseau +Date: Fri Jun 28 08:37:37 2013 +0000 + + Remove libusb-config use + + libusb-config was provided by libusb-0.1. We do not use this version + of the libusb API since version libccid 1.4.0 (August 2010) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6672 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.ac | 8 -------- + 1 file changed, 8 deletions(-) + +commit 62a10593b5fd2e71e2132dafbd51d727cec79f03 +Author: Ludovic Rousseau +Date: Thu Jun 20 07:37:18 2013 +0000 + + Update the bundle name template to include the vendor name + + The bundle name template is now ifd-ccid-vendor-reader.bundle + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6667 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b0c9e17467bb6846a255b471d1b3276f1dcfe03d +Author: Ludovic Rousseau +Date: Thu Jun 20 07:34:54 2013 +0000 + + Disable class driver on Mac OS X + + - we are building for a specific reader + - pcsc-lite on Mac OS X do not yet support "class" driver + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6666 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 1 + + 1 file changed, 1 insertion(+) + +commit 2934563268450015cab2a2427ce4dba5d0fec2ae +Author: Ludovic Rousseau +Date: Tue Jun 18 09:07:58 2013 +0000 + + Use serialconfdir from pcsc-lite + + Get the serialconfdir value from pcsc-lite pkg config instead of using + $(DESTDIR)/$(sysconfdir)/reader.conf.d/ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6664 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.ac | 11 +++++++++++ + src/Makefile.am | 4 ++-- + 2 files changed, 13 insertions(+), 2 deletions(-) + +commit bf107b0df888d6c161c382ca5dd3f17b6fbce4a0 +Author: Ludovic Rousseau +Date: Wed Jun 12 12:07:54 2013 +0000 + + Update from automake 1.13 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6661 0ce88b0d-b2fd-0310-8134-9614164e65ea + + ylwrap | 180 +++++++++++++++++++++++++++++++++++++---------------------------- + 1 file changed, 102 insertions(+), 78 deletions(-) + +commit bb091a591b199128a06fc95427eaf5aa4e4711e8 (tag: ccid-1.4.11) +Author: Ludovic Rousseau +Date: Wed Jun 12 11:55:52 2013 +0000 + + Release 1.4.11 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6659 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 14 ++++++++++++++ + configure.ac | 2 +- + 2 files changed, 15 insertions(+), 1 deletion(-) + +commit 35e035fe7983b61321ed286387cb0ba21a9f63ad +Author: Ludovic Rousseau +Date: Tue Jun 11 09:31:35 2013 +0000 + + Move Gemalto IDBridge K3000 from "should work" to "supported" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6658 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit aef9945974b8b4edb86904e1dea0ff37bf91fa77 +Author: Ludovic Rousseau +Date: Mon Jun 10 13:12:38 2013 +0000 + + Move Gemalto IDBridge CT30 from "unsupported" to "should work" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6656 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +commit 5a3196483d6d3ecf75bb03e85e701f581554be4d +Author: Ludovic Rousseau +Date: Mon Jun 10 13:10:14 2013 +0000 + + Add Gemalto IDBridge K30 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6655 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +commit d41c683bec158f701457b550a4973259582b9f9f +Author: Ludovic Rousseau +Date: Mon Jun 10 09:37:03 2013 +0000 + + New firmware and new name of the Gemalto USB Shell Token V2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6652 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Gemalto_IDBridge_K30.txt | 103 +++++++++++++++++++++++++++++++++++++++ + 1 file changed, 103 insertions(+) + +commit e552941136168374b7239ab80e59be00559d8cb9 +Author: Ludovic Rousseau +Date: Mon Jun 10 09:35:53 2013 +0000 + + New firmware (2.0) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6651 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/DellSCRK.txt | 104 +++++++++++++++++++++++++++++---------------------- + 1 file changed, 59 insertions(+), 45 deletions(-) + +commit 02cc168945d8e6395e6ad3cf2ab90ed1bfccffe0 +Author: Ludovic Rousseau +Date: Mon Jun 10 08:43:24 2013 +0000 + + Add Zero Length Packet (ZLP) support for Gemalto IDBridge CT30 and K30 + + The Gemalto IDBridge CT30 and IDBridge K30 readers may send a ZLP after + some commands when connected on a USB3 bus. Only the readers with + firmware 2.00 have the problem. + + The solution is to use a short read before every USB write. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6650 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 14 ++++++++++++++ + src/ccid.h | 5 +++++ + src/ccid_serial.c | 1 + + src/ccid_usb.c | 20 +++++++++++--------- + 4 files changed, 31 insertions(+), 9 deletions(-) + +commit bd44e124f036abed73d9e91f3269628c4f121a0d +Author: Ludovic Rousseau +Date: Mon Jun 3 08:58:01 2013 +0000 + + Reset color after time value + + Fix a bug introduced in revision 6644. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6646 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 9b23aae8b1f762d41a9a1f861a9e0670ba035957 +Author: Ludovic Rousseau +Date: Mon Jun 3 08:49:42 2013 +0000 + + Do not do colorization when not available. + + Check code was missing in revision 6644. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6645 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.c | 44 +++++++++++++++++++++++++------------------- + 1 file changed, 25 insertions(+), 19 deletions(-) + +commit 6a6268c4347ff237aa32404eee16e84318fc7db1 +Author: Ludovic Rousseau +Date: Mon Jun 3 08:08:33 2013 +0000 + + Add colorization of logs + + This log API is used when pcsc-lite do not provide it i.e. on Mac OS X. + + The colorization should happen only when the logs are displayed on a + terminal and not when sent in a log file. + The main use is with the handler_test application. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6644 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 74 insertions(+), 2 deletions(-) + +commit db84084d3de10ae482c93b7a34c4ed9be17544c7 +Author: Ludovic Rousseau +Date: Fri May 31 13:44:00 2013 +0000 + + get_ccid_device_descriptor(): check endpoint[] before access + + Some non-CCID devices with bInterfaceClass = 0xFF may make the code + crash because they do not have endpoints. + + This may happens using 'parse -p' to parse non CCID devices. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6643 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 339c9374b18bb069b2aa997dcd48251c519acae3 +Author: Ludovic Rousseau +Date: Fri May 31 12:22:30 2013 +0000 + + Fix typo + + bClassEnveloppe: -> bClassEnvelope: + only one 'p' + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6641 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACR122U.txt | 2 +- + readers/ACR122U_PICC.txt | 2 +- + readers/ACR38U-CCID.txt | 2 +- + readers/ACS_ACR100.txt | 2 +- + readers/ACS_ACR101.txt | 2 +- + readers/ACS_ACR38_plugin.txt | 2 +- + readers/ACS_AET65.txt | 2 +- + readers/ACS_APG8201.txt | 2 +- + readers/ACS_APG8201_v2.txt | 2 +- + readers/ACS_CryptoMate64.txt | 2 +- + readers/ASEDrive_IIIe_KB.txt | 2 +- + readers/ASE_IIIe.txt | 2 +- + readers/ATMEL_AT90SCR050.txt | 2 +- + readers/ATMEL_AT90SCR100.txt | 2 +- + readers/ATMEL_AT91SC192192CT-USB.txt | 2 +- + readers/ATMEL_AT91SO.txt | 2 +- + readers/ATMEL_AT98SC032CT.txt | 2 +- + readers/ATMEL_VaultIC420.txt | 2 +- + readers/ATMEL_VaultIC440.txt | 2 +- + readers/ATMEL_VaultIC460.txt | 2 +- + readers/AU9520.txt | 2 +- + readers/AU9540.txt | 2 +- + readers/ActivCardV2.txt | 2 +- + readers/ActivCardV3.txt | 2 +- + readers/ActivkeySim.txt | 2 +- + readers/Akasa_AK-CR-03.txt | 2 +- + readers/Aktiv_Rutoken_ECP.txt | 2 +- + readers/Aktiv_Rutoken_Lite.txt | 2 +- + readers/Aktiv_Rutoken_Magistra.txt | 2 +- + readers/Aladdin_eToken_PRO_USB_72K_Java.txt | 2 +- + readers/AlcorMicro_AU9522.txt | 2 +- + readers/Alcor_SCR001.txt | 2 +- + readers/Alya.txt | 2 +- + readers/Ask_CPL108.txt | 2 +- + readers/Athena_IDProtect_Key.txt | 2 +- + readers/Avtor_SC_Reader_371.txt | 2 +- + readers/Avtor_SecureToken.txt | 2 +- + readers/AxaltoV3.txt | 2 +- + readers/BIFIT_USB-Token_iBank2key.txt | 2 +- + readers/BIFIT_iBank2key.txt | 2 +- + readers/BZH_uKeyCI800-K1.txt | 2 +- + readers/BludriveII.txt | 2 +- + readers/Broadcom_5880.txt | 2 +- + readers/Broadcom_5880v2.txt | 4 ++-- + readers/Broadcom_5880v3.txt | 2 +- + readers/Broadcom_5880v4.txt | 4 ++-- + readers/C3PO_KBR36.txt | 2 +- + readers/C3PO_LTC32_USBv2.txt | 2 +- + readers/C3PO_TLTC2USB.txt | 2 +- + readers/CCB_eSafeLD.txt | 2 +- + readers/CardMan1021.txt | 2 +- + readers/CardMan3021.txt | 2 +- + readers/CardMan3121.txt | 2 +- + readers/CardMan3621.txt | 2 +- + readers/CardMan3821.txt | 2 +- + readers/CardMan4321.txt | 2 +- + readers/CardMan5121.txt | 2 +- + readers/CardMan5125.txt | 2 +- + readers/CardMan5321.txt | 2 +- + readers/CardMan6121.txt | 2 +- + readers/Charismathics.txt | 2 +- + readers/CherryST1044U.txt | 2 +- + readers/CherrySmartBoardXX1X.txt | 2 +- + readers/CherrySmartTerminalST2XXX.txt | 2 +- + readers/CherrySmartTerminalXX1X.txt | 2 +- + readers/CherrySmartTerminalXX7X.txt | 2 +- + readers/CherryXX33.txt | 2 +- + readers/CherryXX44.txt | 2 +- + readers/Covadis_Auriga.txt | 2 +- + readers/CryptoIdentity.txt | 2 +- + readers/Dectel_CI692.txt | 2 +- + readers/DellSCRK.txt | 2 +- + readers/DellSK-3106.txt | 2 +- + readers/Eutron_CryptoIdentity.txt | 2 +- + readers/Eutron_Digipass_860.txt | 2 +- + readers/Eutron_SIM_Pocket_Combo_(Card_Reader).txt | 2 +- + readers/Eutron_SIM_Pocket_Combo_(SIM_Reader).txt | 2 +- + readers/Eutron_Smart_Pocket.txt | 2 +- + readers/Feitian_SCR301.txt | 2 +- + readers/Feitian_SCR310.txt | 2 +- + readers/Feitian_ePass2003_PKI.txt | 2 +- + readers/Fsij_gnuk.txt | 2 +- + readers/FujitsuSiemens_SmartCard_Keyboard_USB_2A.txt | 2 +- + readers/FujitsuSiemens_SmartCard_USB_2A.txt | 2 +- + readers/FujitsuTechnologySolutions_SmartCase_KB_SCR_eSIG.txt | 2 +- + readers/GIS_SmartMouse.txt | 2 +- + readers/GPFCryptoStick.txt | 2 +- + readers/GemCorePOSPro.txt | 2 +- + readers/GemCoreSIMPro.txt | 2 +- + readers/GemPC433_SL.txt | 2 +- + readers/GemPCKey.txt | 2 +- + readers/GemPCPinpad.txt | 2 +- + readers/GemPCPinpadv2.txt | 2 +- + readers/GemPCTwin.txt | 2 +- + readers/GemPC_Express.txt | 2 +- + readers/GemProxDU.txt | 4 ++-- + readers/GemProxSU.txt | 4 ++-- + readers/Gem_e-SealPro.txt | 2 +- + readers/GemaltoSmartEnterpriseGuardian.txt | 2 +- + readers/Gemalto_Ezio_Branch.txt | 2 +- + readers/Gemalto_Ezio_CB+.txt | 2 +- + readers/Gemalto_Ezio_Shield.txt | 2 +- + readers/Gemalto_Ezio_Shield_PinPad.txt | 2 +- + readers/Gemalto_HybridSmartcardReader.txt | 2 +- + readers/Gemalto_IDBridge_CT30.txt | 2 +- + readers/Gemalto_IDBridge_K3000.txt | 2 +- + readers/Gemalto_PDT.txt | 2 +- + readers/Gemalto_SA_dotNet_Dual.txt | 2 +- + readers/Gemalto_SG.txt | 2 +- + readers/GnD_StarSignCardToken350.txt | 2 +- + readers/GnD_StarSignCardToken550.txt | 2 +- + readers/GnD_StarSign_CUT.txt | 2 +- + readers/GoldKey_PIV_Token.txt | 2 +- + readers/HPUSBSmartCardKeyboard.txt | 2 +- + readers/HPUSBSmartCardReader.txt | 2 +- + readers/HP_MFP_SmartCardReader.txt | 2 +- + readers/HP_kus-0133.txt | 2 +- + readers/Identive_CLOUD_2700_F.txt | 2 +- + readers/Identive_CLOUD_2700_R.txt | 2 +- + readers/Identive_CLOUD_4500_F.txt | 4 ++-- + readers/Identive_CLOUD_4510_F.txt | 4 ++-- + readers/Identive_CLOUD_4700_F.txt | 4 ++-- + readers/Identive_CLOUD_4710_F.txt | 4 ++-- + readers/Inside_Secure_AT90SCR050.txt | 2 +- + readers/Inside_Secure_AT90SCR100.txt | 2 +- + readers/Inside_Secure_AT90SCR200.txt | 2 +- + readers/Inside_Secure_VaultIC_420.txt | 2 +- + readers/Inside_Secure_VaultIC_440.txt | 2 +- + readers/Inside_Secure_VaultIC_460_Smart_Object.txt | 2 +- + readers/JCOP41V221.txt | 2 +- + readers/KAAN_Advanced.txt | 2 +- + readers/KAAN_Base.txt | 2 +- + readers/KAAN_SIM_III.txt | 2 +- + readers/KEBTechnology_KONA_USB_SmartCard.txt | 2 +- + readers/Kingtrust_Multi-Reader.txt | 2 +- + readers/Kobil_EMV_CAP.txt | 2 +- + readers/Kobil_IDToken.txt | 2 +- + readers/Kobil_Smart_Token.txt | 2 +- + readers/Kobil_mIDentity_4smart.txt | 2 +- + readers/Kobil_mIDentity_4smart_AES.txt | 2 +- + readers/Kobil_mIDentity_fullsize.txt | 2 +- + readers/Kobil_mIDentity_fullsize_AES.txt | 2 +- + readers/Kobil_mIDentity_visual.txt | 2 +- + readers/LTC31.txt | 2 +- + readers/LTC31v2.txt | 2 +- + readers/LTC36.txt | 2 +- + readers/Lenovo.txt | 2 +- + readers/MSI_StarReader_SMART.txt | 2 +- + readers/MX5_SMART_CCID_DRIVER.txt | 2 +- + readers/Macally_NFC_CCID_eNetPad.txt | 2 +- + readers/Morpho_MSO1350.txt | 2 +- + readers/Morpho_MSO350.txt | 2 +- + readers/MySmartPad.txt | 2 +- + readers/NXP_PR533.txt | 2 +- + readers/Neowave_Weneo.txt | 2 +- + readers/Neowave_Weneo2.txt | 2 +- + readers/Neowave_Weneo3.txt | 2 +- + readers/Neowave_Weneo4.txt | 2 +- + readers/Oberthur-CosmoCard.txt | 2 +- + readers/Oberthur-CosmoCard1.txt | 2 +- + readers/Oberthur-ID-ONE_token_slim_v2.txt | 2 +- + readers/Omnikey_6321.txt | 2 +- + readers/Omnikey_noname1.txt | 2 +- + readers/Oz776S.txt | 2 +- + readers/Oz776_7772.txt | 2 +- + readers/Panasonic_USB_Smart_Card_Reader_7A-Smart.txt | 2 +- + readers/Philips_SmartMX.txt | 2 +- + readers/Precise_200_MC.txt | 2 +- + readers/Precise_250_MC.txt | 2 +- + readers/Precise_Sense_MC.txt | 2 +- + readers/Raritan_D2CIM-DVUSB.txt | 2 +- + readers/ReinerSCT.txt | 2 +- + readers/ReinerSCT_cyberJack_RFID_basis.txt | 2 +- + readers/ReinerSCT_cyberJack_go.txt | 2 +- + readers/Rutoken_PINPad_ex.txt | 2 +- + readers/Rutoken_PINPad_in.txt | 2 +- + readers/SCL010.txt | 2 +- + readers/SCL01x.txt | 2 +- + readers/SCM_SCL010.txt | 2 +- + readers/SCM_SCL011.txt | 2 +- + readers/SCM_SDI011.txt | 2 +- + readers/SCM_SDI011_512C.txt | 2 +- + readers/SCR331-DI-NTTCom.txt | 2 +- + readers/SCR331-DI.txt | 2 +- + readers/SCR331.txt | 2 +- + readers/SCR3310-NTTCom.txt | 2 +- + readers/SCR3310.txt | 2 +- + readers/SCR3310_2.txt | 2 +- + readers/SCR3311.txt | 2 +- + readers/SCR3320.txt | 2 +- + readers/SCR333.txt | 2 +- + readers/SCR3340.txt | 2 +- + readers/SCR335.txt | 2 +- + readers/SCR3500.txt | 2 +- + readers/SCR355.txt | 2 +- + readers/SDI010.txt | 2 +- + readers/SDS4ID_DominoKeyPro_100.txt | 2 +- + readers/SPR532.txt | 2 +- + readers/SafeTech_SafeTouch.txt | 2 +- + readers/Sitecom_MD-010.txt | 2 +- + readers/Smart_SBV280.txt | 2 +- + readers/Softforum_XecureHSM.txt | 2 +- + readers/SpringCard_CSB6_Basic.txt | 2 +- + readers/SpringCard_CSB6_Secure.txt | 2 +- + readers/SpringCard_CSB6_Ultimate.txt | 2 +- + readers/SpringCard_CrazyWriter.txt | 2 +- + readers/SpringCard_EasyFinger_Standard.txt | 2 +- + readers/SpringCard_EasyFinger_Ultimate.txt | 2 +- + readers/SpringCard_H512_Series.txt | 2 +- + readers/SpringCard_H663_Series.txt | 2 +- + readers/SpringCard_NFC_Roll.txt | 2 +- + readers/SpringCard_Prox_N_Roll.txt | 2 +- + readers/Synnix_STD200.txt | 2 +- + readers/Teo.txt | 2 +- + readers/Teridian_TSC12xxFV.09.txt | 2 +- + readers/TianYu_CCID_SmartKey.txt | 2 +- + readers/Tianyu_Smart_Card_Reader.txt | 2 +- + readers/Todos_AGM2_CCID.txt | 2 +- + readers/Todos_Cx00.txt | 2 +- + readers/Ubisys_RFID.txt | 2 +- + readers/VMware_Virtual_USB_CCID.txt | 2 +- + readers/Validy_TokenA.txt | 2 +- + readers/Vasco_DIGIPASS_KEY_202_0120.txt | 2 +- + readers/Vasco_DIGIPASS_KEY_202_0122.txt | 2 +- + readers/Vasco_DP200.txt | 2 +- + readers/Vasco_DP855.txt | 2 +- + readers/Vasco_DP860.txt | 2 +- + readers/Vasco_DP865.txt | 2 +- + readers/Vasco_DP905.txt | 2 +- + readers/Vasco_DPKey101.txt | 2 +- + readers/Vasco_DPKey200.txt | 2 +- + readers/Vasco_DPKey860.txt | 2 +- + readers/Vasco_Digipass920.txt | 2 +- + readers/Vega-Alpha.txt | 2 +- + readers/Verisign_secure_storage_token.txt | 2 +- + readers/Verisign_secure_token.txt | 2 +- + readers/Winbond.txt | 2 +- + readers/Xiring_Leov2.txt | 2 +- + readers/Xiring_MyLeo.txt | 2 +- + readers/Xiring_XI-SIGN.txt | 2 +- + readers/Xiring_XI-SIGN_6000.txt | 2 +- + readers/Yubico_Yubikey_neo.txt | 2 +- + readers/Yubico_Yubikey_neo_otp.txt | 2 +- + readers/bit4id_cryptokey.txt | 2 +- + readers/bit4id_iam.txt | 2 +- + readers/bit4id_key4.txt | 2 +- + readers/bit4id_minilector-s.txt | 2 +- + readers/bit4id_minilector.txt | 2 +- + readers/e-gate.txt | 2 +- + readers/iDream.txt | 2 +- + readers/iMONO.txt | 2 +- + readers/id3_CL1356A_HID.txt | 2 +- + readers/id3_CL1356T.txt | 2 +- + readers/id3_CL1356T5.txt | 2 +- + readers/jNet_jToken_s1.txt | 2 +- + readers/mIDentity.txt | 2 +- + readers/mIDentityXL.txt | 2 +- + readers/sid800.txt | 2 +- + 258 files changed, 266 insertions(+), 266 deletions(-) + +commit df5c6fddeb849da1d33c89833930276f5c22b636 +Author: Ludovic Rousseau +Date: Thu May 30 11:53:26 2013 +0000 + + Fix typo in comment + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6640 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 66bd75e9758449f04d4a153083f9a9fb22479c95 +Author: Ludovic Rousseau +Date: Fri May 24 13:00:03 2013 +0000 + + CloseUSB(): free the gemalto_firmware_features only on the last slot + + All the slots of a same reader use the same gemalto_firmware_features + structure. We should only free the structure when the last slot is + closing. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6635 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 9 +++------ + 1 file changed, 3 insertions(+), 6 deletions(-) + +commit a07e087c76f0e60d396fd8e07aaccd50fa1e9c32 +Author: Ludovic Rousseau +Date: Fri May 24 12:42:56 2013 +0000 + + Replace doubles spaces by tabulations + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6634 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 34 +++++++++++++++++----------------- + 1 file changed, 17 insertions(+), 17 deletions(-) + +commit 41119961d8138204b3168e0838272885829815be +Author: Ludovic Rousseau +Date: Wed May 22 14:11:37 2013 +0000 + + Fix typo in field name + + bClassEnveloppe -> bClassEnvelope (only 1 'p') + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6633 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 33f73ba664ab247695969e00dd25b0de4c43fe1b +Author: Ludovic Rousseau +Date: Fri May 17 18:28:24 2013 +0000 + + Add SCM Microsystems Inc. SDI011 Contactless Reader + + This SDI011 has a new idProduct: 0x512C + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6632 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCM_SDI011_512C.txt | 55 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 57 insertions(+), 1 deletion(-) + +commit 968a619a11672e7357341aebcb33514cdd5f94b1 +Author: Ludovic Rousseau +Date: Thu May 16 07:40:23 2013 +0000 + + ReadUSB: Zero Length Packet (ZLP) support + + The Gemalto IDBridge CT30 and IDBridge K30 readers may send + a ZLP after some commands when connected on a USB3 bus + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6631 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +commit 07b843e2b141010a6c192e710551059e636956bc +Author: Ludovic Rousseau +Date: Wed May 15 13:02:08 2013 +0000 + + Do not exit if a device with class 0xFF is not accessible + + Maybe the device is NOT a CCID reader and the parsing should continue. + + Thanks to Jaidev Bhattacharjee for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6630 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +commit 54a7bb53003a1262552fa497943dffc012c4da6c +Author: Ludovic Rousseau +Date: Mon May 13 12:41:12 2013 +0000 + + parse: make the use of -p argument more explicit + + The error message now displays: + "use ./parse -p" (or whatever the program name is) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6627 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3eb2fd45befdffc3344fb314c5ba3081c1144ed1 +Author: Ludovic Rousseau +Date: Sat May 11 13:53:04 2013 +0000 + + Add SCM Microsystems Inc. SCL010 Contactless Reader + + A new firmware version 1.12 seems to make the reader usable as a CCID + readers in contacless mode. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6626 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCM_SCL010.txt | 58 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 6 ++++- + src/ccid_usb.c | 1 + + 3 files changed, 64 insertions(+), 1 deletion(-) + +commit 3c59e4c5f3e1590a64d72b278119cdf2d6b38f25 +Author: Ludovic Rousseau +Date: Wed May 8 11:45:06 2013 +0000 + + CreateChannelByNameOrChannel(): fix clang warning + + ifdhandler.c:142:26: warning: comparison of constant 617 with expression of type 'status_t' is always false [-Wtautological-constant-out-of-range-compare] + if (IFD_NO_SUCH_DEVICE == ret) + ~~~~~~~~~~~~~~~~~~ ^ ~~~ + + Do not mix ret of type status_t with CmdGetSlotStatus() returning a RESPONSECODE + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6624 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit 3ddd7fa1b963e230f9a2553f903b1c9d69e5467f +Author: Ludovic Rousseau +Date: Tue May 7 09:11:26 2013 +0000 + + udev rule file: remove support of Linux kernel < 2.6.35 + + USB power management is now only working on Linux kernel >= 2.6.35 + Older kernels will just not suspend the smart card reader. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6623 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/92_pcscd_ccid.rules | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +commit 2fbd5d707110cd8fe51c3d57eac356886d442759 +Author: Ludovic Rousseau +Date: Tue May 7 09:06:29 2013 +0000 + + udev rule file: Remove setting group to pcscd + + Since pcsc-lite 1.8.0 (November 2011) the auto start of pcscd from the + library has been removed. Use systemd instead + + This action in the udev rule file is then useless. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6622 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/92_pcscd_ccid.rules | 28 ---------------------------- + 1 file changed, 28 deletions(-) + +commit 7a510ba2ad1f52c7e9c5cee2b69e87fec661d014 +Author: Ludovic Rousseau +Date: Sat May 4 16:04:27 2013 +0000 + + THRC Smart Card Reader moved from disabled to unsupported list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6620 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit d8ad459b8d15d09d5dd7f1c5d559003340b38412 +Author: Ludovic Rousseau +Date: Sat May 4 15:58:35 2013 +0000 + + New firmware of the THRC reader + + This new firmware _may_ work. Firmware older than 1.02 are marked as bogus. + + The reader was in the disabled list so old readers will continue to _not_ + work with the driver. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6618 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/iDream.txt | 97 +++++++++++++++++++++++++++++++++++++++++++----------- + src/ccid_usb.c | 1 + + 2 files changed, 79 insertions(+), 19 deletions(-) + +commit 489904f637b7265cfa97f042e0bfcaff8f76f889 +Author: Ludovic Rousseau +Date: Sat May 4 15:50:40 2013 +0000 + + CCID_Receive(): better management of time extension requests + + The driver now uses the value returned in the time extension frame to + multiply the timeout value. The timeout value may be bigger than + needed but the goal is to timeout _after_ the reader. + + Thanks to Henryk Plötz for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6617 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) + +commit 0b338b88d97625c16213c8a12ac9d46019c7ae47 +Author: Ludovic Rousseau +Date: Fri May 3 08:06:58 2013 +0000 + + Add Gemalto IDBridge CT30 in the Unsupported list + + This reader is an GemPC Twin with a new chipset and firmware (version E) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6616 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemPCTwin.txt | 101 ++++++++++++++++--------------------- + readers/Gemalto_IDBridge_CT30.txt | 103 ++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 12 ++++- + 3 files changed, 158 insertions(+), 58 deletions(-) + +commit 11014cbf3b7ca07a79b7e06c2bcd034b00b2e86d +Author: Ludovic Rousseau +Date: Fri Apr 26 12:20:36 2013 +0000 + + Update with contactless interface enabled + http://ridrix.wordpress.com/2009/10/13/how-to-enable-pcsc-support-for-dell-contactless-reader/ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6614 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Broadcom_5880v2.txt | 56 +++++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 54 insertions(+), 2 deletions(-) + +commit c5d86a9a7057397c5e31cc8e52b51298c5b26359 (tag: ccid-1.4.10) +Author: Ludovic Rousseau +Date: Tue Apr 16 12:43:58 2013 +0000 + + Release 1.4.10 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6609 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 24 ++++++++++++++++++++++++ + configure.ac | 2 +- + 2 files changed, 25 insertions(+), 1 deletion(-) + +commit f431eb4b08be4f6b0a1a95a033827c82d218c81b +Author: Ludovic Rousseau +Date: Tue Apr 16 12:24:44 2013 +0000 + + Regenerate using composite readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6608 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 20 +++++++++++++++++++- + 1 file changed, 19 insertions(+), 1 deletion(-) + +commit 6e521dbd6b1907b6cf4fb4b20a67ff4909fbf041 +Author: Ludovic Rousseau +Date: Mon Apr 15 16:47:41 2013 +0000 + + Normalize file + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6605 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CardMan3821.txt | 1 - + readers/CherryXX33.txt | 1 - + readers/CherryXX44.txt | 1 - + readers/GemPC433_SL.txt | 1 - + readers/SCR331-DI-NTTCom.txt | 1 - + readers/Verisign_secure_token.txt | 1 - + readers/Winbond.txt | 1 - + 7 files changed, 7 deletions(-) + +commit 4daa1649cd6ebb9d4cfb235e3cacf0e0e0376e9c +Author: Ludovic Rousseau +Date: Mon Apr 15 16:26:33 2013 +0000 + + Add Identive CLOUD 4710 F Contactless + SAM Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6604 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Identive_CLOUD_4710_F.txt | 111 ++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 4 ++ + 2 files changed, 115 insertions(+) + +commit 8dba0b4ace6a7c795deba6f552ffca0f45931bae +Author: Ludovic Rousseau +Date: Mon Apr 15 16:21:25 2013 +0000 + + Add Identive CLOUD 4700 F Dual Interface Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6603 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Identive_CLOUD_4700_F.txt | 111 ++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 4 ++ + 2 files changed, 115 insertions(+) + +commit a59d68d5b4cc5fc12f09185182da9c690fd2e724 +Author: Ludovic Rousseau +Date: Mon Apr 15 16:16:38 2013 +0000 + + Add Identive CLOUD 4510 F Contactless + SAM Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6602 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Identive_CLOUD_4510_F.txt | 111 ++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 112 insertions(+) + +commit f8268d2df8a7b7d2594f214e2e63668b06c3e835 +Author: Ludovic Rousseau +Date: Mon Apr 15 16:15:32 2013 +0000 + + Add Identive CLOUD 4500 F Dual Interface Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6601 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Identive_CLOUD_4500_F.txt | 111 ++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 112 insertions(+) + +commit 53ece1ba3a9a71640d0ef438ad0d276e4ab1f5cc +Author: Ludovic Rousseau +Date: Mon Apr 15 16:11:39 2013 +0000 + + Add Identive CLOUD 2700 R Smart Card Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6600 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Identive_CLOUD_2700_R.txt | 56 +++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 57 insertions(+) + +commit 9b2194b1f17fa2f0fd6bea33b80c0cc10a96eac0 +Author: Ludovic Rousseau +Date: Mon Apr 15 16:09:56 2013 +0000 + + Add Identive CLOUD 2700 F Smart Card Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6599 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Identive_CLOUD_2700_F.txt | 56 +++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 60 insertions(+), 1 deletion(-) + +commit 02b341c7ef033898171a9baf7b521273717ff87b +Author: Ludovic Rousseau +Date: Mon Apr 15 10:32:05 2013 +0000 + + Normalize values in hex or decimal + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6598 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CherryXX33.txt | 6 +++--- + readers/CherryXX44.txt | 2 +- + readers/GemPC433_SL.txt | 6 +++--- + readers/SCR331-DI-NTTCom.txt | 6 +++--- + readers/Verisign_secure_token.txt | 6 +++--- + 5 files changed, 13 insertions(+), 13 deletions(-) + +commit fe7102e9b618eb1c03efda2edd1d56eec93e3d62 +Author: Ludovic Rousseau +Date: Fri Apr 12 07:49:03 2013 +0000 + + Add Inside Secure AT90SCR200 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6597 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Inside_Secure_AT90SCR200.txt | 51 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 52 insertions(+) + +commit 52eb4716cbf471096466c728ca74e146d59dc90e +Author: Ludovic Rousseau +Date: Fri Apr 12 07:47:46 2013 +0000 + + Add Inside Secure AT90SCR100 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6596 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Inside_Secure_AT90SCR100.txt | 51 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 52 insertions(+) + +commit eced31d987f8a9216588369d1d571093dc54a534 +Author: Ludovic Rousseau +Date: Fri Apr 12 07:46:10 2013 +0000 + + Add Inside Secure AT90SCR050 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6595 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Inside_Secure_AT90SCR050.txt | 51 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 53 insertions(+), 1 deletion(-) + +commit c0a31ef784cdf1a5e0e469696e4c553d47f29c77 +Author: Ludovic Rousseau +Date: Tue Apr 9 15:59:51 2013 +0000 + + Add Gemalto IDBridge K3000 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6590 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Gemalto_IDBridge_K3000.txt | 107 +++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 109 insertions(+), 1 deletion(-) + +commit 6b8800a92f6ec0ca37a36aa5453b0e6e85e7ca72 +Author: Ludovic Rousseau +Date: Fri Apr 5 16:31:55 2013 +0000 + + Add SCR3310-NTTCom USB SmartCard Reader which uses bInterfaceClass: 0xFF + + Thanks to Hiroyuki Yamamoto for the patch + Closes Debian bug #704673 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6587 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/92_pcscd_ccid.rules | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 729af3146a988379167fbbf09cbe9f0d5935901c +Author: Ludovic Rousseau +Date: Thu Apr 4 19:25:17 2013 +0000 + + Add Morpho MSO1350 Fingerprint Sensor & SmartCard Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6586 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Morpho_MSO1350.txt | 50 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 51 insertions(+) + +commit 81a8dd6c0d34aba937b2e4a2f25338d8b19e04b0 +Author: Ludovic Rousseau +Date: Thu Apr 4 19:21:46 2013 +0000 + + Add Morpho MSO350/MSO351 Fingerprint Sensor & SmartCard Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6585 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Morpho_MSO350.txt | 51 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++++- + 2 files changed, 55 insertions(+), 1 deletion(-) + +commit a2d697cde97951436ae907c8f4e482c6de1b536b +Author: Ludovic Rousseau +Date: Thu Mar 14 09:12:47 2013 +0000 + + Add support of time extension for Escape commands + + An CCID Escape command can now use the time extension request mechanism + to ask for more time. + + Fixes Alioth bug [#314061] Time extension request and escape command + + Thanks to Rachid HARBI-ASSYSTEM for the feature request + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6570 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit 7252fd6279b1abb7f79867bea839300964678f08 +Author: Ludovic Rousseau +Date: Tue Mar 12 20:29:40 2013 +0000 + + Add Yubico Yubikey NEO CCID + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6569 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Yubico_Yubikey_neo.txt | 57 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 59 insertions(+), 1 deletion(-) + +commit 2df06cf255b7dea8f695c3e190dac7d181b51c8f +Author: Ludovic Rousseau +Date: Tue Mar 12 20:22:48 2013 +0000 + + Rename descriptor + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6567 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/{Yubico_Yubikey_neo.txt => Yubico_Yubikey_neo_otp.txt} | 0 + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit 06fa9e0efb9085921487a23e5bac6e7303301b1b +Author: Ludovic Rousseau +Date: Tue Mar 12 14:00:37 2013 +0000 + + Check the value returned by fgets(3) + + Fix compiler warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result] + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6566 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit c93f9fca4d4621601936e1d79dc2670f0f295085 +Author: Ludovic Rousseau +Date: Wed Mar 6 14:29:28 2013 +0000 + + cppcheck: Variable 'sent_length' is assigned a value that is never used. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6565 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +commit c8a02649dfd600fce80fe8b1218857e7c9855045 +Author: Ludovic Rousseau +Date: Wed Mar 6 14:27:48 2013 +0000 + + cppcheck: The scope of the variable 'm' can be reduced. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6564 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 98e858184dc88f40b5f9fb1c14efa59e15de3ddb +Author: Ludovic Rousseau +Date: Wed Mar 6 14:27:02 2013 +0000 + + cppcheck: The scope of the variable 'i' can be reduced. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6563 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 39cb72f1db79e20b02a20a2324e4b0e0bbf7e3a5 +Author: Ludovic Rousseau +Date: Wed Mar 6 14:23:22 2013 +0000 + + cppcheck: Variable 'interface' is assigned a value that is never used. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6562 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit c2d724a4381fdfcb86ee4a63f1c945f0a5f47b9f +Author: Ludovic Rousseau +Date: Wed Mar 6 14:21:07 2013 +0000 + + cppcheck: The scope of the variable 'voltage_code' can be reduced. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6561 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c94e9f9b24789bea2c0fd5bc4d09e4d12b7cc19b +Author: Ludovic Rousseau +Date: Wed Mar 6 14:20:22 2013 +0000 + + cppcheck: The scope of the variable 'count' can be reduced. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6560 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit eb0d685b481eb8f9bca652738a73073b8fa8f488 +Author: Ludovic Rousseau +Date: Fri Mar 1 17:49:15 2013 +0000 + + Add SafeTech SafeTouch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6548 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SafeTech_SafeTouch.txt | 46 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 49 insertions(+) + +commit c15162743455eb03b93e8fcda0a64ab9c71f8dde +Author: Ludovic Rousseau +Date: Fri Mar 1 11:10:54 2013 +0000 + + Add SpringCard H663 Series + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6541 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SpringCard_H663_Series.txt | 57 ++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 58 insertions(+) + +commit 44d1edf696c308758ea2ce90eab0571312ace655 +Author: Ludovic Rousseau +Date: Fri Mar 1 11:06:36 2013 +0000 + + Add SpringCard H512 Series + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6540 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SpringCard_H512_Series.txt | 57 ++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 59 insertions(+), 1 deletion(-) + +commit 814ac92471c4c8647c69084cf58d2fb1f94e3765 +Author: Ludovic Rousseau +Date: Fri Mar 1 11:01:09 2013 +0000 + + New firmware (1.71) for SpringCard NFC'Roll + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6539 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SpringCard_NFC_Roll.txt | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +commit 1b14f0b958c46b2d67595fae7c5356a435c0ff82 +Author: Ludovic Rousseau +Date: Mon Feb 18 17:14:44 2013 +0000 + + Add ACS APG8201 USB Reader with PID 0x8202 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6533 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACS_APG8201_v2.txt | 51 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 53 insertions(+), 1 deletion(-) + +commit 89e880728740ee78f6fed65327538ee45780e0c9 +Author: Ludovic Rousseau +Date: Sun Feb 17 13:46:41 2013 +0000 + + Add GIS Ltd SmartMouse USB + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6530 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GIS_SmartMouse.txt | 111 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +- + 2 files changed, 115 insertions(+), 1 deletion(-) + +commit 170598807fcf512fefa590eed7f7568c1ce94833 +Author: Ludovic Rousseau +Date: Fri Feb 15 08:27:37 2013 +0000 + + Add a missing "; to terminate a string + + The bug was introduced in revision 6518. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6528 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/create_Info_plist.pl | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0f8836314d31ec84c9466b448ede4ffaa74d7619 +Author: Ludovic Rousseau +Date: Thu Jan 31 19:09:48 2013 +0000 + + Add Yubico Yubikey NEO OTP+CCID + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6521 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Yubico_Yubikey_neo.txt | 56 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 60 insertions(+), 1 deletion(-) + +commit 96abd66015ed946c5c3b1e79f04e4b870a223413 +Author: Ludovic Rousseau +Date: Sun Jan 27 11:21:23 2013 +0000 + + Remove the duplicate CFBundleExecutable from Info.plist + + CFBundleExecutable key was used 2 times: + - The first occurence stored the bundle name (ifd-ccid.bundle) + - The second occurence stored the executable name (libccid.so or .dylib) + + The bundle name is not usefull and has been present since revision 3458 + (April 2009) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6518 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist.src | 5 +---- + src/Makefile.am | 2 +- + src/create_Info_plist.pl | 9 --------- + 3 files changed, 2 insertions(+), 14 deletions(-) + +commit 865e2f71961b9d9b27a3d7cc35ea5ca9f702c6e7 +Author: Ludovic Rousseau +Date: Tue Jan 22 17:39:58 2013 +0000 + + Add SpringCard NFC'Roll + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6512 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SpringCard_NFC_Roll.txt | 56 +++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 58 insertions(+), 1 deletion(-) + +commit 104d711cd67a29831130cccb73772e6d8c06b16d (tag: ccid-1.4.9) +Author: Ludovic Rousseau +Date: Wed Jan 16 15:11:53 2013 +0000 + + Release 1.4.9 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6507 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 14 +++++++++++--- + configure.ac | 2 +- + 2 files changed, 12 insertions(+), 4 deletions(-) + +commit f62ae2568848727c7a39acca723ac36f26e17105 +Author: Ludovic Rousseau +Date: Tue Nov 13 17:37:56 2012 +0000 + + Add REINER SCT cyberJack go + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6482 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ReinerSCT_cyberJack_go.txt | 58 ++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +- + 2 files changed, 60 insertions(+), 1 deletion(-) + +commit cb191134094c146c157a37855732223afa3ec2f2 +Author: Ludovic Rousseau +Date: Tue Nov 13 17:35:54 2012 +0000 + + Move ATMEL VaultIC460 in unsupported list + See revision 6479 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6481 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 85f231e3832abd4ecd05d346586a6a8f6948c837 +Author: Ludovic Rousseau +Date: Wed Oct 31 15:20:20 2012 +0000 + + IFDHSetProtocolParameters(): display the timeout + + If the reader has CCID_CLASS_AUTO_PPS_PROP then the negociations are + done by the reader itself and the default timeout + DEFAULT_COM_READ_TIMEOUT is used. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6478 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit bd98259de503fd3eb18aab4c28c38b31e301cad6 +Author: Ludovic Rousseau +Date: Fri Oct 12 16:47:21 2012 +0000 + + Add Aktiv Rutoken PINPad In + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6475 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Rutoken_PINPad_in.txt | 49 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 50 insertions(+) + +commit 48938572adb74fb77326df946ae52ebc289bbc5d +Author: Ludovic Rousseau +Date: Fri Oct 12 16:44:40 2012 +0000 + + Add Aktiv Rutoken PINPad Ex + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6474 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Rutoken_PINPad_ex.txt | 49 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 51 insertions(+), 1 deletion(-) + +commit e5263d26d139c364095ec6ca91bfe6264f9007b5 +Author: Ludovic Rousseau +Date: Sun Oct 7 11:45:35 2012 +0000 + + Fix typo + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6471 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2707566229c26c4e0b25914e41f3ae9d2685c0a0 (tag: ccid-1.4.8) +Author: Ludovic Rousseau +Date: Sun Oct 7 11:36:44 2012 +0000 + + Release 1.4.8 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6470 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 14 ++++++++++++++ + configure.ac | 2 +- + 2 files changed, 15 insertions(+), 1 deletion(-) + +commit b7c15f71da214e2b44b7fe0073e3a12188fd6eb5 +Author: Ludovic Rousseau +Date: Thu Oct 4 16:06:42 2012 +0000 + + Rename configure.in in configure.ac + + aclocal: warning: autoconf input should be named 'configure.ac', not 'configure.in' + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6469 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in => configure.ac | 0 + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit 30fce9389e261a178b7f7a7fe559654546106255 +Author: Ludovic Rousseau +Date: Fri Sep 14 07:46:16 2012 +0000 + + Updated version from autoamake-1.12 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6465 0ce88b0d-b2fd-0310-8134-9614164e65ea + + ylwrap | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +commit 78105951dd0d69391b057b74eba7d4800b4b1e2a +Author: Ludovic Rousseau +Date: Fri Sep 14 07:44:30 2012 +0000 + + Use pkg-config to find the libusb-1.0 arguments + + The libusb-1.0 path and link arguments are no more hard coded. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6464 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit e4891074be06d0994ef14faabe68a2fb12ab5bac +Author: Ludovic Rousseau +Date: Thu Sep 13 12:59:13 2012 +0000 + + Add MX5 SMART CCID DRIVER in the "disabled" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6457 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/MX5_SMART_CCID_DRIVER.txt | 49 +++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 53 insertions(+), 1 deletion(-) + +commit a01143d6661299da7a85fafa781987e8ea931e6c +Author: Ludovic Rousseau +Date: Mon Sep 3 16:03:50 2012 +0000 + + Add Inside Secure VaultIC 440 Smart Object + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6455 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Inside_Secure_VaultIC_440.txt | 49 +++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 50 insertions(+) + +commit 4bfaf4b5e5ac02d05c60c18cf2a44fd380abb258 +Author: Ludovic Rousseau +Date: Mon Sep 3 16:02:13 2012 +0000 + + Add Inside Secure VaultIC 420 Smart Object + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6454 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Inside_Secure_VaultIC_420.txt | 49 +++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 ++-- + 2 files changed, 52 insertions(+), 2 deletions(-) + +commit 1d2b8520057cb7efae662374f541fd46e574e1ef +Author: Ludovic Rousseau +Date: Thu Aug 30 17:04:44 2012 +0000 + + Use AX_PTHREAD macro instead of ACX_PTHREAD + + Fix some "autoreconf -vis -Wall" warnings + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6452 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + configure.in | 2 +- + m4/acx_pthread.m4 | 1 - + m4/ax_pthread.m4 | 1 + + 4 files changed, 3 insertions(+), 3 deletions(-) + +commit 366a061606b8bc82cc12c939b9f307ef9ac2ead0 +Author: Ludovic Rousseau +Date: Thu Aug 23 08:41:42 2012 +0000 + + Integrate m4/Makefile.am into Makefile.am + + The idea is to remove a Makefile files to speed up compilation. + + Thanks to Diego Elio Pettenò for the idea. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6438 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 3 ++- + configure.in | 1 - + m4/Makefile.am | 3 --- + 3 files changed, 2 insertions(+), 5 deletions(-) + +commit 2a405d5e99b4b095d6031fc78005a832d659555d +Author: Ludovic Rousseau +Date: Thu Aug 23 08:39:05 2012 +0000 + + Add missing PCSCv2part10.h + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6437 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 84f24501e06a9955a3aeff9a45cd7289395d9d23 +Author: Ludovic Rousseau +Date: Thu Aug 23 08:34:27 2012 +0000 + + Add AC_CONFIG_MACRO_DIR([m4]) as suggested by autoreconf + + libtoolize: Consider adding `AC_CONFIG_MACRO_DIR([m4])' to configure.in and + libtoolize: rerunning libtoolize, to keep the correct libtool macros in-tree. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6436 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 1 + + 1 file changed, 1 insertion(+) + +commit 50c2b48dc8b876a20beba6005eb2b1d01bd454a3 +Author: Ludovic Rousseau +Date: Tue Aug 7 14:56:20 2012 +0000 + + Use helper functions from libPCSCv2part10 project + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6406 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/Makefile.am | 2 +- + examples/PCSCv2part10.c | 1 + + examples/PCSCv2part10.h | 1 + + examples/scardcontrol.c | 65 +++++++++++++------------------------------------ + 4 files changed, 20 insertions(+), 49 deletions(-) + +commit 2ae201c280354573499bd98ec867fe5655de9a26 +Author: Ludovic Rousseau +Date: Tue Aug 7 09:37:43 2012 +0000 + + Add support of new PC/SC V2 part 10 properties: + - dwMaxAPDUDataSize + - wIdVendor + - wIdProduct + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6403 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +commit 72609968bf508cd354535be20b213b3330c46945 +Author: Ludovic Rousseau +Date: Thu Aug 2 18:06:38 2012 +0000 + + CreateChannelByNameOrChannel(): check device exists for the first + CmdGetSlotStatus() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6399 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit bce417a2614f2c1c88eafa59ef08ec6f3e0820c0 +Author: Ludovic Rousseau +Date: Thu Aug 2 13:40:34 2012 +0000 + + CreateChannelByNameOrChannel(): Do not change the default timeout for + the first call to CmdGetSlotStatus(). + + In revision 4938 the timeout is changed from default to 100 ms to avoid + a 2 seconds delay if the reader needs to resynchronize. + + In revision 5389 the timeout was changed from 100 ms to 1000 ms because + it was too sort for the Kobil KAAN Base reader. + + The idea now is to use the default value (DEFAULT_COM_READ_TIMEOUT + (3*1000)) for the first CmdGetSlotStatus() call. And then use a short + value (100 ms) for the 2 next calls. + + The reader should have enough time to start during the 3 first seconds. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6396 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 17 ++++++++++------- + 1 file changed, 10 insertions(+), 7 deletions(-) + +commit 72db97f0086f082317b6d3df31ea279907d13ecc +Author: Ludovic Rousseau +Date: Thu Jul 26 19:13:31 2012 +0000 + + New firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6394 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ActivkeySim.txt | 17 ++++++++--------- + 1 file changed, 8 insertions(+), 9 deletions(-) + +commit 044a513372fdbb27cb80a82867e3abb2a703e699 +Author: Ludovic Rousseau +Date: Thu Jul 26 19:05:43 2012 +0000 + + Add (again) SCR3310-NTTCom USB SmartCard Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6393 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCR3310-NTTCom.txt | 157 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +- + 2 files changed, 161 insertions(+), 1 deletion(-) + +commit b8f3e7475e43cb88db9fca18a270dfd53981887b +Author: Ludovic Rousseau +Date: Thu Jul 26 12:59:06 2012 +0000 + + New firmware (version E) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6390 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemPCTwin.txt | 101 ++++++++++++++++++++++++++++---------------------- + 1 file changed, 57 insertions(+), 44 deletions(-) + +commit 49700e876dbd9bd552fa997dacaaa0242e4fceaa +Author: Ludovic Rousseau +Date: Thu Jul 5 13:02:50 2012 +0000 + + New firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6387 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemPCTwin.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9629fe6d0f6387e6c538cadede4a1fac804ed878 +Author: Ludovic Rousseau +Date: Sat Jun 23 14:35:42 2012 +0000 + + New firmware. No other changes. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6352 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CherryST1044U.txt | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +commit aa9d7a8f584a348a554c7b0654d54e7de81de5db (tag: ccid-1.4.7) +Author: Ludovic Rousseau +Date: Fri Jun 22 08:53:40 2012 +0000 + + Release 1.4.7 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6350 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 62c252eb2985d54636659d9433a034e8b8cc0c1d +Author: Ludovic Rousseau +Date: Fri Jun 22 08:51:51 2012 +0000 + + Release 1.4.7 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6349 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 31 +++++++++++++++++++++++++++++++ + 1 file changed, 31 insertions(+) + +commit 4b7c0a76d6b749a4c8117559060fa344c3a3f0b7 +Author: Ludovic Rousseau +Date: Wed Jun 20 06:43:28 2012 +0000 + + OpenUSBByName(): Add debug log message when the interface found is not + the one we are looking for. + + This is in particular interesting for a composite device and the CCID + driver compiled with --enable-composite-as-multislot + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6348 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 3c3aa6de85e898115c493feb4925ad4fe3cd715e +Author: Ludovic Rousseau +Date: Fri Jun 15 18:00:15 2012 +0000 + + New firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6337 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/NXP_PR533.txt | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 93659c77dda32f7a34f0b6e05e0e0e85db13ddcf +Author: Ludovic Rousseau +Date: Wed Jun 13 06:39:09 2012 +0000 + + Add ACS CryptoMate64 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6331 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACS_CryptoMate64.txt | 50 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 52 insertions(+), 1 deletion(-) + +commit b63c196cd33b401369a5d516ebc017d6c208ac52 +Author: Ludovic Rousseau +Date: Wed Jun 6 12:37:12 2012 +0000 + + t1_transceive(): avoids a infinite retry loop + + Move the check for ISO 7816-3 Rule 7.4.2 (2 retried before resynch) + before the check for ISO 7816-3 Rule 7.2 (retransmission of R-block) + + Thanks to Martin Vogt for the bug report and patch + http://archives.neohapsis.com/archives/dev/muscle/2012-q2/0077.html + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6328 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit 81d962d286bb53505c713c75b2689cebc72a2ce5 +Author: Ludovic Rousseau +Date: Wed Jun 6 12:36:00 2012 +0000 + + t1_transceive(): avoids a infinite retry loop + + Add a check for ISO 7816-3 Rule 7.4.2 (2 retried before resync) in case + of "wrong nr". + + " currently I have an endless loop in t1_transceive. It happens from + time to time with the aladdin token. + + I added some printfs to the code. + I can see, that the errors are detected and then a t1_build + is called with a T1_OTHER_ERROR, retries are decreased, + but this is never evaluated in the loop path + and the retries counter counts and counts.... + I stopped it at: retries -1796. " + + Thanks to Martin Vogt for the bug report and patch + http://archives.neohapsis.com/archives/dev/muscle/2012-q2/0076.html + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6327 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 10be9bff24c094a09b0cd42b15c70820af47ae7d +Author: Ludovic Rousseau +Date: Wed Jun 6 12:06:37 2012 +0000 + + OpenUSBByName(): check the lists vendorID, productID and friendlyNames + have all the same size. + + This should prevent a crash if the parsing failed. For example it would + avoid a crash due to a bug similar to the one fixed in revision 6325: ie + a reader with [ ] in its name. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6326 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +commit 872e38305e6ba2ab461f40f0a98d3582f91fa29d +Author: Ludovic Rousseau +Date: Wed May 30 18:35:37 2012 +0000 + + Update descriptions + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6313 0ce88b0d-b2fd-0310-8134-9614164e65ea + + SCARDGETATTRIB.txt | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit e889576fce925a1d8bd27f5bc9e7050a705920a0 +Author: Ludovic Rousseau +Date: Sat May 26 15:33:07 2012 +0000 + + Always check for STATUS_NO_SUCH_DEVICE and return accordingly + + Thanks to Martin Vogt for the bug report and patch idea + http://archives.neohapsis.com/archives/dev/muscle/2012-q2/0057.html + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6311 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 77 +++++++++++++++++++++++++++++++--------------------------- + 1 file changed, 41 insertions(+), 36 deletions(-) + +commit df99fb7a7addc97152c9f76850c3951c151cf273 +Author: Ludovic Rousseau +Date: Sat May 26 15:10:07 2012 +0000 + + t1_xcv(): always return a negative value in case of error + + Thanks to Martin Vogt for the patch + http://archives.neohapsis.com/archives/dev/muscle/2012-q2/0057.html + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6310 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 5f23f6337f387c1b171e3655b84ff1442f1d6704 +Author: Ludovic Rousseau +Date: Sat May 19 08:36:28 2012 +0000 + + Add KOBIL Systems IDToken + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6309 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 3b9da43a20d7558535821041763fc7fded3699fc +Author: Ludovic Rousseau +Date: Sat May 19 08:20:04 2012 +0000 + + Add Reader-Info-Commands special APDU/command for the Kobil IDToken + + - Manufacturer command + - Product name command + - Firmware version command + - Driver version command + + The APDU are handled by the driver sice the reader do not support them. + These APDU/commands are used by the AusweisApp application and a German + eID card. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6308 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 51 insertions(+) + +commit 89572ea3ceac639335c09d815377c7536cdd7346 +Author: Ludovic Rousseau +Date: Sat May 19 08:13:34 2012 +0000 + + Hack for the Kobil IDToken and Geman eID card + + The German eID card is bogus and need to be powered off before a power + on + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6307 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +commit 8664ebaaec4b7076b31a91763d112d64ee18cd54 +Author: Ludovic Rousseau +Date: Sat May 19 08:11:56 2012 +0000 + + Add Kobil IDToken definition + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6306 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + 1 file changed, 1 insertion(+) + +commit 932ce7be1651ccb503bafa0ee65f66e1e718fe76 +Author: Ludovic Rousseau +Date: Sat May 19 08:10:08 2012 +0000 + + Give more time (3 seconds instead of 2) to the reader to answer + + The IDToken reader takes up to 2.5 seconds to answer to an + PC_to_RDR_GetSlotStatus command after the (contactless) card has been + removed. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6305 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/defs.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 205b1cadb23450c4ab807cfceba4e8ad68d7093b +Author: Ludovic Rousseau +Date: Fri May 18 08:05:39 2012 +0000 + + warning: 'libccid.la': linking libtool libraries using a non-POSIX + archiver requires 'AM_PROG_AR' in 'configure.in' + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6301 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 1 + + 1 file changed, 1 insertion(+) + +commit 511e25f2fb4038edb18dc417717f885436ca0810 +Author: Ludovic Rousseau +Date: Fri May 18 08:04:23 2012 +0000 + + autoupdated using autoupdate (GNU Autoconf) 2.69 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6300 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 29 ++++++++++++++--------------- + 1 file changed, 14 insertions(+), 15 deletions(-) + +commit 472a79de7ef76ca90b592f9c7f82d97ca9789e03 +Author: Ludovic Rousseau +Date: Wed May 16 12:40:26 2012 +0000 + + Firmware upgrade + + The new firmware supports extended APDU and iProduct changed from DP905 + to DP905v1.1 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6297 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Vasco_DP905.txt | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +commit 984069263590a693e805cc1d3581fa48c63695ab +Author: Ludovic Rousseau +Date: Tue May 15 18:50:35 2012 +0000 + + Add ACS ACR101 ICC Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6296 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACS_ACR101.txt | 50 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 52 insertions(+), 1 deletion(-) + +commit 33e3d11a83f268514cec67e5b471c81d8d576893 +Author: Ludovic Rousseau +Date: Fri May 11 16:30:26 2012 +0000 + + OpenUSBByName(): log the Info.plist used + + On Mac OS X the CCID driver may be installed many times with different + names using --enable-bundle=... + + With the Info.plist file name displayed it is possible to check the + correct Info.plist is used. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6292 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 1 + + 1 file changed, 1 insertion(+) + +commit 3ff394a14bcff07ef65d8a85425855b7a0300578 +Author: Ludovic Rousseau +Date: Tue May 1 13:59:24 2012 +0000 + + Add Alcor Micro AU9522 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6289 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/AlcorMicro_AU9522.txt | 111 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 9 ++-- + 2 files changed, 116 insertions(+), 4 deletions(-) + +commit c958f5d0c4104c50608d9b511cabf584ff6fa833 +Author: Ludovic Rousseau +Date: Wed Apr 18 18:51:25 2012 +0000 + + New firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6284 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/sid800.txt | 15 +++++++++------ + 1 file changed, 9 insertions(+), 6 deletions(-) + +commit a60ba15a9057967c2e7faf585bb937c2c59fd1ae +Author: Ludovic Rousseau +Date: Wed Apr 18 13:54:59 2012 +0000 + + Add Bit4id cryptokey + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6283 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/bit4id_cryptokey.txt | 53 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 54 insertions(+) + +commit 64b5ea3c3f02af6008578e33e9c4eac26a13e49e +Author: Ludovic Rousseau +Date: Wed Apr 18 13:52:03 2012 +0000 + + Add Bit4id iAM + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6282 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/bit4id_iam.txt | 53 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 54 insertions(+) + +commit 4b3b24a0f985c3050f92a5d2ee3b6cef22661ca7 +Author: Ludovic Rousseau +Date: Wed Apr 18 13:49:13 2012 +0000 + + Add Bit4id CKey4 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6281 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/bit4id_key4.txt | 53 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 54 insertions(+) + +commit 9fce841ab3b5b6eba9b988982d9418bcc71b5349 +Author: Ludovic Rousseau +Date: Wed Apr 18 13:46:19 2012 +0000 + + Add Bit4id miniLector-s + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6280 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/bit4id_minilector-s.txt | 50 +++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 51 insertions(+) + +commit 4223b646d6aaab4e4a57ca3047ac5bb2b844ecad +Author: Ludovic Rousseau +Date: Wed Apr 18 13:42:13 2012 +0000 + + Add Bit4id miniLector + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6279 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/bit4id_minilector.txt | 50 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 53 insertions(+) + +commit 7ba0e798d9606c42a398373a57dfe5562a3cde11 +Author: Ludovic Rousseau +Date: Wed Apr 18 13:41:03 2012 +0000 + + Sort the duplicates section by vid/pid + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6278 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 42 +++++++++++++++++++++--------------------- + 1 file changed, 21 insertions(+), 21 deletions(-) + +commit 331979a57bc50fcb4572063d7cd4685a7f1c7c1c +Author: Ludovic Rousseau +Date: Wed Apr 18 11:45:11 2012 +0000 + + Add NXP PR533 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6277 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/NXP_PR533.txt | 57 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 61 insertions(+), 1 deletion(-) + +commit ea1bb6de410b50c9c5f65ad718150fa0cba00409 +Author: Ludovic Rousseau +Date: Tue Apr 17 13:42:42 2012 +0000 + + Use auto suspend for CCID devices only + + The rule used "*:0b0000:*" and so was used even for composite devices + using a CCID interface. It was problematic for a keybord + CCID + interface since the keyboard was also automatically systended after a + few seconds of inactivity. + + The new rule uses ":0b0000:" so composite devices will not be configured + for USB automatic suspend. + + Closes Alioth bug [#313445] "Do not activate USB suspend for composite + devices: keyboard" + https://alioth.debian.org/tracker/index.php?func=detail&aid=313445&group_id=30105&atid=410085 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6275 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/92_pcscd_ccid.rules | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 06c8b0b2fa2f5c794ff4747e9daee5ac1065eb75 +Author: Ludovic Rousseau +Date: Fri Apr 13 13:45:16 2012 +0000 + + Use %zd instead of %ld for size_t size + + Fix compiler warning + ccid.c: In function `dump_gemalto_firmware_features': + ccid.c:122:2: warning: format `%ld' expects argument of type `long int', + but argument 6 has type `unsigned int' [-Wformat] + + sizeof returns a size_t value with a variable length depending on the + architecture. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6274 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8b0b132f986e481c4806238ac9abf5786b6744c3 +Author: Ludovic Rousseau +Date: Thu Apr 12 07:55:52 2012 +0000 + + Add Gemalto Ezio Shield Branch Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6273 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Gemalto_Ezio_Branch.txt | 56 +++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++- + 2 files changed, 58 insertions(+), 1 deletion(-) + +commit cc487a56fcc224ce74a355853dee77abef549a2a +Author: Ludovic Rousseau +Date: Sun Apr 8 07:53:56 2012 +0000 + + Add CCB eSafeLD + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6270 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CCB_eSafeLD.txt | 53 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++- + 2 files changed, 57 insertions(+), 1 deletion(-) + +commit 55fd3abef8024d6559dc15cbdf07b02071a9ff51 (tag: ccid-1.4.6) +Author: Ludovic Rousseau +Date: Fri Apr 6 16:16:19 2012 +0000 + + Release 1.4.6 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6266 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 33 +++++++++++++++++++++++++++++++++ + configure.in | 2 +- + 2 files changed, 34 insertions(+), 1 deletion(-) + +commit 46cb2fcbe1b7010490d62a84fbfb9d4effd3d9a5 +Author: Ludovic Rousseau +Date: Fri Apr 6 16:15:21 2012 +0000 + + Update to version 2011-08-25.18 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6265 0ce88b0d-b2fd-0310-8134-9614164e65ea + + ylwrap | 34 +++++++++++++++++++--------------- + 1 file changed, 19 insertions(+), 15 deletions(-) + +commit de413e6987a5f119617f7db6f7e8c290c0da500b +Author: Ludovic Rousseau +Date: Fri Apr 6 15:45:54 2012 +0000 + + Use the new SDK path for Xcode 4 + + Xcode is now a normal application downloaded from the Mac App Store. + All the files are now contained in /Applications/Xcode.app + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6264 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b4933b280d4bb5c4908e65add0bae0938a2f6d5f +Author: Ludovic Rousseau +Date: Thu Apr 5 09:55:10 2012 +0000 + + Use DWORD_D instead %ld to fix a warning on Mac OS X 64-bits + + ccid.c: In function 'set_gemalto_firmware_features': + ccid.c:204: warning: format '%ld' expects type 'long int', but argument + 6 has type 'RESPONSECODE' + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6260 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 41ec3d896d3487eb83a86bd15753fcb2ceebb640 +Author: Ludovic Rousseau +Date: Thu Apr 5 09:44:16 2012 +0000 + + Move definitions of DWORD_X and DWORD_D + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6259 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/defs.h | 11 +++++++++++ + src/ifdhandler.c | 10 ---------- + 2 files changed, 11 insertions(+), 10 deletions(-) + +commit da7e12245976943008a35c0ba29da08fdc19834a +Author: Ludovic Rousseau +Date: Wed Apr 4 20:44:20 2012 +0000 + + IFDHControl(): Add support of dwMaxAPDUDataSize + + This property indicates if a reader/driver supports extended APDU or + not. + + From PC/SC v2 part 10 (version 2.02.09 not yet published): + dwMaxAPDUDataSize: Maximal size of data the reader and its driver can support + 0: short APDU only. + 0 +Date: Wed Apr 4 07:44:51 2012 +0000 + + Remove KOBIL IDToken until support is complete + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6255 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +commit c924be00b00434400ccafdb5016c0098235d6e20 +Author: Ludovic Rousseau +Date: Mon Apr 2 08:21:56 2012 +0000 + + Minimal version of pcsc-lite is 1.8.3 + + We now use PCSCv2_PART10_PROPERTY_wIdVendor and + PCSCv2_PART10_PROPERTY_wIdProduct defined in pcsc-lite 1.8.3 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6254 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b05f0358285a1c5072c52636d41e9232d3db2969 +Author: Ludovic Rousseau +Date: Tue Mar 27 12:58:12 2012 +0000 + + Add support of Gemalto firmware features + + Gemalto readers support an Escape command to report features supported + (or not) by the reader. The reader can also report if specific bugs are + fixed or not. + + One of the fixed bug (in recent readers) is the bNumberMessage + management used in the Secure Modify CCID command. + + Thanks to Jean Lusetti for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6252 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/ccid.h | 9 +++-- + src/ccid_serial.c | 1 + + src/ccid_usb.c | 7 ++++ + src/commands.c | 48 ++++++++++++++++++++++++-- + 5 files changed, 161 insertions(+), 4 deletions(-) + +commit 0013da5941c5883b483db3bb313fadd175c4e7b5 +Author: Ludovic Rousseau +Date: Mon Mar 26 14:11:14 2012 +0000 + + SecurePINModify(): set the minimum timeout to 90 seconds + + Some readers have a default timeout of 60 seconds. We need to use a + larger value to timeout _after_ the reader. + + Same change as in revision 6243 but for SecurePINModify() instead of + SecurePINVerify() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6251 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit adcbd52f474b10bf8d40148a5ea5bfc6ad9fec4f +Author: Ludovic Rousseau +Date: Mon Mar 26 07:54:54 2012 +0000 + + Firmware update + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6250 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Gemalto_Ezio_Shield_PinPad.txt | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit 3284ac23c56a106a496f63869d24194a76ab5baf +Author: Ludovic Rousseau +Date: Fri Mar 23 10:02:04 2012 +0000 + + Add support of wIdVendor and wIdProduct properties + + PCSCv2_PART10_PROPERTY_wIdVendor and PCSCv2_PART10_PROPERTY_wIdProduct + are new in PC/SC v2 part 10 version 2.02.09 (not yet released as of + today) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6245 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +commit bab8662a3d46b2b1f70a9ae5bc467d9a8239e0a1 +Author: Ludovic Rousseau +Date: Fri Mar 23 08:35:08 2012 +0000 + + SecurePINVerify(): set the minimum timeout to 90 seconds + + Some readers have a default timeout of 60 seconds. We need to use a + larger value to timeout _after_ the reader. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6243 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d6c2c5d526d9219fdc41a949797b69c592049b4d +Author: Ludovic Rousseau +Date: Mon Mar 19 09:46:52 2012 +0000 + + CCID_Receive(): ICCD type A, wait for device ready + + "Here's a fix to make your driver operate in accordance with the ICCD + specification when using Version A control transfers. The status byte is + supposed to indicate when the device has a response ready. So I simply + added a call to CmdGetSlotStatus." + + Thanks to John Billings for the patch. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6240 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit a38dc80b93b7d723afc9046ed83d7da7ac02d918 +Author: Ludovic Rousseau +Date: Tue Mar 13 20:31:33 2012 +0000 + + Add KOBIL IDToken + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6239 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit ce51c41ef3829a255c53f6e835c7a6c957cbbf05 +Author: Ludovic Rousseau +Date: Tue Mar 13 20:23:18 2012 +0000 + + Add Kobil IDToken + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6238 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Kobil_IDToken.txt | 57 +++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 57 insertions(+) + +commit 165bb3bde5d7fbf2c1e83a37842f044a5a88c57c +Author: Ludovic Rousseau +Date: Fri Feb 24 08:50:11 2012 +0000 + + Some output improvements + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6233 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/Kobil_mIDentity_switch/Kobil_mIDentity_switch.c | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +commit 7c13d7369563db3d727e2f3cbc8941a49ab40ce0 +Author: Ludovic Rousseau +Date: Thu Feb 23 19:47:36 2012 +0000 + + Move SCR335 from supported to should work list since the V2.0 with a new + firmware has not been tested by me. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6232 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit c258b2f63e59d8190c300bffd401b41ad4b9001b +Author: Ludovic Rousseau +Date: Thu Feb 23 19:43:00 2012 +0000 + + Remove SCR 335 from the bogus firmware list + + The V2.0 model has a lower firmware version (2.04 instead of 5.23). The + reader should be less buggy (not yet checked) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6231 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 1 - + 1 file changed, 1 deletion(-) + +commit 84af9db3b5a2df755689528b2155842f4d373887 +Author: Ludovic Rousseau +Date: Thu Feb 23 19:41:38 2012 +0000 + + Firmware update for the V2.0 model + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6230 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCR335.txt | 124 ++++++++++++++++++++++++++++++++++++++++++++++++----- + 1 file changed, 113 insertions(+), 11 deletions(-) + +commit d344a71785c6608fc5a229734083534a2717ffa4 +Author: Ludovic Rousseau +Date: Fri Feb 17 14:51:55 2012 +0000 + + Correctly define DWORD_D on Linux + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6227 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c472c6fe16d4222483b3c417981156f2097af5fe +Author: Ludovic Rousseau +Date: Thu Feb 16 09:05:03 2012 +0000 + + Define GEMALTO_FIRMWARE_FEATURES structure + + Structure returned by Gemalto readers for the CCID Escape command 0x6A + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6226 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 56 insertions(+) + +commit 5f6deb34b2874c7080b615b1825949d7e83195c8 +Author: Ludovic Rousseau +Date: Wed Feb 15 14:31:13 2012 +0000 + + Use DWORD_X and DWORD_D to print a DWORD in hex or dec + + The definition of DWORD is uint32_t on Mac OS X and unsigned long with + official pcsc-lite. DWORD_X is defined as "%X" on Mac and "%lX" otherwise. + + A DWORD value is now always correctly logged/displayed on Mac OS X and the + compiler stops complaining. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6225 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 51 ++++++++++++++++++++++++++++++++------------------- + 1 file changed, 32 insertions(+), 19 deletions(-) + +commit 0bc4f8b87c3c6db7690905952916f1064ef4b0bf +Author: Ludovic Rousseau +Date: Tue Feb 14 19:58:53 2012 +0000 + + Add Macally NFC CCID eNetPad reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6224 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 13 ++++++++----- + 1 file changed, 8 insertions(+), 5 deletions(-) + +commit 035e78cb83bc6ad677695dfb9717fc7283e12a47 +Author: Ludovic Rousseau +Date: Tue Feb 14 19:37:04 2012 +0000 + + Add Macally NFC CCID eNetPad reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6221 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Macally_NFC_CCID_eNetPad.txt | 48 ++++++++++++++++++++++++++++++++++++ + 1 file changed, 48 insertions(+) + +commit c41adfa3302f39e5cf25f3c43705c47083a82448 +Author: Ludovic Rousseau +Date: Mon Feb 13 09:10:36 2012 +0000 + + CreateChannelByNameOrChannel(): add explicit braces + + Fix compiler warning: + ifdhandler.c: In function 'CreateChannelByNameOrChannel': + ifdhandler.c:81:5: warning: suggest explicit braces to avoid ambiguous 'else' [-Wparentheses] + + The problem is that DEBUG_INFO3() is not a code block but a "dangerous" + if () macro. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6220 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 6bbbe62aff146d5902294f050e6f5c959c64a0ec +Author: Ludovic Rousseau +Date: Mon Feb 13 09:06:52 2012 +0000 + + Factorise IFDHCreateChannelByName() and IFDHCreateChannel() + + The two functions were duplicates expect 2 lines. Factorisation will + avoid divergence of bug fixes (as it was the case for error management). + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6219 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 106 ++++++++++++------------------------------------------- + 1 file changed, 22 insertions(+), 84 deletions(-) + +commit c5c6a6001c52eb59064dc431200c6c54f1f6d50d +Author: Ludovic Rousseau +Date: Mon Feb 13 08:55:33 2012 +0000 + + IFDHCreateChannelByName(): favctorize code + + The code used to release the allocated resources is no more duplicated + in two places. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6218 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 16 +++++++++------- + 1 file changed, 9 insertions(+), 7 deletions(-) + +commit 8164b46371ea0116919d05e548a76f347a000baf +Author: Ludovic Rousseau +Date: Mon Feb 13 08:54:00 2012 +0000 + + IFDHCreateChannelByName(): check the value returned by ccid_open_hack_post() + + If ccid_open_hack_post() fails (the strings could not be loaded in a + GEMPCPINPAD reader as in revision 6216) then we return with an error + instead of ignoring the issue. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6217 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +commit d88abd959ced7ab36d6fe5898f4d64f9e216d6c1 +Author: Ludovic Rousseau +Date: Mon Feb 13 08:40:33 2012 +0000 + + ccid_open_hack_post(): return an error if needed + + Return IFD_COMMUNICATION_ERROR if it is not possible to load the strings + in a GEMPCPINPAD reader. This happens if the reader is deconnected + during this step. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6216 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit f8628e5eff5db5b27d3586b86328dd7e00550adb +Author: Ludovic Rousseau +Date: Tue Jan 31 16:55:29 2012 +0000 + + Disable SPE for HP USB CCID Smartcard Keyboard + + The Secure Pin Entry of the HP USB CCID Smartcard Keyboard idVendor: + 0x03F0 idProduct: 0x0036 is bogus and can't be used on Unix. + + 00000033 Control TxBuffer: 1E 1E 02 00 00 10 04 02 00 00 00 00 00 00 00 05 00 00 00 00 20 00 81 00 + 00000013 openct/proto-t1.c:571:t1_build() more bit: 0 + 00000039 -> 000000 69 14 00 00 00 00 24 00 00 00 00 1E 02 00 00 10 04 02 00 00 00 00 00 40 05 00 20 00 81 00 + 30005454 <- 000000 80 00 00 00 00 00 24 40 F0 00 + 00000059 commands.c:1339:CCID_Receive PIN timeout + + Instead of telling the reader has SPE and failing with an obscure error + the driver will disable the SPE feature. + + Thanks to Jörg Grundmann for the bug report. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6211 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 1 + + src/ccid.h | 1 + + 2 files changed, 2 insertions(+) + +commit 1c1024289d3a1ebfb659234a975fa73776c5e0ba +Author: Ludovic Rousseau +Date: Fri Jan 27 09:51:32 2012 +0000 + + Sort the readers of a same manufacturer by PID + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6207 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 90 +++++++++++++++++++++---------------------- + 1 file changed, 45 insertions(+), 45 deletions(-) + +commit 54792337e5c0aea467ffbfeeb96a2503c930077a +Author: Ludovic Rousseau +Date: Fri Jan 27 09:31:01 2012 +0000 + + Generated by website/generate_supported_readers.py + + The list of supported readers is now generated from list of USB + descriptor files. + + Readers without a .txt file are now NO MORE supported. They are: + Reader(s) without a .txt description + 0x08E6:0x34C1:Gemalto Ezio Shield Secure Channel + 0x08E6:0x34C4:Gemalto Ezio Generic + 0x04E6:0x511A:SCM SCR 3310 NTTCom + 0x0783:0x0008:C3PO LTC32 USBv2 with keyboard support + 0x0783:0x9002:C3PO TLTC2USB + 0x047B:0x020B:Silitek SK-3105 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6203 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 667 +++++++++++++++++++++++++----------------- + 1 file changed, 400 insertions(+), 267 deletions(-) + +commit fbadf4a04cffd2884c59cc13ba582ede075d10bb +Author: Ludovic Rousseau +Date: Mon Jan 23 13:57:45 2012 +0000 + + Duplicates of GemPCTwin.txt + + It is a duplicate by design since it is a symbolic link. Now that + supported_readers.txt is generated from the .txt file this is + problematic. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6191 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemPCTwin_serial.txt | 1 - + 1 file changed, 1 deletion(-) + +commit 5cb608b85129968abfc4bbaedcdcb71c3b1d9a01 +Author: Ludovic Rousseau +Date: Mon Jan 16 09:24:12 2012 +0000 + + Log to stdout by default + + This log service is only used on Mac OS X. Using stderr is problematic + when other log mesages are using stdout. The order is not respected if + stdout and stderr are redirected to a file. For example when using + handler_test. + + Now the logs are sent to stdout (by default) and also flushed after each + line. It is possible to use tee(1). + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6179 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.c | 18 +++++++++++------- + 1 file changed, 11 insertions(+), 7 deletions(-) + +commit dfbf473bc7a07a4015cd78f6c72c0388c86a1220 +Author: Ludovic Rousseau +Date: Thu Jan 12 13:12:27 2012 +0000 + + Todos_Connectable.txt is a duplicate of Todos_Cx00.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6168 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Todos_Connectable.txt | 54 ------------------------------------------- + 1 file changed, 54 deletions(-) + +commit 0ed227d780998f49f14b4742c605ed02df332d6a +Author: Ludovic Rousseau +Date: Tue Jan 3 19:19:57 2012 +0000 + + Add Teridian TSC12xxF + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6164 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Teridian_TSC12xxFV.09.txt | 72 +++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++ + 2 files changed, 75 insertions(+) + +commit c4f50fda8eabddb1d8aa279884a7fb156a38194c +Author: Ludovic Rousseau +Date: Tue Jan 3 17:33:04 2012 +0000 + + Add Avtor SecureToken + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6162 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Avtor_SecureToken.txt | 61 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 62 insertions(+) + +commit 60b6a4644477d9a23f29b0c138ceec0249130cc9 +Author: Ludovic Rousseau +Date: Mon Jan 2 19:20:12 2012 +0000 + + Update "Giesecke & Devrient StarSign Crypto USB Token" name on G&D + request + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6161 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a0f01571f62917e0fd0de695bdc0409fe2c8eb90 +Author: Ludovic Rousseau +Date: Mon Jan 2 10:58:41 2012 +0000 + + Build a Universal Binary driver only if libusb is also a Universal + Binary library + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6159 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 17 +++++++++++++++-- + 1 file changed, 15 insertions(+), 2 deletions(-) + +commit c9dba9a1710b967cbd54d29e5903a6bc5d28170f +Author: Ludovic Rousseau +Date: Mon Jan 2 10:46:44 2012 +0000 + + Add $Id$ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6158 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 2 ++ + 1 file changed, 2 insertions(+) + +commit ffef9a86f8a7cd57554d00f88caa0950e9d80261 +Author: Ludovic Rousseau +Date: Mon Jan 2 10:45:23 2012 +0000 + + Add -lobjc since objc_registerThreadWithCollector() is used now in + libusb-1.0.8-rc3 + + See libusb ticket #63 "libusb pthread usage causes error in garbage + collected Cocoa apps" + http://libusb.org/ticket/63 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6157 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 53b774a31c4b96cc31366c70080d00a5c32c3790 +Author: Ludovic Rousseau +Date: Sat Dec 31 16:41:54 2011 +0000 + + Add Vasco DIGIPASS KEY 202 with ProductID 0x0120 and 0x0122 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6154 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Vasco_DIGIPASS_KEY_202_0120.txt | 103 ++++++++++++++++++++++++++++++++ + readers/Vasco_DIGIPASS_KEY_202_0122.txt | 103 ++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 2 + + 3 files changed, 208 insertions(+) + +commit ca072215009c1901c332602e32495e160b8c7ace +Author: Ludovic Rousseau +Date: Fri Dec 16 21:15:31 2011 +0000 + + Add Vasco DIGIPASS KEY 101 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6144 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Vasco_DPKey101.txt | 111 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 112 insertions(+) + +commit 5bf159f71b596aafae2b496998f1fd6be4bb529f +Author: Ludovic Rousseau +Date: Fri Dec 16 21:03:03 2011 +0000 + + Add Avtor SC Reader 371 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6141 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Avtor_SC_Reader_371.txt | 61 +++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++ + 2 files changed, 64 insertions(+) + +commit 8411e7cfbcce44bcaa51e41c21a0bb2b87fb414b +Author: Ludovic Rousseau +Date: Tue Dec 6 10:29:36 2011 +0000 + + Fix bug from revision 6134 + + The correct return value is STATUS_SUCCESS for success. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6135 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5a5e17953f66ba8bc412a9f1335e56b8bda08155 +Author: Ludovic Rousseau +Date: Tue Dec 6 10:25:56 2011 +0000 + + OpenUSBByName(): fix memory leaks + + Some memory was not released in case of errors. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6134 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 34 ++++++++++++++++++++++------------ + 1 file changed, 22 insertions(+), 12 deletions(-) + +commit eb2a3c7570adb0a6958b60cd141f38c733859044 +Author: Ludovic Rousseau +Date: Tue Dec 6 10:16:54 2011 +0000 + + IFDHCreateChannelByName(): fix memory leak + + Memory leak if the OpenPortByName() failed + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6133 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 4c0dea3c7aa0079bc0ddbd939ef1d7ac47941b51 +Author: Ludovic Rousseau +Date: Thu Dec 1 19:16:08 2011 +0000 + + Fix OmniKey 6321 CLi USB name + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6125 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2c2363890f992dc5bdf3a35f684111623cdad407 +Author: Ludovic Rousseau +Date: Thu Dec 1 18:05:22 2011 +0000 + + Add OmniKey 6321 USB + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6123 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Omnikey_6321.txt | 170 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 171 insertions(+) + +commit ad0939c252d673f21bd3cab70dcba23802fc146b +Author: Ludovic Rousseau +Date: Thu Nov 3 20:13:13 2011 +0000 + + New firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6100 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Xiring_MyLeo.txt | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 3b3a528dec2fcd85c181e64ea4fcf8daf856c92c +Author: Ludovic Rousseau +Date: Thu Nov 3 20:09:58 2011 +0000 + + New firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6099 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Kobil_EMV_CAP.txt | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit beff69f5f81d9c448b014a11d2e3315279fc13cb +Author: Ludovic Rousseau +Date: Thu Nov 3 19:47:44 2011 +0000 + + New firmware release + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6097 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Feitian_SCR301.txt | 74 ++++++++++++++++++++++++++++++++++++---------- + 1 file changed, 59 insertions(+), 15 deletions(-) + +commit fcce99a7039509611d13af4cc552d0fb94deaf97 +Author: Ludovic Rousseau +Date: Thu Nov 3 19:35:43 2011 +0000 + + ControlUSB(): return a negative value in case of error instead of + STATUS_UNSUCCESSFUL (0xFB) + + The calling code is checking for a negative return value so we adapt the + API to its usage. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6096 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5d04a829ca0e0b236948e0aaf446fb770840788c +Author: Ludovic Rousseau +Date: Sun Oct 30 12:52:49 2011 +0000 + + Convert "&" in a reader name into "&" + + For example the name "Giesecke & Devrient" does not work on Mac OS X + using hotplug_macosx.c and generates the error: + 00000683 hotplug_macosx.c:161:HPDriversGetFromDirectory() error getting + vendor ID from bundle + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6088 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/create_Info_plist.pl | 1 + + 1 file changed, 1 insertion(+) + +commit ff7b8e5dc6813ee304fbddaa364c7b03076afd56 +Author: Ludovic Rousseau +Date: Fri Oct 28 09:33:01 2011 +0000 + + Add SCM SDI 011 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6085 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCM_SDI011.txt | 55 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 56 insertions(+) + +commit 41a6851de0b3001843328a0820bd7aa5efd5907a +Author: Ludovic Rousseau +Date: Mon Oct 24 12:28:16 2011 +0000 + + Move a variable to the block it is used + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6075 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 92b381143d98bcb0aeb4e28543e2ec6dbca13676 +Author: Ludovic Rousseau +Date: Mon Oct 24 12:26:49 2011 +0000 + + Display PIN_PROPERTIES_STRUCTURE if any + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6074 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + +commit 3fa5859d2f713a2a247a1911bf4e0190456d6ffd +Author: Ludovic Rousseau +Date: Sun Oct 23 09:51:43 2011 +0000 + + Add Inside Secure VaultIC 460 Smart Object + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6066 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Inside_Secure_VaultIC_460_Smart_Object.txt | 49 ++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++ + 2 files changed, 52 insertions(+) + +commit ac4da208a4fcefa98f2983d7c429249a4898fe44 +Author: Ludovic Rousseau +Date: Sun Oct 23 09:31:07 2011 +0000 + + Add Fujitsu SmartCase KB SCR eSIG + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6064 0ce88b0d-b2fd-0310-8134-9614164e65ea + + ...suTechnologySolutions_SmartCase_KB_SCR_eSIG.txt | 65 ++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 66 insertions(+) + +commit aaf0ef50ce74c1ff4fd82bb3d2a9f0df8ebd9bff +Author: Ludovic Rousseau +Date: Thu Oct 20 14:01:27 2011 +0000 + + InterruptStop(): Do not interrupt two times (or more) the same libusb + transfer + + This can happen within SCardDisconnect() on the same reader from 2 or + more threads/processes. This is the case with + PCSC.work/UnitaryTests/ThreadSafeConnect.py + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6049 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 1 + + 1 file changed, 1 insertion(+) + +commit 07aef5af726a33220bb43fc1e9ef1fdedd546794 +Author: Ludovic Rousseau +Date: Fri Oct 14 11:50:35 2011 +0000 + + Add Giesecke & Devrient StarSign CUT + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6040 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GnD_StarSign_CUT.txt | 112 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 5 +- + 2 files changed, 115 insertions(+), 2 deletions(-) + +commit 81cee7ffb4624e625b686d04de9e086e28bf18c9 (tag: ccid-1.4.5) +Author: Ludovic Rousseau +Date: Tue Oct 11 20:20:53 2011 +0000 + + Release 1.4.5 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6032 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 15 +++++++++++++++ + configure.in | 2 +- + 2 files changed, 16 insertions(+), 1 deletion(-) + +commit 1cdae4d0bceef0f2b27a548ebb04a8ab19ddd194 +Author: Ludovic Rousseau +Date: Mon Oct 10 13:04:38 2011 +0000 + + Remove a debug log + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6025 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 1 - + 1 file changed, 1 deletion(-) + +commit aa3c34b8fea64b6ff6b01df7cd379af969703343 +Author: Ludovic Rousseau +Date: Mon Oct 10 13:03:49 2011 +0000 + + Remove a const qualifier to avoid a warning on free() + + ccid_usb.c: In function 'CloseUSB': + ccid_usb.c:742:4: warning: passing argument 1 of 'free' discards 'const' + qualifier from pointer target type [enabled by default] + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6024 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c5205299804f3eefe848cbbca96522c945513c0e +Author: Ludovic Rousseau +Date: Mon Oct 10 13:02:29 2011 +0000 + + CloseUSB(): free the sIFD_iManufacturer allocated resource is needed + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6023 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit bdf393f8f91d66c9edc82c7ae8eb011203dd3ac4 +Author: Ludovic Rousseau +Date: Mon Oct 10 13:00:55 2011 +0000 + + Remove debug log + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6022 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 1 - + 1 file changed, 1 deletion(-) + +commit b61e55b40307430455373f6f907b3d620127b4ab +Author: Ludovic Rousseau +Date: Mon Oct 10 13:00:23 2011 +0000 + + SCARD_ATTR_VENDOR_NAME and SCARD_ATTR_VENDOR_IFD_VERSION are not the + vendor name and version of the driver but of the IFD: InterFace Device + i.e. the smart card reader. + + We then return the USB iManufacturer string as SCARD_ATTR_VENDOR_NAME + and USB bcdDevice as SCARD_ATTR_VENDOR_IFD_VERSION + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6021 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 10 ++++++++++ + src/ccid_serial.c | 2 ++ + src/ccid_usb.c | 17 +++++++++++++++++ + src/ifdhandler.c | 36 +++++++++++++++++++++++------------- + 4 files changed, 52 insertions(+), 13 deletions(-) + +commit b5a254fd5a134c83c251d2eb5510089844465bfd +Author: Ludovic Rousseau +Date: Wed Oct 5 11:18:04 2011 +0000 + + Firmware update + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@6000 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ActivCardV3.txt | 132 +++++++++++++++++++++++++++++++++++++++++++----- + 1 file changed, 118 insertions(+), 14 deletions(-) + +commit a888debbbace73dc60585627a2c47e53d4adce30 +Author: Ludovic Rousseau +Date: Sun Oct 2 12:17:55 2011 +0000 + + Add support of FEATURE_CCID_ESC_COMMAND and bPPDUSupport + + FEATURE_CCID_ESC_COMMAND is available only if ifdDriverOptions (from + Info.plist config file) has bit 1 set: + + 1: DRIVER_OPTION_CCID_EXCHANGE_AUTHORIZED + the CCID Exchange command is allowed. You can use it through + SCardControl(hCard, IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE, ...) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5991 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 21 ++++++++++++++++++++- + 1 file changed, 20 insertions(+), 1 deletion(-) + +commit a8b55c18bb0e5522ecca1ecc273a7d7a27ffc7c0 +Author: Ludovic Rousseau +Date: Sun Oct 2 12:10:07 2011 +0000 + + Use FEATURE_CCID_ESC_COMMAND to get the firmware of a GemPC reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5990 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 23 +++++++++++++++++++++++ + 1 file changed, 23 insertions(+) + +commit 33a88f910d60b78761b9a49f9bb312aaa98d41b3 +Author: Ludovic Rousseau +Date: Sun Oct 2 11:58:47 2011 +0000 + + Add support of PCSCv2_PART10_PROPERTY_bPPDUSupport and + FEATURE_CCID_ESC_COMMAND + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5989 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +commit 5fbb70bd54cdba289c2762165f908a26b43a82c6 +Author: Ludovic Rousseau +Date: Tue Sep 20 20:40:02 2011 +0000 + + ControlUSB(): log an eror if libusb_control_transfer() fails + + Instead of passing a negative length to DEBUG_XXD() and make it crash. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5959 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +commit c38e32fe253b93d1ec83383af7431b7095ac499b +Author: Ludovic Rousseau +Date: Tue Sep 13 12:20:20 2011 +0000 + + Add missing files in .gitignore + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5952 0ce88b0d-b2fd-0310-8134-9614164e65ea + + .gitignore | 39 +++++++++++++++++++++++++++++++-------- + 1 file changed, 31 insertions(+), 8 deletions(-) + +commit 587112ef905925e60435a28c68d976818701e116 +Author: Ludovic Rousseau +Date: Fri Sep 2 07:48:13 2011 +0000 + + Create .gitignore files + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5927 0ce88b0d-b2fd-0310-8134-9614164e65ea + + .gitignore | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 66 insertions(+) + +commit 10d3500d95dceb8f491287ec96f0083b7d646a45 +Author: Ludovic Rousseau +Date: Wed Aug 31 15:46:13 2011 +0000 + + Add SDS DOMINO-Key TWIN Pro + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5925 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SDS4ID_DominoKeyPro_100.txt | 105 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 106 insertions(+) + +commit 39b2112e47e8755a1ec75bef010b831798f51ac1 +Author: Ludovic Rousseau +Date: Wed Aug 31 13:21:17 2011 +0000 + + Add BIFIT iBank2Key + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5923 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/BIFIT_iBank2key.txt | 49 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 50 insertions(+) + +commit 46a42a714c434896a8689c625e2becc2a49ecb13 +Author: Ludovic Rousseau +Date: Tue Aug 30 11:34:45 2011 +0000 + + Add Gemalto SA .NET Dual + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5921 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Gemalto_SA_dotNet_Dual.txt | 50 ++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 51 insertions(+) + +commit 9570479174096c31a23aae9a5ba0e31e79661ade +Author: Ludovic Rousseau +Date: Sat Aug 27 15:50:04 2011 +0000 + + Remove extra spaces + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5916 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.h | 2 +- + src/ifdhandler.c | 6 +++--- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit ca3aa9cfa342ecd91880e299743c4bc78f7a08c0 +Author: Ludovic Rousseau +Date: Thu Aug 25 21:12:33 2011 +0000 + + Remove extra spaces + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5912 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit b8b35f5c36540656e0281b00265603a70e361153 +Author: Ludovic Rousseau +Date: Thu Aug 25 18:26:22 2011 +0000 + + Add Precise Sense MC reader (with fingerprint) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5911 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Precise_Sense_MC.txt | 170 +++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 170 insertions(+) + +commit bd19fea955bef188290092181ce4d4d4dabf2b52 +Author: Ludovic Rousseau +Date: Wed Aug 24 09:30:55 2011 +0000 + + Do not build simclist with (unused) file dump option + + Gain 5kB (or 5%) space for the binary text segment of libccid.so + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5909 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 348aa5ac2646131f536de505383649fa9f1cdbce +Author: Ludovic Rousseau +Date: Wed Aug 24 09:16:36 2011 +0000 + + OpenSerial(): remove useless casts + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5908 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 47ac78d6dd4a7d8aa355caffce46f796ba4cd84d +Author: Ludovic Rousseau +Date: Wed Aug 24 09:07:20 2011 +0000 + + CCID_Transmit(): use a variable-length array + + Use a VLA instead of static size of 65556 to limit stack consumption + + Coverity: stack_use_local: Local variable "cmd" stack use: 65556 bytes + -> 65572 bytes total. + stack_use_overflow: The maximum stack use of 32768 bytes is exceeded. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5907 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 9 +-------- + 1 file changed, 1 insertion(+), 8 deletions(-) + +commit feeee6700ddbda57a48ea94539d4dfbe27ae6eda +Author: Ludovic Rousseau +Date: Wed Aug 24 09:03:56 2011 +0000 + + SecurePINModify(): use a variable-length array + + Use a VLA instead of static size of 65576 to limit stack consumption + + Coverity: stack_use_local: Local variable "cmd" stack use: 65576 bytes + -> 65592 bytes total. + stack_use_overflow: The maximum stack use of 32768 bytes is exceeded. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5906 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 10 +--------- + 1 file changed, 1 insertion(+), 9 deletions(-) + +commit 674d206cf52b94173d6820303af11b3656ee83fb +Author: Ludovic Rousseau +Date: Wed Aug 24 09:00:46 2011 +0000 + + SecurePINVerify(): use a variable-length array + + Use a VLA instead of static size of 65572 to limit stack consumption + + Coverity: stack_use_local: Local variable "cmd" stack use: 65572 + bytes -> 65588 bytes total. + stack_use_overflow: The maximum stack use of 32768 bytes is exceeded. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5905 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 10 +--------- + 1 file changed, 1 insertion(+), 9 deletions(-) + +commit 7700c3ce5afd175f748776bdb26f4e18bd3bb1af +Author: Ludovic Rousseau +Date: Wed Aug 24 08:45:39 2011 +0000 + + Add a missing #include "strlcpycat.h" needed on GNU/Linux + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5904 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.c | 1 + + 1 file changed, 1 insertion(+) + +commit f62450600e1f7daa1492ea3bb371517a889dbaea +Author: Ludovic Rousseau +Date: Wed Aug 24 08:43:28 2011 +0000 + + SetParameters(): use a variable-length array + + Use a VLA instead of static size of 65556 to limit stack consumption + + Coverity: Event stack_use_local: Local variable "cmd" stack use: 65556 + bytes -> 65572 bytes total. + Event stack_use_overflow: The maximum stack use of 32768 bytes is + exceeded. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5903 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +commit 2487e2ea6d12850b5fb6d152109363ce0a839a75 +Author: Ludovic Rousseau +Date: Wed Aug 24 08:39:44 2011 +0000 + + Remove extra spaces + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5902 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 67f9e56fb6375045b5c6ed763bd080036da2341a +Author: Ludovic Rousseau +Date: Sun Aug 21 13:53:21 2011 +0000 + + Use a variable-length array + + The debug message buffer is no more with a fixed size (around 256 bytes + of buffer to log) but uses a variable-length array. + + This is available in GCC in C90 mode and is mandatory in C99 standard. + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5897 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.c | 32 ++++++++++++-------------------- + 1 file changed, 12 insertions(+), 20 deletions(-) + +commit 2c95550fed63cfe923159bd297c7ff4cd90c9b9b +Author: Ludovic Rousseau +Date: Sat Aug 20 18:44:04 2011 +0000 + + Remove extra spaces and tabs + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5895 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + src/ccid.h | 4 ++-- + src/commands.c | 14 +++++++------- + src/parse.c | 6 +++--- + 4 files changed, 13 insertions(+), 13 deletions(-) + +commit d4c34b552e4812ed5dc65bb1691ea516be32f1c7 +Author: Ludovic Rousseau +Date: Fri Aug 19 09:54:21 2011 +0000 + + Add Gemalto Ezio Shield PinPad reader + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5893 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Gemalto_Ezio_Shield_PinPad.txt | 56 ++++++++++++++++++++++++++++++++++ + 1 file changed, 56 insertions(+) + +commit e837350d2bfe68a8bcfede1bf5f953e5893f4491 +Author: Ludovic Rousseau +Date: Wed Aug 17 21:11:01 2011 +0000 + + Add BIFIT USB-Token iBank2key + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5890 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/BIFIT_USB-Token_iBank2key.txt | 53 +++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++ + 2 files changed, 56 insertions(+) + +commit cea9a52dc8983b6fa19d2334591175b148653680 +Author: Ludovic Rousseau +Date: Fri Aug 5 14:14:12 2011 +0000 + + Add Ubisys 13.56MHz RFID (CCID) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5878 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Ubisys_RFID.txt | 51 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 54 insertions(+) + +commit ae9511f0b911289a7eb8260e6e593d523f1cfe1e +Author: Ludovic Rousseau +Date: Sat Jul 9 12:18:21 2011 +0000 + + Fix compiler warnings + + ifdhandler.c: In function `IFDHCreateChannelByName': + ifdhandler.c:80:2: warning: format `%X' expects argument of type + `unsigned int', but argument 6 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHCreateChannel': + ifdhandler.c:201:2: warning: format `%X' expects argument of type + `unsigned int', but argument 6 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHCloseChannel': + ifdhandler.c:294:2: warning: format `%X' expects argument of type + `unsigned int', but argument 7 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHPolling': + ifdhandler.c:331:3: warning: format `%X' expects argument of type + `unsigned int', but argument 7 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHSleep': + ifdhandler.c:346:2: warning: format `%X' expects argument of type + `unsigned int', but argument 7 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHStopPolling': + ifdhandler.c:367:2: warning: format `%X' expects argument of type + `unsigned int', but argument 7 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHGetCapabilities': + ifdhandler.c:401:2: warning: format `%X' expects argument of type + `unsigned int', but argument 6 has type `DWORD' [-Wformat] + ifdhandler.c:401:2: warning: format `%X' expects argument of type + `unsigned int', but argument 8 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHSetCapabilities': + ifdhandler.c:660:2: warning: format `%X' expects argument of type + `unsigned int', but argument 6 has type `DWORD' [-Wformat] + ifdhandler.c:660:2: warning: format `%X' expects argument of type + `unsigned int', but argument 8 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHSetProtocolParameters': + ifdhandler.c:702:2: warning: format `%d' expects argument of type `int', + but argument 6 has type `DWORD' [-Wformat] + ifdhandler.c:702:2: warning: format `%X' expects argument of type + `unsigned int', but argument 8 has type `DWORD' [-Wformat] + ifdhandler.c:920:5: warning: format `%d' expects argument of type `int', + but argument 6 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHPowerICC': + ifdhandler.c:1153:2: warning: format `%X' expects argument of type + `unsigned int', but argument 8 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHTransmitToICC': + ifdhandler.c:1283:2: warning: format `%X' expects argument of type + `unsigned int', but argument 7 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHControl': + ifdhandler.c:1325:2: warning: format `%X' expects argument of type + `unsigned int', but argument 6 has type `DWORD' [-Wformat] + ifdhandler.c:1325:2: warning: format `%X' expects argument of type + `unsigned int', but argument 8 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHICCPresence': + ifdhandler.c:1616:2: warning: format `%X' expects argument of type + `unsigned int', but argument 7 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHCreateChannelByName': + ifdhandler.c:80:2: warning: format `%X' expects argument of type + `unsigned int', but argument 6 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHCreateChannel': + ifdhandler.c:201:2: warning: format `%X' expects argument of type + `unsigned int', but argument 6 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHCloseChannel': + ifdhandler.c:294:2: warning: format `%X' expects argument of type + `unsigned int', but argument 7 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHGetCapabilities': + ifdhandler.c:401:2: warning: format `%X' expects argument of type + `unsigned int', but argument 6 has type `DWORD' [-Wformat] + ifdhandler.c:401:2: warning: format `%X' expects argument of type + `unsigned int', but argument 8 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHSetCapabilities': + ifdhandler.c:660:2: warning: format `%X' expects argument of type + `unsigned int', but argument 6 has type `DWORD' [-Wformat] + ifdhandler.c:660:2: warning: format `%X' expects argument of type + `unsigned int', but argument 8 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHSetProtocolParameters': + ifdhandler.c:702:2: warning: format `%d' expects argument of type + `int', but argument 6 has type `DWORD' [-Wformat] + ifdhandler.c:702:2: warning: format `%X' expects argument of type + `unsigned int', but argument 8 has type `DWORD' [-Wformat] + ifdhandler.c:920:5: warning: format `%d' expects argument of type + `int', but argument 6 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHPowerICC': + ifdhandler.c:1153:2: warning: format `%X' expects argument of type + `unsigned int', but argument 8 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHTransmitToICC': + ifdhandler.c:1283:2: warning: format `%X' expects argument of type + `unsigned int', but argument 7 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHControl': + ifdhandler.c:1325:2: warning: format `%X' expects argument of type + `unsigned int', but argument 6 has type `DWORD' [-Wformat] + ifdhandler.c:1325:2: warning: format `%X' expects argument of type + `unsigned int', but argument 8 has type `DWORD' [-Wformat] + + ifdhandler.c: In function `IFDHICCPresence': + ifdhandler.c:1616:2: warning: format `%X' expects argument of type + `unsigned int', but argument 7 has type `DWORD' [-Wformat] + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5871 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 28 ++++++++++++++-------------- + 1 file changed, 14 insertions(+), 14 deletions(-) + +commit e97f2fd4d0054d736444d3d6db4fed280c98cfd8 +Author: Ludovic Rousseau +Date: Sat Jul 9 12:14:29 2011 +0000 + + Fix compiler warning + + ccid_usb.c: In function `OpenUSBByName': + ccid_usb.c:245:2: warning: format `%s' expects argument of type `char + *', but argument 6 has type `void *' [-Wformat] + ccid_usb.c:246:2: warning: format `%s' expects argument of type `char + *', but argument 6 has type `void *' [-Wformat] + ccid_usb.c:247:2: warning: format `%s' expects argument of type `char + *', but argument 6 has type `void *' [-Wformat] + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5870 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2106d22680848b0b5a844a93f9ac5cfd38d8c01a +Author: Ludovic Rousseau +Date: Wed Jul 6 09:58:52 2011 +0000 + + T0ProcSW1(): remove 2 useless variables after revision 5834 + + commands.c: In function 'T0ProcSW1': + commands.c:1794: warning: unused variable 'rcv_len_tmp' + commands.c:1793: warning: unused variable 'rcv_buf_tmp' + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5839 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 -- + 1 file changed, 2 deletions(-) + +commit 67b0e9370281f1fecfcb84eb9e4cf9a082691476 +Author: Ludovic Rousseau +Date: Wed Jul 6 09:56:25 2011 +0000 + + Fix compiler warning + + ifdhandler.c: In function ‘IFDHGetCapabilities’: + ifdhandler.c:612: warning: implicit declaration of function ‘strlcpy’ + ifdhandler.c:612: warning: nested extern declaration of ‘strlcpy’ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5838 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 1 + + 1 file changed, 1 insertion(+) + +commit c5dc6aae92ee44af62c0834d3b7695c6c246c7a7 +Author: Ludovic Rousseau +Date: Wed Jul 6 09:54:00 2011 +0000 + + Add #include "strlcpycat.h" + + coverity: Event implicit_func_decl: function "strlcpy" declared + implicitly + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5837 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 1 + + 1 file changed, 1 insertion(+) + +commit 9b5f6168e811e486975c60bf0fd33e8a64fc3c41 +Author: Ludovic Rousseau +Date: Wed Jul 6 09:40:10 2011 +0000 + + log_xxd(): use safer snprintf() instead of sprintf() + + coverity: Event secure_coding: [VERY RISKY]. Using "sprintf" can cause a + buffer overflow when done incorrectly. Because sprintf() assumes an + arbitrarily long string, callers must be careful not to overflow the + actual space of the destination. Use snprintf() instead, or correct + precision specifiers. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5836 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 6a3fcb6b256ba0fc463d5a8b4337095ba6eb9689 +Author: Ludovic Rousseau +Date: Wed Jul 6 09:22:58 2011 +0000 + + CmdEscape(): fix a memory leak + + coverity: Event leaked_storage: Variable "cmd_out" going out of scope + leaks the storage it points to. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5835 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 1 + + 1 file changed, 1 insertion(+) + +commit 0d58b525ceab1f6036df68649da0acc2e61e7333 +Author: Ludovic Rousseau +Date: Wed Jul 6 09:19:08 2011 +0000 + + T0ProcSW1(): remove dead code. + + The case (return_value != IFD_SUCCESS) is already treated a few lines + above. + + coverity: Event dead_error_begin: Execution cannot reach this statement + "rcv_buf_tmp[0] = rcv_buf_tm...". + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5834 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 6 ------ + 1 file changed, 6 deletions(-) + +commit 69310ae4d00f2773c870f6e954e84cdd6deed793 +Author: Ludovic Rousseau +Date: Wed Jul 6 09:09:52 2011 +0000 + + OpenSerialByName(): use safer strlcpy() instead of strncpy() + + coverity: Event buffer_size_warning: Calling strncpy with a maximum size + argument of 255 bytes on destination array "reader_name" of size 255 + bytes might leave the destination string unterminated. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5833 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 642faaff42e479b6c85223a72ca1307660a3e896 +Author: Ludovic Rousseau +Date: Tue Jul 5 22:07:28 2011 +0000 + + IFDHGetCapabilities(): use strlcpy() instead of the insecure strcpy + + No problem was expected since pcsc-lite uses a big buffer. + + coverity: Event secure_coding: [VERY RISKY]. Using "strcpy" can cause a + buffer overflow when done incorrectly. If the destination string of a + strcpy() is not large enough then anything might happen. Use strncpy() + instead. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5832 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +commit c42639e6d1ce98c6aaf683bae04416d97e9052ce +Author: Ludovic Rousseau +Date: Tue Jul 5 21:19:27 2011 +0000 + + CmdXfrBlockAPDU_extended(): Initialize local_rx_length + + Silence coverity: Event uninit_use_in_call: Using uninitialized value + "local_rx_length" when calling "CCID_Receive". + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5829 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ad156990036f6bda642cfb6647b1d6926539221d +Author: Ludovic Rousseau +Date: Tue Jul 5 21:16:18 2011 +0000 + + Fix a UNREACHABLE coverity error + + Code after the goto was dead code + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5828 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 85e5d16aa101972b37d9ff9ab9311e7b7649b85c +Author: Ludovic Rousseau +Date: Tue Jul 5 21:07:50 2011 +0000 + + OpenUSBByName(): readerID is also needed on Mac OS X + + Partly reverting revision r5816 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5827 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit ff9281360f9ff78e4cf967f01be56b36c0f80666 +Author: Ludovic Rousseau +Date: Thu Jun 30 09:50:58 2011 +0000 + + Fix compiler warnings + + ccid_usb.c: In function 'OpenUSBByName': + ccid_usb.c:324: warning: unused variable 'readerID' + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5816 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 7a4b6303e85805440a5c31ff4d9be28fc34c9997 +Author: Ludovic Rousseau +Date: Wed Jun 29 19:25:28 2011 +0000 + + Enable silent build by default + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5815 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 3 +++ + 1 file changed, 3 insertions(+) + +commit 31275f08996e43d40e7a4185f38a5fe427a40e97 +Author: Ludovic Rousseau +Date: Thu Jun 16 18:37:54 2011 +0000 + + Update OBERTHUR TECHNOLOGIES ID-ONE TOKEN SLIM v2 reader name on + request of F. Bourgault + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5800 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 4bdf42b326cad33bd58bd78882e105d5b6411b4a +Author: Ludovic Rousseau +Date: Thu Jun 16 18:33:00 2011 +0000 + + New firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5799 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Oberthur-ID-ONE_token_slim_v2.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 5354d88b663252632e53f350ed803900e886c18c +Author: Ludovic Rousseau +Date: Mon Jun 13 08:10:58 2011 +0000 + + SecurePINModify(): update comment for a GemPC pinpad bug circumvention + hack + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5789 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 99608177feeb385e8c1c3418c7613dda05dfbb0c +Author: Ludovic Rousseau +Date: Mon Jun 13 08:02:41 2011 +0000 + + Rename bNumberMessages in bNumberMessage (singular) to conform to the + CCID specification names + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5788 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +commit 18a076ad5e840d3534168727889154449d6c8797 +Author: Ludovic Rousseau +Date: Sun Jun 12 15:41:15 2011 +0000 + + Do not reference secoder_info for properties_in_tlv_ioctl tag + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5787 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit f98bc43e68938a9859a2bc6bc621ff0181c65b3b +Author: Ludovic Rousseau +Date: Wed May 18 06:53:44 2011 +0000 + + Add Alcor Micro AU9540 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5761 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/AU9540.txt | 112 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 113 insertions(+) + +commit 68b7beeebf9a7fd9f8e0f61b4160775999c519dd +Author: Ludovic Rousseau +Date: Fri May 13 09:20:47 2011 +0000 + + Use AC_LANG_SOURCE to fix a warning from autoconf 2.68 + + configure.in:151: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call + detected in body + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5746 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 97292c00843822de2328c0ab64d503cfee27b58a (tag: ccid-1.4.4) +Author: Ludovic Rousseau +Date: Fri May 13 08:55:51 2011 +0000 + + Release 1.4.4 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5742 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 12 ++++++++++++ + configure.in | 2 +- + 2 files changed, 13 insertions(+), 1 deletion(-) + +commit 424662850a4c6f8fd15c303016c9400389ac279c +Author: Ludovic Rousseau +Date: Fri May 13 08:50:14 2011 +0000 + + Some minor corrections + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5741 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +commit 649bb2b9b0429d7b4a230bf302ec9f86bbabc5f9 +Author: Ludovic Rousseau +Date: Thu May 12 14:17:17 2011 +0000 + + OpenUSBByName(): Some early Gemalto Ezio CB+ readers have bDeviceClass, + bDeviceSubClass and bDeviceProtocol set to 0xFF (proprietary) instead of + 0x00. + + So on Mac OS X the reader configuration is not done by the OS/kernel and + we do it ourself. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5740 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + src/ccid_usb.c | 21 +++++++++++++++++++++ + 2 files changed, 22 insertions(+) + +commit 20ad84f481a4d1b9b2ded6e3ef6ccf0cf3fe67e3 +Author: Ludovic Rousseau +Date: Thu May 12 12:54:22 2011 +0000 + + OpenUSBByName(): move declaration of readerID outside of the + USE_COMPOSITE_AS_MULTISLOT case so that the variable can also be used + elsewhere + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5739 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 97d06ad93a4c95bd3d7e3573aca90c75ca009c7e +Author: Ludovic Rousseau +Date: Thu May 12 12:52:51 2011 +0000 + + OpenUSBByName(): remove a (useless) { } block level + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5738 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 56 +++++++++++++++++++++++++++----------------------------- + 1 file changed, 27 insertions(+), 29 deletions(-) + +commit d4a0a7285c62555dd7c96ec71775db4e97fd35ca +Author: Ludovic Rousseau +Date: Thu May 12 08:57:20 2011 +0000 + + OpenUSBByName(): log the error code returned by + libusb_get_active_config_descriptor() if any + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5737 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 33e33152999d6675d8750ac60df367ef5eddc9fc +Author: Ludovic Rousseau +Date: Mon May 9 13:46:41 2011 +0000 + + Add Gemalto Ezio Shield Secure Channel, Gemalto Ezio Shield PinPad and + Gemalto Ezio Generic + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5731 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 3 +++ + 1 file changed, 3 insertions(+) + +commit 30961c4355182e014182fb1647ffe9c7036ca093 +Author: Ludovic Rousseau +Date: Mon May 9 13:29:39 2011 +0000 + + Add Gemalto GemCore POS Pro + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5728 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemCorePOSPro.txt | 91 +++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 91 insertions(+) + +commit 18b965c0b224f23c72fe39ac35b10d3dce96ebbe +Author: Ludovic Rousseau +Date: Mon May 9 13:17:37 2011 +0000 + + init_driver(): do not fail if the Info.plist file is not found + + This may happen if the driver for the serial GemPC Twin is used but + the USB driver is NOT installed (no .bundle directory). + + Thanks to Frederic Dumas for the bug report. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5727 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 44 ++++++++++++++++++++++---------------------- + 1 file changed, 22 insertions(+), 22 deletions(-) + +commit 9180e3dab4075f3ece6e0ef911b30476d3d45e72 +Author: Ludovic Rousseau +Date: Mon May 9 09:47:52 2011 +0000 + + Add Gemalto Ezio CB+ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5726 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Gemalto_Ezio_CB+.txt | 56 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 57 insertions(+) + +commit d5e9430d9d7c8013f11988dbbec5d63345baf9f6 +Author: Ludovic Rousseau +Date: Mon May 9 09:36:40 2011 +0000 + + Add support of TLV Properties wLcdMaxCharacters and wLcdMaxLines + They just duplicate wLcdLayout + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5725 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +commit 61be4eca35bcb4686df2e4f3a1da8fbc8b9ae110 +Author: Ludovic Rousseau +Date: Mon May 9 09:04:07 2011 +0000 + + Add table for bMsgIndex[1-3] and correctly set bMsgIndex2 and bMsgIndex3 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5724 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +commit 0bd573e6ea8502e0a192f8313a7b1381f0870d6c +Author: Ludovic Rousseau +Date: Mon May 9 08:57:35 2011 +0000 + + Update copyright + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5723 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 01579999c5bfb510fb9a55e747c445640fde7abd +Author: Ludovic Rousseau +Date: Mon May 9 08:57:03 2011 +0000 + + Add table for bEntryValidationCondition + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5722 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 3a0d467e3245855009ba24ed8addf863c536b856 +Author: Ludovic Rousseau +Date: Mon May 9 08:21:02 2011 +0000 + + Add Gemalto Ezio Shield + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5718 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Gemalto_Ezio_Shield.txt | 56 +++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 57 insertions(+) + +commit a4de33507ea7565864b55dd5dff8ee222505fddc +Author: Ludovic Rousseau +Date: Sat May 7 12:43:17 2011 +0000 + + Use $(sysconfdir) instead of hardcoded "etc" in install_ccidtwin rule + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5716 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 8b548e75440c582be89e252e86bc73e63e42efb4 +Author: Ludovic Rousseau +Date: Sat May 7 12:41:57 2011 +0000 + + Reuse the definition of $usbdropdir to define the default value of + ccidtwindir + + It is important if --enable-usbdropdir=DIR is used and + `$PKG_CONFIG libpcsclite --variable=usbdropdir` should then not be used. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5715 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2afa50b256a63199e8fed926c81206638d3d26db +Author: Ludovic Rousseau +Date: Fri Apr 22 14:37:45 2011 +0000 + + Activate USB automatic power suspend. The Linux kernel should power off + the reader automatically if it is not used (pcscd is not running). + + Documentation from http://www.lesswatts.org/projects/devices-power-management/usb.php + + Closes: alioth bug [#311273] CCID driver: Enable USB selective suspend + when possible + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5706 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/92_pcscd_ccid.rules | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 5357262638f00c0a15fc9a2ff615568ba0161f91 +Author: Ludovic Rousseau +Date: Thu Apr 14 16:29:55 2011 +0000 + + firmware update + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5698 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/MSI_StarReader_SMART.txt | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit cd0f3b06370a98da2f5d1a2d4aadc189aba8576b +Author: Ludovic Rousseau +Date: Fri Apr 8 12:52:51 2011 +0000 + + T0_card_timeout/T1_card_timeout: set timeout to 60 seconds instead of 60 + milliseconds if the ATR is non ISO + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5695 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit bdb8f9fb89654f0db6a2d93d13fe1f7f7b481ad4 +Author: Ludovic Rousseau +Date: Thu Apr 7 11:49:12 2011 +0000 + + Firmware 1.24 of the HP USB CCID Smartcard Keyboard fixes the problem + reported with the 1.22. But the pinpad is (still) bogus. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5693 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/HP_kus-0133.txt | 14 ++++---------- + readers/supported_readers.txt | 2 +- + src/ccid_usb.c | 1 + + 3 files changed, 6 insertions(+), 11 deletions(-) + +commit 9e310c9ae9afa49c67ddf517c5e616cb2d74df80 (tag: ccid-1.4.3) +Author: Ludovic Rousseau +Date: Sat Apr 2 18:47:10 2011 +0000 + + release 1.4.3 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5688 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 11 +++++++++++ + configure.in | 2 +- + 2 files changed, 12 insertions(+), 1 deletion(-) + +commit cfc8d9833894d7613d365f0684520098a33d3bc2 +Author: Ludovic Rousseau +Date: Wed Mar 30 11:12:30 2011 +0000 + + firmware update + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5681 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/LTC31v2.txt | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +commit cf0b45af75a049a12f83e2619b931a50dbbea014 +Author: Ludovic Rousseau +Date: Mon Mar 28 19:06:25 2011 +0000 + + Add Feitian ePass2003 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5678 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Feitian_ePass2003_PKI.txt | 49 +++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 50 insertions(+) + +commit f523f336e940596e606d45d9cf17aaf4b9d5f3d8 +Author: Ludovic Rousseau +Date: Sat Mar 26 17:03:25 2011 +0000 + + Fix a stupid bug in the previous revision + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5672 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 1be73be94c62a1c0f6ef234d77d75b5fbbff92cb +Author: Ludovic Rousseau +Date: Sat Mar 26 16:47:55 2011 +0000 + + OpenUSBByName(): check the value returned by libusb_init() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5671 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit fa8017cec6ce94322fa0716679a7bc531634d22e +Author: Ludovic Rousseau +Date: Wed Mar 23 12:42:50 2011 +0000 + + the Secure Pin Entry of the HP USB Smart Card Keyboard is bogus so + disable it + + http://martinpaljak.net/2011/03/19/insecure-hp-usb-smart-card-keyboard/ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5666 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 7 +++++++ + src/ccid.h | 1 + + 2 files changed, 8 insertions(+) + +commit ab131dfc0aef2571c27c8ed21b298bfac9e74546 +Author: Ludovic Rousseau +Date: Fri Mar 18 09:56:48 2011 +0000 + + ccid_error(): simplify code and avoids a "clang --analyze" warning + + ccid.c:490:5: warning: Value stored to 'text' is never read + text = var_text; + ^ ~~~~~~~~ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5660 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +commit 09c3e37647c698cd55caa01be3da53f36183ac8b +Author: Ludovic Rousseau +Date: Mon Mar 14 15:26:05 2011 +0000 + + Add SCM SCL011 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5656 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCM_SCL011.txt | 58 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 59 insertions(+) + +commit 6126729c1b8bf5da194f4967e43b0267e6d010ec +Author: Ludovic Rousseau +Date: Sun Mar 13 09:56:09 2011 +0000 + + Use the same code as in pcsc-lite to detect the plateform name (BUNDLE_HOST) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5654 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 30 ++++++++---------------------- + 1 file changed, 8 insertions(+), 22 deletions(-) + +commit 97bd3351a89336d35f668ab4c629e8854c33c8d9 +Author: Ludovic Rousseau +Date: Wed Mar 9 15:41:14 2011 +0000 + + Add Vasco DIGIPASS 920 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5651 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Vasco_Digipass920.txt | 106 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 107 insertions(+) + +commit fce9758b0b80558431d94df147821a629d131764 +Author: Ludovic Rousseau +Date: Tue Mar 8 20:21:22 2011 +0000 + + Add a new Neowave Weneo reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5645 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Neowave_Weneo4.txt | 59 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 60 insertions(+) + +commit 27a340f56c6c64fbdb1799c48596f80bc3b64000 +Author: Ludovic Rousseau +Date: Fri Feb 25 13:51:53 2011 +0000 + + Do not install RSA_SecurID_getpasswd and Kobil_mIDentity_switch and + the associated documentation. + + Only very few people need these tools. Adding them bring a dependency + on libpcsclite (see Debian bug #612972 "libccid: circular dependency + with pcscd and libpcsclite1") + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5640 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/Kobil_mIDentity_switch/Makefile.am | 8 ++++---- + contrib/RSA_SecurID/Makefile.am | 6 +++--- + 2 files changed, 7 insertions(+), 7 deletions(-) + +commit e468eef7aa6711241941448d6d413b31d34683ce +Author: Ludovic Rousseau +Date: Fri Feb 25 13:41:00 2011 +0000 + + Use the :libudev: instead of :libhal: naming scheme. + It is supported by pcsc-lite since revision 5638. + + It is only usefull for USB devices with more than one CCID interface. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5639 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 44 ++++++++++---------------------------------- + 1 file changed, 10 insertions(+), 34 deletions(-) + +commit ac5e76f035822ca6c67cec2837fe2345626b580e +Author: Ludovic Rousseau +Date: Fri Feb 25 09:03:48 2011 +0000 + + get_IFSC(): parse TA byte before TD byte for a same iteration. So that + TA3 is parsed before TD3 and the IFSC is correctly parsed in an ATR + like: 3B F0 12 00 FF 91 81 B1 7C 45 1F 03 99 + + Thanks to Toshimune Konno for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5637 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 55044cab63afc5b924c18d9107493713944e1e4d (tag: ccid-1.4.2) +Author: Ludovic Rousseau +Date: Tue Feb 22 22:12:51 2011 +0000 + + release 1.4.2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5626 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 13 +++++++++++++ + configure.in | 2 +- + 2 files changed, 14 insertions(+), 1 deletion(-) + +commit 7937c5c9a2d06cd60a47dd1fd396345d1f222710 +Author: Ludovic Rousseau +Date: Tue Feb 22 19:30:35 2011 +0000 + + Add Xiring MyLeo + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5625 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 1 + + 1 file changed, 1 insertion(+) + +commit f5bfba534b8e470dedcc4d0fa372c62de91e2fd5 +Author: Ludovic Rousseau +Date: Tue Feb 22 19:17:09 2011 +0000 + + Add Aktiv Rutoken lite + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5622 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Aktiv_Rutoken_Lite.txt | 49 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 50 insertions(+) + +commit 2da08b180951431dabc9e8940a98525792d6873e +Author: Ludovic Rousseau +Date: Sun Feb 20 18:07:22 2011 +0000 + + Use /bin/sh instead of bash + + bash is installed in /usr/local on FreeBSD + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5620 0ce88b0d-b2fd-0310-8134-9614164e65ea + + bootstrap | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 073277594e00fee831f9f341b805fac5c3555be2 +Author: Ludovic Rousseau +Date: Wed Feb 16 14:51:18 2011 +0000 + + Add another Broadcom 5880 with PID = 0x5802 + This one is a dual interface contact/contactless + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5615 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Broadcom_5880v4.txt | 106 ++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 106 insertions(+) + +commit efe98a4a9878222d6243205bf93501344ab68a12 +Author: Ludovic Rousseau +Date: Wed Feb 16 14:49:05 2011 +0000 + + Concat the 2 interfaces of the GemProxDU and GemProxSU in only 1 .txt + file each now that matrix.py can support it + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5614 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/{GemProxDU_contact.txt => GemProxDU.txt} | 52 ++++++++++++++++++++++++ + readers/GemProxDU_contactless.txt | 52 ------------------------ + readers/{GemProxSU_contact.txt => GemProxSU.txt} | 52 ++++++++++++++++++++++++ + readers/GemProxSU_contactless.txt | 52 ------------------------ + 4 files changed, 104 insertions(+), 104 deletions(-) + +commit f00581f48644d9ba83996d9bb8efdae277a1b1ad +Author: Ludovic Rousseau +Date: Wed Feb 16 12:52:16 2011 +0000 + + Align the number of lines and characters per line in wLcdLayout parse + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5599 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit eab53840bcb3dbc1e038b7741630a47029f9d0b7 +Author: Ludovic Rousseau +Date: Sun Feb 13 11:01:46 2011 +0000 + + Correctly parse wLcdLayout (the 2 bytes were interverted) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5596 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ATMEL_AT91SO.txt | 4 ++-- + readers/CardMan3821.txt | 4 ++-- + readers/GemPCPinpadv2.txt | 4 ++-- + readers/Kobil_EMV_CAP.txt | 4 ++-- + readers/Kobil_mIDentity_visual.txt | 4 ++-- + readers/Todos_Connectable.txt | 4 ++-- + readers/Todos_Cx00.txt | 4 ++-- + readers/Vasco_DP855.txt | 4 ++-- + readers/Vasco_DP865.txt | 4 ++-- + readers/Xiring_Leov2.txt | 4 ++-- + readers/Xiring_MyLeo.txt | 4 ++-- + readers/Xiring_XI-SIGN.txt | 4 ++-- + readers/Xiring_XI-SIGN_6000.txt | 4 ++-- + 13 files changed, 26 insertions(+), 26 deletions(-) + +commit 8a3e77fcd1719104ea0bb0c65d85ebd443ea963d +Author: Ludovic Rousseau +Date: Sun Feb 13 10:57:02 2011 +0000 + + The bytes for wLcdLayout were interverted + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5595 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 61d21d2824ace0e61c958f44628017dc578eaeda +Author: Ludovic Rousseau +Date: Sun Feb 13 10:42:04 2011 +0000 + + Use a SCARD_SHARE_SHARED instead of SCARD_SHARE_DIRECT since we are + really talking to the card, not just to the reader. + So SCardConnect() has to power on the card if needed. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5594 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8ac2f18777c8586787ac1be3f2c942e4db7163bb +Author: Ludovic Rousseau +Date: Fri Feb 11 20:04:26 2011 +0000 + + Do not add the version to the library name + + Thanks to Diego Elio Pettenò for the idea + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5593 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 02b7480ddc3c4bcb78f92dbc1351aa180aae2b9b +Author: Ludovic Rousseau +Date: Fri Feb 11 19:55:53 2011 +0000 + + make parse a noinst_PROGRAMS + + Thanks to Diego Elio Pettenò for the idea + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5592 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 13680980756a252c4dec189d01d8765cf2c3ea02 +Author: Ludovic Rousseau +Date: Wed Feb 9 19:45:03 2011 +0000 + + Add Xiring MyLeo reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5586 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Xiring_MyLeo.txt | 76 ++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 76 insertions(+) + +commit 0829f795883571d27985613412d9a2cc3e836091 +Author: Ludovic Rousseau +Date: Fri Feb 4 12:41:58 2011 +0000 + + CmdXfrBlockCHAR_T0(): use 'int' instead of 'char' for backup_len + variable since it can contain up to 256. + + Thanks to el Tuba for the patch. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5578 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 9dafb4042c02fa12378ce2406054d30cbe27b1db +Author: Ludovic Rousseau +Date: Sat Jan 29 14:31:36 2011 +0000 + + Add Xiring Leo v2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5570 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 1 + + 1 file changed, 1 insertion(+) + +commit 5f89882afe2871548b77db71e5fd25f9bcbec09f +Author: Ludovic Rousseau +Date: Sat Jan 29 12:44:07 2011 +0000 + + New firmware release + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5565 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Xiring_Leov2.txt | 20 ++++++++++++++------ + 1 file changed, 14 insertions(+), 6 deletions(-) + +commit 0c979488c386f3c1902cb5a36a04a5a101a4043d +Author: Ludovic Rousseau +Date: Fri Jan 28 20:12:43 2011 +0000 + + Correctly display the 2 last bytes (status word) instead of potentially + garbage in the received buffer. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5563 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/RSA_SecurID/RSA_SecurID_getpasswd.c | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +commit 20fc8b7518b6eaf4c2841b590a9bb585265f4e4c +Author: Ludovic Rousseau +Date: Fri Jan 28 20:10:13 2011 +0000 + + Correctly identify the command numbers in the error messages + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5562 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/RSA_SecurID/RSA_SecurID_getpasswd.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 535928b6ab5f257d2d416ae7d8c248e185245a5c +Author: Ludovic Rousseau +Date: Thu Jan 20 09:50:00 2011 +0000 + + t1_xcv(): remove useless affectation + + openct/proto-t1.c:675:3: warning: Value stored to 'rmax' is never read + rmax = rmax_int; + ^ ~~~~~~~~ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5542 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 1 - + 1 file changed, 1 deletion(-) + +commit 134280547adea7f2458f7c464e887ad4a12d4c0c +Author: Ludovic Rousseau +Date: Thu Jan 20 09:47:42 2011 +0000 + + SecurePINVerify() & SecurePINModify(): ignore the returned value of + t1_build() + + commands.c:416:3: warning: Value stored to 'ret' is never read + ret = t1_build(&((get_ccid_slot(reader_index))->t1), + ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + commands.c:653:3: warning: Value stored to 'ret' is never read + ret = t1_build(&((get_ccid_slot(reader_index))->t1), + ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5541 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 90d4236cd17096e036413a90088781124f2b8eef +Author: Ludovic Rousseau +Date: Thu Jan 20 09:46:09 2011 +0000 + + T0ProcSW1(): remove useless affectations + + commands.c:1818:2: warning: Value stored to 'in_buf' is never read + in_buf++; + ^~~~~~~~ + commands.c:1817:2: warning: Value stored to 'rcv_buf' is never read + rcv_buf++; + ^~~~~~~~~ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5540 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 -- + 1 file changed, 2 deletions(-) + +commit 80f4d09a31a28ee4d49a723cee9e85b20b5c32a8 +Author: Ludovic Rousseau +Date: Wed Jan 19 09:15:32 2011 +0000 + + update + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5527 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/iDream.txt | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +commit e4d3ac07751cc9bc2d73857e4ef3133a9a4ea6e2 +Author: Ludovic Rousseau +Date: Tue Jan 18 15:19:34 2011 +0000 + + Add an explicit cast to avoid a compiler warning + + openct/proto-t1.c:775:10: warning: comparison of integers of different signs: + 'int' and 'unsigned int' [-Wsign-compare] + || (n != 4 + t1->rc_bytes) ... + ~ ^ ~~~~~~~~~~~~~~~~ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5516 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9b058c6207430e3270889f0f4008b12f04667fdc +Author: Ludovic Rousseau +Date: Tue Jan 18 15:18:29 2011 +0000 + + Add an explicit cast to avoid a compiler warning + + ifdhandler.c:410:16: warning: comparison of integers of different signs: + 'unsigned long' and 'int' [-Wsign-compare] + if (*Length >= CcidSlots[reader_index].nATRLength) + ~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5515 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 98d745e08a9937b768390dbbb987ca22eb2db00f +Author: Ludovic Rousseau +Date: Tue Jan 18 15:17:10 2011 +0000 + + Add an explicit cast to avoid a compiler warning + + commands.c:169:16: warning: comparison of integers of different signs: + 'unsigned int' and 'int' [-Wsign-compare] + if (*nlength > r-1) + ~~~~~~~~ ^ ~~~ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5514 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9a018139f6be51be848c8860f68ad9547e571b3c +Author: Ludovic Rousseau +Date: Tue Jan 18 15:12:51 2011 +0000 + + Do not redefine macro offsetof() if already defined + + Thanks to clang(1) compiler + commands.c:51:9: warning: 'offsetof' macro redefined [-pedantic] + #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) + ^ + In file included from commands.c:25: + In file included from /usr/include/string.h:33: + /usr/lib/clang/1.1/include/stddef.h:41:9: note: previous definition is here + #define offsetof(t, d) __builtin_offsetof(t, d) + ^ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5513 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 79fa50283d1ff93159cdeaf7dad96fb47da55987 +Author: Ludovic Rousseau +Date: Thu Jan 13 10:29:52 2011 +0000 + + T1_card_timeout(): This is the card/reader timeout. Add 1 second for + the libusb timeout so we get the error from the reader. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5499 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit f4622440ac495bac595fe4eb9ed0a6d837e6ff43 +Author: Ludovic Rousseau +Date: Fri Jan 7 15:15:09 2011 +0000 + + IFDHGetCapabilities(): multi slot readers does not (yet) support + TAG_IFD_POLLING_THREAD_WITH_TIMEOUT + + The polling function will return for a event in any slot not just the + slot we are interested in. And the event will be lost for the real slot. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5495 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 5 +++++ + 1 file changed, 5 insertions(+) + +commit c8677653f46686035c0e7b5d6d81ce63f4096467 +Author: Ludovic Rousseau +Date: Fri Jan 7 14:45:50 2011 +0000 + + CloseUSB(): free the serial number string only for the last slot since + they all point to the same string. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5494 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 4045b424ee9117cbc88ec4c4c0fbe5a8dd4192be +Author: Ludovic Rousseau +Date: Wed Jan 5 16:31:34 2011 +0000 + + Add Vasco DIGIPASS KEY 860 and Vasco DIGIPASS KEY 200 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5488 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Vasco_DP200.txt | 103 ++++++++++++++++++++++++++++++++++++++++++ + readers/Vasco_DP860.txt | 103 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 2 + + 3 files changed, 208 insertions(+) + +commit 471ed83a1f7cd47df043a1cc51e3d135ab281827 +Author: Ludovic Rousseau +Date: Tue Jan 4 10:04:12 2011 +0000 + + Sort devices by Product ID + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5477 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +commit bfe96ddd9acf79ebea695dbbe3a77a8973996ca6 +Author: Ludovic Rousseau +Date: Tue Jan 4 10:01:33 2011 +0000 + + Reenable O2 Micro and Blutronics "bogus" readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5476 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 17 +++++++---------- + 1 file changed, 7 insertions(+), 10 deletions(-) + +commit 4049e6e3900d81b75ff9e6259ca033dd59a0c516 +Author: Ludovic Rousseau +Date: Tue Jan 4 09:54:34 2011 +0000 + + Reenable O2MICRO_OZ776_PATCH since a new patch is now included in + revision 5473 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5475 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 97a8e97d5bdd815f50aa79faae3ae1be9ec5d651 +Author: Ludovic Rousseau +Date: Tue Jan 4 09:53:35 2011 +0000 + + Use get_ccid_device_descriptor() instead of using + usb_interface_descriptor->extra directly to support "bogus" readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5474 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +commit 5fa4cfb0923611cec478d21842ed9430aee7f2e9 +Author: Ludovic Rousseau +Date: Tue Jan 4 09:52:26 2011 +0000 + + Add and use get_ccid_device_descriptor() to get the CCID descriptor + including a fix for bogus readers (Oz776, Reiner SCT and bludrive II) + + Thanks to Diego Elio Pettenò and Dario Leone for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5473 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 100 ++++++++++++++++++++++++++++++++------------------------- + src/ccid_usb.h | 2 ++ + 2 files changed, 58 insertions(+), 44 deletions(-) + +commit 409b22da4d57656b142a7737667e90344731b1fc +Author: Ludovic Rousseau +Date: Tue Jan 4 09:46:46 2011 +0000 + + Define log level to maximum to get error messages from ccid_usb.c + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5472 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 534c674e902cbff5b7448811fb616ca78f68c118 +Author: Ludovic Rousseau +Date: Tue Jan 4 09:36:54 2011 +0000 + + Rename variable usb_interface to usb_interface_descriptor to better + match the libusb type + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5471 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 42 +++++++++++++++++++++--------------------- + 1 file changed, 21 insertions(+), 21 deletions(-) + +commit 1b3638bcdaf373b06d4f5eee0a4da31e1b8b7e47 +Author: Ludovic Rousseau +Date: Tue Jan 4 09:31:45 2011 +0000 + + Rename variable extra to device_descriptor + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5470 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 146 ++++++++++++++++++++++++++++++------------------------------ + 1 file changed, 73 insertions(+), 73 deletions(-) + +commit 08d4b84dfa5cc76536de6e0e02a4a6b97da12eb5 +Author: Ludovic Rousseau +Date: Tue Jan 4 07:41:16 2011 +0000 + + Remove useless file + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5465 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/.dependencies | 0 + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit 151ddf1ebbe2f201f231ee55a866c811645470c2 +Author: Ludovic Rousseau +Date: Mon Jan 3 14:53:57 2011 +0000 + + Add a new Neowave Weneo token + + Closes Debian bug #570167 + "libccid: New Neowave Weneo card version with new productId" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5463 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Neowave_Weneo3.txt | 55 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 56 insertions(+) + +commit 775bf91f93a67cf0e0c289ce6dc7ebb56b7da0a1 +Author: Ludovic Rousseau +Date: Tue Dec 21 09:47:30 2010 +0000 + + Add Oberthur ID-ONE TOKEN SLIM v2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5461 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Oberthur-ID-ONE_token_slim_v2.txt | 105 ++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 106 insertions(+) + +commit 3a9685f686219980d3bb14075180a243601960f1 +Author: Ludovic Rousseau +Date: Fri Dec 17 08:59:21 2010 +0000 + + OpenUSBByName(): return STATUS_COMM_ERROR instead of + STATUS_NO_SUCH_DEVICE if the cause of the failure is + libusb_claim_interface(). The main cause if the use of OpenCT. + + The OpenCT detection code in pcsc-lite is not triggered if the driver + returns STATUS_NO_SUCH_DEVICE. So the driver must return someting else + in that case. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5458 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 170921981bd3878209944cf5951ced3ff2832818 +Author: Ludovic Rousseau +Date: Thu Dec 16 08:59:08 2010 +0000 + + new firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5457 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemPCPinpadv2.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 42f2f3ee6ce2086e432b667a50801ce92beed2dd +Author: Ludovic Rousseau +Date: Thu Dec 16 08:48:57 2010 +0000 + + Add ACS APG8201 PINhandy 1 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5455 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACS_APG8201.txt | 50 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 51 insertions(+) + +commit 9d30693611b209464a7dd6edd0864a481299e6c7 +Author: Ludovic Rousseau +Date: Wed Dec 15 13:29:41 2010 +0000 + + regenerate + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5451 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Eutron_SIM_Pocket_Combo_(Card_Reader).txt | 8 +++++--- + readers/Eutron_SIM_Pocket_Combo_(SIM_Reader).txt | 8 +++++--- + 2 files changed, 10 insertions(+), 6 deletions(-) + +commit ecad505a818cfc80d251463ff9eea3e0b1e4df65 +Author: Ludovic Rousseau +Date: Wed Dec 15 13:27:23 2010 +0000 + + Rename and split SIM_Pocket_Combo.txt in + Eutron_SIM_Pocket_Combo_(Card_Reader).txt and + Eutron_SIM_Pocket_Combo_(SIM_Reader).txt + + The device contains a hub with 3 devices: 2 CCID card readers and a USB + Mass storage + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5450 0ce88b0d-b2fd-0310-8134-9614164e65ea + + ...t => Eutron_SIM_Pocket_Combo_(Card_Reader).txt} | 50 ---------------------- + readers/Eutron_SIM_Pocket_Combo_(SIM_Reader).txt | 50 ++++++++++++++++++++++ + 2 files changed, 50 insertions(+), 50 deletions(-) + +commit 51dadf1033aa70b9e2b35d7b5420b389f04890c7 +Author: Ludovic Rousseau +Date: Sun Dec 12 15:28:40 2010 +0000 + + Add Feitian SCR310 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5445 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 1 + + 1 file changed, 1 insertion(+) + +commit b170bb22f3fbcd55839c2d2fdff1da46c11a5af3 +Author: Ludovic Rousseau +Date: Sun Dec 12 15:26:57 2010 +0000 + + Feitian SCR310 reader (also labeled Rokey 301) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5444 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Feitian_SCR310.txt | 51 ++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 51 insertions(+) + +commit d9d398a2ae159f774abfc0f94a0b83f782197991 +Author: Ludovic Rousseau +Date: Fri Dec 10 14:44:40 2010 +0000 + + OpenUSBByName(): use the correct type to fix compiler warning + + ccid_usb.c: In function `OpenUSBByName': + ccid_usb.c:294: warning: comparison between signed and unsigned integer + expressions + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5437 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0f047d905b03b76a0f2c985288840e9a0297a686 +Author: Ludovic Rousseau +Date: Fri Dec 10 09:14:00 2010 +0000 + + Todos Connectable reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5436 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Todos_Connectable.txt | 54 +++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 54 insertions(+) + +commit 8fda904ac92a3566be8c258d4304338e0c21c6ef (tag: ccid-1.4.1) +Author: Ludovic Rousseau +Date: Fri Dec 3 14:41:27 2010 +0000 + + release 1.4.1 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5430 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 21 +++++++++++++++++++++ + configure.in | 2 +- + 2 files changed, 22 insertions(+), 1 deletion(-) + +commit 92527b4a6c18ec7fe073b9b24a0eed7fdc467165 +Author: Ludovic Rousseau +Date: Wed Dec 1 17:06:58 2010 +0000 + + Add Free Software Initiative of Japan Gnuk token + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5425 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Fsij_gnuk.txt | 49 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 52 insertions(+) + +commit 9afea17da32efd871461b8e2bb3fa97b248a22aa +Author: Ludovic Rousseau +Date: Sat Nov 20 09:15:24 2010 +0000 + + new firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5409 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SpringCard_CSB6_Ultimate.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 6d5c5cf30180ad4048ca592080165fec42765778 +Author: Ludovic Rousseau +Date: Wed Nov 17 13:06:36 2010 +0000 + + Add Xiring Leo v2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5404 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Xiring_Leov2.txt | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 68 insertions(+) + +commit 851b51597a71a28380c0346001072298af6f738f +Author: Ludovic Rousseau +Date: Wed Nov 17 13:05:55 2010 +0000 + + define DISPLAY_EXTRA_VALUES to display the extra (invalid) values + returned by bNumClockSupported and bNumDataRatesSupported + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5403 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit 76451a997ccbbf14bf4a1487b9154ced09256967 +Author: Ludovic Rousseau +Date: Fri Nov 12 14:23:31 2010 +0000 + + Athena IDProtect Key v1 was bogus. The v2 should work. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5397 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Athena_IDProtect_Key.txt | 12 ++++++------ + readers/supported_readers.txt | 2 +- + src/ccid_usb.c | 1 + + 3 files changed, 8 insertions(+), 7 deletions(-) + +commit 5af3afc0e13e2fa8d10868e3980087216eedd86f +Author: Ludovic Rousseau +Date: Fri Nov 12 09:57:58 2010 +0000 + + Regenerate + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5396 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CardMan6121.txt | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +commit bedcf3b6d4b6311f49cbd66542de4545078a7622 +Author: Ludovic Rousseau +Date: Mon Nov 8 14:24:34 2010 +0000 + + IFDHCreateChannelByName(): increase the timeout from 100ms to 1000ms to + give more time to the reader to setup and answer. + + 100ms is too short for the Kobil KAAN Base for example. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5389 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 12e8a9bb806645f1e42ac7e5fed2ab88f414ce44 +Author: Ludovic Rousseau +Date: Fri Nov 5 22:49:01 2010 +0000 + + ReadSerial(): further improve check from revision 5381 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5382 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 17ffe2847135806e4ab31651861f8eeb269932f0 +Author: Ludovic Rousseau +Date: Fri Nov 5 22:42:16 2010 +0000 + + ReadSerial(): avoids a possible integer overflow if the CCID frame is + corrupted or malign. + + Thanks to Rafael Dominguez Vega for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5381 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 161318a61999cad3da1d9adeac70e3aba5b82e5f +Author: Ludovic Rousseau +Date: Wed Oct 27 07:13:19 2010 +0000 + + Add BZH uKeyCI800-K18 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5365 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/BZH_uKeyCI800-K1.txt | 50 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 53 insertions(+) + +commit 333e7e6adde5978db1661ea49e47aa74a114e980 +Author: Ludovic Rousseau +Date: Tue Oct 26 16:39:44 2010 +0000 + + Normalize the Vid and Pid hex values + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5363 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 26 +++++++++++++------------- + 1 file changed, 13 insertions(+), 13 deletions(-) + +commit 98e1e61cfe007004f760074d18e3c9cd9b75305f +Author: Ludovic Rousseau +Date: Tue Oct 26 16:21:38 2010 +0000 + + Add a new model of SCM SCR 3310 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5361 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCR3310_2.txt | 53 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 54 insertions(+) + +commit 7c9648be9cd03556836708584a80b766dfab2fc8 +Author: Ludovic Rousseau +Date: Tue Oct 26 16:17:05 2010 +0000 + + Add Akasa AK-CR-03 reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5360 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Akasa_AK-CR-03.txt | 111 +++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 111 insertions(+) + +commit ce4b242ef48653c78941331676375c60cf8a0d10 +Author: Ludovic Rousseau +Date: Thu Oct 21 18:54:26 2010 +0000 + + Use TAG_IFD_POLLING_THREAD_WITH_TIMEOUT instead of + TAG_IFD_POLLING_THREAD to support the auto power off feature introduced + in pcsc-lite revision 5328 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5330 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 16 +++++++++------- + 1 file changed, 9 insertions(+), 7 deletions(-) + +commit ddb22a4f33c70025bceaa4fcf3faba6f9da97f11 +Author: Ludovic Rousseau +Date: Thu Oct 21 18:52:48 2010 +0000 + + Remove two useless static function declarations + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5329 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 4 ---- + 1 file changed, 4 deletions(-) + +commit f555f02ab6e1e2bf827a378eb23ad40a19d08e4c +Author: Ludovic Rousseau +Date: Tue Oct 19 08:11:41 2010 +0000 + + get_IFSC(): 0xFF is not a valid value for IFSC according to ISO 7816-3, + CCID and MasterCard standards. The maximum value is 0xFE. + + The "TIVU SAT" from ITALY www.tivu.tv card has such an IFSC in its ATR: + 3F FF 95 00 FF 91 81 71 FF 47 00 54 49 47 45 52 30 30 33 20 52 65 76 32 35 30 64 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5325 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit 91c77a01966f0ef3de497e6e07b5008eeb32e6b1 +Author: Ludovic Rousseau +Date: Thu Oct 14 09:48:31 2010 +0000 + + src/pcscd_ccid.rules has been renamed to src/92_pcscd_ccid.rules in + revision 5263. So update the name in INSTALL_UDEV_RULE_FILE + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5320 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6d6ec76f7fbf1920cd85aecd07407abbf3c4d11d +Author: Ludovic Rousseau +Date: Thu Oct 14 09:46:02 2010 +0000 + + Use /bin/echo instead of the echo shell version to use color escape codes + + Thanks to Martin Paljak for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5319 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit eab2fde6c9327b291267972ee3266a4ab1425fda +Author: Ludovic Rousseau +Date: Thu Oct 14 09:39:35 2010 +0000 + + Remove --enable-udev option since it is not used anymore with libhal. + The udev rules file is now used to change the access rights of the + device and not send a hotplug signal to pcscd. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5318 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 7 ------- + src/Info.plist.src | 2 +- + src/Makefile.am | 7 +------ + src/create_Info_plist.pl | 10 +--------- + 4 files changed, 3 insertions(+), 23 deletions(-) + +commit 1bd5bcb2626af3b6e70d6fc640ac0b724bf4f152 +Author: Ludovic Rousseau +Date: Wed Oct 13 12:09:27 2010 +0000 + + Need pcsc-lite 1.6.5 for TAG_IFD_POLLING_THREAD_WITH_TIMEOUT + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5312 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8451515573d4717bcab5ddc8c87a022a369e9287 +Author: Ludovic Rousseau +Date: Wed Oct 13 11:59:41 2010 +0000 + + pcscd_ccid.rules is renamed 92_pcscd_ccid.rules in revision 5263 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5311 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit fd927c98ef8d1e4a47276b56e8832be671179bd8 +Author: Ludovic Rousseau +Date: Wed Oct 13 11:56:26 2010 +0000 + + MacOSX/reader.h.in is now replaced by MacOSX/reader.h since pcsc-lite + revision 5254 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5310 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0157398ce1418adbb3e65ce01d82e443cf476aae +Author: Ludovic Rousseau +Date: Wed Oct 13 11:21:51 2010 +0000 + + build: remove use_usb_interrupt variable which is not set. + + Thanks to Martin Paljak for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5309 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 3 --- + 1 file changed, 3 deletions(-) + +commit 923cdb361723b835826b6b8b513de4e8f63ecd55 +Author: Ludovic Rousseau +Date: Wed Oct 6 08:57:07 2010 +0000 + + Update some paragraphs + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5284 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 48 ++++++++++++++++++++++-------------------------- + 1 file changed, 22 insertions(+), 26 deletions(-) + +commit 04cffe77fac299735c7ffb17881bf9397b180605 +Author: Ludovic Rousseau +Date: Wed Oct 6 08:48:17 2010 +0000 + + Remove the "Known problems" section about Mac OS X libusb since we know + use libusb-1.0. The bug should/may have been fixed. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5282 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 12 ------------ + 1 file changed, 12 deletions(-) + +commit ace40d070996c42e504884aabf870eab8e9a77a1 +Author: Ludovic Rousseau +Date: Mon Sep 20 08:13:24 2010 +0000 + + Rename to add the number in the file name. The file shall be _after_ + 91-permissions.rules on Debian. + + See http://permalink.gmane.org/gmane.linux.hotplug.devel/16139 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5263 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/{pcscd_ccid.rules => 92_pcscd_ccid.rules} | 0 + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit 083c18252c344997d39edb64edea3c6dc514026e +Author: Ludovic Rousseau +Date: Wed Sep 15 14:32:18 2010 +0000 + + No need to convert reader.h.in in reader.h since revision 5252. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5257 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 2 -- + MacOSX/reader.h | 1 + + MacOSX/reader.h.in | 1 - + 3 files changed, 1 insertion(+), 3 deletions(-) + +commit 48cea04d5b6b70b6d4b9467d7535d374a6d8a8bb +Author: Ludovic Rousseau +Date: Tue Sep 14 09:31:11 2010 +0000 + + No need to use HOST_TO_CCID_16() and HOST_TO_CCID_32() since revision 5252 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5253 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit c85776367975797073191cb6087c4ecae81f1e93 +Author: Ludovic Rousseau +Date: Tue Sep 14 09:29:02 2010 +0000 + + SecurePINVerify() & SecurePINModify(): Accept big and little endian byte + orders for multibytes fields + + The application should not use HOST_TO_CCID_16() and HOST_TO_CCID_32() + any more and just use the normal byte order of the architecture. + + Thanks to Douglas E. Engert for the patch + http://archives.neohapsis.com/archives/dev/muscle/2010-q3/0145.html + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5252 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 50 insertions(+) + +commit 299cccc655757c7f86ef777318a98c2dc3f2b46e +Author: Ludovic Rousseau +Date: Mon Sep 13 13:00:19 2010 +0000 + + Use GROUP= instead of RUN+= to avoid a race + + See the thread "Use GROUP= in a rule matching an interface of the + device?" on linux-hotplug@vger.kernel.org mailing list + http://www.spinics.net/lists/hotplug/msg04165.html + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5251 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscd_ccid.rules | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 43ce4d7c51afbf86b5f081957cba5b11dd69f544 +Author: Ludovic Rousseau +Date: Sat Sep 4 14:41:32 2010 +0000 + + Add a ENV{DEVTYPE}!="usb_device" rule as suggested by Marco d'Itri + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5244 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscd_ccid.rules | 1 + + 1 file changed, 1 insertion(+) + +commit b17d7df13b37840405c77ff5d6c0812387b88745 +Author: Ludovic Rousseau +Date: Fri Sep 3 14:00:01 2010 +0000 + + HP kus-0133 is not supported + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5237 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/HP_kus-0133.txt | 65 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 66 insertions(+) + +commit a50d6d4283c02e97be071a14cb2a589020d0c136 +Author: Ludovic Rousseau +Date: Fri Sep 3 13:57:54 2010 +0000 + + update URL to use ccid/ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5236 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5a8d103d1d3829c9905486d6a01797e934ff56f7 +Author: Ludovic Rousseau +Date: Fri Sep 3 09:01:08 2010 +0000 + + new firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5229 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Precise_200_MC.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e92cad7346e7bbad90e6d41cdefbd5d4b4c0c8da +Author: Ludovic Rousseau +Date: Thu Sep 2 12:56:42 2010 +0000 + + Change the group ownership of the device to "pcscd" when a reader is + connected + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5223 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscd_ccid.rules | 26 ++++++++++++++------------ + 1 file changed, 14 insertions(+), 12 deletions(-) + +commit 11000211420f73811f82a84ac88d35c6d083cf5f +Author: Ludovic Rousseau +Date: Thu Sep 2 12:50:07 2010 +0000 + + Add $Id$ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5222 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscd_ccid.rules | 1 + + 1 file changed, 1 insertion(+) + +commit cb33748d15ac9225837d95c56e1500dc3e92ccbf +Author: Ludovic Rousseau +Date: Thu Sep 2 12:47:26 2010 +0000 + + Factorize teh SUBSYSTEMS=="usb" test + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5221 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscd_ccid.rules | 25 +++++++++++++------------ + 1 file changed, 13 insertions(+), 12 deletions(-) + +commit fc03313882bbeda75eafab39acad38ffa36bc882 +Author: Ludovic Rousseau +Date: Tue Aug 31 18:51:30 2010 +0000 + + Add ReinerSCT cyberJack RFID basis + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5207 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ReinerSCT_cyberJack_RFID_basis.txt | 51 ++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++ + 2 files changed, 54 insertions(+) + +commit 1f7869a53f1a5f6630e36fb4c2b3ac532d78a67c +Author: Ludovic Rousseau +Date: Tue Aug 31 08:58:10 2010 +0000 + + ifdhandler.c: In function ‘IFDHPolling’: + ifdhandler.c:328: warning: unused variable ‘ret’ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5206 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 1 - + 1 file changed, 1 deletion(-) + +commit f83c1ea6806c62d39ba7ba305c92f01658796e47 +Author: Ludovic Rousseau +Date: Tue Aug 31 08:55:56 2010 +0000 + + Convert the return value from libusb code to IFD_* in InterruptRead() + instead of IFDHPolling(). + + We do not return IFD_NO_SUCH_DEVICE any more. This value will be + returned by the next libusb_*() call + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5205 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 4 +++- + src/ifdhandler.c | 7 +------ + 2 files changed, 4 insertions(+), 7 deletions(-) + +commit e9a491beb0741dd2bcbe60d93183f425757bd03e +Author: Ludovic Rousseau +Date: Thu Aug 26 12:05:45 2010 +0000 + + Remove O2 Micro Oz776 and Blutronics Bludrive II CCID since they are no + more supported since version 1.4.0 + + The USB descriptor is bogus and the patch in get_ccid_usb_interface() + does not work with libusb-1.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5189 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 17 ++++++++++------- + 1 file changed, 10 insertions(+), 7 deletions(-) + +commit c618ac26d2484e16d5e80d003e68be5e00353e17 +Author: Ludovic Rousseau +Date: Thu Aug 26 09:32:41 2010 +0000 + + IFDHSetCapabilities(): remove dead comments + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5188 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 5 ----- + 1 file changed, 5 deletions(-) + +commit 35adb26f4bf03006433ff75dcc24af25d8fa4d4a +Author: Ludovic Rousseau +Date: Thu Aug 26 09:13:26 2010 +0000 + + Add --enable-embedded (default is no) to build libccid for an embedded + system. + + This will activate the NO_LOG option to disable logging and limit RAM + and disk consumption. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5187 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit 191c597f4eec46314eba65de0f47979589ed4188 +Author: Ludovic Rousseau +Date: Thu Aug 26 08:58:06 2010 +0000 + + Include config.h before any other local includes to the configuration + defined in config.h is used. + + This is just a preventive change. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5185 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 2 +- + src/ccid_usb.c | 2 +- + src/commands.c | 2 +- + src/ifdhandler.c | 2 +- + src/utils.c | 1 + + 5 files changed, 5 insertions(+), 4 deletions(-) + +commit de8adbeb305fdb323410da2277f6e8c258c87ff6 +Author: Ludovic Rousseau +Date: Tue Aug 24 09:46:45 2010 +0000 + + ccid_open_hack_pre(): call InterruptRead() only if the device has an + interrupt pipe endpoint (3 in total) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5182 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit ad96db1d65910287f0386dba03a198d1b1d46035 +Author: Ludovic Rousseau +Date: Tue Aug 24 09:45:02 2010 +0000 + + add Gemalto SG CCID + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5181 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 1 + + 1 file changed, 1 insertion(+) + +commit cb4fab0808df64a6d2527d6abf848bccd1b15cee +Author: Ludovic Rousseau +Date: Mon Aug 23 09:03:02 2010 +0000 + + ccid_open_hack_pre(): use InterruptRead() with a timeout of 100ms + instead of 10ms to give more time to the device to respond. + + This allows the Gemalto SG CCID to always start correctly, not just once + in a while. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5176 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 2ec288f6a18a4d5ab21196a0abf05b51e17935b1 +Author: Ludovic Rousseau +Date: Mon Aug 23 08:35:10 2010 +0000 + + ccid_open_hack_pre(): Do not disable the call to InterruptRead() on Mac + OS X. We now use libusb-1.0 and the timeout should work. + + This allows the Gemalto SG CCID to work under Mac OS X. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5174 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 4 ---- + 1 file changed, 4 deletions(-) + +commit 9cc85648a7b61b7e73da7a7c9a9bc8fd100f6a64 +Author: Ludovic Rousseau +Date: Mon Aug 23 08:24:14 2010 +0000 + + Add Gemalto Smart Guardian (SG CCID) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5173 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Gemalto_SG.txt | 52 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 53 insertions(+) + +commit b24e144d188cedbc678e6d38153bd3bbe8adac7b +Author: Ludovic Rousseau +Date: Mon Aug 23 08:23:25 2010 +0000 + + Rename Gemalto Smart Enterprise Guardian + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5172 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 829847c5a4e0cd885d324594b403474b2577896b +Author: Ludovic Rousseau +Date: Thu Aug 19 16:09:06 2010 +0000 + + Use the full include path for libusb.h + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5166 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e0fe6c6729ba68dea72cbf857b520701cb1f97b9 +Author: Ludovic Rousseau +Date: Thu Aug 19 14:54:47 2010 +0000 + + Use the new Info.plist parser API + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5165 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 4 ++- + src/ccid_usb.c | 82 ++++++++++++++++++++++++++++---------------------------- + src/ifdhandler.c | 19 +++++++++---- + src/simclist.c | 1 + + src/simclist.h | 1 + + 5 files changed, 60 insertions(+), 47 deletions(-) + +commit d33ecbfcac5b1818dbe7942613614de486d845d2 +Author: Ludovic Rousseau +Date: Thu Aug 19 13:58:07 2010 +0000 + + OpenSerialByName(): TOKEN_MAX_VALUE_SIZE is no more defined in parser.h + + Use MAX_DEVICENAME defined as 255 in pcscd.h + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5164 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit b4a4d2dc9679c5f8c3bd09ba60af7ec8dff6354c +Author: Ludovic Rousseau +Date: Tue Aug 17 09:47:16 2010 +0000 + + Do not hardcode the libusb-1.0 include header path (remove the + libusb-1.0/ part) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5153 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/Kobil_mIDentity_switch/Kobil_mIDentity_switch.c | 2 +- + src/ccid_usb.c | 2 +- + src/ccid_usb.h | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +commit 128656dcf501e248eebada73862d89a2abce23ad +Author: Ludovic Rousseau +Date: Thu Aug 5 18:09:04 2010 +0000 + + Do not hardcode the libusb.h path. The h file is not at the same place + on kfreebsd + + Fixes Debian bug #591782 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5119 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5e4dbf89f56b7ef470db0b4bd0195e896a5be9b1 (tag: ccid-1.4.0) +Author: Ludovic Rousseau +Date: Wed Aug 4 13:21:33 2010 +0000 + + release 1.4.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5108 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 18 ++++++++++++++++++ + configure.in | 2 +- + 2 files changed, 19 insertions(+), 1 deletion(-) + +commit 674f5c7203d9b8cf162f915fb182e8a8f20258f9 +Author: Ludovic Rousseau +Date: Mon Aug 2 12:01:18 2010 +0000 + + Add support of the SCM SDI 010 again. At least the contact interface can + be used. + + This should not conflict with the SCM proprietary driver since the CCID + driver will only work with pcsc-lite > 1.6.2 and recent pcsc-lite + (>= 1.5.4) will load any specific driver before my "Class" CCID driver. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5094 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit e6175154e2f1e9b44cc7802b4803fda31618bbba +Author: Ludovic Rousseau +Date: Sun Aug 1 17:15:40 2010 +0000 + + Install the serial configuration find in /etc/reader.conf.d/libccidtwin + instead of /etc/reader.conf. + pcscd (>= 1.6.0) will parse all the files from /etc/reader.conf.d/ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5090 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 9 ++------- + 1 file changed, 2 insertions(+), 7 deletions(-) + +commit 8310779690bb49fa8ce9ef87c287d542c91b5f09 +Author: Ludovic Rousseau +Date: Sun Aug 1 17:01:19 2010 +0000 + + Add SCM SCL01x Contactless Reader (disabled since unsupported) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5087 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 1 + + 1 file changed, 1 insertion(+) + +commit fc2649298a21f232efb09e3e4b220389e6df00a6 +Author: Ludovic Rousseau +Date: Sun Aug 1 16:58:54 2010 +0000 + + Add Gemalto Hybrid Smartcard Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5086 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 1 + + 1 file changed, 1 insertion(+) + +commit d29f1f6c8911993a41c8f281fe8099752654fcdf +Author: Ludovic Rousseau +Date: Sun Aug 1 16:49:02 2010 +0000 + + Add Tianyu Smart Card Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5084 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Tianyu_Smart_Card_Reader.txt | 51 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 52 insertions(+) + +commit af0ac1aa193586b396658b2a64e418c71e87f248 +Author: Ludovic Rousseau +Date: Sun Aug 1 16:46:26 2010 +0000 + + Do not #include "ccid_usb.h" + Compilation fails on Mac OS X for the libccidtwin library + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5083 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 1 - + src/commands.c | 1 - + 2 files changed, 2 deletions(-) + +commit efe53b1449d59cdf5370696b9a452279f7198dfb +Author: Ludovic Rousseau +Date: Thu Jul 29 13:30:11 2010 +0000 + + add get_IFSC() to get the IFSC value from the ATR. + + IFSC is not just the value of TAi (i>2) + For example "3B 80 81 1F 07 19" has a TA3 but it is not the IFSC since + T=15 is defined in TD2 so before TA3 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5078 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 68 ++++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 44 insertions(+), 24 deletions(-) + +commit caf759715500aebf1728ab1397e80b0a1dc5c50f +Author: Ludovic Rousseau +Date: Thu Jul 29 10:06:02 2010 +0000 + + libusb <= 1.0.8 does not implement a reference counter in + libusb_init()/libusb_exit() for the default context. + + We then use our own and unique libusb context. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5077 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +commit 29fa21ec936a879775f21b59b359b05eed23846f +Author: Ludovic Rousseau +Date: Tue Jul 27 10:46:20 2010 +0000 + + check the return value of libusb_get_active_config_descriptor() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5076 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 618b4d3ee00a311a47b43c0a7bda4df59246e45d +Author: Ludovic Rousseau +Date: Tue Jul 27 09:49:39 2010 +0000 + + parse do need some parts of libccid + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5075 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + src/parse.c | 4 ++++ + 2 files changed, 5 insertions(+), 1 deletion(-) + +commit 1400d577b75bda1883ec00e631fde1bc475025ce +Author: Ludovic Rousseau +Date: Tue Jul 27 08:54:51 2010 +0000 + + parse do not need to be linked with libccid + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5074 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d8634df0c8bc2fe664efc064b07adaac6734f722 +Author: Ludovic Rousseau +Date: Mon Jul 26 13:37:08 2010 +0000 + + ccid_open_hack_post(): update the Gemalto proprietary command to switch + in EMV mode. 0xA0 was an old value no more used on new products. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5072 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 169eea61a89918751a9e66519c4105d515027f2a +Author: Ludovic Rousseau +Date: Fri Jul 2 09:46:41 2010 +0000 + + No need to respecify -arch in LDFLAGS since we already have the correct + architectures specified in CFLAGS + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5055 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 1 - + 1 file changed, 1 deletion(-) + +commit 219159283ba16c76efa6cdd5b0106bc546bf9966 +Author: Ludovic Rousseau +Date: Fri Jul 2 09:39:23 2010 +0000 + + Fix a comment: we do not use libusb-compat-0.1 any more + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5054 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0b0cc32edc7fbc228d9af859adebf4119f7dc06e +Author: Ludovic Rousseau +Date: Thu Jul 1 12:04:50 2010 +0000 + + ccid_parse_interface_descriptor(): document "USB Wake up signaling + supported on card insertion and removal" in dwFeatures + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5052 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 6857d331659321ce539638b0c67a0b82f25eb5f0 +Author: Ludovic Rousseau +Date: Wed Jun 30 09:00:01 2010 +0000 + + Add a new Broadcom 5880 reader (idProduct: 0x5802) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5050 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Broadcom_5880v3.txt | 54 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 55 insertions(+) + +commit 92c0dd81dfec28108e9fc00b3658eb8396da449f +Author: Ludovic Rousseau +Date: Tue Jun 29 12:00:31 2010 +0000 + + OpenUSBByName(): use DEBUG_CRITICAL() instead of printf() to log an + error + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5043 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ef6a8a4204e550c309dcc50064bb39fd48e0f344 +Author: Ludovic Rousseau +Date: Tue Jun 22 12:58:37 2010 +0000 + + WriteUSB() & ReadUSB(): also display the value returned by libusb. The + error is not always reported by the kernel so errno is not significant. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5034 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit ff7c6ad15db33eccfb669675f9ac4c661a41cda3 +Author: Ludovic Rousseau +Date: Tue Jun 22 12:56:50 2010 +0000 + + Add DEBUG_CRITICAL5() function + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5033 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.h | 2 ++ + 1 file changed, 2 insertions(+) + +commit 830a3fc4617a52f3e9d446959ede07b6d00258f7 +Author: Ludovic Rousseau +Date: Tue Jun 22 09:33:55 2010 +0000 + + Request pcsc-lite 1.6.2 minimum (instead of 1.6.0) to have + TAG_IFD_STOP_POLLING_THREAD defined + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5030 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bd9e8a57669d76765ccceaa9e25cf02a2b81a4c4 +Author: Ludovic Rousseau +Date: Tue Jun 22 09:27:01 2010 +0000 + + Add support of TAG_IFD_STOP_POLLING_THREAD and use of the asynchronous + libusb API to be able to stop a transfer. + + We are now "polling" for card movements every 1 hour or once an event + is detected on the interrupt endpoint of the device. + + Another gain is that the driver will terminate "instantly" after pcscd + request instead of after a maximum of 2 seconds (previous polling + timeout). + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5028 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++----- + src/ccid_usb.h | 1 + + src/ifdhandler.c | 35 +++++++++++++++++++- + 3 files changed, 125 insertions(+), 9 deletions(-) + +commit 4773467fb64a65fbb971c5d1e9dee305bfe039e7 +Author: Ludovic Rousseau +Date: Tue Jun 22 09:18:00 2010 +0000 + + Use ctx instead of NULL to keep the information that this parameter is + the libusb context. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5027 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +commit 449f8beef17f00ef0e93103518bfa2b303907393 +Author: Ludovic Rousseau +Date: Tue Jun 22 09:13:45 2010 +0000 + + OpenUSBByName(): call libusb_exit() if we can't use the reader + + CloseUSB(): call libusb_exit() before exiting + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5026 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 4fb06a05de5b15f0ae588a57cf148c1f649cc80e +Author: Ludovic Rousseau +Date: Mon Jun 21 14:50:49 2010 +0000 + + OpenUSBByName(): free the libusb allocated list & devices when we are + done with it + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5025 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 59b581356dc816749fcf9b9e256deccb84e03ec2 +Author: Ludovic Rousseau +Date: Mon Jun 21 14:44:51 2010 +0000 + + OpenUSBByName(): call libusb_init() just before the next libusb call + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5024 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit b772e6523fc9576df72365c633067a93162433cf +Author: Ludovic Rousseau +Date: Mon Jun 21 08:40:10 2010 +0000 + + add ACS AET65 (same idProduct as many other ACS devices) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5019 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACS_AET65.txt | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 50 insertions(+) + +commit 8195e41ec493d33898c39ddb4664442681ee7fdc +Author: Ludovic Rousseau +Date: Sat Jun 19 20:36:56 2010 +0000 + + add C3PO LTC36 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5017 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/LTC36.txt | 54 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 55 insertions(+) + +commit 8bd01936339e54d80c985dd4bbff278f9ace57f2 +Author: Ludovic Rousseau +Date: Fri Jun 18 19:06:42 2010 +0000 + + Only link with libusb-1.0.a without the 0.1 compatibility layer now the + library has been ported to libusb-1.0 API + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5016 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ca9bbfebc5b8626bed3c5f2cabb2119a00134d89 +Author: Ludovic Rousseau +Date: Fri Jun 18 19:05:32 2010 +0000 + + use libusb_detach_kernel_driver() from libusb-1.0 instead of the *_np() + version + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5015 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/Kobil_mIDentity_switch/Kobil_mIDentity_switch.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +commit 911d8f6c39c95ad03a9859936a0fa9e029f2f276 +Author: Ludovic Rousseau +Date: Thu Jun 17 13:28:24 2010 +0000 + + use PROTOCOL_CCID instead of 0 when checking bInterfaceProtocol + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5014 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 2 +- + src/ifdhandler.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 5014d6235ee2d6c0428a732911e432c198079773 +Author: Ludovic Rousseau +Date: Thu Jun 17 13:18:42 2010 +0000 + + Rename ICCD_A in PROTOCOL_ICCD_A, ICCD_B in PROTOCOL_ICCD_B and add + PROTOCOL_CCID for plain CCID + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5013 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 4 ++-- + src/ccid.h | 5 +++-- + src/commands.c | 24 ++++++++++++------------ + src/ifdhandler.c | 8 ++++---- + 4 files changed, 21 insertions(+), 20 deletions(-) + +commit b4cf45011176029ed804d8e2fdbe9e3bbeee3670 +Author: Ludovic Rousseau +Date: Thu Jun 17 12:34:14 2010 +0000 + + get_end_points(): use LIBUSB_ENDPOINT_DIR_MASK instead of + LIBUSB_TRANSFER_TYPE_MASK to get the direction of an endpoint. + + .bulk_out field were never set and then not working (No such file or + directory) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5012 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 400640df859f079b6e4245a953fb578edc012508 +Author: Ludovic Rousseau +Date: Thu Jun 17 12:24:21 2010 +0000 + + WriteUSB() & ReadUSB(): the same function libusb_bulk_transfer() is now + ued to read and write to a USB device. So I use "write failed" and "read + failed" instead of the libusb function name to log an error. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5011 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 31aa8a46919b1e27c599e590f815af60c91e7dd4 +Author: Ludovic Rousseau +Date: Thu Jun 17 09:51:59 2010 +0000 + + WriteUSB(), ReadUSB() & InterruptRead(): display strerror(errno) instead + of just the code returned by the libusb_*_transfer() function + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5010 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit d4bec14708ec9baea08f4d3f6ca7e9279eea3f00 +Author: Ludovic Rousseau +Date: Wed Jun 16 20:26:44 2010 +0000 + + add Todos CX00 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5007 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Todos_Cx00.txt | 54 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 55 insertions(+) + +commit de3c201c3304ed8716701725874b226a21ed7126 +Author: Ludovic Rousseau +Date: Wed Jun 16 18:20:22 2010 +0000 + + add Dectel CI692 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5002 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Dectel_CI692.txt | 50 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 51 insertions(+) + +commit 83272eae7e81a41c5dec6daf8b78e6a0e1073ae7 +Author: Ludovic Rousseau +Date: Wed Jun 16 18:18:53 2010 +0000 + + add Kingtrust Multi-Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@5001 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Kingtrust_Multi-Reader.txt | 49 ++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 52 insertions(+) + +commit e1177294e53ebd5f24fc841efb35df4a94d259dd +Author: Ludovic Rousseau +Date: Wed Jun 16 09:44:40 2010 +0000 + + replace tabs by spaces + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4999 0ce88b0d-b2fd-0310-8134-9614164e65ea + + SCARDGETATTRIB.txt | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +commit 67f3a6cfe08b9581d3cc80f122285a7a41d78b90 +Author: Ludovic Rousseau +Date: Wed Jun 16 09:43:24 2010 +0000 + + add SCARD_ATTR_ICC_INTERFACE_STATUS, SCARD_ATTR_ICC_PRESENCE and + SCARD_ATTR_VENDOR_IFD_SERIAL_NO + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4998 0ce88b0d-b2fd-0310-8134-9614164e65ea + + SCARDGETATTRIB.txt | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +commit 1a5749c128725d413c815bde3ea43146384012a9 +Author: Ludovic Rousseau +Date: Wed Jun 16 09:39:43 2010 +0000 + + add IOCTL_FEATURE_GET_TLV_PROPERTIES + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4997 0ce88b0d-b2fd-0310-8134-9614164e65ea + + SCARDCONTOL.txt | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 3597098efe1e2c0396190a334fbf902d2c1172f5 +Author: Ludovic Rousseau +Date: Mon Jun 14 14:02:24 2010 +0000 + + use libusb-1.0/libusb.h instead of usb.h (from libusb-0.1) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4993 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 21 ++++++++++++++------- + 1 file changed, 14 insertions(+), 7 deletions(-) + +commit 321a524d6688da36ef12d673ab0ca1dc0fead92a +Author: Ludovic Rousseau +Date: Thu Jun 10 14:53:47 2010 +0000 + + The O2MICRO OZ776 patch (for OZ776, OZ776_7772, REINER_SCT and + BLUDRIVEII_CCID) is no more supported with libusb-1.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4988 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 96d956d5c93f18354208073795e73a5648345da9 +Author: Ludovic Rousseau +Date: Thu Jun 10 14:48:17 2010 +0000 + + Use libusb-1.0 instead of libusb-0.1 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4987 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 43 +- + .../Kobil_mIDentity_switch.c | 132 ++--- + src/ccid_usb.c | 585 ++++++++++----------- + src/ccid_usb.h | 6 +- + src/ifdhandler.c | 6 +- + src/parse.c | 284 +++++----- + 6 files changed, 522 insertions(+), 534 deletions(-) + +commit f4d7b9877cdd55583be1b0004ba7ec0ee85a42da (tag: ccid-1.3.13) +Author: Ludovic Rousseau +Date: Fri Jun 4 13:29:42 2010 +0000 + + release 1.3.13 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4979 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 7 +++++++ + configure.in | 2 +- + 2 files changed, 8 insertions(+), 1 deletion(-) + +commit 9ccfec77b212185f47d7b7bd2885584e00385ae9 +Author: Ludovic Rousseau +Date: Tue Jun 1 14:24:35 2010 +0000 + + update + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4975 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemPCTwin.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 6dd2d880d53fc6bf3d4cf4dadbbf5725fc87450e +Author: Ludovic Rousseau +Date: Tue Jun 1 09:43:29 2010 +0000 + + update copyright date + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4973 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 2 +- + src/ccid.h | 2 +- + src/ccid_ifdhandler.h | 2 +- + src/ccid_serial.c | 2 +- + src/ccid_serial.h | 2 +- + src/ccid_usb.c | 2 +- + src/ccid_usb.h | 2 +- + src/commands.h | 2 +- + src/convert_version.pl | 2 +- + src/create_Info_plist.pl | 2 +- + src/debug.c | 2 +- + src/debug.h | 2 +- + src/defs.h | 2 +- + src/ifdhandler.c | 2 +- + src/parse.c | 2 +- + src/utils.c | 2 +- + src/utils.h | 2 +- + 17 files changed, 17 insertions(+), 17 deletions(-) + +commit 71bb253ffece87d421294a740746e39b7d25e4cf +Author: Ludovic Rousseau +Date: Tue Jun 1 09:38:36 2010 +0000 + + No need to #include since revision 4907 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4972 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 1 - + 1 file changed, 1 deletion(-) + +commit 14fe0fb3b4882e0f4b4396613289cd47968d157e +Author: Ludovic Rousseau +Date: Tue Jun 1 09:33:17 2010 +0000 + + remove duplicate errno.h in AC_CHECK_HEADERS() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4971 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d68a6105b8f40aac666828a711436e208f779c69 +Author: Ludovic Rousseau +Date: Tue Jun 1 08:45:40 2010 +0000 + + Correctly display $bindir and $sysconfdir values when they are not + changed from the default values (instead of NONE/bin and NONE/etc) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4970 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 6 ++++-- + m4/as-ac-expand.m4 | 1 + + 2 files changed, 5 insertions(+), 2 deletions(-) + +commit 167c675702830fff4effbf982819ce589f791d83 +Author: Ludovic Rousseau +Date: Thu May 27 10:18:27 2010 +0000 + + update + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4965 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Lenovo.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit efac4d55ac4e0e7af0e14e2c51482f9ca46d2c60 +Author: Ludovic Rousseau +Date: Thu May 27 09:49:51 2010 +0000 + + OpenUSBByName(): allow the combination of USE_COMPOSITE_AS_MULTISLOT and + libhal. It does work so do not prevent its use. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4963 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 24 +++++++++++++++++++----- + 1 file changed, 19 insertions(+), 5 deletions(-) + +commit 213eb936a57fc1de8730a20f82c7e674fb072c3a +Author: Ludovic Rousseau +Date: Thu May 20 15:06:48 2010 +0000 + + Add support of SCARD_ATTR_VENDOR_IFD_SERIAL_NO + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4956 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 5 +++++ + src/ccid_serial.c | 2 ++ + src/ccid_usb.c | 16 ++++++++++++++++ + src/ifdhandler.c | 16 ++++++++++++++++ + 4 files changed, 39 insertions(+) + +commit 49351828d68c6a13e0b33a6df54075a00c90e2c1 +Author: Ludovic Rousseau +Date: Sat May 15 14:44:47 2010 +0000 + + Gemalto PC pinpad v1+ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4943 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemPCPinpadv2.txt | 95 +++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 95 insertions(+) + +commit 89e9a534939052791a84bfe2afdd1cbff06096be +Author: Ludovic Rousseau +Date: Mon May 10 13:24:19 2010 +0000 + + Revert revision 4936 (stupid me) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4939 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit aa0f5e1590a1c94fc7ed86e47da14a7eed1a374e +Author: Ludovic Rousseau +Date: Mon May 10 09:42:33 2010 +0000 + + IFDHCreateChannelByName() & IFDHCreateChannel(): use the low level + CmdGetSlotStatus() instead of IFDHICCPresence() to be able to fix the + read timeout. + + We use a read timeout of 100 milliseconds instead of 2 secondes. The + maximum wait time is now 200 milliseconds instead of 4 seconds. + + This increases the startup time a lot (up to 95%) when pcscd is auto started. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4938 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 42 ++++++++++++++++++++++++++++++++++++------ + 1 file changed, 36 insertions(+), 6 deletions(-) + +commit 047ffe338de8f1e4d12ef079d95fe10b49f1326d +Author: Ludovic Rousseau +Date: Mon May 10 09:28:02 2010 +0000 + + change read timeout from second to millisecond unit to have a sub-second + control + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4937 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 2 +- + src/ccid.h | 2 +- + src/ccid_serial.c | 8 ++++---- + src/ccid_usb.c | 4 ++-- + src/commands.c | 6 +++--- + src/defs.h | 4 ++-- + src/ifdhandler.c | 17 +++-------------- + 7 files changed, 16 insertions(+), 27 deletions(-) + +commit 4d893af14690e38845031a12fcadac3900e3f69a +Author: Ludovic Rousseau +Date: Mon May 10 09:18:50 2010 +0000 + + SecurePINVerify() & SecurePINModify(): use min() instead of max() to get + a minimum of 30 seconds for the read timeout + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4936 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +commit 06ae63f6dc4c8f5ae68af4b0ca201bdd73fa03c3 +Author: Ludovic Rousseau +Date: Sat May 8 09:56:19 2010 +0000 + + Minimum version of pcsc-lite is 1.6.0 instead of the unreleased 1.5.6 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4932 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c4bc4ddc487ff9f36491479d7084a86f042474a0 (tag: ccid-1.3.12) +Author: Ludovic Rousseau +Date: Sat May 8 09:54:35 2010 +0000 + + release 1.3.12 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4931 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 46 ++++++++++++++++++++++++++++++++++++++++++++++ + configure.in | 2 +- + 2 files changed, 47 insertions(+), 1 deletion(-) + +commit 95f49dd5ecf49647f46932c7ccdf4b2102d0b345 +Author: Ludovic Rousseau +Date: Fri May 7 17:37:08 2010 +0000 + + - use libusb-1.0 and libusb-compat-0.1 + - build for Snow Leopard + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4930 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 24 +++++------------------- + 1 file changed, 5 insertions(+), 19 deletions(-) + +commit 2cb0668de6df51c63775910df61012d4a1e92478 +Author: Ludovic Rousseau +Date: Fri May 7 12:41:07 2010 +0000 + + IFDHControl(): set PCSCv2_PART10_PROPERTY_bEntryValidationCondition + specific value only for the Gemalto PC Pinpad V1 & Covadis Véga-Alpha + readers. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4928 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit 23d78652a53ccf896ff468167c0bbc7bed918953 +Author: Ludovic Rousseau +Date: Fri May 7 12:38:40 2010 +0000 + + Reformat output + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4927 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 24 +++++++++++++----------- + 1 file changed, 13 insertions(+), 11 deletions(-) + +commit 5231a710258cf6bb7b350f27bb216ec1e624bb6a +Author: Ludovic Rousseau +Date: Fri May 7 12:30:24 2010 +0000 + + IFDHControl(): The Covadis Véga-Alpha share the same firmware with the + Gemalto PC Pinpad V1 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4926 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit ca5cad14942216fcc16e681a222950fcda6b6a42 +Author: Ludovic Rousseau +Date: Fri May 7 12:26:20 2010 +0000 + + IFDHControl(): add comments + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4925 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +commit d330c2dfb282ffa001f4e6023f82da482d6fe56d +Author: Ludovic Rousseau +Date: Fri May 7 12:21:30 2010 +0000 + + IFDHControl(): add support of IOCTL_FEATURE_GET_TLV_PROPERTIES + bMinPINSize & bMaxPINSize for Gemalto Pinpad V1 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4924 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +commit 1800fa8d4dad9c7f16c199ceb18380464b4084e1 +Author: Ludovic Rousseau +Date: Mon May 3 13:38:15 2010 +0000 + + add SCM SCR3500 (same idProduct as SCR355 but different firmware) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4914 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCR3500.txt | 155 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 155 insertions(+) + +commit f31fdda365542ed6f4fdf9e69f26ef21f72ec772 +Author: Ludovic Rousseau +Date: Sun May 2 10:18:24 2010 +0000 + + add Athena IDProtect Key (unsupported see + http://www.opensc-project.org/pipermail/opensc-user/2010-May/004023.html) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4908 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Athena_IDProtect_Key.txt | 53 ++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 54 insertions(+) + +commit d0278ac3f51fcdb19f94c7ac2a9fb375a34990a1 +Author: Ludovic Rousseau +Date: Sat May 1 10:40:50 2010 +0000 + + Do not try to be smart and always #include + + Should fix FreeBSD issues + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4907 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.h | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 9c6c267bf25b71fa1d44072c9587ad0f6d898950 +Author: Ludovic Rousseau +Date: Thu Apr 29 07:58:03 2010 +0000 + + SecurePINVerify() & SecurePINModify(): with a TPDU reader and a T=1 card + the ns & nr sequence numbers were not correctly handled if the CCID + command was rejected at the reader level (not sent to the card). + The next APDU sent to the card would fail. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4902 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +commit e41e01d4ab76947f37059732947df91971324775 +Author: Ludovic Rousseau +Date: Sun Apr 25 19:09:15 2010 +0000 + + IFDHControl(): reuse ccid_descriptor variable when available + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4897 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 12 +++++------- + 1 file changed, 5 insertions(+), 7 deletions(-) + +commit af3d2ae17337508a7e1a49e3f9dc7546195d62a0 +Author: Ludovic Rousseau +Date: Sun Apr 25 19:05:39 2010 +0000 + + FEATURE_MCT_READER_DIRECT is also supported by the Kobil mIDentity visual + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4896 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + src/ifdhandler.c | 4 +++- + 2 files changed, 4 insertions(+), 1 deletion(-) + +commit 5314bda7794d9234eaabd9eeadaa28a3d93561d5 +Author: Ludovic Rousseau +Date: Sat Apr 24 13:56:08 2010 +0000 + + add KOBIL Smart Token, KOBIL mIDentity 4smart, + KOBIL mIDentity 4smart AES, KOBIL mIDentity visual, + KOBIL mIDentity fullsize, KOBIL mIDentity 4smart fullsize AES + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4893 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Kobil_Smart_Token.txt | 56 +++++++++++++++++++++++++++++ + readers/Kobil_mIDentity_4smart.txt | 56 +++++++++++++++++++++++++++++ + readers/Kobil_mIDentity_4smart_AES.txt | 56 +++++++++++++++++++++++++++++ + readers/Kobil_mIDentity_fullsize.txt | 56 +++++++++++++++++++++++++++++ + readers/Kobil_mIDentity_fullsize_AES.txt | 56 +++++++++++++++++++++++++++++ + readers/Kobil_mIDentity_visual.txt | 60 ++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 6 ++++ + 7 files changed, 346 insertions(+) + +commit 4b9c578e618c081e9efbbe21b0d1127c86e9858b +Author: Ludovic Rousseau +Date: Sun Apr 18 18:53:27 2010 +0000 + + CmdXfrBlockCHAR_T0(): debug ICCD type A algorithm + + Thanks to Alexander Abarzhi for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4886 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 57 +++++++++++++++++++++++++++++++++------------------------ + 1 file changed, 33 insertions(+), 24 deletions(-) + +commit 16caa1e9d84bbe28d2781e4a2882d2b521b0680d +Author: Ludovic Rousseau +Date: Fri Apr 16 21:20:22 2010 +0000 + + Fix Studio CC warning + "ifdhandler.c", line 1275: warning: initializer does not fit or is out of range: 248 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4879 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 898d8e4ab90dd621179770096297fd89a7556004 +Author: Ludovic Rousseau +Date: Fri Apr 16 21:19:16 2010 +0000 + + Fix Sun Studio CC warnings + "ifdhandler.c", line 910: warning: initializer does not fit or is out of range: 250 + "ifdhandler.c", line 910: warning: initializer does not fit or is out of range: 255 + "ifdhandler.c", line 910: warning: initializer does not fit or is out of range: 129 + "ifdhandler.c", line 911: warning: initializer does not fit or is out of range: 128 + "ifdhandler.c", line 911: warning: initializer does not fit or is out of range: 193 + "ifdhandler.c", line 911: warning: initializer does not fit or is out of range: 192 + "ifdhandler.c", line 912: warning: initializer does not fit or is out of range: 144 + "ifdhandler.c", line 912: warning: initializer does not fit or is out of range: 177 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4878 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit c99188056bd9af5019b961df145c3eb3122b5756 +Author: Ludovic Rousseau +Date: Fri Apr 16 15:37:33 2010 +0000 + + SCM SCL01x Contactless Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4876 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCL01x.txt | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 66 insertions(+) + +commit 38bbf7c08a1cbc897335025a695d998aadd1da67 +Author: Ludovic Rousseau +Date: Fri Apr 9 17:38:42 2010 +0000 + + Add Atmel AT90SCR100, Atmel AT90SCR050, Atmel VaultIC420, Atmel + VaultIC440, Atmel VaultIC460 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4869 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ATMEL_AT90SCR050.txt | 90 +++++++++++++++++++++++++++++++++++++++++++ + readers/ATMEL_AT90SCR100.txt | 90 +++++++++++++++++++++++++++++++++++++++++++ + readers/ATMEL_VaultIC420.txt | 49 +++++++++++++++++++++++ + readers/ATMEL_VaultIC440.txt | 49 +++++++++++++++++++++++ + readers/ATMEL_VaultIC460.txt | 49 +++++++++++++++++++++++ + readers/supported_readers.txt | 5 +++ + 6 files changed, 332 insertions(+) + +commit f4d95463f342ec3a83d221d3980a54e986a00798 +Author: Ludovic Rousseau +Date: Tue Apr 6 17:22:44 2010 +0000 + + Remove duplicate Vid/Pid entry for Alcor Micro SCR001 and Micro AU9520 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4856 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 1 - + 1 file changed, 1 deletion(-) + +commit 4866d455fda658a685f3c585ea540cd44e785d06 +Author: Ludovic Rousseau +Date: Tue Apr 6 15:49:04 2010 +0000 + + Add Vasco DIGIPASS KEY 860, Vasco DIGIPASS KEY 200, Vasco DP855, Vasco + DP865 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4854 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Vasco_DP855.txt | 107 +++++++++++++++++++++++++++++++++++++++++ + readers/Vasco_DP865.txt | 108 ++++++++++++++++++++++++++++++++++++++++++ + readers/Vasco_DPKey200.txt | 105 ++++++++++++++++++++++++++++++++++++++++ + readers/Vasco_DPKey860.txt | 105 ++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 4 ++ + 5 files changed, 429 insertions(+) + +commit 83868d1adcd44b164ce7277e9096be6cbbb4614f +Author: Ludovic Rousseau +Date: Wed Mar 31 12:33:52 2010 +0000 + + add GoldKey PIV Token + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4849 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GoldKey_PIV_Token.txt | 561 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 + + 2 files changed, 564 insertions(+) + +commit e12efb2611affc2a66583180c7c0f8969f63a374 +Author: Ludovic Rousseau +Date: Tue Mar 30 09:48:04 2010 +0000 + + add support of FEATURE_GET_TLV_PROPERTIES + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4847 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_ifdhandler.h | 2 ++ + src/ifdhandler.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++--- + 2 files changed, 61 insertions(+), 3 deletions(-) + +commit 679870b4dcefbd9319afa3c3f164ebca8d5af9df +Author: Ludovic Rousseau +Date: Tue Mar 30 09:46:07 2010 +0000 + + add support of FEATURE_GET_TLV_PROPERTIES + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4846 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 195 +++++++++++++++++++++++++++++++++++++++++++----- + 1 file changed, 175 insertions(+), 20 deletions(-) + +commit 07d9da2bfd90093122fa4ddb0c7010b61b50f00f +Author: Ludovic Rousseau +Date: Sat Mar 27 14:59:59 2010 +0000 + + remove spaces and tabs at end of line + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4844 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist.src | 2 +- + src/commands.c | 2 +- + src/ifdhandler.c | 6 +++--- + 3 files changed, 5 insertions(+), 5 deletions(-) + +commit 3bb3601ddedeb1689c23196c063a32281bd0bf6b +Author: Ludovic Rousseau +Date: Sun Mar 14 16:55:30 2010 +0000 + + Enable the Broadcom 5880 reader. It should work after a firmware + upgrade. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4815 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 91dfd663c60a564bd57efea47496dba0cf164523 +Author: Ludovic Rousseau +Date: Fri Mar 12 15:42:07 2010 +0000 + + Rename Gemplus in Gemalto + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4814 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 2 +- + examples/scardcontrol.c | 2 +- + readers/supported_readers.txt | 19 +++++++++---------- + src/ccid_serial.c | 2 +- + src/reader.conf.in | 2 +- + 5 files changed, 13 insertions(+), 14 deletions(-) + +commit 4300f019e233afa633f5a9e5187d7ee2aed94d85 +Author: Ludovic Rousseau +Date: Fri Mar 5 10:12:51 2010 +0000 + + CmdXfrBlockCHAR_T0(): limit the received length to 0x1000 for ICCD + Version A + length is 16-bits and usb_control_msg() fails with "Invalid argument" if + the length is > 0x100 + + The same patch was already present in CmdXfrBlockAPDU_extended for ICCD + Version B + + Thanks to Alexander Abarzhi for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4796 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit cc6580c337e90a44429ba6843c93344e0a2fedf9 +Author: Ludovic Rousseau +Date: Fri Mar 5 09:48:45 2010 +0000 + + CCID_Receive(): set the received length for a ICCD Version A device + + Thanks to El Tuba for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4795 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 8210d00e65509b6e3d6c2885b2cfcc6212270e5a +Author: Ludovic Rousseau +Date: Fri Feb 26 17:35:44 2010 +0000 + + SCM SDI 010 removed on manufacturer request since not supported by my driver + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4780 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 924a18fe5bd33133f0e7efdba7b42f29ef9e2e12 +Author: Ludovic Rousseau +Date: Wed Feb 24 14:36:21 2010 +0000 + + Removed Smart SBV280 on manufacturer request. They use libusb directly. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4776 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 2e7954e4a72260aa755fba35184c691ea88ce9f3 +Author: Ludovic Rousseau +Date: Wed Feb 24 13:26:10 2010 +0000 + + regenerate + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4775 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Broadcom_5880.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a864d27739ea537fd0148c27ff5128b59f7a9c8b +Author: Ludovic Rousseau +Date: Tue Feb 23 21:25:15 2010 +0000 + + add Covadis Auriga + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4771 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Covadis_Auriga.txt | 53 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 54 insertions(+) + +commit 1272599446e0339e0dab3582a19711f494d567ef +Author: Ludovic Rousseau +Date: Fri Feb 12 20:02:35 2010 +0000 + + id3_CL1356D.txt is a duplicate of id3_CL1356T5.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4761 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/id3_CL1356D.txt | 50 ------------------------------------------- + readers/supported_readers.txt | 3 +-- + 2 files changed, 1 insertion(+), 52 deletions(-) + +commit 3b7f74884cbf52ef70a7b270e0833dbf0235205a +Author: Ludovic Rousseau +Date: Fri Feb 12 19:44:44 2010 +0000 + + add id3 CL1356T5 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4759 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/id3_CL1356T5.txt | 52 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 53 insertions(+) + +commit e81c227cdabb58150d9a0ecf065c705acf3be8e1 +Author: Ludovic Rousseau +Date: Fri Feb 12 15:36:44 2010 +0000 + + update Gemalto PDT + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4757 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Gemalto_PDT.txt | 6 +++--- + readers/supported_readers.txt | 2 +- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 191aa30839ce6e1981d87d1d2aff617fd2e2598b +Author: Ludovic Rousseau +Date: Tue Feb 9 21:31:37 2010 +0000 + + Fix 1 compiler warning + + ccid_usb.c: In function ‘InterruptRead’: + ccid_usb.c:987: warning: pointer targets in passing argument 3 of ‘log_xxd’ differ in signedness + /usr/include/PCSC/debuglog.h:83: note: expected ‘const unsigned char *’ but argument is of type ‘char *’ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4750 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit cb9ce0c481e8fadc430cf5920193449784c638e2 +Author: Ludovic Rousseau +Date: Tue Feb 9 21:29:05 2010 +0000 + + Fix 2 compiler warnings + + commands.c: In function ‘CCID_Transmit’: + commands.c:1107: warning: passing argument 5 of ‘ControlUSB’ discards qualifiers from pointer target type + ccid_usb.h:43: note: expected ‘unsigned char *’ but argument is of type ‘const unsigned char *’ + commands.c:1130: warning: passing argument 5 of ‘ControlUSB’ discards qualifiers from pointer target type + ccid_usb.h:43: note: expected ‘unsigned char *’ but argument is of type ‘const unsigned char *’ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4749 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit b03988f07f7e06752e55cff8c696168ab030583c +Author: Ludovic Rousseau +Date: Tue Feb 9 21:25:36 2010 +0000 + + Fix a compiler warning + + ccid_usb.c: In function ‘OpenUSB’: + ccid_usb.c:138: warning: unused parameter ‘Channel’ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4748 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit b0b63e3d65d4fbd8471b05f6128125a2ffce31af +Author: Ludovic Rousseau +Date: Tue Feb 9 21:23:49 2010 +0000 + + Do not include the reader descriptions in the archive, only the + supported_readers.txt file + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4747 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 106 +--------------------------------------------------- + 1 file changed, 1 insertion(+), 105 deletions(-) + +commit 26751dc16e0124b1feaf45a24a8f3a839c750684 +Author: Ludovic Rousseau +Date: Tue Feb 9 21:22:29 2010 +0000 + + use readers/ again (revert revision 4745) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4746 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + configure.in | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +commit 540100c6938c179c9290abc8c4f0ee00c0566044 +Author: Ludovic Rousseau +Date: Tue Feb 9 20:46:22 2010 +0000 + + Do not include the readers/* files in the archive + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4745 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + configure.in | 1 - + 2 files changed, 1 insertion(+), 2 deletions(-) + +commit d223865bcde19cf69095bf47b66c1f799195c980 +Author: Ludovic Rousseau +Date: Fri Feb 5 13:33:49 2010 +0000 + + rename CL1356T.txt in id3_CL1356T.txt like the other id3_* readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4712 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/{CL1356T.txt => id3_CL1356T.txt} | 0 + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit a29d6e5cd917ecd739928ae0663fed43ece98394 +Author: Ludovic Rousseau +Date: Thu Feb 4 20:26:47 2010 +0000 + + add Copyright (C) 2005 Martin Paljak and update my copyright date + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4709 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit f7d236812c182caed074f5f3ef5b2839f3cf8585 +Author: Ludovic Rousseau +Date: Fri Jan 29 19:51:44 2010 +0000 + + add German Privacy Foundation Crypto Stick v1.2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4694 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GPFCryptoStick.txt | 51 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 54 insertions(+) + +commit d16b8bd58955c061fc85e0a47cc0de2fd374484c +Author: Ludovic Rousseau +Date: Fri Jan 22 13:04:51 2010 +0000 + + use LT_INIT(disable-static) instead of the deprecated AM_DISABLE_STATIC + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4684 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b54b49d0fd96369152b58128a1c835580b7e0993 +Author: Ludovic Rousseau +Date: Thu Jan 21 13:43:09 2010 +0000 + + Static lib is disabled by default. Use --enable-static if needed + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4680 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 ++ + 1 file changed, 2 insertions(+) + +commit cce5e81be7b7ec520b4e9be5455f36b1d2119ff7 +Author: Ludovic Rousseau +Date: Tue Jan 19 15:43:24 2010 +0000 + + update + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4676 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemPC_Express.txt | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +commit adacf010187b4ccbe29f2abd64d964e4df8594c6 +Author: Ludovic Rousseau +Date: Wed Jan 13 15:52:23 2010 +0000 + + ass Ask CPL108 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4665 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Ask_CPL108.txt | 54 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 57 insertions(+) + +commit aaf6bce595685b89bedbdc10ed2b9b51322dc26b +Author: Ludovic Rousseau +Date: Mon Jan 11 10:24:44 2010 +0000 + + update Gemalto Prox-DU and Prox-SU names + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4655 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 2d369d8fbe655d4249fe75b8142a7c4ea2a12e29 +Author: Ludovic Rousseau +Date: Mon Jan 11 10:23:48 2010 +0000 + + update "Gemalto Prox DU" name + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4654 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0d8c95a867cba099a0127f2bf32a49896239e079 +Author: Ludovic Rousseau +Date: Mon Jan 4 13:56:06 2010 +0000 + + debug.c: In function ‘log_msg’: + debug.c:38: warning: unused parameter ‘priority’ + debug.c: In function ‘log_xxd’: + debug.c:51: warning: unused parameter ‘priority’ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4639 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 58cc35947b1740970fc43057198f3a5546138fb5 +Author: Ludovic Rousseau +Date: Mon Jan 4 13:53:49 2010 +0000 + + ifdhandler.c: In function ‘IFDHSetCapabilities’: + ifdhandler.c:553: warning: unused parameter ‘Length’ + ifdhandler.c:553: warning: unused parameter ‘Value’ + ifdhandler.c: In function ‘IFDHTransmitToICC’: + ifdhandler.c:1171: warning: unused parameter ‘RecvPci’ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4638 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 5 +++++ + 1 file changed, 5 insertions(+) + +commit cb4c366989c0c0e58a24591d53e72588e6bf7b84 +Author: Ludovic Rousseau +Date: Mon Jan 4 13:51:22 2010 +0000 + + Kobil_mIDentity_switch.c: In function ‘main’: + Kobil_mIDentity_switch.c:136: warning: unused parameter ‘argc’ + Kobil_mIDentity_switch.c:136: warning: unused parameter ‘argv’ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4637 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/Kobil_mIDentity_switch/Kobil_mIDentity_switch.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit fdfd0d6bb9de23b02b2006f7c70e188d7094eece +Author: Ludovic Rousseau +Date: Mon Jan 4 13:49:40 2010 +0000 + + t1_release(): fix compilation warning + openct/proto-t1.c:116: warning: unused parameter ‘t1’ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4636 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 1 + + 1 file changed, 1 insertion(+) + +commit 0057a81823181d24af67c7a260cf7fe3d01557c0 +Author: Ludovic Rousseau +Date: Sat Jan 2 14:11:01 2010 +0000 + + another Broadcom 5880 reader (iProduct: 5880) which looks like to work + correctly + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4631 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Broadcom_5880v2.txt | 54 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 57 insertions(+) + +commit 2a31822d34f15b0a862699c956d4b8b965a3568b +Author: Ludovic Rousseau +Date: Wed Dec 16 12:42:36 2009 +0000 + + Todos Argos Mini II with firmware before 1.01 has a bogus CCID + descriptor: "Automatic IFSD exchange as first exchange (T=1)" is + missing. You can't use a T=1 card with this reader. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4619 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 1 + + 1 file changed, 1 insertion(+) + +commit d3c161509101822ade8d4eb1ee45c0b7c82d2987 +Author: Ludovic Rousseau +Date: Wed Dec 16 12:40:16 2009 +0000 + + Precise Biometrics Precise 250 MC with firmware before 50.00 is bogus: + time extension requests are not sent back to the host + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4618 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 1 + + 1 file changed, 1 insertion(+) + +commit 87284ef50bd5ec23e80ab8c13acf5bae730b8215 +Author: Ludovic Rousseau +Date: Wed Dec 16 11:38:37 2009 +0000 + + firmware 1.01 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4617 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Todos_AGM2_CCID.txt | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +commit 2022b5d4cbaf63d0a0ff173ec2f157f9a8f41f25 +Author: Ludovic Rousseau +Date: Tue Dec 15 09:18:39 2009 +0000 + + rename FEATURE_MCT_READERDIRECT in FEATURE_MCT_READER_DIRECT + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4614 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 8 ++++---- + src/ccid_ifdhandler.h | 4 ++-- + src/ifdhandler.c | 6 +++--- + 3 files changed, 9 insertions(+), 9 deletions(-) + +commit c5db0f4a95376c142f991f14abbfe584a9c66e2a +Author: Ludovic Rousseau +Date: Sun Dec 13 17:44:01 2009 +0000 + + ccid_open_hack_post(): get the language selected during Mac OS X + installation as language to use for Covadis Véga-Alpha and Gemalto GemPC + PinPad pinpad readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4610 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 28 +++++++++++++++++++++++++++- + 1 file changed, 27 insertions(+), 1 deletion(-) + +commit 54010aae2e6e7e517facca4159c4b98afaff8156 +Author: Ludovic Rousseau +Date: Wed Dec 9 17:22:08 2009 +0000 + + firmware update + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4597 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Precise_250_MC.txt | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 644c13bf45a81b1dba930454e16726f24bbab9dc +Author: Ludovic Rousseau +Date: Wed Dec 9 07:09:21 2009 +0000 + + do not generate extra space at end of line + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4594 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit e3a6df730e246d0ec0e1006caaf96de368badbb8 +Author: Ludovic Rousseau +Date: Sat Dec 5 14:29:31 2009 +0000 + + Precise Biometrics Precise 200 MC with firmware before 50.00 is bogus: + time extension requests are not sent back to the host + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4592 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 1 + + 1 file changed, 1 insertion(+) + +commit 4c66798e6f9c0cab63b8a867532cb2f723026ec8 +Author: Ludovic Rousseau +Date: Sat Dec 5 13:41:15 2009 +0000 + + improve docmentation of bogus readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4590 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit aba90242e2902e27b54d8567b74ec127248de2d8 +Author: Ludovic Rousseau +Date: Sat Dec 5 13:38:37 2009 +0000 + + add OCS ID-One Cosmo Card (with ProductID 0x6356) in a commented line + (unsupported) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4589 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 1 + + 1 file changed, 1 insertion(+) + +commit fb0147f4e6413081226de52959523e2a1c1d040a +Author: Ludovic Rousseau +Date: Sat Dec 5 13:32:20 2009 +0000 + + Gemalto Hybrid Smartcard Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4588 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Gemalto_HybridSmartcardReader.txt | 48 +++++++++++++++++++++++++++++++ + 1 file changed, 48 insertions(+) + +commit 52008d85b66ff1bd98db6494eb56a88609a85518 +Author: Ludovic Rousseau +Date: Wed Dec 2 16:18:34 2009 +0000 + + new firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4584 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Precise_200_MC.txt | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 44fb00d5d20c54b5263bf2b88d059c2e847e396d +Author: Ludovic Rousseau +Date: Wed Nov 18 08:05:05 2009 +0000 + + other version of the OCS ID-One Cosmo Card + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4556 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Oberthur-CosmoCard1.txt | 51 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 51 insertions(+) + +commit f5fdbf417310fde4b78cf25be746262943d6241f +Author: Ludovic Rousseau +Date: Tue Nov 17 08:50:46 2009 +0000 + + The Covadis Véga-Alpha reader is a GemPC pinpad inside. So we use the + same code to: + - load the strings for the display + - avoid limitation of the reader + + Thanks to Loïs Lherbier for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4550 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 1 + + src/ccid.h | 1 + + src/commands.c | 9 ++++++--- + 3 files changed, 8 insertions(+), 3 deletions(-) + +commit 525160a57300d6459c81475184d4a48b25d8d2d2 +Author: Ludovic Rousseau +Date: Fri Nov 13 17:33:10 2009 +0000 + + CmdGetSlotStatus(): the SCM SCR3310 also reports an error 0xFE + (ICC_MUTE) when no card is inserted. So extend the special case to all + readers and not just the O2MICRO OZ776. + + Thanks to Ivan Vilata i Balaguer for the bug report (Debian bug #555837) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4545 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 16 ++++------------ + 1 file changed, 4 insertions(+), 12 deletions(-) + +commit df075e8b503560142addeaefdf9e25565f0d9a49 +Author: Ludovic Rousseau +Date: Wed Oct 28 13:39:53 2009 +0000 + + set_ccid_descriptor(): reset dwSlotStatus to IFD_ICC_PRESENT for the + other slots of a multislot reader (like a GemCore SIM Pro). + + This is needed because the state of dwSlotStatus may have already been + changed to IFD_ICC_NOT_PRESENT (by the polling thread) when the second + slot is created. The polling thread of the second slot would then never + check for a card since this check is only done once. Slots are SAMs and + the card is always present or absent. + + The problem was already dealt with on USB from the beginning but not on + serial. + + Thanks to Emmanuel Deloget for the patch. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4521 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 1 + + 1 file changed, 1 insertion(+) + +commit f6c11ce9a618d1242c426fd7efcac6ca9e7fb2a6 +Author: Ludovic Rousseau +Date: Sun Oct 25 19:14:10 2009 +0000 + + change CMD_BUF_SIZE to support extended APDU of up to 64kB. We need this + size for readers in APDU mode to be able to receive the card response in + one block (chaining is not always possible in this direction) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4510 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/defs.h | 13 +++---------- + 1 file changed, 3 insertions(+), 10 deletions(-) + +commit 0465c835b671f60419e9c3ae8fb3fdbe8eca90b3 +Author: Ludovic Rousseau +Date: Sun Oct 25 17:44:06 2009 +0000 + + remove useless #define + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4509 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/defs.h | 2 -- + 1 file changed, 2 deletions(-) + +commit 787e8f7be8a54a61f530f56bd443c10d911b1406 +Author: Ludovic Rousseau +Date: Sun Oct 25 17:43:52 2009 +0000 + + FDHPowerICC(): use the exact length for the PowerOn output buffer + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4508 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 7a3b6c76c20d33a430f03cab3eecf2dd574ad917 +Author: Ludovic Rousseau +Date: Sun Oct 25 17:36:31 2009 +0000 + + remove useless #defines + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4507 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/defs.h | 9 --------- + 1 file changed, 9 deletions(-) + +commit 2f68b4d3677293d5a2158bfdedc9d85310cf3e98 +Author: Ludovic Rousseau +Date: Sat Oct 24 14:52:44 2009 +0000 + + check for IFD_ERROR_INSUFFICIENT_BUFFER in ifdhandler.h and simplify the + PCSC checking code + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4505 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +commit f4c5fc7b0b5fdca7bab40ad5504ce7ac6347325f +Author: Ludovic Rousseau +Date: Wed Oct 21 14:42:33 2009 +0000 + + new firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4502 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Precise_250_MC.txt | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +commit c82fb64e053786d76a1c7147cc4bb53f95737c25 +Author: Ludovic Rousseau +Date: Wed Oct 21 13:48:21 2009 +0000 + + new firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4501 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Precise_200_MC.txt | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +commit b175c046d13637ad50824854bd2d1657bbe2b639 +Author: Ludovic Rousseau +Date: Sun Oct 18 10:03:32 2009 +0000 + + FDHGetCapabilities(): add support of SCARD_ATTR_ICC_PRESENCE + + Required to support the Windows middleware that's used for French + Healthcar cards. + + Thanks to David Markowitz for the patch. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4499 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +commit efad2d9418aa7ea5a29dd98f10debb3b559811b4 +Author: Ludovic Rousseau +Date: Sun Oct 18 09:58:52 2009 +0000 + + FDHGetCapabilities(): add support of SCARD_ATTR_ICC_INTERFACE_STATUS + + Required to support the Windows middleware that's used for French + Healthcar cards. + + Thanks to David Markowitz for the patch. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4498 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit 223a8494e0b54c608f518c8cb0e68da536c813d3 +Author: Ludovic Rousseau +Date: Wed Oct 14 16:15:28 2009 +0000 + + add Smart SBV280 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4493 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Smart_SBV280.txt | 49 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 52 insertions(+) + +commit 30188bea3bb218a633667853f8feba7b45a03030 +Author: Ludovic Rousseau +Date: Thu Oct 8 08:46:02 2009 +0000 + + IFDHControl(): do not check if FEATURE_IFD_PIN_PROPERTIES is defined + since we now require pcsc-lite >= 1.5.6 (with FEATURE_IFD_PIN_PROPERTIES + defined) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4450 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_ifdhandler.h | 3 --- + src/ifdhandler.c | 4 ---- + 2 files changed, 7 deletions(-) + +commit 63f62e64d4b56d55230cd875562803bb000bfed4 +Author: Ludovic Rousseau +Date: Thu Oct 8 08:41:36 2009 +0000 + + IFDHGetCapabilities() & IFDHControl(): return + IFD_ERROR_INSUFFICIENT_BUFFER when appropriate + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4449 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 37 +++++++++++++++++++++++++++---------- + 1 file changed, 27 insertions(+), 10 deletions(-) + +commit 1f5f559798776f1745068e8cefe3f8517d59a49e +Author: Ludovic Rousseau +Date: Thu Oct 8 08:39:54 2009 +0000 + + Require to have pcsc-lite >= 1.5.6 to have IFD_ERROR_INSUFFICIENT_BUFFER + defined in ifdhandler.h + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4448 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + src/commands.c | 1 - + 2 files changed, 1 insertion(+), 2 deletions(-) + +commit 571ce9f8fc6409f8015fe5fdde01b404a89aa160 +Author: Ludovic Rousseau +Date: Thu Oct 8 08:22:24 2009 +0000 + + Use usb_strerror() instead of strerror(errno) to also get the libusb + specifc error messages + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4446 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit b9f97bb628ed185a1cbaeb23822b78f529bd9d26 +Author: Ludovic Rousseau +Date: Thu Oct 8 07:13:15 2009 +0000 + + The supported, should work and unsupported lists are now online only. + + The information in the README file was not up to date and hard to sync. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4441 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 244 ++--------------------------------------------------------------- + 1 file changed, 4 insertions(+), 240 deletions(-) + +commit 0d069ec57d63ed8fe5a0e4c0040e89d7af46fbcd +Author: Ludovic Rousseau +Date: Fri Oct 2 12:40:06 2009 +0000 + + revert change in revision 4414. It is a bug in the reader not the driver + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4417 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +commit c163ea48640ce4cc1003bd7503131b714f52b0a2 +Author: Ludovic Rousseau +Date: Fri Oct 2 12:39:07 2009 +0000 + + update + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4416 0ce88b0d-b2fd-0310-8134-9614164e65ea + + ylwrap | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +commit 7970ecd26ae5adece2e4663b246538a78086e595 +Author: Ludovic Rousseau +Date: Fri Oct 2 11:43:18 2009 +0000 + + IFDHSetProtocolParameters(): with a T=1 card, do not try to negociate + IFSD if the reader works in APDU mode + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4414 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit f21555b65f9d837df6920196f6db6a37eb6a8b2e +Author: Ludovic Rousseau +Date: Fri Oct 2 08:51:35 2009 +0000 + + update + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4413 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Todos_AGM2_CCID.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 3f620433cd32cf05a1324029866a66c0a4e04bbd +Author: Ludovic Rousseau +Date: Thu Oct 1 14:48:14 2009 +0000 + + IFDHControl(): typo in comment + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4411 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 24b3f4ce8fbed050ce5688183abe6099e860b3b1 +Author: Ludovic Rousseau +Date: Wed Sep 30 13:47:30 2009 +0000 + + IFDHControl(): PIN_PROPERTIES_STRUCTURE structure do not have the + wLcdMaxCharacters and wLcdMaxLines fields anymore. Conform with Revision + 2.02.06, April 2009 of PCSCv2 part 10. + + Modified in pcsc-lite > 1.5.5 (revision 4378, 2009-09-08) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4410 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 -- + 1 file changed, 2 deletions(-) + +commit 5d836f3da1c405f54913fbc6938762e2ec8d6f1b +Author: Ludovic Rousseau +Date: Mon Sep 28 14:06:49 2009 +0000 + + OpenUSBByName(): make the libhal scheme parsing more robust. + Readers serial "numbers" may contain '_' characters + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4401 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 10 ++-------- + 1 file changed, 2 insertions(+), 8 deletions(-) + +commit ceb363aa53bcae94dca0aff4873696e6bc25a74b +Author: Ludovic Rousseau +Date: Fri Sep 25 14:55:46 2009 +0000 + + IFDHPowerICC(): remove a useless ; + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4397 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ec74155efedda8e32787b03af4c01be91c16afe2 +Author: Ludovic Rousseau +Date: Tue Sep 22 08:16:19 2009 +0000 + + add Cherry SmartTerminal XX7X + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4392 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CherrySmartTerminalXX7X.txt | 189 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 190 insertions(+) + +commit 0d3c139cc1ae955e2640042fb466b73d9ab2a693 +Author: Ludovic Rousseau +Date: Tue Sep 22 08:12:09 2009 +0000 + + sample code is GPLv2+ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4390 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/GPL-2 | 339 +++++++++++++++++++++++++++++++++++++++++++++++++++ + examples/Makefile.am | 1 + + 2 files changed, 340 insertions(+) + +commit 5534bb495a853add73fb72699a88dec8ecbba633 +Author: Ludovic Rousseau +Date: Tue Sep 22 08:11:21 2009 +0000 + + SecurePINVerify(): circumvent a Dell keyboard problem + avoid the command rejection because the Enter key is still + pressed. Wait a bit (250ms) for the (Enter) key to be released. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4389 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit d210e6ec56f88b314f1a4e217d8706bee7583b38 +Author: Ludovic Rousseau +Date: Thu Sep 10 14:36:24 2009 +0000 + + circumvent bugs of the Dell 413c:2100 keyboard + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4383 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + src/commands.c | 14 +++++++++++++- + 2 files changed, 14 insertions(+), 1 deletion(-) + +commit ed488ba675e70283b1fe34934b14662c0ced3e5c +Author: Ludovic Rousseau +Date: Thu Sep 10 14:22:14 2009 +0000 + + regenerate + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4382 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/DellSK-3106.txt | 25 ++++++++++++++----------- + 1 file changed, 14 insertions(+), 11 deletions(-) + +commit 84c3a8a2583721b749077c892b28ff7bca3a3958 +Author: Ludovic Rousseau +Date: Thu Sep 10 08:33:55 2009 +0000 + + typo in comment + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4380 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist.src | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bba597c48104aa95b7c4e4415f56988a3272e93c +Author: Ludovic Rousseau +Date: Sun Aug 30 13:41:49 2009 +0000 + + add Todos AGM2 CCID + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4372 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Todos_AGM2_CCID.txt | 47 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 50 insertions(+) + +commit 2c48a1764a14042e489d080ca9083d471b989874 +Author: Ludovic Rousseau +Date: Thu Aug 27 13:31:51 2009 +0000 + + List of SCardControl() commands supported by the CCID driver + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4368 0ce88b0d-b2fd-0310-8134-9614164e65ea + + SCARDCONTOL.txt | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 62 insertions(+) + +commit 47bfa839a135abaf298010079555f49f1f78607f +Author: Ludovic Rousseau +Date: Thu Aug 27 13:16:46 2009 +0000 + + IFDHControl(): return IFD_ERROR_NOT_SUPPORTED instead of + IFD_COMMUNICATION_ERROR if the dwControlCode value is not supported + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4366 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 705ae3add22c377c422456ccf286206e772af14b +Author: Ludovic Rousseau +Date: Fri Jul 31 14:23:26 2009 +0000 + + ccid_open_hack_pre(): do not call InterruptRead() on Mac OS X. The + libusb does not timeout and blocks forever. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4360 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 12 +++++------- + 1 file changed, 5 insertions(+), 7 deletions(-) + +commit efc6983feb3a854c690faa578eac6d4159362985 +Author: Ludovic Rousseau +Date: Fri Jul 31 09:33:22 2009 +0000 + + IFDHControl(): the (proprietary) switch interface escape command is + allowed on the Gemalto GemProx DU + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4358 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +commit 28d0d87215331e5e19949b88ed403c401b934e28 +Author: Ludovic Rousseau +Date: Fri Jul 31 08:45:34 2009 +0000 + + IFDHControl(): the (proprietary) get firmware version escape command is + allowed with a Gemalto reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4356 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +commit be95a003cc6f54b08e583359ba31c8ee7efcb648 +Author: Ludovic Rousseau +Date: Fri Jul 31 08:42:49 2009 +0000 + + add GET_VENDOR macro + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4355 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 3 +++ + 1 file changed, 3 insertions(+) + +commit fc8b22909a9df37b6e64461a77be59949fe6d3f4 (tag: ccid-1.3.11) +Author: Ludovic Rousseau +Date: Tue Jul 28 20:52:50 2009 +0000 + + release 1.3.11 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4347 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 23 +++++++++++++++++++++++ + configure.in | 2 +- + 2 files changed, 24 insertions(+), 1 deletion(-) + +commit d0c82dc35a5981c85bf966cf042863732d3d338f +Author: Ludovic Rousseau +Date: Tue Jul 28 13:39:37 2009 +0000 + + change InterruptRead() to add a timeout parameter. We need a short + timeout in ccid_open_hack_pre() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4346 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 3 ++- + src/ccid_usb.c | 4 +--- + src/ccid_usb.h | 2 +- + src/ifdhandler.c | 2 +- + 4 files changed, 5 insertions(+), 6 deletions(-) + +commit c4e2d50ca24be73c6b84af9a376d5ce61891124a +Author: Ludovic Rousseau +Date: Tue Jul 28 13:35:22 2009 +0000 + + InterruptRead(): also log reader_index (instead of Lun) for debug + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4345 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 70710fb8ba603dada2fef6a59abbfc47ebc13e3e +Author: Ludovic Rousseau +Date: Mon Jul 27 09:47:18 2009 +0000 + + OpenUSBByName(): do not modify the device name. The same pointer is used + by pcscd + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4343 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +commit e76ad3555a8525b0d16e23c0e4efb120b525f221 +Author: Ludovic Rousseau +Date: Mon Jul 27 08:49:01 2009 +0000 + + InterruptRead(): use usb_strerror() to display the error message in + text instead of just decimal + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4342 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c6dbf9fc1dab702ffd1bc9185593e27357a74793 +Author: Ludovic Rousseau +Date: Tue Jul 21 17:54:47 2009 +0000 + + send a "secoder info" command if the reader supports + FEATURE_MCT_READERDIRECT + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4341 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 23 +++++++++++++++++++---- + 1 file changed, 19 insertions(+), 4 deletions(-) + +commit d5e3946886927811c583bd6b043c4fc73978811a +Author: Ludovic Rousseau +Date: Tue Jul 21 17:45:21 2009 +0000 + + parse FEATURE_IFD_PIN_PROPERTIES and FEATURE_MCT_READERDIRECT tags + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4340 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +commit 01e8e7fbecb7d96895d605e544f3cccbcabe476a +Author: Ludovic Rousseau +Date: Tue Jul 21 17:29:02 2009 +0000 + + use a swicth to parse the CM_IOCTL_GET_FEATURE_REQUEST TLV tag + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4339 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +commit aa7a914200179a32361b17d2bfb93a35cd884235 +Author: Ludovic Rousseau +Date: Tue Jul 21 17:26:14 2009 +0000 + + check a card is present only _after_ + SCardControl(CM_IOCTL_GET_FEATURE_REQUEST) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4338 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 40 ++++++++++++++++++++-------------------- + 1 file changed, 20 insertions(+), 20 deletions(-) + +commit ce2d01427210716fe1a1347f59ad63fffc9f630f +Author: Ludovic Rousseau +Date: Tue Jul 21 14:39:15 2009 +0000 + + update copyright date + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4337 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit dd978b88c8239f44165a5e8af65075aeb0d7079e +Author: Ludovic Rousseau +Date: Tue Jul 21 14:36:20 2009 +0000 + + document how to select a reader using a command line argument + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4336 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 798b255309cadcaebc90781d351355382f4375bc +Author: Ludovic Rousseau +Date: Tue Jul 21 14:31:18 2009 +0000 + + check the error code returned by SCardControl(CM_IOCTL_GET_FEATURE_REQUEST) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4335 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 1 + + 1 file changed, 1 insertion(+) + +commit cc98b3321ff022d77fb5597585a74ba6a9ac1b85 +Author: Ludovic Rousseau +Date: Mon Jul 20 10:03:59 2009 +0000 + + the disable card movements notification "hack" for GemProx DU is no more needed + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4325 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 23 ----------------------- + 1 file changed, 23 deletions(-) + +commit 5ec9da79b0b1d946847e437a1a4c3dc5a4f8aa0a +Author: Ludovic Rousseau +Date: Sat Jul 18 11:37:41 2009 +0000 + + update Copyright date + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4323 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 06bbbfc14997c2f005afe7e5611aed914eecdb2d +Author: Ludovic Rousseau +Date: Sat Jul 18 11:35:25 2009 +0000 + + try to use a static link with libusb even if libusb-config is found + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4322 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 4 ++++ + 1 file changed, 4 insertions(+) + +commit c7b6f653b201a4d852f728586d20cd8d8ea2726e +Author: Ludovic Rousseau +Date: Fri Jul 17 13:43:45 2009 +0000 + + add Panasonic USB Smart Card Reader 7A-Smart + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4318 0ce88b0d-b2fd-0310-8134-9614164e65ea + + .../Panasonic_USB_Smart_Card_Reader_7A-Smart.txt | 90 ++++++++++++++++++++++ + readers/supported_readers.txt | 3 + + 2 files changed, 93 insertions(+) + +commit 89b58663d948cb8c645ff7992518dd44392aee8d +Author: Ludovic Rousseau +Date: Tue Jul 7 08:17:02 2009 +0000 + + ifd-ccid-foobar -> ifd-ccid-foobar.bundle for the bundle name + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4313 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 66343e972ff4a3826ab54c3a150671e7c9f836c6 +Author: Ludovic Rousseau +Date: Tue Jul 7 06:24:40 2009 +0000 + + add ATMEL_AT91SC192192CT-USB.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4311 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ATMEL_AT91SC192192CT-USB.txt | 49 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 50 insertions(+) + +commit 5cf8ab29a33f683ad82318d001aeba67423f6df0 +Author: Ludovic Rousseau +Date: Mon Jul 6 15:03:37 2009 +0000 + + add --disable-class argument to build a NON class driver + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4310 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 11 +++++++++++ + src/Makefile.am | 2 +- + 2 files changed, 12 insertions(+), 1 deletion(-) + +commit 99f3b262b38af198ed88712494128abc563eb0b8 +Author: Ludovic Rousseau +Date: Mon Jul 6 15:02:04 2009 +0000 + + remove debug line + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4309 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/create_Info_plist.pl | 2 -- + 1 file changed, 2 deletions(-) + +commit c369b518592a02490b9fc3284f4f65abb39d610b +Author: Ludovic Rousseau +Date: Mon Jul 6 14:49:59 2009 +0000 + + add a --no-class argument so that the Info.plist does not define a Class + driver. Default is class driver. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4308 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist.src | 1 + + src/create_Info_plist.pl | 18 +++++++++++++++--- + 2 files changed, 16 insertions(+), 3 deletions(-) + +commit b20be7e552805d130e9561bfa38e992cfcd97e53 +Author: Ludovic Rousseau +Date: Mon Jul 6 14:39:45 2009 +0000 + + default value for ifdCapabilities is now 0x00000000 since pcscd should + use libhal instead of udev hotplug + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4307 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist.src | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 198a15c2008852c420d0b69880abe07fc42a8090 +Author: Ludovic Rousseau +Date: Mon Jul 6 14:37:50 2009 +0000 + + extend create_Info_plist.pl to use --ifdCapabilities= --target= + --version= --bundle= instead of sed expression in the Makefile + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4306 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist.src | 8 +++----- + src/Makefile.am | 2 +- + src/create_Info_plist.pl | 41 ++++++++++++++++++++++++++++++++++++----- + 3 files changed, 40 insertions(+), 11 deletions(-) + +commit 167897ef071ccca61ab1551d0c852ab14241bb36 +Author: Ludovic Rousseau +Date: Mon Jul 6 13:44:12 2009 +0000 + + add Alcor Micro SCR001 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4304 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Alcor_SCR001.txt | 111 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 112 insertions(+) + +commit 6d90f117d8d1cbe5b7bcf2821a0d74c6a046ca6b +Author: Ludovic Rousseau +Date: Mon Jul 6 12:03:31 2009 +0000 + + document the use of --enable-bundle= + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4303 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 3 +++ + 1 file changed, 3 insertions(+) + +commit 965e235d42f33d5a29efc446efcb1fea3ed13193 +Author: Ludovic Rousseau +Date: Mon Jul 6 11:51:34 2009 +0000 + + check if strlcat is provided by the system + + strlcpycat.h:20: warning: redundant redeclaration of ‘strlcat’ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4302 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bcea84a6e5d94ae9d2fffe93b26a6d7e25cb18be +Author: Ludovic Rousseau +Date: Fri Jul 3 12:48:36 2009 +0000 + + If the driver fails to open a device (wrong interface number in the + libhal scheme for example) then return IFD_NO_SUCH_DEVICE instead of the + generic error IFD_COMMUNICATION_ERROR + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4295 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + src/ifdhandler.c | 9 +++++++-- + 2 files changed, 8 insertions(+), 3 deletions(-) + +commit fa5d25f355a4d858fa16bfc601ec586c8c1f5d0c +Author: Ludovic Rousseau +Date: Wed Jul 1 12:28:01 2009 +0000 + + use int instead of DWORD for nATRLength in CCID_DESC structure. + Gain 8 bytes on the structure size. Thanks to pahole(1) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4292 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/defs.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0082097a7e581e4b9df46597d81b9a4219508cf7 +Author: Ludovic Rousseau +Date: Mon Jun 29 12:30:03 2009 +0000 + + InterruptRead(): use PERIODIC instead of COMM debug level to not pollute + to much the logs for this _periodic_ call + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4284 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 49d19d2d08175daa8a08c3c0a519846225bb4766 +Author: Ludovic Rousseau +Date: Fri Jun 26 15:03:55 2009 +0000 + + IFDHControl(): add support of FEATURE_MCT_READERDIRECT + + Only the Kobil TriB@nk reader supports this feature for now. This is + used for the Secoder functionality in connected mode. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4282 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 46 ++++++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 44 insertions(+), 2 deletions(-) + +commit e1094b4f67def72326f9c97d22c15378e09fc988 +Author: Ludovic Rousseau +Date: Fri Jun 26 15:00:42 2009 +0000 + + ccid_open_hack_pre(): do not call InterruptRead() with a KOBIL_TRIBANK + The call do not timeout and blocs until a card is inserted (on Mac OS X) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4281 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +commit de92ed01c4ad765071da691a984a2ec5f9faeb11 +Author: Ludovic Rousseau +Date: Fri Jun 26 14:58:23 2009 +0000 + + #define KOBIL_TRIBANK + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4280 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + 1 file changed, 1 insertion(+) + +commit b835bce4054710992f9e02f22ffae1f1314f5ac2 +Author: Ludovic Rousseau +Date: Fri Jun 26 14:58:03 2009 +0000 + + #define IOCTL_FEATURE_MCT_READERDIRECT + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4279 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_ifdhandler.h | 2 ++ + 1 file changed, 2 insertions(+) + +commit 115d09dc7dd50327b0daee32a85c3fdaa57b6d5f +Author: Ludovic Rousseau +Date: Thu Jun 25 15:56:13 2009 +0000 + + add Aktiv Rutoken ECP + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4276 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Aktiv_Rutoken_ECP.txt | 49 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 50 insertions(+) + +commit 2d1be08f46c806c3ef954bf2e465020b67d4672a +Author: Ludovic Rousseau +Date: Thu Jun 25 12:30:16 2009 +0000 + + typo in comment + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4274 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b3582c8e1a7ff7927d2ed55614d6c06e70e5ae1c +Author: Ludovic Rousseau +Date: Sat Jun 20 16:25:08 2009 +0000 + + add missing ':' separator + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4267 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit c608d9e922b03575e47e3ec4acb0f20f98e462ef +Author: Ludovic Rousseau +Date: Sat Jun 20 14:52:31 2009 +0000 + + define IOCTL_FEATURE_IFD_PIN_PROPERTIES only if + FEATURE_IFD_PIN_PROPERTIES is defined (pcsc-lite version >= 1.5.3) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4266 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_ifdhandler.h | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit fa73e0e001373c365665e079d1519e5f02f0e9bd +Author: Ludovic Rousseau +Date: Fri Jun 19 19:09:27 2009 +0000 + + add Synnix STD200 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4263 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Synnix_STD200.txt | 52 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 55 insertions(+) + +commit 8fe2f9e6cd986507e14816426ef4f50db0760239 +Author: Ludovic Rousseau +Date: Tue Jun 16 09:26:26 2009 +0000 + + add 2 Neowave Weneo tokens + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4260 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 4 ++++ + 1 file changed, 4 insertions(+) + +commit ee8567e34860268c6a07a82509e93555ecdbd981 +Author: Ludovic Rousseau +Date: Tue Jun 16 09:22:35 2009 +0000 + + another Neowave token + - 512MB flash storage + - OS is "IBM JCOP41 Standard" + - 32k internal memory + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4257 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Neowave_Weneo2.txt | 54 ++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 54 insertions(+) + +commit bea1c96ae3bd7a05104325f2ea794d6494529a2d +Author: Ludovic Rousseau +Date: Sun Jun 14 11:17:00 2009 +0000 + + rename variable index in idx + + utils.h:32: warning: declaration of 'index' shadows a global declaration + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4256 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/utils.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 98f154587777bc242f46b6a201ff13a2dc82741a +Author: Ludovic Rousseau +Date: Sun Jun 14 11:15:10 2009 +0000 + + IFDHControl(): use the correct return size for + IOCTL_FEATURE_IFD_PIN_PROPERTIES + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4255 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit aefa6fb685b745cbc1d847cacba9b26a27a47b55 +Author: Ludovic Rousseau +Date: Sat Jun 13 16:23:30 2009 +0000 + + new firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4254 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Kobil_EMV_CAP.txt | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit 0db4a6db448aab4b400fca7e0ab78c88b6a8adf6 +Author: Ludovic Rousseau +Date: Fri May 29 11:42:46 2009 +0000 + + CmdXfrBlockAPDU_extended(): Correctly ask for the next extended response + block. + + Thanks to Harm Braams for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4235 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 1ce348f14a315848d8bd7df1d8848a051b278b10 +Author: Ludovic Rousseau +Date: Wed May 27 11:51:07 2009 +0000 + + ccid_check_firmware(): reindent a line + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4229 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 99aebc49641a68dffbdca57861215cabf2516a78 +Author: Ludovic Rousseau +Date: Wed May 27 11:49:47 2009 +0000 + + OpenUSBByName(): no need to get a pointer on the device serial number + from the HAL string + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4228 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 -- + 1 file changed, 2 deletions(-) + +commit 0fae61d36a6c33a53007bdf17cac294e24bdd481 +Author: Ludovic Rousseau +Date: Wed May 27 09:20:44 2009 +0000 + + ACS ACR122U-WB-R with firmware < 2.06 are bogus: APDU with 0x7B (123) + bytes expected do not work with a 14443 card. The reader returns SW=63 + 00 instead. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4227 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 1 + + 1 file changed, 1 insertion(+) + +commit 78a9aaa3b82e5c54111e463f047b153b0d30f2fe +Author: Ludovic Rousseau +Date: Wed May 27 08:58:45 2009 +0000 + + new firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4226 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACR122U_PICC.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit b888bfb3de0e88f42e3dea52a2b5860aacf64ec8 +Author: Ludovic Rousseau +Date: Mon May 25 08:52:21 2009 +0000 + + generate a .bz2 archive only + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4224 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 -- + configure.in | 2 +- + 2 files changed, 1 insertion(+), 3 deletions(-) + +commit 3d4e133f9ea7d7a99dac3036fb16c5f36078aeb6 +Author: Ludovic Rousseau +Date: Wed May 13 12:08:43 2009 +0000 + + remove a _ in the filename + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4204 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/{Softforum__XecureHSM.txt => Softforum_XecureHSM.txt} | 0 + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit 7c2486cbb3fdb5d3c5461ea9f3c5bd4d5dd7ffcb +Author: Ludovic Rousseau +Date: Wed May 13 12:07:03 2009 +0000 + + rename Samsung XecureHSM in Softforum XecureHSM + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4203 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/{Samsung_XecureHSM.txt => Softforum__XecureHSM.txt} | 0 + readers/supported_readers.txt | 4 ++-- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit c699aa8d789bb4c04969d025d8b1a9df83a645cb +Author: Ludovic Rousseau +Date: Tue May 12 12:06:12 2009 +0000 + + add Samsung XecureHSM + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4197 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Samsung_XecureHSM.txt | 49 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 52 insertions(+) + +commit 531bdc0cb18845fd37acd4438178fce6cf6e7dbb +Author: Ludovic Rousseau +Date: Sun May 10 16:15:39 2009 +0000 + + ccid_open_hack_pre(): call InterruptRead() for all CCID device + Makes the Broadcom 5880 work a bit better (but the reader is still + bogus) + ---This line, and those below, will be ignored-- + + M src/ccid.c + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@4195 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit 46e8dba8c0f30eba44eb0c552c479ac9f873af11 +Author: Ludovic Rousseau +Date: Fri May 8 06:30:56 2009 +0000 + + C3PO_LTC32_USBv2_old.txt is a duplicate of C3PO_TLTC2USB.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3494 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/C3PO_LTC32_USBv2_old.txt | 50 ---------------------------------------- + readers/Makefile.am | 1 - + 2 files changed, 51 deletions(-) + +commit 24dd80c52b417da59bbb760eee5141d0bfa56fb2 +Author: Ludovic Rousseau +Date: Thu May 7 13:21:06 2009 +0000 + + duplicate of C3PO_LTC32_USBv2.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3490 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/LTC32.txt | 54 ------------------------------------------------------ + 1 file changed, 54 deletions(-) + +commit 137bb455ca02451412258b7c999c6e8896fffa38 +Author: Ludovic Rousseau +Date: Thu May 7 08:04:20 2009 +0000 + + do not power up a card with a voltage not supported by the reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3488 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 8 ++++++++ + src/ccid_serial.c | 1 + + src/ccid_usb.c | 1 + + src/commands.c | 22 ++++++++++++++++++++++ + 4 files changed, 32 insertions(+) + +commit 42602358adc653cea01bfdf65c60b5a44cb0db6e +Author: Ludovic Rousseau +Date: Sat May 2 11:33:55 2009 +0000 + + the CCID descriptor was duplicated + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3485 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCR331-DI-NTTCom.txt | 52 -------------------------------------------- + 1 file changed, 52 deletions(-) + +commit a50c1d6a404779e16146110af50f940a94a16394 +Author: Ludovic Rousseau +Date: Tue Apr 21 08:55:46 2009 +0000 + + add Feitian SCR301 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3462 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Feitian_SCR301.txt | 50 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 53 insertions(+) + +commit 0a15cd594c6a4113645fd3ee00ca7380494172cd +Author: Ludovic Rousseau +Date: Fri Apr 17 12:03:38 2009 +0000 + + define CFBundleName to CCIDCLASSDRIVER so that non class drivers have a + higher priority. It should work on Mac OS X. + + Patch from SmartCardServices on macosxforge.org + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3459 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist.src | 2 ++ + 1 file changed, 2 insertions(+) + +commit 5dbe452d8fc52c7202af6e004aa5ab0ee9bef8c3 +Author: Ludovic Rousseau +Date: Fri Apr 17 12:00:41 2009 +0000 + + add CFBundleExecutable, CFBundleIdentifier and + CFBundleShortVersionString to be inline with the Apple version + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3458 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist.src | 8 +++++++- + src/Makefile.am | 2 +- + 2 files changed, 8 insertions(+), 2 deletions(-) + +commit 7bca80793c6762b86dcc11d7b16df9fd6c20d01d +Author: Ludovic Rousseau +Date: Thu Apr 16 20:17:45 2009 +0000 + + add iDream Vid/Pid but commented as the reader is bogus + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3455 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 1 + + 1 file changed, 1 insertion(+) + +commit 3286d9bb6f3e8fd286df7c81ec34206928b54af8 +Author: Ludovic Rousseau +Date: Thu Apr 16 11:28:48 2009 +0000 + + add Raritan D2CIM-DVUSB VM/CCID in the should work list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3454 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 3 +++ + 2 files changed, 4 insertions(+) + +commit 958988c473f60b4029d1b62bfce7626dbb245231 +Author: Ludovic Rousseau +Date: Fri Apr 10 07:51:07 2009 +0000 + + t1_transceive(): receiving a WTX block asking for more time is not a + critical error. Use DEBUG_COMM2 instead of DEBUG_CRITICAL2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3425 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1cc32ed32ffea8c3f2a2f446f542028875c72a37 +Author: Ludovic Rousseau +Date: Fri Apr 10 07:43:30 2009 +0000 + + ccid_open_hack_pre(): empty the interrupt end point (card movements) + before trying to talk to the device for the GemProx DU/SU + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3424 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 55faa1889ff5b6c5cf890b9103c2b041c63f3e50 +Author: Ludovic Rousseau +Date: Thu Apr 9 18:45:21 2009 +0000 + + add Raritan D2CIM-DVUSB VM/CCID virtual reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3423 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Raritan_D2CIM-DVUSB.txt | 52 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 52 insertions(+) + +commit d4119d9f05d25bf9fa995b5cf025d43bcc0bc5e3 +Author: Ludovic Rousseau +Date: Thu Apr 9 12:42:34 2009 +0000 + + IFDHCreateChannelByname() & IFDHCreateChannel(): do not call + ccid_open_hack_post() if the 3 IFDHICCPresence() failed and we closed + the reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3416 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit aaa14e31f4184029b0ce4e736b9c96d34fe58d56 +Author: Ludovic Rousseau +Date: Thu Apr 9 07:21:47 2009 +0000 + + OpenUSBByName(): static_interface variable is used only with + USE_COMPOSITE_AS_MULTISLOT + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3414 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 594bfb7109f9d7875e072c8a2da1d9129d9ad1cb +Author: Ludovic Rousseau +Date: Wed Apr 8 19:49:49 2009 +0000 + + The SCM SCL010 Contactless Reader is not supported + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3413 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCL010.txt | 66 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 67 insertions(+) + +commit 2dbec46347807e580c83d75d4beadf98571bbfa5 +Author: Ludovic Rousseau +Date: Thu Apr 2 07:30:37 2009 +0000 + + regenerate + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3409 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemProxDU_contact.txt | 2 +- + readers/GemProxDU_contactless.txt | 2 +- + readers/GemProxSU_contact.txt | 2 +- + readers/GemProxSU_contactless.txt | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +commit f3af2e396cbaaa3ff8e41c66101f41ad15d835ec +Author: Ludovic Rousseau +Date: Thu Apr 2 07:27:13 2009 +0000 + + get the iInterface string instead of just printing the string number + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3408 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +commit 77280ab211f63f379a2183428ea2ba8644c80e09 +Author: Ludovic Rousseau +Date: Tue Mar 31 12:48:21 2009 +0000 + + OpenUSBByName(): only increase the interface number for the next "slot" + if the previous interface was opened correctly + + It is now posible to use 2 composite readers without libusb and libhal + scheme + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3406 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 20 +++++++++++++------- + 1 file changed, 13 insertions(+), 7 deletions(-) + +commit 408f6c65c4d158c164742dae92b402552f55d9cb +Author: Ludovic Rousseau +Date: Tue Mar 31 09:30:01 2009 +0000 + + OpenUSBByName(): support more than one composite or + composite-as-multislot readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3405 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit 6ea2b7859f05b3e75579f93e7335153b2bbe52b6 +Author: Ludovic Rousseau +Date: Mon Mar 30 09:04:52 2009 +0000 + + move hack code for GemPC Key, GemPC Twin, GemPC pinpad, GemProx DU + GemProx SU and SCM contactless readers from ccid_open_hack_pre() to + ccid_open_hack_post() + + We first need to get a correct communication (sync USB togggle bit) + before sending the control commands + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3404 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 127 ++++++++++++++++++++++++++++++------------------------------- + 1 file changed, 63 insertions(+), 64 deletions(-) + +commit 6fc993844922c75b4b1d78bc4a2fd9336ba167ca +Author: Ludovic Rousseau +Date: Mon Mar 30 08:55:59 2009 +0000 + + split ccid_open_hack() in ccid_open_hack_pre() and ccid_open_hack_post() + before and after the empirical "warm up" sequence + + The problem is the USB toggle bit. I could not find a simple way to + reset it. So when the driver is started again the reader and the host + may not be in sync. The few first CCID commands may fail. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3403 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 22 +++++++++++++++++++--- + src/ccid.h | 3 ++- + src/ifdhandler.c | 10 ++++++++-- + 3 files changed, 29 insertions(+), 6 deletions(-) + +commit 747d5b20f532eb3a959cbb0620917b11501f5f9b +Author: Ludovic Rousseau +Date: Sun Mar 29 11:48:05 2009 +0000 + + remove support of Reiner-SCT cyberJack pinpad(a) on request of + Reiner-SCT + + You should user the Reiner-SCT driver instead + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3401 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 00ccf66847166c59a577a9ee0e45765806c08925 +Author: Ludovic Rousseau +Date: Fri Mar 27 16:13:59 2009 +0000 + + IFDHCreateChannel(): use the same empirical hack as in + IFDHCreateChannelByName() to recover the reader after pcscd is + restarted. + + The problem is that USB frames have a toggle bit + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3395 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +commit 4defec7269ed9da7bc60208a80bdf8c98b63a98e +Author: Ludovic Rousseau +Date: Thu Mar 26 14:36:16 2009 +0000 + + add Gemalto GemProx DU and SU readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3380 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemProxDU_contact.txt | 91 +++++++++++++++++++++++++++++++++++++++ + readers/GemProxDU_contactless.txt | 52 ++++++++++++++++++++++ + readers/GemProxSU_contact.txt | 91 +++++++++++++++++++++++++++++++++++++++ + readers/GemProxSU_contactless.txt | 52 ++++++++++++++++++++++ + readers/supported_readers.txt | 2 + + 5 files changed, 288 insertions(+) + +commit 3637023fe643eb12035f170a02892671ff518730 +Author: Ludovic Rousseau +Date: Thu Mar 26 14:35:34 2009 +0000 + + use --enable-composite-as-multislot on Mac OS X since libhal is not + available on Mac OS X + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3379 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 3 +++ + 1 file changed, 3 insertions(+) + +commit 59d514d8dbb1a518b4e97a3d8c21890f109f66f3 +Author: Ludovic Rousseau +Date: Thu Mar 26 14:34:35 2009 +0000 + + add support of a composite device as multi-slots device + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3378 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 12 ++++++++++++ + src/ccid.c | 23 +++++++++++++++++++++++ + src/ccid.h | 2 ++ + src/ccid_usb.c | 21 +++++++++++++++++++++ + src/ifdhandler.c | 11 +++++++++++ + 5 files changed, 69 insertions(+) + +commit c18a6005086bf8b9d6f9a672f910bcd77a57c9b8 +Author: Ludovic Rousseau +Date: Tue Mar 24 14:33:03 2009 +0000 + + SecurePINVerify(): Correct bNumberMessage for Dell keyboard + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3375 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + src/commands.c | 12 ++++++++++++ + 2 files changed, 13 insertions(+) + +commit 6523e39cdea69ca30d168ae6d6099934caca3a26 +Author: Ludovic Rousseau +Date: Tue Mar 24 14:28:43 2009 +0000 + + update + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3374 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/DellSCRK.txt | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +commit f0acc4f0cef049cb5d00ed8e940ebe51fb23f64b +Author: Ludovic Rousseau +Date: Tue Mar 24 13:09:45 2009 +0000 + + add a (faked) USB descriptor for the GemPC Twin using serial + communication + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3373 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemPCTwin_serial.txt | 1 + + 1 file changed, 1 insertion(+) + +commit 28764d27c6f8fe75670a71a6685edff9d224f21e +Author: Ludovic Rousseau +Date: Sat Mar 21 14:07:54 2009 +0000 + + add support of PIN_PROPERTIES_STRUCTURE structure and + FEATURE_IFD_PIN_PROPERTIES + + Thanks to Martin Paljak for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3356 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 6 +++--- + src/ccid.h | 7 ++++++- + src/ccid_ifdhandler.h | 4 +++- + src/ccid_usb.c | 5 ++++- + src/commands.c | 4 ++-- + src/ifdhandler.c | 40 ++++++++++++++++++++++++++++++++++++---- + 6 files changed, 54 insertions(+), 12 deletions(-) + +commit b94b3a9f0a73671d87d314d6b02045951327077e +Author: Ludovic Rousseau +Date: Fri Mar 20 16:10:31 2009 +0000 + + CmdEscape(): set the communication timeout to 30 seconds for the + PC_to_RDR_Escape commands since some commands may be slow + + Thanks to Adam Laurie (rfidiot.org) for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3354 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 23 ++++++++++++++++++----- + 1 file changed, 18 insertions(+), 5 deletions(-) + +commit 081a5d95a44c5fc5918672b276685ac5cb160974 +Author: Ludovic Rousseau +Date: Fri Mar 20 16:04:16 2009 +0000 + + SecurePINVerify() and SecurePINModify(): correctly restore the + communication timeout if sending the command fails + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3353 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +commit 355e314bc11f88dc6576ca08e8797c70611c9e13 +Author: Ludovic Rousseau +Date: Thu Mar 19 14:12:19 2009 +0000 + + SecurePINModify(): do not reject the command if bNumberMessage = 0xFF + (default value) + + Thanks to Martin Paljak for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3351 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 53c7fd9a6bb67a9fcb010b67ee479a4cdcb393a2 +Author: Ludovic Rousseau +Date: Thu Mar 19 13:48:10 2009 +0000 + + OpenUSBByName(): support more than one CCID interface per USB device + with the libhal scheme + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3350 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++----- + 1 file changed, 77 insertions(+), 7 deletions(-) + +commit 54facc0cfa5c554db9b2fdf6e7354178a6714824 +Author: Ludovic Rousseau +Date: Tue Mar 17 12:44:10 2009 +0000 + + Use libusb-config to define LIBUSB_* variables + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3349 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 2 ++ + 1 file changed, 2 insertions(+) + +commit 04e3bbcf6ee512beb770b128ab066093bbc25f0d +Author: Ludovic Rousseau +Date: Tue Mar 17 09:42:40 2009 +0000 + + allow to list more than one CCID interface per USB device + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3348 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 38 ++++++++++++++++++++++---------------- + src/ccid_usb.h | 3 ++- + src/parse.c | 22 +++++++++++++++------- + 3 files changed, 39 insertions(+), 24 deletions(-) + +commit 79e7938575de6ae993046fbe0c13a1aab671b6c5 +Author: Ludovic Rousseau +Date: Fri Mar 13 15:52:01 2009 +0000 + + remove fingerprint part + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3344 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Alya.txt | 22 ---------------------- + 1 file changed, 22 deletions(-) + +commit 5d42e510137dab2475fc526c298d002918314444 +Author: Ludovic Rousseau +Date: Sat Mar 7 15:50:22 2009 +0000 + + use spaces instead of tabs + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3340 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +commit 0a53d04c7c0809a692ed1b62d2a257d195699b4a (tag: ccid-1.3.10) +Author: Ludovic Rousseau +Date: Sat Mar 7 15:35:24 2009 +0000 + + release 1.3.10 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3338 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 12 ++++++++++++ + configure.in | 2 +- + 2 files changed, 13 insertions(+), 1 deletion(-) + +commit 2046eb6793c33710f1f5925b183c3f00c7e99d99 +Author: Ludovic Rousseau +Date: Sat Mar 7 14:30:17 2009 +0000 + + IFDHSetProtocolParameters(): rename atr in openpgp_atr + + ifdhandler.c:822: warning: declaration of ‘atr’ shadows a previous local + ifdhandler.c:527: warning: shadowed declaration is here + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3337 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 149ba6cf738a54bab9de5fc2f436c0ea52d8a6bc +Author: Ludovic Rousseau +Date: Sun Mar 1 12:49:31 2009 +0000 + + IFDHSetProtocolParameters(): add a hack to support the bogus OpenGPG + card. The card declares a BWI=4 (1.4s) but, sometimes, do not send a WTX + (time request) in time and the on board key generation then fails. The + patch uses BWI=7 (11s) + + Thanks to Jan Suhr for helping tracking the bug + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3330 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +commit 85d5f8bf2c172a31cfd08a61dcdacc5abb30e65f +Author: Ludovic Rousseau +Date: Wed Feb 25 13:01:25 2009 +0000 + + add ACS ACR100 and ACS ACR38 plugin + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3325 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACS_ACR100.txt | 50 ++++++++++++++++++++++++++++++++++++++++++++ + readers/ACS_ACR38_plugin.txt | 50 ++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 100 insertions(+) + +commit ecec27ecc10353f3070c524f39ec42a7b468cc46 +Author: Ludovic Rousseau +Date: Wed Feb 25 12:48:09 2009 +0000 + + update firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3324 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACR122U_PICC.txt | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit dce13182ab591354fa1f14f93a0f806cd50f7d7e +Author: Ludovic Rousseau +Date: Sat Feb 21 13:59:54 2009 +0000 + + typo in comment + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3322 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit bc058950ae89cc3f6ae41e0f9127c0db6700b31c +Author: Ludovic Rousseau +Date: Wed Feb 18 13:31:56 2009 +0000 + + add Precise Biometrics 200 MC and 250 MC in the "should work" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3320 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/Precise_200_MC.txt | 52 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 4 ++++ + 3 files changed, 58 insertions(+) + +commit 52d90bc479c02208c6625ad1d7cae9aa9110f5dd +Author: Ludovic Rousseau +Date: Wed Feb 18 07:31:34 2009 +0000 + + IFDHSetProtocolParameters(): correct parameter Protocol documentation + + Thanks to Joachim Breitner for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3319 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e7c037e4b289db99a3ae28c3ccee4e2dbc211c4d +Author: Ludovic Rousseau +Date: Sun Feb 15 15:55:30 2009 +0000 + + SecurePINVerify(): also check the value of bmPINBlockString in case of + Case 1 APDU and SPR532 + + Thanks to Peter Koch for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3318 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +commit 269ce49b87e467990e160cb2353afc88b1d55998 +Author: Ludovic Rousseau +Date: Sat Feb 14 08:56:26 2009 +0000 + + use product name Philips SmartMX instead of commercial name + SafeNet IKey4000. + + SafeNet IKey4000 is also used with different device like: + idVendor: 0x04B9 iManufacturer: SafeNet, Inc. + idProduct: 0x1206 iProduct: iKey 4000 + Found a CCID/ICCD device + idVendor: 0x04B9 + iManufacturer: SafeNet, Inc. + idProduct: 0x1206 + iProduct: iKey 4000 + bcdDevice: 1.10 (firmware release?) + bLength: 9 + bDescriptorType: 4 + bInterfaceNumber: 0 + bAlternateSetting: 0 + bNumEndpoints: 0 + Control only + bInterfaceClass: 0xFF + NOT A CCID DEVICE + Class is 0xFF (proprietary) + bInterfaceSubClass: 0 + bInterfaceProtocol: 0 + bulk transfer, optional interrupt-IN (CCID) + iInterface: 0 + USB extra length is too short: 2 + + NOT A CCID DEVICE + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3316 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 +- + readers/Makefile.am | 2 +- + readers/{SafeNet_IKey4000.txt => Philips_SmartMX.txt} | 0 + readers/supported_readers.txt | 4 ++-- + 4 files changed, 4 insertions(+), 4 deletions(-) + +commit f1c26ef4b4e8e5a66e891cd2ff31123531a63c74 +Author: Ludovic Rousseau +Date: Wed Feb 11 12:50:28 2009 +0000 + + add TianYu CCID SmartKey in the should work list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3315 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/TianYu_CCID_SmartKey.txt | 47 ++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 3 files changed, 51 insertions(+) + +commit 59db87138145d687a617dec39cea85a9189ea2fb +Author: Ludovic Rousseau +Date: Sat Feb 7 16:23:54 2009 +0000 + + OpenUSBByName(): device_vendor and device_product varioables are not used + on Mac OS X. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3310 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit cb9e1cb71db0144fc69771cfd01264a647fa2c27 +Author: Ludovic Rousseau +Date: Wed Feb 4 19:31:20 2009 +0000 + + display the values of PCSC_CFLAGS and PCSC_LIBS + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3301 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 ++ + 1 file changed, 2 insertions(+) + +commit 247cfef7336c58081d7889cd1da19e5ca8f62541 +Author: Ludovic Rousseau +Date: Wed Feb 4 19:27:03 2009 +0000 + + use [ ] for PKG_CHECK_EXISTS() arguments + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3300 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 5ca32e378cb39cee47eab50774d03a61966da450 +Author: Ludovic Rousseau +Date: Wed Feb 4 14:32:19 2009 +0000 + + use PKG_CHECK_EXISTS() before PKG_CHECK_MODULES() so that the *_CFLAGS + and *_LIBS are not erased if pkg-config does not find the searched lib + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3299 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 5 ----- + configure.in | 9 +++++++-- + 2 files changed, 7 insertions(+), 7 deletions(-) + +commit 0711b7ec34febe0ba8920988d037e7dd7b7020c5 +Author: Ludovic Rousseau +Date: Thu Jan 29 20:19:05 2009 +0000 + + use generic "Realtek" instead of one particular brand "iMONO" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3296 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 63974082232d18c252375f2915717719d8628e1f +Author: Ludovic Rousseau +Date: Mon Jan 26 13:41:32 2009 +0000 + + reformat to ease diff with proto-t1.c from OpenCT + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3293 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 107 ++++++++++++++++++++++---------------------------- + 1 file changed, 47 insertions(+), 60 deletions(-) + +commit 8b4e13a7d7ba61506e6a4c355b8c65a38a45d705 +Author: Ludovic Rousseau +Date: Mon Jan 26 13:02:58 2009 +0000 + + rename t1_negociate_ifsd() in t1_negotiate_ifsd() to be in sync with + OpenCT + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3292 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + src/openct/proto-t1.c | 2 +- + src/openct/proto-t1.h | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +commit e8c429e393a226cb3ceba321f1dac871aec20d30 +Author: Ludovic Rousseau +Date: Wed Jan 21 13:18:57 2009 +0000 + + move tokenparser.c from MAINTAINERCLEANFILES to DISTCLEANFILES so that + "make distcheck" works without error + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3289 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +commit fca0f86bf207b7c697a559ca6a3b03680107c7f5 +Author: Ludovic Rousseau +Date: Mon Jan 19 15:28:04 2009 +0000 + + ICCD devices do not use usb_interrupt_read() but sleep(). So there is no + problem killing the polling thread and sleep for 10 minutes instead of + just 5 seconds + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3284 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 20 +++++++++++++++++++- + 1 file changed, 19 insertions(+), 1 deletion(-) + +commit e3bf5eff6488571c5bf3b6445ac877eabd87e1ac +Author: Ludovic Rousseau +Date: Mon Jan 19 14:19:26 2009 +0000 + + regenerate + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3283 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemPCKey.txt | 2 ++ + 1 file changed, 2 insertions(+) + +commit 343d28fee05478c8e67177f96986f020d3ace59e +Author: Ludovic Rousseau +Date: Mon Jan 19 08:15:17 2009 +0000 + + add Aktiv Rutoken Magistra in the "Should work but untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3282 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/Aktiv_Rutoken_Magistra.txt | 49 ++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 3 files changed, 53 insertions(+) + +commit 464d86f5d84bab7159796cf5b58f257dc35ff28d +Author: Ludovic Rousseau +Date: Thu Jan 15 13:59:19 2009 +0000 + + remove an extra AC_MSG_RESULT() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3281 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 1 - + 1 file changed, 1 deletion(-) + +commit c583d7c2f466798779416e85419fb42d2bf0ec0e +Author: Ludovic Rousseau +Date: Tue Jan 13 19:30:21 2009 +0000 + + disable support of the contcatless part of SDI010 and SCR331DI + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3280 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 2 ++ + src/ifdhandler.c | 2 ++ + 2 files changed, 4 insertions(+) + +commit f3f8c2f13d0f33942b0723ca842a13ab7e8b55f3 +Author: Ludovic Rousseau +Date: Wed Jan 7 16:27:52 2009 +0000 + + do not overwrite LIBUSB_CFLAGS and LIBUSB_LIBS if libusb-config is found + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3272 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 15 +++++++++++---- + 1 file changed, 11 insertions(+), 4 deletions(-) + +commit c6a79577a3146142eb3b13dc8e6e6d09d6e36ad8 +Author: Ludovic Rousseau +Date: Mon Jan 5 14:56:38 2009 +0000 + + use int instead of long to store a reader ID (32 bits) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3271 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8af6ab6aa0b8a21d48c5e445687e0f9ef111b742 +Author: Ludovic Rousseau +Date: Mon Jan 5 14:46:36 2009 +0000 + + tag output parameters with /*@out@*/ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3270 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 2 +- + src/ccid_usb.h | 2 +- + src/commands.c | 2 +- + src/commands.h | 9 +++++---- + src/towitoko/atr.h | 6 +++--- + src/towitoko/pps.h | 3 ++- + 6 files changed, 13 insertions(+), 11 deletions(-) + +commit f2698f53d358a0974fc4694a12a4f27468d03593 +Author: Ludovic Rousseau +Date: Mon Jan 5 14:35:25 2009 +0000 + + use snprintf() instead of sprintf() to avoid potential buffer overflow + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3269 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 6 ++++-- + src/ccid_serial.c | 8 +++++--- + src/ccid_usb.c | 6 ++++-- + 3 files changed, 13 insertions(+), 7 deletions(-) + +commit d17b0aae6c02cfcded6468625e63c92109d01fc7 +Author: Ludovic Rousseau +Date: Mon Jan 5 14:28:26 2009 +0000 + + explicitly cast result in void when not used (reported by the splint tool) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3268 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 22 ++--- + src/ccid_serial.c | 18 ++-- + src/ccid_usb.c | 28 +++--- + src/commands.c | 4 +- + src/debug.c | 10 +-- + src/ifdhandler.c | 55 ++++++------ + src/parse.c | 256 +++++++++++++++++++++++++++--------------------------- + 7 files changed, 197 insertions(+), 196 deletions(-) + +commit 46ef2a3d57499cbe5199003ffec56def040b621c +Author: Ludovic Rousseau +Date: Wed Dec 17 09:58:54 2008 +0000 + + add Atmel AT98SC032CT in the should work list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3237 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/supported_readers.txt | 1 + + 2 files changed, 3 insertions(+) + +commit 8db48d75f2824f97bb5cdedcedfac5c9280d74db +Author: Ludovic Rousseau +Date: Tue Dec 16 17:06:20 2008 +0000 + + add ATMEL AT98SC032CT + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3236 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ATMEL_AT98SC032CT.txt | 49 +++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 49 insertions(+) + +commit cbe87d3639184b3e26a8820753c6ee8f55764d73 +Author: Ludovic Rousseau +Date: Sat Dec 13 14:25:43 2008 +0000 + + update FSF address + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3234 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/convert_reader_h.pl | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit ecd202f25407fc670dcdf69417378ec38c1be50c +Author: Ludovic Rousseau +Date: Fri Dec 12 22:07:39 2008 +0000 + + add iMONO 43 in 1 + Sim + Smart Card Reader in the "should work" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3232 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 1 + + 2 files changed, 2 insertions(+) + +commit 8f16b4e4f4a17baa8f5ba9ae91ce1132e661dfb5 +Author: Ludovic Rousseau +Date: Fri Dec 12 21:39:17 2008 +0000 + + add iMONO USB2.0-CRW reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3231 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/iMONO.txt | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 50 insertions(+) + +commit 830e0f389f5b3d38faa889e86994db70e6e68746 +Author: Ludovic Rousseau +Date: Tue Dec 9 21:43:36 2008 +0000 + + add Xiring Xi Sign PKI in the supported list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3228 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 5 insertions(+) + +commit 7a1864268d5aa4890a616e356d42f179423995b4 +Author: Ludovic Rousseau +Date: Thu Nov 27 19:15:14 2008 +0000 + + add Neowave Weneo device + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3227 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Neowave_Weneo.txt | 54 +++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 54 insertions(+) + +commit f46a412af4d026d1717e64db5af5f22e2e54a9cf +Author: Ludovic Rousseau +Date: Wed Nov 26 14:16:40 2008 +0000 + + IFDHSetProtocolParameters(): convert protocol from ATR_PROTOCOL_TYPE_T? + to SCARD_PROTOCOL_T? in case of O2MICRO_OZ776_PATCH + + Thanks to Jim Dawson for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3226 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 9340e1ff7aff612202fada9fb437582c2743f74d +Author: Ludovic Rousseau +Date: Sat Nov 22 13:09:41 2008 +0000 + + add a Noname reader (from Omnikey) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3222 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Omnikey_noname1.txt | 360 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 361 insertions(+) + +commit 159a4ebbd4501e791d6b5d9d8649ef4e6e1fa81d +Author: Ludovic Rousseau +Date: Thu Nov 20 09:05:50 2008 +0000 + + add MSI StarReader SMART in the should work but untested list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3220 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 5 insertions(+) + +commit 4d609f57753e2155263eac949df9f6bcc96e0854 +Author: Ludovic Rousseau +Date: Wed Nov 19 21:10:36 2008 +0000 + + add MSI StarReader SMART + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3219 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/MSI_StarReader_SMART.txt | 50 ++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 50 insertions(+) + +commit eecab2bc09d7f1332f6cdc927d4cda97f73eca44 +Author: Ludovic Rousseau +Date: Wed Nov 19 17:23:39 2008 +0000 + + new firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3218 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACR122U_PICC.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 11ea8caf60d68c2a7996eda5fe0c9b612b6ba89c +Author: Ludovic Rousseau +Date: Tue Nov 18 21:50:41 2008 +0000 + + add -I m4 to aclocal + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3214 0ce88b0d-b2fd-0310-8134-9614164e65ea + + bootstrap | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0d1a44544d252ed615516da09e7c571ed0a3caae (tag: ccid-1.3.9) +Author: Ludovic Rousseau +Date: Tue Nov 18 15:45:30 2008 +0000 + + release 1.3.9 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3208 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 18 ++++++++++++++++++ + configure.in | 2 +- + 2 files changed, 19 insertions(+), 1 deletion(-) + +commit 75bffeaba3a1862145e92f584be68657a8f4373e +Author: Ludovic Rousseau +Date: Tue Nov 18 15:02:50 2008 +0000 + + cast dw2i() to return an unsigned int + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3207 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 28249295797ae297b4ea4b6c83f4caf6dc3d3ec2 +Author: Ludovic Rousseau +Date: Tue Nov 18 14:37:43 2008 +0000 + + add VMware Virtual USB CCID in should work but untested list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3206 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 3 +++ + 2 files changed, 4 insertions(+) + +commit ce7f48d8fc50621e97d9708fa90ec16efb096ce6 +Author: Ludovic Rousseau +Date: Fri Nov 14 17:34:52 2008 +0000 + + check for usb_interrupt_read instead of usb_get_string_simple and + request libusb 0.1.12 instead of 0.1.7 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3205 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit a1e73487daf50bf08ace2611be250108e9117962 +Author: Ludovic Rousseau +Date: Fri Nov 14 08:54:28 2008 +0000 + + move Broadcom 5880 in the Unsupported list and comment the entry in + readers/supported_readers.txt + + No communication to the device ("Resource temporarily unavailable" error) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3203 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 4 +++- + readers/supported_readers.txt | 5 ++--- + 2 files changed, 5 insertions(+), 4 deletions(-) + +commit b73659d395bfd613d44c5b1c8bd611da66ccc56e +Author: Ludovic Rousseau +Date: Tue Nov 11 16:42:02 2008 +0000 + + add $(LIBUSB_LIBS) to parse_LDADD + + Thanks to Karl Dahlén for the patch + Closes: [#311251] Patch for solving cross-compile build error for the + tool parse. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3202 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c562d6153226615dfba8007bb46b003bbe252112 +Author: Ludovic Rousseau +Date: Tue Nov 11 08:46:01 2008 +0000 + + new firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3201 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SDI010.txt | 77 +++++++++++++++++++++++++++--------------------------- + 1 file changed, 39 insertions(+), 38 deletions(-) + +commit 6a9a36a4402267d9dff3c7271fb6a18d60588821 +Author: Ludovic Rousseau +Date: Mon Nov 10 12:12:25 2008 +0000 + + defs.h: add readerName field + ifdhandler.c: also log reader name instead of just Lun + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3199 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/defs.h | 3 +++ + src/ifdhandler.c | 61 +++++++++++++++++++++++++++++++++++++++----------------- + 2 files changed, 46 insertions(+), 18 deletions(-) + +commit 081a36593d673530425d2c848e55d44fdb3cee43 +Author: Ludovic Rousseau +Date: Mon Nov 10 12:11:28 2008 +0000 + + #define DEBUG_PERIODIC3 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3198 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.h | 2 ++ + 1 file changed, 2 insertions(+) + +commit 3f1a06f47af33b406141e18bbca430683d566b4d +Author: Ludovic Rousseau +Date: Mon Nov 10 08:49:53 2008 +0000 + + regenerate + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3196 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCR331-DI.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 20b2d39d89b3929331c64046d9bae89a246329ff +Author: Ludovic Rousseau +Date: Sat Nov 8 16:28:09 2008 +0000 + + add Xiring Xi Sign PKI et Xiring Xi Sign 6000 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3195 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Xiring_XI-SIGN.txt | 68 +++++++++++++++++++++++++++++++++++++++++ + readers/Xiring_XI-SIGN_6000.txt | 66 +++++++++++++++++++++++++++++++++++++++ + 2 files changed, 134 insertions(+) + +commit 1e43d64dbc49b5fbb8f1e17c70f861a31e595e9b +Author: Ludovic Rousseau +Date: Sat Nov 8 15:39:38 2008 +0000 + + typo in comment + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3194 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 4c3b106c0e2172d3483cfa6105f481b3acee1f25 +Author: Ludovic Rousseau +Date: Sat Nov 8 10:58:47 2008 +0000 + + get the GemPC firmware only if GET_GEMPC_FIRMWARE is #define + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3193 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit f7a790a06cd831b9c9f7438212dd44df42f7b58d +Author: Ludovic Rousseau +Date: Sat Nov 8 10:43:44 2008 +0000 + + move the "jNet Technology jToken s1" in the Unsupported list and remove + it (commented entry) from the supported_readers.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3192 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 3 ++- + readers/supported_readers.txt | 4 +--- + 2 files changed, 3 insertions(+), 4 deletions(-) + +commit 0f6e3d1cf264687d6fec6734fa8bb498011b6851 +Author: Ludovic Rousseau +Date: Fri Nov 7 13:39:49 2008 +0000 + + add VMware Virtual USB CCID reader (available since VMWare 6.5) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3191 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/VMware_Virtual_USB_CCID.txt | 56 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 56 insertions(+) + +commit d9113791de3aabd8fe4274960c0513a29ae6836a +Author: Ludovic Rousseau +Date: Fri Oct 31 12:41:14 2008 +0000 + + add jNet Technology jToken s1 in should work but untested list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3189 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 2 ++ + 2 files changed, 3 insertions(+) + +commit f1318a785054d898dd9ee23fd5776a336202b87d +Author: Ludovic Rousseau +Date: Fri Oct 31 12:37:42 2008 +0000 + + small code reformat + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3188 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c77b66b50e3da5624f7afe7b8c10c713cd1d532f +Author: Ludovic Rousseau +Date: Fri Oct 31 12:35:48 2008 +0000 + + add jNet_jToken_s1.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3187 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/jNet_jToken_s1.txt | 49 ++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 49 insertions(+) + +commit 783fd4988ed6e2ff7271f1a5170c100af8dd2227 +Author: Ludovic Rousseau +Date: Tue Oct 28 14:51:06 2008 +0000 + + add --reparagraph to svn2cl arguments + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3185 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a99dbaf0ba519ccdf44b246699f0d3648addcad2 +Author: Ludovic Rousseau +Date: Tue Oct 28 09:24:16 2008 +0000 + + SecurePINVerify(): in case of SPR532 and Case 1 APDU we need to set bSeq + again to avoid a "Duplicate frame detected" error since the bSeq of + CmdEscape is now greater than bSeq set at the beginning of this function + + Thanks to Peter Koch for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3183 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 32cf5cc0f38d00398276020505a04d73cf32586b +Author: Ludovic Rousseau +Date: Mon Oct 27 15:57:23 2008 +0000 + + add Gemalto PDT in should work list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3182 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 2 ++ + 2 files changed, 3 insertions(+) + +commit da7822cac423e6b9c2c41461a9d6914ed41213da +Author: Ludovic Rousseau +Date: Mon Oct 27 15:56:52 2008 +0000 + + add Gemalto PDT + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3181 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Gemalto_PDT.txt | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 50 insertions(+) + +commit 6cc681a539aef70695a397c03ce027b60bf9734c +Author: Ludovic Rousseau +Date: Fri Oct 17 08:10:42 2008 +0000 + + no need to explicitely provide the aux files + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3177 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 10 ---------- + 1 file changed, 10 deletions(-) + +commit f125c87a334a1663249af5cdecadf67ae2919763 +Author: Ludovic Rousseau +Date: Thu Oct 16 19:22:04 2008 +0000 + + add ACS ACR122U PICC Interface in the Should work but untested by me + list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3176 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 1 + + 2 files changed, 2 insertions(+) + +commit 623f44bbfd902794981cb09e62c267389d9b14d3 +Author: Ludovic Rousseau +Date: Thu Oct 16 19:18:32 2008 +0000 + + add ACR122U_PICC.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3175 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACR122U_PICC.txt | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 49 insertions(+) + +commit fce2842ccb36b00a1f10b10ab3166c65d0ed0509 +Author: Ludovic Rousseau +Date: Thu Oct 16 14:58:55 2008 +0000 + + build is now . + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3174 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + reconf | 3 ++- + 2 files changed, 3 insertions(+), 2 deletions(-) + +commit c3ecade16ea8d187556bf80c7f17b8ef3a1e8b2f +Author: Ludovic Rousseau +Date: Thu Oct 16 14:58:38 2008 +0000 + + remove build/ + It collides with the Debian build rule when using dh(1) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3173 0ce88b0d-b2fd-0310-8134-9614164e65ea + +commit b1843fe041525c5a3341dd62fcfc91a3180bcffa +Author: Ludovic Rousseau +Date: Thu Oct 16 14:57:18 2008 +0000 + + move ylwrap out of build/ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3172 0ce88b0d-b2fd-0310-8134-9614164e65ea + + build/ylwrap => ylwrap | 0 + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit e7606326935595db07f8ca9239a97e4d3ccfeea6 +Author: Ludovic Rousseau +Date: Tue Oct 14 13:49:11 2008 +0000 + + ATR_InitFromArray(): use atr_buffer[] directly (no need to copy it) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3170 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/atr.c | 19 ++++++++----------- + 1 file changed, 8 insertions(+), 11 deletions(-) + +commit 9a1a7eda7c77e6d85defd92b2639c2245e4cbae8 +Author: Ludovic Rousseau +Date: Tue Oct 14 13:46:50 2008 +0000 + + remove definition of INVERT_BYTE() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3169 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/defines.h | 16 ---------------- + 1 file changed, 16 deletions(-) + +commit 1edb0354dd386247a4ae161756ee6e0c8fb15dff +Author: Ludovic Rousseau +Date: Tue Oct 14 13:46:31 2008 +0000 + + ATR_InitFromArray(): do not reverse the ATR for inverse convention cards + since the ATR is already corrected by the reader + + This never happend since the test was never true (TS == 0x03) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3168 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/atr.c | 7 ------- + 1 file changed, 7 deletions(-) + +commit 32e421e6fe7c9be0e36a76619a693748b66c2d47 +Author: Ludovic Rousseau +Date: Tue Oct 14 13:43:55 2008 +0000 + + make atr_buffer[] argument const to avoid accidental modifications + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3167 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/atr.c | 2 +- + src/towitoko/atr.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 04bdd4418c62713dceca558d88ecb0eeae5de653 +Author: Ludovic Rousseau +Date: Tue Oct 14 13:42:14 2008 +0000 + + typo in comment + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3166 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/atr.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 11549130f57d662e8b5358ed08852787f2e9b9ee +Author: Ludovic Rousseau +Date: Sat Oct 11 09:05:18 2008 +0000 + + add HP MFP Smart Card Reader in the "Should work but untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3163 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 1 + + 2 files changed, 2 insertions(+) + +commit 0939703360f593cd5a1adfe2f39f6c7570c2c51a +Author: Ludovic Rousseau +Date: Sat Oct 11 09:00:58 2008 +0000 + + add HP_MFP_SmartCardReader.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3162 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/HP_MFP_SmartCardReader.txt | 53 ++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 54 insertions(+) + +commit 8e9e1230ad5a5dad84a0054aba4025620e92e3d9 +Author: Ludovic Rousseau +Date: Sat Oct 11 09:00:20 2008 +0000 + + reindent + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3161 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/HPUSBSmartCardReader.txt | 76 ++++++++++++++++++++-------------------- + 1 file changed, 38 insertions(+), 38 deletions(-) + +commit 2cdc558d53ffde72338b8c85386a15b96c253c5b +Author: Ludovic Rousseau +Date: Tue Oct 7 10:00:57 2008 +0000 + + reorder SchlumbergerSema reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3154 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 72959d1cb9fd8c18c3c2e8f65805cbb8a56d765c +Author: Ludovic Rousseau +Date: Tue Oct 7 09:59:52 2008 +0000 + + reorder SpringCard readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3153 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +commit d43867c22dd883c301540d9e44b971480914ac95 +Author: Ludovic Rousseau +Date: Tue Oct 7 09:58:26 2008 +0000 + + reorder 2 readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3152 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit abfd5bbdddedc2161d76c83d938ac636b461ead8 +Author: Ludovic Rousseau +Date: Tue Oct 7 09:18:21 2008 +0000 + + add "KONA USB SmartCard" to the should work list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3151 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 3 +++ + 2 files changed, 4 insertions(+) + +commit 3fb03ea0a437122d62030a110f3674957cee46eb +Author: Ludovic Rousseau +Date: Sat Sep 27 15:41:40 2008 +0000 + + add Broadcom Corp 5880 (found in Dell E6500 laptop) in the "Should work + but untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3148 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 3 +++ + 2 files changed, 4 insertions(+) + +commit 313a50ec33f460d38ad5174391bdbeab2a178904 +Author: Ludovic Rousseau +Date: Sat Sep 27 15:40:13 2008 +0000 + + add Broadcom_5880.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3147 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Broadcom_5880.txt | 54 +++++++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 55 insertions(+) + +commit 9618e83683732181b65823cf84d84ed991d5c1a2 +Author: Ludovic Rousseau +Date: Tue Sep 23 16:14:15 2008 +0000 + + IFDHCreateChannelByName(): call ClosePort() to release resources if + the 3 IFDHICCPresence() fails + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3144 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 517b8ce06aad36cd06c27c51c1daf0c217eb3baf +Author: Ludovic Rousseau +Date: Sat Sep 13 18:58:45 2008 +0000 + + Pro-Active CSB6 Ultimate is renamed SpringCard CSB6 Ultimate + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3129 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 1 - + readers/Pro-Active_CSB6_Ultimate.txt | 56 ------------------------------------ + 2 files changed, 57 deletions(-) + +commit f022b86117b5520cebc50b15c29eb093b20dc9ee +Author: Ludovic Rousseau +Date: Sat Sep 13 18:56:54 2008 +0000 + + add SpringCard CrazyWriter, CSB6 Basic, CSB6 Secure, CSB6 Ultimate, + EasyFinger Standard, EasyFinger Ultimate and Prox'N'Roll in the "Should + work but untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3128 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 8 +++++++- + readers/supported_readers.txt | 10 ++++++++-- + 2 files changed, 15 insertions(+), 3 deletions(-) + +commit 9f468bc98addf8d34dbe31cc03d580ee62a2a6b3 +Author: Ludovic Rousseau +Date: Sat Sep 13 14:21:16 2008 +0000 + + rename Pro-Active in Springcard + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3127 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 4 ++-- + readers/supported_readers.txt | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 5085b8e4670a2fed85978f50f8545fd33093b7f7 +Author: Ludovic Rousseau +Date: Fri Sep 12 15:14:23 2008 +0000 + + IFDHPowerICC(): use a very long timeout for PowerUp since the card can + be very slow to send the full ATR (up to 30 seconds at 4 MHz) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3126 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 25 +++++++++++++++++++++++-- + 1 file changed, 23 insertions(+), 2 deletions(-) + +commit ca0c1f6a88c439dd7760731566699f25f3780b74 +Author: Ludovic Rousseau +Date: Wed Sep 10 11:59:06 2008 +0000 + + add SpringCard readers Prox'N'Roll, CSB6 Basic, EasyFinger Ultimate, + CSB6 Ultimate, EasyFinger Standard, CrazyWriter, CSB6 Secure + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3122 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 7 ++++ + readers/SpringCard_CSB6_Basic.txt | 56 ++++++++++++++++++++++++++++++ + readers/SpringCard_CSB6_Secure.txt | 56 ++++++++++++++++++++++++++++++ + readers/SpringCard_CSB6_Ultimate.txt | 56 ++++++++++++++++++++++++++++++ + readers/SpringCard_CrazyWriter.txt | 56 ++++++++++++++++++++++++++++++ + readers/SpringCard_EasyFinger_Standard.txt | 56 ++++++++++++++++++++++++++++++ + readers/SpringCard_EasyFinger_Ultimate.txt | 56 ++++++++++++++++++++++++++++++ + readers/SpringCard_Prox_N_Roll.txt | 56 ++++++++++++++++++++++++++++++ + 8 files changed, 399 insertions(+) + +commit 6159bbd1475a43dfb4918611c678d153080baa79 +Author: Ludovic Rousseau +Date: Tue Sep 9 08:51:00 2008 +0000 + + add mIDentityXL.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3115 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 1 + + readers/mIDentityXL.txt | 57 +++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 58 insertions(+) + +commit 351c1ceddca92db657830d6c3211007623ee525b +Author: Ludovic Rousseau +Date: Tue Sep 9 08:49:50 2008 +0000 + + differentiate between KOBIL mIDentity M (pid 0x4000) and XL (pid 0x4001) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3114 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 457015fc6e4c75b959ea8e8c88af5c3fbe581122 +Author: Ludovic Rousseau +Date: Fri Sep 5 07:37:24 2008 +0000 + + InterruptRead(): do not log the error if errno == ENODEV since that + happens in canse of timeout + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3106 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1dbcb3c6e20ba8f56fe4fd2becdfff2a82852e66 +Author: Ludovic Rousseau +Date: Mon Sep 1 08:20:04 2008 +0000 + + ccid_open_hack(): GEMPCPINPAD: add a sleep(1) before sending the load + strings command to let the reader initialise itself + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3105 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 1 + + 1 file changed, 1 insertion(+) + +commit 0131afa8fc22b1c4d7ed9cf6c0b4e492d9cd2a46 +Author: Ludovic Rousseau +Date: Tue Aug 19 13:55:28 2008 +0000 + + InterruptRead(): do not cache if the reader has failed previously since + this state was stored in a static variable global to all the readers + managed by the driver and was not per reader. + + Without this mechanism we may have a bit more error messages logged but + the driver will work in a multi-reader configuration. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3097 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 10 ---------- + 1 file changed, 10 deletions(-) + +commit f91e64ad757258530cf1545d98c31272db2fb2da +Author: Ludovic Rousseau +Date: Mon Aug 18 09:46:46 2008 +0000 + + IFDHSleep(): just sleep for 5 seconds since the polling thread is NOT + killable so pcscd event thread must loop to exit cleanly + + Once the driver (libusb in fact) will support + TAG_IFD_POLLING_THREAD_KILLABLE then we could use a much longer delay + and be killed before pcscd exits + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3096 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +commit 7f53ed9bcd79ba5a13f6c2dd4bea481425266d8f +Author: Ludovic Rousseau +Date: Thu Aug 14 08:44:52 2008 +0000 + + add Atmel AT91SO in the "Should work but untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3090 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/supported_readers.txt | 4 ++++ + 2 files changed, 6 insertions(+) + +commit dd8756aa5a3d3ba0b66df577294d75d5bf8be69d +Author: Ludovic Rousseau +Date: Thu Aug 14 08:40:15 2008 +0000 + + add ATMEL_AT91SO.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3089 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ATMEL_AT91SO.txt | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 58 insertions(+) + +commit caae59366dedd0268c48208f5cf2487a9c531c58 +Author: Ludovic Rousseau +Date: Thu Aug 7 08:19:54 2008 +0000 + + add Cherry SmartTerminal ST-1200USB in the "Should work but untested by + me" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3085 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + 1 file changed, 1 insertion(+) + +commit 2e97a083cfe5920cee85ad9787c6adfa45085b6e +Author: Ludovic Rousseau +Date: Thu Aug 7 08:18:43 2008 +0000 + + add Cherry SmartTerminal XX1X + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3084 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CherrySmartTerminalXX1X.txt | 186 ++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 187 insertions(+) + +commit b8707dc8589f44c5ccc6138a902a5a8525ee358b +Author: Ludovic Rousseau +Date: Wed Jul 30 11:22:26 2008 +0000 + + link statically against libusb by default + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3066 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit d847d27f363868be0d64cfe3667f12fbf2c22151 +Author: Ludovic Rousseau +Date: Wed Jul 30 10:00:11 2008 +0000 + + do not build a static driver + (building fails when linking statically with libusb) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3065 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 92ee1256347305aa435e4efe824920419f022897 +Author: Ludovic Rousseau +Date: Wed Jul 30 09:55:55 2008 +0000 + + do not overwrite PCSC_CFLAGS, PCSC_LIBS, LIBUSB_CFLAGS and LIBUSB_LIBS + if already defined by the user + + Closes [#310945] MacOSX/configure - disable forced OpenSC libusb usage, + permit other builds + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3064 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +commit 472cf7dc91a6116105ca9451adb36fba36308ef3 +Author: Ludovic Rousseau +Date: Wed Jul 30 08:03:13 2008 +0000 + + no need to use CoreFoundation and IOKit frameworks since we use libusb + that already includes them + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3063 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 11 ----------- + src/Makefile.am | 3 +-- + 2 files changed, 1 insertion(+), 13 deletions(-) + +commit 1c06f7fa2eaa48ff07854ec7d79e3c21542e2ab2 +Author: Ludovic Rousseau +Date: Tue Jul 29 07:28:52 2008 +0000 + + add the Aladdin eToken PRO USB 72K Java in the "Should work but untested + by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3061 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + 1 file changed, 2 insertions(+) + +commit 39f120dfab51f2dd882bfd06cf85f07d5a1e70ce +Author: Ludovic Rousseau +Date: Tue Jul 29 07:27:13 2008 +0000 + + add the Aladdin eToken PRO USB 72K Java in the "Should work but untested + by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3060 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 3 +++ + 1 file changed, 3 insertions(+) + +commit 62f1d458ae7c85e46243480d6fbcabbb02a2fd41 +Author: Ludovic Rousseau +Date: Tue Jul 29 07:22:09 2008 +0000 + + add Aladdin_eToken_PRO_USB_72K_Java.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3059 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Aladdin_eToken_PRO_USB_72K_Java.txt | 53 +++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 54 insertions(+) + +commit 0ee15cad86cc0034b8e812adb3481b6d751faaf6 (tag: ccid-1.3.8) +Author: Ludovic Rousseau +Date: Fri Jun 27 15:28:44 2008 +0000 + + release 1.3.8 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3033 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 11 +++++++++++ + configure.in | 2 +- + 2 files changed, 12 insertions(+), 1 deletion(-) + +commit 951ec820cc573896446cb980156943a7dcd126f2 +Author: Ludovic Rousseau +Date: Thu Jun 26 13:42:22 2008 +0000 + + InterruptRead(): remove a \n in a log + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3027 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d8b2b3db7ca2032507f40ede57ab2b8cdcd18f5a +Author: Ludovic Rousseau +Date: Thu Jun 26 13:41:44 2008 +0000 + + InterruptRead(): use a 2 seconds timeout since it is not possible for + pcscd to kill the polling thread. + + See thread on libusb-devel http://sourceforge.net/mailarchive/forum.php?thread_name=baabf6440805290726s228bce20r5073d55d8d56241b%40mail.gmail.com&forum_name=libusb-devel + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3026 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 88761a91189caf0da21b446b33aafe93ca7c79c0 +Author: Ludovic Rousseau +Date: Thu Jun 26 13:38:50 2008 +0000 + + IFDHPolling(): log only if DEBUG_LEVEL_PERIODIC is set + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3025 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 22a14eb26c29dcb29ac4c14a4e9cb62e3f9be299 +Author: Ludovic Rousseau +Date: Thu Jun 26 13:20:43 2008 +0000 + + do not include the release number in the Info.plist to avoid a diff of a + configuration file when upgrading the package. + + Thanks to Benoit Gonzalvo for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3024 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist.src | 4 ++-- + src/Makefile.am | 3 ++- + src/ifdhandler.c | 2 ++ + 3 files changed, 6 insertions(+), 3 deletions(-) + +commit 53c73c0075209e9955290fdd604a36dfe66416c4 +Author: Ludovic Rousseau +Date: Wed Jun 25 08:58:15 2008 +0000 + + add "Oberthur ID-One Cosmo Card" in the "Should work but untested by me" + list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3023 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 2 ++ + 2 files changed, 3 insertions(+) + +commit 33a243b13fb388304e1a8bb1b29ba79c8be31b4b +Author: Ludovic Rousseau +Date: Wed Jun 25 08:48:22 2008 +0000 + + add Oberthur-CosmoCard.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3022 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 1 + + readers/Oberthur-CosmoCard.txt | 51 ++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 52 insertions(+) + +commit 43402e1d913383e9cca4db64615d97e374a5901b +Author: Ludovic Rousseau +Date: Wed Jun 18 15:51:47 2008 +0000 + + firmware 1.19 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3010 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/KAAN_Advanced.txt | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 4f10385458490c72e2c181389f40311c2b74f63f +Author: Ludovic Rousseau +Date: Wed Jun 18 15:47:02 2008 +0000 + + firmware 1.19 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3009 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/KAAN_Base.txt | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +commit 5d7822d38c919a5ffeadf97ccb06395358139a5c +Author: Ludovic Rousseau +Date: Tue Jun 17 13:47:05 2008 +0000 + + firmware 0.30 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3008 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Kobil_EMV_CAP.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit c7b97d3e42d503fb1d89fe1647c752a3df09be52 +Author: Ludovic Rousseau +Date: Tue Jun 17 12:51:58 2008 +0000 + + regenerate + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3007 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/KAAN_Advanced.txt | 2 ++ + 1 file changed, 2 insertions(+) + +commit 5a50fd20ee981e2e869a192195126debca3e2c2c +Author: Ludovic Rousseau +Date: Tue Jun 17 12:35:15 2008 +0000 + + typo in comments + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3006 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/defs.h | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit d9bf8319b6ca87bba20c1acc72b8c787f909c5f2 +Author: Ludovic Rousseau +Date: Tue Jun 17 12:29:12 2008 +0000 + + Kobil readers does not support APDU chaining for T=1 so you can't send + an extended APDU. The readers supports a command of up to 512 or 420 + bytes. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3005 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/defs.h | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit 27332787dcd3a6545328ee2883587740a44d434d +Author: Ludovic Rousseau +Date: Mon Jun 16 08:35:10 2008 +0000 + + CCID_Receive(): do not crash if the reader firmware is bogus and does + not support chaining for extended APDU. + + This is the case for Kobil readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3004 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +commit a94611a624fbaa53a404f8252b512150484871f6 +Author: Ludovic Rousseau +Date: Sat Jun 14 19:41:52 2008 +0000 + + ask to install libusb if usb.h is not found + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3002 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f34d44f1b28765f362fa846588a27d76be803d6e +Author: Ludovic Rousseau +Date: Sat Jun 14 16:15:11 2008 +0000 + + update the "building serial reader driver" sections + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3001 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 18 ++++++++++-------- + 1 file changed, 10 insertions(+), 8 deletions(-) + +commit 141f7012daf78c6a1ea06bd9ae63c193c8d584be +Author: Ludovic Rousseau +Date: Sat Jun 14 16:07:17 2008 +0000 + + build Kobil_mIDentity_switch only if WITH_LIBUSB is true + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@3000 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/Makefile.am | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 0d710c3302afa8105a57e1466944a8bf5678b398 +Author: Ludovic Rousseau +Date: Sat Jun 14 16:06:48 2008 +0000 + + build parse and libccid.la only if WITH_LIBUSB is true + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2999 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +commit c68e0d7ecb017f630f548f9d225a12a988eb7855 +Author: Ludovic Rousseau +Date: Sat Jun 14 16:05:51 2008 +0000 + + define the conditional WITH_LIBUSB if libusb is used + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2998 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 1 + + 1 file changed, 1 insertion(+) + +commit 2a421483bb29f409b643e7d76b099d0ada74f347 +Author: Ludovic Rousseau +Date: Sat Jun 14 16:04:30 2008 +0000 + + remove useless copy if m4.m4 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2997 0ce88b0d-b2fd-0310-8134-9614164e65ea + + reconf | 2 -- + 1 file changed, 2 deletions(-) + +commit 85a14347cc16b949ee69e13af00e4ce462167373 +Author: Ludovic Rousseau +Date: Sat Jun 14 14:11:41 2008 +0000 + + do not AC_MSG_RESULT([no]) if PCSC is not found since + PKG_CHECK_MODULES() will already display the result + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2996 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit dc68e88807ffd78be316d64c46f5b32256370e20 +Author: Ludovic Rousseau +Date: Sat Jun 14 14:10:10 2008 +0000 + + set use_usb_interrupt=no by default + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2995 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 0b9abe7c04d3780a6b67cf506e7d2f1a7b050f7d +Author: Ludovic Rousseau +Date: Mon Jun 9 08:35:27 2008 +0000 + + rename aclocal to m4 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2988 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8539ca67c4af7f7fe4b8477c7b0d8cfb4d42bda0 +Author: Ludovic Rousseau +Date: Mon Jun 9 08:17:23 2008 +0000 + + rename aclocal to m4 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2987 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + configure.in | 2 +- + {aclocal => m4}/Makefile.am | 0 + {aclocal => m4}/acx_pthread.m4 | 0 + reconf | 4 ++-- + 5 files changed, 4 insertions(+), 4 deletions(-) + +commit c824a3209b85ba89e17ea6e6ce9f809fbe581c26 (tag: ccid-1.3.7) +Author: Ludovic Rousseau +Date: Sun Jun 8 09:01:21 2008 +0000 + + release 1.3.7 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2985 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 12 ++++++++++++ + configure.in | 2 +- + 2 files changed, 13 insertions(+), 1 deletion(-) + +commit b1507dcb88ed0069932e70f7d1f697e72954eb8f +Author: Ludovic Rousseau +Date: Sun Jun 8 08:43:26 2008 +0000 + + add Pro-Active CSB6 Ultimate in "should work" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2984 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/supported_readers.txt | 2 ++ + 2 files changed, 4 insertions(+) + +commit 9d5e2c97f6bc7c06da7137ea5d358c67d9a988bd +Author: Ludovic Rousseau +Date: Sun Jun 8 08:31:47 2008 +0000 + + ReadSerial(): return the length of data read in *length + + Thanks to Alexander Georg for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2983 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 46e0c83f2e49a615b314444039fe7ece3b8f8513 +Author: Ludovic Rousseau +Date: Sat Jun 7 07:44:02 2008 +0000 + + add the file as a symlink to ../../../PCSC/m4/acx_pthread.m4 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2982 0ce88b0d-b2fd-0310-8134-9614164e65ea + + aclocal/acx_pthread.m4 | 1 + + 1 file changed, 1 insertion(+) + +commit de1eb1b68a05348a629bed205b414514563fdda0 +Author: Ludovic Rousseau +Date: Sat Jun 7 07:43:16 2008 +0000 + + remove file + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2981 0ce88b0d-b2fd-0310-8134-9614164e65ea + + aclocal/acx_pthread.m4 | 275 ------------------------------------------------- + 1 file changed, 275 deletions(-) + +commit 8341c63032904d81c3aa10adae968a0b8d187135 +Author: Ludovic Rousseau +Date: Sat Jun 7 06:57:19 2008 +0000 + + update (correct a problem under Solaris) + + Thanks to David L. Markowitz for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2976 0ce88b0d-b2fd-0310-8134-9614164e65ea + + aclocal/acx_pthread.m4 | 147 ++++++++++++++++++++++++++++++++++++++----------- + 1 file changed, 116 insertions(+), 31 deletions(-) + +commit f4f0154c3d094156a7b1edbfac6127c7dd7c335a +Author: Ludovic Rousseau +Date: Wed May 28 18:32:52 2008 +0000 + + update Free Software Foundation mail address + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2974 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 3 ++- + README | 2 +- + contrib/RSA_SecurID/RSA_SecurID_getpasswd.c | 6 +++--- + examples/scardcontrol.c | 6 +++--- + src/ccid.c | 6 +++--- + src/ccid.h | 6 +++--- + src/ccid_ifdhandler.h | 6 +++--- + src/ccid_serial.c | 6 +++--- + src/ccid_serial.h | 6 +++--- + src/ccid_usb.c | 6 +++--- + src/ccid_usb.h | 6 +++--- + src/commands.c | 6 +++--- + src/commands.h | 6 +++--- + src/convert_version.pl | 3 ++- + src/create_Info_plist.pl | 3 ++- + src/debug.c | 6 +++--- + src/debug.h | 6 +++--- + src/defs.h | 6 +++--- + src/ifdhandler.c | 6 +++--- + src/openct/checksum.h | 6 +++--- + src/openct/proto-t1.h | 6 +++--- + src/parse.c | 6 +++--- + src/towitoko/COPYING | 9 +++++---- + src/towitoko/atr.c | 6 +++--- + src/towitoko/atr.h | 6 +++--- + src/towitoko/defines.h | 6 +++--- + src/towitoko/pps.c | 6 +++--- + src/towitoko/pps.h | 6 +++--- + src/utils.c | 6 +++--- + src/utils.h | 6 +++--- + 30 files changed, 87 insertions(+), 83 deletions(-) + +commit f6d6b129c275e421327c38df07774a035b019966 +Author: Ludovic Rousseau +Date: Wed May 28 18:17:41 2008 +0000 + + change the licence from GPL-v2 to LGPL-v2.1 after request from Norbert + Federa + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2973 0ce88b0d-b2fd-0310-8134-9614164e65ea + + .../Kobil_mIDentity_switch/Kobil_mIDentity_switch.c | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +commit 3b250200a0f37fa613675e4a3facb26fc8b7b125 +Author: Ludovic Rousseau +Date: Wed May 28 13:02:55 2008 +0000 + + add id3 Semiconductors CL1356A HID in the should work list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2972 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 1 + + 2 files changed, 2 insertions(+) + +commit ae69127ad08f8dbee66f2d56349162265a195c0d +Author: Ludovic Rousseau +Date: Wed May 28 13:00:33 2008 +0000 + + add id3_CL1356D.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2971 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 1 + + 1 file changed, 1 insertion(+) + +commit d16b3e2f152dc232f0d7dc746f82c85c21b93e39 +Author: Ludovic Rousseau +Date: Wed May 28 12:58:59 2008 +0000 + + add id3_CL1356A_HID.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2970 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 1 + + readers/id3_CL1356A_HID.txt | 52 +++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 53 insertions(+) + +commit 720868ed344605eabdec0b68fe40baf4e4828374 +Author: Ludovic Rousseau +Date: Tue May 27 09:02:38 2008 +0000 + + regenerate + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2969 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CardMan5321.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c5b921db748474f060d9caf03cc297421bda509b +Author: Ludovic Rousseau +Date: Fri May 23 19:40:58 2008 +0000 + + update RSA SecureID SID800 web page + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2968 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2068410cf72a8534cd81fea03283310dc2a81f98 +Author: Ludovic Rousseau +Date: Thu May 22 12:06:09 2008 +0000 + + libusb-compat returns a permission denied error on usb_open() when not + run as root + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2966 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 57ff10b120aba110b848b13d39024aa1de6e2b24 +Author: Ludovic Rousseau +Date: Thu May 22 09:25:20 2008 +0000 + + check if libusb-0.1 is emulated by libusb-compat + libusb-1.0 to use or + not the USB interrupt feature + + libusb-0.1 may never solve the performance problem of usb_interrupt_read() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2965 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit ae9d0e266c020cbba4d346639669ff03027d51d4 +Author: Ludovic Rousseau +Date: Thu May 22 09:12:15 2008 +0000 + + update + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2964 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemCoreSIMPro.txt | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 7f6ec07a0ad3159c9ecd19a8d7ee8f4f4e7022f6 +Author: Ludovic Rousseau +Date: Sun May 11 11:00:25 2008 +0000 + + add AUTOMAKE_OPTIONS = dist-bzip2 so that make dist alsa generates a + .tar.bz2 archive + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2941 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b08a60dd8402bf6a61b5da41020b9db35e32e0aa +Author: Ludovic Rousseau +Date: Fri May 9 14:34:59 2008 +0000 + + add Pro-Active_CSB6_Ultimate.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2937 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 1 + + readers/Pro-Active_CSB6_Ultimate.txt | 56 ++++++++++++++++++++++++++++++++++++ + 2 files changed, 57 insertions(+) + +commit 5d2d47856c9424ba8b13aa199741746534406f97 +Author: Ludovic Rousseau +Date: Fri May 9 14:24:58 2008 +0000 + + do not try to parse devices with bInterfaceClass=0xFF by default (use + command line argument -p for proprietary class) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2936 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +commit 2629150b8010ab0cd53fbe5fdb066bcbf8ae3484 +Author: Ludovic Rousseau +Date: Fri May 9 14:14:00 2008 +0000 + + remove duplicated code + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2935 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 9 --------- + 1 file changed, 9 deletions(-) + +commit ad63b2a6eb3513cc03411704c1e824fb5c2d7255 +Author: Ludovic Rousseau +Date: Thu May 8 12:58:45 2008 +0000 + + use a real space character + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2934 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit c1bfa40d2ac62977154682b098298d09600dc3e9 +Author: Ludovic Rousseau +Date: Thu May 8 12:57:53 2008 +0000 + + use a real space character + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2933 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 620edb0a90a40dd0a6b489a0a43149a65a4f03cd +Author: Ludovic Rousseau +Date: Thu May 8 12:52:41 2008 +0000 + + sync with the ccid.html web page + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2932 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 19 +++++++++++++------ + 1 file changed, 13 insertions(+), 6 deletions(-) + +commit e49015ae0fa40dad5ab189c6f37b5044ce317a8f +Author: Ludovic Rousseau +Date: Thu May 8 12:31:07 2008 +0000 + + rename Gemplus in Gemalto + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2931 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 21 +++++++++++---------- + 1 file changed, 11 insertions(+), 10 deletions(-) + +commit 337c8a3b91f617d9e066070c2491018984bf0b95 +Author: Ludovic Rousseau +Date: Thu May 8 12:20:30 2008 +0000 + + reorder Eutron CryptoIdentity + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2930 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6e4fbb4501b1d34b601e82cbcd89012ff65dbcf1 +Author: Ludovic Rousseau +Date: Thu May 8 12:02:18 2008 +0000 + + add ActivCard Activkey Sim + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2929 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + 1 file changed, 2 insertions(+) + +commit 6aa78ac743112efbcd627780758102004837dbc9 (tag: ccid-1.3.6) +Author: Ludovic Rousseau +Date: Wed Apr 30 12:45:12 2008 +0000 + + release 1.3.6 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2924 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 10 ++++++++++ + configure.in | 2 +- + 2 files changed, 11 insertions(+), 1 deletion(-) + +commit 59298e08e45e43ca13c10288a03d8fa8095f43b6 +Author: Ludovic Rousseau +Date: Wed Apr 30 12:29:36 2008 +0000 + + add URL for Validy USB Token + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2923 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit b3ee9c0138dea8230ba0351e3981b80e49c9d756 +Author: Ludovic Rousseau +Date: Wed Apr 30 12:26:45 2008 +0000 + + exit if no card is present + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2922 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +commit aec67d58e212bcf249f39be244c88297d18a4aa2 +Author: Ludovic Rousseau +Date: Wed Apr 30 12:09:43 2008 +0000 + + add Covadis Véga in "Should work but untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2921 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/supported_readers.txt | 1 + + 2 files changed, 3 insertions(+) + +commit 97d4f4f051b48aaf0dc476b4716552b676da6a3e +Author: Ludovic Rousseau +Date: Wed Apr 30 12:05:12 2008 +0000 + + regenerate + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2920 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Vega-Alpha.txt | 50 ++++++++++++++++++++++++++++++++++++++++++++++---- + 1 file changed, 46 insertions(+), 4 deletions(-) + +commit 83f08acb96a2b1479df8ca197547301a9b442582 +Author: Ludovic Rousseau +Date: Wed Apr 30 07:36:33 2008 +0000 + + add support for DragonFly BSD + + Thanks to Hasso Tepper for the patch (alioth #310748) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2919 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 7 +++++++ + src/convert_version.pl | 2 +- + src/create_Info_plist.pl | 2 +- + 3 files changed, 9 insertions(+), 2 deletions(-) + +commit 91198532a8b737f9f1764d7b2c9e94a105e66604 +Author: Ludovic Rousseau +Date: Tue Apr 29 11:51:56 2008 +0000 + + t1_transceive(): correctly reply to S(ABORT request) with a S(ABORT + response) instead of a S(RESYNC request) + + Thanks to Alon Bar-Lev for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2916 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c219ddf445bf8ab822904c754b45ee1be56e2f6f +Author: Ludovic Rousseau +Date: Fri Apr 25 09:04:38 2008 +0000 + + add "ACLOCAL_AMFLAGS = -I aclocal" so that "autoreconf --install + --verbose --force" works after a clean svn checkout + + Thanks to Alon Bar-Lev for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2912 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 ++ + 1 file changed, 2 insertions(+) + +commit 444f4f8716ea58f26befe713afac8d70c60f2265 +Author: Ludovic Rousseau +Date: Fri Apr 25 07:28:02 2008 +0000 + + init_driver(): use the environment variable LIBCCID_ifdLogLevel to + overwrite the value of ifdLogLevel read from the Info.plist file + + Thanks to Alon Bar-Lev for the idea + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2911 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +commit ee068b58daa780a5d3fedcfc80936a993b8fc807 +Author: Ludovic Rousseau +Date: Wed Apr 9 13:56:01 2008 +0000 + + add KEBTechnology_KONA_USB_SmartCard.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2876 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/KEBTechnology_KONA_USB_SmartCard.txt | 49 ++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 50 insertions(+) + +commit 438627eef2164556998242bcdf24c80cb9fd5d62 +Author: Ludovic Rousseau +Date: Wed Apr 9 13:06:24 2008 +0000 + + add the Validy TokenA sl vt in the should work list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2875 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 3 +++ + 2 files changed, 4 insertions(+) + +commit c729645ddd17f29a1f0b085f47bfa4d3b82e9dc0 +Author: Ludovic Rousseau +Date: Wed Apr 9 13:04:47 2008 +0000 + + add Validy_TokenA.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2874 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 1 + + readers/Validy_TokenA.txt | 50 +++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 51 insertions(+) + +commit 3634be3d137172b4e2c5949825ed2b12431b40b5 +Author: Ludovic Rousseau +Date: Wed Apr 9 12:58:52 2008 +0000 + + Add Vasco DP905 in the should work list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2873 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 2 ++ + 2 files changed, 3 insertions(+) + +commit dfce067326a547633b136629e8a656830a86662c +Author: Ludovic Rousseau +Date: Tue Apr 8 14:02:34 2008 +0000 + + display the enumerated USB devices and if they are or not a CCID/ICCD + device + also add some colors + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2872 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 56 +++++++++++++++++++++++++++++++++++++++++++++----------- + 1 file changed, 45 insertions(+), 11 deletions(-) + +commit d43718e71050ec0bd4df460d8cb979d93c1d9ab1 +Author: Ludovic Rousseau +Date: Tue Apr 8 09:34:13 2008 +0000 + + Simulate card absence for the GemCore SIM Pro + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2871 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 8 ++++++++ + src/ccid_serial.c | 1 + + src/ccid_usb.c | 4 ++++ + src/ifdhandler.c | 11 +++++++++++ + 4 files changed, 24 insertions(+) + +commit 739087c22cdd2ddf44700696412d8d8440725f5a +Author: Ludovic Rousseau +Date: Tue Apr 8 09:28:47 2008 +0000 + + improve a bit the serial reader section + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2870 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 21 ++++++++++++++++----- + 1 file changed, 16 insertions(+), 5 deletions(-) + +commit 3ec46ab1763aef1c1a77009df83f437ac75be541 +Author: Ludovic Rousseau +Date: Tue Apr 8 09:22:43 2008 +0000 + + add Voltage selection section + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2869 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 23 +++++++++++++++++++++++ + 1 file changed, 23 insertions(+) + +commit d3f0b114f0708fe11003b05ca6b6d411acd82e32 +Author: Ludovic Rousseau +Date: Mon Mar 31 07:16:36 2008 +0000 + + use $(bundle) instead of the hardcoded ifd-ccid.bundle for CCID_BUNDLE + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2864 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 66799639f6804a97b61d02a9d439db309afa1069 +Author: Ludovic Rousseau +Date: Sat Mar 29 17:33:20 2008 +0000 + + add Vasci DP905 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2863 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 1 + + readers/Vasco_DP905.txt | 111 ++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 112 insertions(+) + +commit 63f118bb1df98b614e5d364cf07c6fbda739626e +Author: Ludovic Rousseau +Date: Sat Mar 29 15:35:05 2008 +0000 + + log error messages on stderr instead of stdout + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2862 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 769b029a32bd03cf4e217c14a41621a3a12a0b65 +Author: Ludovic Rousseau +Date: Sat Mar 29 15:31:58 2008 +0000 + + use an unsigned char [] buffer only for multi-bytes conversions. + usb_* functions want a char [] buffer. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2861 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +commit f2b14ffab6464c9c71e14dbffcaaa2b5fb1e4532 +Author: Ludovic Rousseau +Date: Sat Mar 29 15:19:02 2008 +0000 + + use int instead of DWORD for GetNewReaderIndex() and LunToReaderIndex() + Lun parameter + + utils.c:48: warning: comparison between signed and unsigned + utils.c:73: warning: comparison between signed and unsigned + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2860 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/utils.c | 4 ++-- + src/utils.h | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 15235a15a98c5db88f4809b3219629058efe7936 +Author: Ludovic Rousseau +Date: Sat Mar 29 15:16:45 2008 +0000 + + ccid_check_firmware(): use unsigned int instead of int + + ccid_usb.c:720: warning: comparison between signed and unsigned + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2859 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 56a1ccf1eb8f8947f91b8657c8abb75b4af7f562 +Author: Ludovic Rousseau +Date: Sat Mar 29 15:15:39 2008 +0000 + + WriteSerial(): use unsigned int instead of int + + ccid_serial.c:199: warning: comparison between signed and unsigned + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2858 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5f51bfee7f119b8e826ce57a28f1f9bee53c6ab4 +Author: Ludovic Rousseau +Date: Sat Mar 29 15:12:39 2008 +0000 + + use defined(USE_USB_INTERRUPT) instead of just USE_USB_INTERRUPT + + ifdhandler.c:60:66: warning: "USE_USB_INTERRUPT" is not defined + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2857 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit bb00e361c500eb30aed92379cda108016a1442ac +Author: Ludovic Rousseau +Date: Sat Mar 29 14:59:04 2008 +0000 + + move the Blutronics and Covadis reader before the Bogus readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2856 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +commit a5466f6b35060ad3f517f5874e4f5d6cf3d4a111 +Author: Ludovic Rousseau +Date: Tue Mar 25 14:20:52 2008 +0000 + + add Precise Biometrics 250 MC + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2855 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 1 + + readers/Precise_250_MC.txt | 52 ++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 53 insertions(+) + +commit 4470ad397881877bc6f47696a8eba64a3b3831db +Author: Ludovic Rousseau +Date: Mon Mar 24 12:26:48 2008 +0000 + + IFDHSetProtocolParameters(): store the protocol used in + ccid_desc->cardProtocol even if the reader has CCID_CLASS_AUTO_PPS_PROP. + Correct a potential bug in SecurePINVerify()/SecurePINModify(). + + Thanks to Jim Dawson for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2854 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 70dfb41eb919f2d415d2dbe4334c5c21b1865ad4 +Author: Ludovic Rousseau +Date: Fri Mar 14 08:29:04 2008 +0000 + + IFDHSetProtocolParameters(): O2Micro OZ776 does not support a protocol + change to T=1 for dual protocol cards + + https://www.opensc-project.org/opensc/ticket/172 + https://bugs.launchpad.net/ubuntu/+bug/163072 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2849 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +commit bf339a2302fffa7f125bcaefa9ed822498d34083 +Author: Ludovic Rousseau +Date: Fri Mar 7 08:47:03 2008 +0000 + + add Covadis Alya in the supported list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2848 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + 1 file changed, 2 insertions(+) + +commit 324fc540334a0490d0b865c70f0a2614a733226e +Author: Ludovic Rousseau +Date: Fri Mar 7 08:46:40 2008 +0000 + + add Covadis Alya + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2847 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 2 ++ + 1 file changed, 2 insertions(+) + +commit fdd989188e66d2d1523a6541c2e02b7e6d6af8ca +Author: Ludovic Rousseau +Date: Fri Mar 7 08:14:50 2008 +0000 + + update + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2846 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Alya.txt | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- + 1 file changed, 67 insertions(+), 4 deletions(-) + +commit 0a8619c97829dd3c60cf4346b02c21c0208bde54 +Author: Ludovic Rousseau +Date: Wed Feb 27 12:02:45 2008 +0000 + + add Covadis.ch Alya and Vega-Alpha readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2844 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Alya.txt | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 2 ++ + readers/Vega-Alpha.txt | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 102 insertions(+) + +commit ace6e7d70e435b638b29efd9a5216b403974c76c (tag: ccid-1.3.5) +Author: Ludovic Rousseau +Date: Fri Feb 22 13:42:27 2008 +0000 + + release 1.3.5 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2842 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 11 +++++++++++ + configure.in | 2 +- + 2 files changed, 12 insertions(+), 1 deletion(-) + +commit 59e4d370f60e4b11fd24bdaeb11ff2e4281b8700 +Author: Ludovic Rousseau +Date: Fri Feb 22 13:24:24 2008 +0000 + + add "Try to rerun this program as root." if no device is found + and euid != 0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2841 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/Kobil_mIDentity_switch/Kobil_mIDentity_switch.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 682c3c0955cec3cc3733497cc838627a6d2ab491 +Author: Ludovic Rousseau +Date: Fri Feb 22 13:12:38 2008 +0000 + + add Advanced Card Systems ACR122 in "Should work" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2840 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + 1 file changed, 2 insertions(+) + +commit f2ebb0b15642a6259f8814fc5474e57820e11294 +Author: Ludovic Rousseau +Date: Thu Feb 21 12:17:28 2008 +0000 + + add ACR122U.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2837 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACR122U.txt | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 51 insertions(+) + +commit 5cce728d8e4156593618e9c040c13a6624479a96 +Author: Ludovic Rousseau +Date: Wed Feb 20 17:16:26 2008 +0000 + + #include "config.h" to have HAVE_USB_DETACH_KERNEL_DRIVER_NP + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2836 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/Kobil_mIDentity_switch/Kobil_mIDentity_switch.c | 1 + + 1 file changed, 1 insertion(+) + +commit 55f87cf231318ef8e228ec750dc92ec1337bc1c5 +Author: Ludovic Rousseau +Date: Sat Feb 16 20:07:45 2008 +0000 + + update SCM Micro URLs + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2832 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +commit 200a549511e43ac55ffe4fdf2b2bfbca11f1b28f +Author: Ludovic Rousseau +Date: Sat Feb 16 20:01:18 2008 +0000 + + rename the duplicate [31] reference as [31b] + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2831 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 8d65e68c60fe4b2b35eb803eb1c1e7348b3eb6c0 +Author: Ludovic Rousseau +Date: Fri Feb 15 15:59:38 2008 +0000 + + typo + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2827 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f1dd8fef731cc561ccfb1a06b6a16ff014a8d69f +Author: Ludovic Rousseau +Date: Fri Feb 15 15:59:20 2008 +0000 + + use $PKG_CONFIG instead of pkg-config + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2826 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit aa28d2c60f71bb4f8fc876115ed03df92312439d +Author: Ludovic Rousseau +Date: Fri Feb 15 15:55:01 2008 +0000 + + use usb_interrupt_read() only if libusb > 0.1.12 or + --enable-usb-interrupt is used + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2825 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 24 ++++++++++++++++++++++++ + src/ifdhandler.c | 6 +++--- + 2 files changed, 27 insertions(+), 3 deletions(-) + +commit 03e54e2d9a5dc37b9ca922dd09e623a2d1307a74 +Author: Ludovic Rousseau +Date: Thu Feb 14 20:30:55 2008 +0000 + + add MAINTAINERCLEANFILES = tokenparser.c so that make distcheck works + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2824 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 ++ + 1 file changed, 2 insertions(+) + +commit 04b84182d8fa4177b1abdd9c5bbf1d2db15e7d4e +Author: Ludovic Rousseau +Date: Thu Feb 14 19:34:49 2008 +0000 + + add Cherry SmartBoard, G83-6610 in the "Should work but untested by me" + list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2822 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + 1 file changed, 2 insertions(+) + +commit c15adb3f6fcbdebed92ef3aef0f5dc6e0cf5a682 +Author: Ludovic Rousseau +Date: Thu Feb 14 19:34:11 2008 +0000 + + add Cherry SmartBoard XX1X + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2821 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 1 + + 1 file changed, 1 insertion(+) + +commit 69ce922fe20e3d06dcd2abd0bc6b380e6b8012a1 +Author: Ludovic Rousseau +Date: Thu Feb 14 19:30:21 2008 +0000 + + add CherrySmartBoardXX1X.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2820 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CherrySmartBoardXX1X.txt | 188 +++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 189 insertions(+) + +commit fc581ddc67ac4df33e592a75e13b0b5e8ac52bf4 +Author: Ludovic Rousseau +Date: Thu Feb 14 11:01:31 2008 +0000 + + add Gemplus Gem e-Seal Pro in the "Should work but untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2819 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + 1 file changed, 1 insertion(+) + +commit 93ee8303a2221dbaf0be74d1decb9b066ebb0b5a +Author: Ludovic Rousseau +Date: Thu Feb 14 11:01:10 2008 +0000 + + add Gemplus Gem e-Seal Pro + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2818 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 11f3ef38dade4da761a5db14abcb9c88ed2f2f09 +Author: Ludovic Rousseau +Date: Thu Feb 14 10:50:47 2008 +0000 + + linked to ../../PCSC/c.sh + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2815 0ce88b0d-b2fd-0310-8134-9614164e65ea + + c.sh | 1 + + 1 file changed, 1 insertion(+) + +commit 5aab435e858fe525ab95697f951993ae094eb655 +Author: Ludovic Rousseau +Date: Thu Feb 14 10:00:07 2008 +0000 + + add Gem_e-SealPro.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2813 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Gem_e-SealPro.txt | 55 +++++++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 7 +++--- + 2 files changed, 59 insertions(+), 3 deletions(-) + +commit 6d62a25fbe1a37eadd652c90d50ad4900ad9852a +Author: Ludovic Rousseau +Date: Fri Feb 8 14:58:08 2008 +0000 + + IFDHPolling() and IFDHPolling() are defined if TWIN_SERIAL is not + defined and also if HAVE_DECL_TAG_IFD_POLLING_THREAD is set to 1 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2810 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit d6aea064b698be40a731039b40c8254a08372e26 (tag: ccid-1.3.4) +Author: Ludovic Rousseau +Date: Fri Feb 8 14:43:36 2008 +0000 + + release 1.3.4 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2809 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 6 ++++++ + configure.in | 2 +- + 2 files changed, 7 insertions(+), 1 deletion(-) + +commit bb5e246f39ede3bc4ce8990045237937cc756b6f +Author: Ludovic Rousseau +Date: Fri Feb 8 14:38:46 2008 +0000 + + ccid_open_hack(): do not call InterruptRead when compiling the serial driver + since this function is not defined in that case + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2808 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 032903a33670895fc5da2b7553e9734e7036d53e +Author: Ludovic Rousseau +Date: Fri Feb 8 09:32:35 2008 +0000 + + Bluetronics -> Blutronics + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2807 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d9111e1a1623840677690eab9035480f310239df +Author: Ludovic Rousseau +Date: Thu Feb 7 13:55:08 2008 +0000 + + do not declare IFDHPolling() and IFDHSleep() when building for the + serial reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2806 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit b80b64a26d5d48e6569b9f1d931c3ae56eba24c7 +Author: Ludovic Rousseau +Date: Thu Feb 7 13:53:31 2008 +0000 + + use #ifndef to avoid multiple include of the file + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2805 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.h | 4 ++++ + 1 file changed, 4 insertions(+) + +commit b82231cfb20dfe5368502db74c900b55c4942021 +Author: Ludovic Rousseau +Date: Thu Feb 7 13:50:04 2008 +0000 + + #include "ccid_usb.h" to get the declaration of InterruptRead() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2804 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 1 + + 1 file changed, 1 insertion(+) + +commit 41a5076ce08ded850ce9cdbfb055682daff5b6b1 +Author: Ludovic Rousseau +Date: Thu Feb 7 13:32:32 2008 +0000 + + remove WAIT_FOR_SYSFS="bInterfaceProtocol" to do not delay udev + + Thanks to Alon Bar-Lev for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2803 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscd_ccid.rules | 3 --- + 1 file changed, 3 deletions(-) + +commit 10ba4c9b015cfe6a22cf94c8db99776bd9b59a0e +Author: Ludovic Rousseau +Date: Thu Feb 7 07:49:48 2008 +0000 + + InterruptRead(): in case of timeout we can also get EAGAIN (Resource + temporarily unavailable) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2802 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit e52cbb070fdf37d5503c1a76d1c9facb77b16254 +Author: Ludovic Rousseau +Date: Thu Feb 7 07:49:12 2008 +0000 + + IFDHSleep(): add a log call + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2801 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 1 + + 1 file changed, 1 insertion(+) + +commit 8c41cb313495cfb0cc15e6fb0519ae08479b11ca (tag: ccid-1.3.3) +Author: Ludovic Rousseau +Date: Wed Feb 6 14:26:30 2008 +0000 + + release 1.3.3 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2799 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit fc7c262554c85c1a55a4116fe4828a47e6157ff0 +Author: Ludovic Rousseau +Date: Wed Feb 6 14:26:18 2008 +0000 + + new version + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2798 0ce88b0d-b2fd-0310-8134-9614164e65ea + + build/ylwrap | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit 55c9f1c680a4e1cee28c4ef1f45652a901fb8e66 +Author: Ludovic Rousseau +Date: Wed Feb 6 14:20:40 2008 +0000 + + release 1.3.3 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2796 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +commit f83ee5dd97a130eb773e7afd4ad1ab7f4fbab5b3 +Author: Ludovic Rousseau +Date: Wed Feb 6 14:07:31 2008 +0000 + + remove the sleep since it causes more problems than solutions + the sleep occured for any USB device connection. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2795 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscd_ccid.rules | 3 --- + 1 file changed, 3 deletions(-) + +commit 10ab5d34522dc5e835da7d767b923628bf167c9a +Author: Ludovic Rousseau +Date: Wed Feb 6 09:14:07 2008 +0000 + + add Blutronics Bludrive II CCID in supported list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2794 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 4 ++++ + 2 files changed, 5 insertions(+) + +commit 53f9917d416b0eb564304e869824afd75ef54050 +Author: Ludovic Rousseau +Date: Wed Feb 6 08:57:41 2008 +0000 + + add support for Bludrive II CCID + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2793 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + src/ccid_usb.c | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +commit 05a8b94335d9eb4d80b5c72458c391ce459920c5 +Author: Ludovic Rousseau +Date: Wed Feb 6 08:55:55 2008 +0000 + + add Bludrive II CCID + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2792 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/BludriveII.txt | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 66 insertions(+) + +commit de705c071145391f20e7d3b93854185dbad896aa +Author: Ludovic Rousseau +Date: Wed Feb 6 08:26:29 2008 +0000 + + bInterfaceProtocol set to 0 is CCID + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2791 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 71753e0b9dd87c9fc7dc095b9b34694dea20aa06 +Author: Ludovic Rousseau +Date: Tue Feb 5 14:32:33 2008 +0000 + + add Lexar/Gemalto Smart Enterprise Guardian in the "Should work but + untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2790 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + 1 file changed, 2 insertions(+) + +commit 146db258eb94e63259daa84eb416585f9c52452f +Author: Ludovic Rousseau +Date: Mon Feb 4 14:51:05 2008 +0000 + + CCID_Receive(): the receive buffer must be 4 bytes minimum for ICCD-B + + Thanks to Martin Rauch for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2789 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +commit 2bb0a85f6a76dba3c4fd3b3d6e5fe83060ccfd44 +Author: Ludovic Rousseau +Date: Mon Feb 4 14:01:22 2008 +0000 + + on an ICCD device the card is always inserted so no card movement will + ever happen: just do nothing in the TAG_IFD_POLLING_THREAD thread + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2788 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +commit 0ccde49eb34a8005a3e77ee06b3f4c78d56821a7 +Author: Ludovic Rousseau +Date: Mon Feb 4 08:45:14 2008 +0000 + + improve configuration display + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2786 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 45 ++++++++++++++++++++++++++++++++++++--------- + 1 file changed, 36 insertions(+), 9 deletions(-) + +commit 5dd9eb7015d78df551b81d2d5afa9b7cbcb48fe5 +Author: Ludovic Rousseau +Date: Sat Feb 2 15:18:21 2008 +0000 + + HAVE_DECL_TAG_IFD_POLLING_THREAD is always defined but is set to 0 or 1 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2783 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 01a69fdb9fe5d3b0438d53daa7d4a85d0de70e3d +Author: Ludovic Rousseau +Date: Fri Feb 1 10:10:07 2008 +0000 + + add support of Smart Enterprise Guardian + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2782 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 1 + + src/ccid.c | 4 ++++ + src/ccid.h | 1 + + 3 files changed, 6 insertions(+) + +commit 2363c4d79f5eb2bc142452afcbcacc6e35199766 +Author: Ludovic Rousseau +Date: Fri Feb 1 10:00:25 2008 +0000 + + add a prototype for IFDHPolling() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2781 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 505ad7587ffbc5a694524962ba7235a94dcaf9ff +Author: Ludovic Rousseau +Date: Fri Feb 1 09:31:58 2008 +0000 + + add support of TAG_IFD_POLLING_THREAD using IFDHPolling() to detect + asynchronous card movements + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2777 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 39 +++++++++++++++++++++++++++++++++++++++ + 1 file changed, 39 insertions(+) + +commit 6cdc4db41a1dbef949380edb850cb0fa0b735333 +Author: Ludovic Rousseau +Date: Fri Feb 1 09:29:44 2008 +0000 + + add InterruptRead() to read the interrupt pipe use by asynchronous card + movements + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2776 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 41 +++++++++++++++++++++++++++++++++++++++++ + src/ccid_usb.h | 1 + + 2 files changed, 42 insertions(+) + +commit d920d3632ab711cf90050438eb5faec716df36ea +Author: Ludovic Rousseau +Date: Tue Jan 29 15:01:21 2008 +0000 + + add comments + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2774 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +commit ee4be874aea9db19a679fd17964df85cb71455b8 +Author: Ludovic Rousseau +Date: Tue Jan 29 14:53:44 2008 +0000 + + check for TAG_IFD_POLLING_THREAD in ifdhandler.h + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2773 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 1 + + 1 file changed, 1 insertion(+) + +commit 047a5104604c983a75cff829c85048041b0d6ba3 +Author: Ludovic Rousseau +Date: Tue Jan 29 14:52:52 2008 +0000 + + add interrupt end point field in _usbDevice structure + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2772 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit a05fb52ed7365be7c875349f464ec039a4706cfc +Author: Ludovic Rousseau +Date: Tue Jan 29 14:51:34 2008 +0000 + + add bNumEndpoints field in _ccid_descriptor structure + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2771 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 5 +++++ + src/ccid_usb.c | 1 + + 2 files changed, 6 insertions(+) + +commit 8ce8c97a65e769bec24472b0d89006613f0011f7 +Author: Ludovic Rousseau +Date: Thu Jan 24 09:36:15 2008 +0000 + + ReadUSB(): return an error if we get more than 10 duplicate frames error + in one read. Avoids an infinite loop with some buggy readers. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2763 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit ba1cc344fac533366d81beb6d0fccff552792398 +Author: Ludovic Rousseau +Date: Thu Jan 24 09:21:13 2008 +0000 + + CCID_Receive(): return an error if we have read less (or more) data than + the CCID frame says to contain + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2762 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit 0b854d9332da6192aa3b4922a97cde740d84860a (tag: ccid-1.3.2) +Author: Ludovic Rousseau +Date: Tue Jan 22 19:33:39 2008 +0000 + + version 1.3.2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2757 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 43e5ee0dc67d3b54c6a9886f88fe82dfde78263b +Author: Ludovic Rousseau +Date: Tue Jan 22 10:40:34 2008 +0000 + + release 1.3.2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2755 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit eed9ac8e0b6acccacc5063bb3ad70947265b0387 +Author: Ludovic Rousseau +Date: Tue Jan 22 10:22:09 2008 +0000 + + add support for Mac OS X Leopard (10.5.1) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2754 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 10 +++++++++- + src/ifdhandler.c | 6 +++++- + 2 files changed, 14 insertions(+), 2 deletions(-) + +commit e58c5d1adb62a7493ac1a1062a2ac22da2d46ebb +Author: Ludovic Rousseau +Date: Tue Jan 22 10:21:39 2008 +0000 + + distribute build files for Mac OS X Leopard + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2753 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +commit 61de602858c8730ff2c5051f74c68bdd0660f313 +Author: Ludovic Rousseau +Date: Tue Jan 22 10:19:04 2008 +0000 + + build infrastructure for Apple Mac OS X Leopard + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2752 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MacOSX/configure | 81 ++++++++++++++++++++++++++++++++++++++++++++++ + MacOSX/convert_reader_h.pl | 43 ++++++++++++++++++++++++ + MacOSX/debuglog.h | 1 + + MacOSX/ifdhandler.h | 1 + + MacOSX/pcsclite.h | 2 ++ + MacOSX/reader.h.in | 1 + + MacOSX/winscard.h | 2 ++ + MacOSX/wintypes.h | 1 + + 8 files changed, 132 insertions(+) + +commit 4f901fb17c05f115323526e915367841611bdb1c +Author: Ludovic Rousseau +Date: Tue Jan 22 09:51:32 2008 +0000 + + do not duplicate the description for each slot + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2751 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemCoreSIMPro.txt | 90 ----------------------------------------------- + 1 file changed, 90 deletions(-) + +commit a97a6ecfc7683f574788038314c298159d0f56d4 +Author: Ludovic Rousseau +Date: Fri Jan 18 09:27:43 2008 +0000 + + add and use bootstrap instead of reconf. reconf does not work on Leopard + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2746 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + bootstrap | 11 +++++++++++ + 2 files changed, 12 insertions(+), 1 deletion(-) + +commit d00367bff8d419e15654610b3b3a23117ea66c14 +Author: Ludovic Rousseau +Date: Mon Jan 14 15:36:56 2008 +0000 + + do not use a & (as in "G&D") since Leopard cannot parse it as valid XML + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2734 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 42e1a0be192fe05af797736f5a8108ab0586cf91 +Author: Ludovic Rousseau +Date: Tue Jan 8 08:14:42 2008 +0000 + + correct comment on sleep: 1s instead of 100ms + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2725 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscd_ccid.rules | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d5b301b313cbe414da069656325958008eeeee18 +Author: Ludovic Rousseau +Date: Tue Jan 8 08:06:07 2008 +0000 + + CCID_Receive(): do not declare a _ccid_descriptor variable for the twin + serial (warning: unused variable 'ccid_descriptor') + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2724 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 2e9d1a05513a0a6071ee7151eec3ff8158926574 +Author: Ludovic Rousseau +Date: Mon Jan 7 15:49:07 2008 +0000 + + do not add support for ICCD A or B for the serial driver since + ControlUSB() is not available with this reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2723 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit f22fb42edc32a63e8fb0a3b39c42d3d239222a0a +Author: Ludovic Rousseau +Date: Mon Jan 7 15:05:39 2008 +0000 + + put src as the lastd directory to have the udev message on screen when + installing + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2722 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6dd695f3d94c5542db74e673c1aeaa0abe308d60 +Author: Ludovic Rousseau +Date: Mon Dec 31 15:09:05 2007 +0000 + + force the libccidtwin.so symlink creation to update a previously + existing file + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2717 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 95b4c67a2f9d43e053462c9e004ee83391c7c676 +Author: Ludovic Rousseau +Date: Mon Dec 31 15:06:41 2007 +0000 + + do not include the VERSION number in the created reader.conf file + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2716 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 232ff43ec3ecfce45cdb1b5fe42f70bcf3a0b66c +Author: Ludovic Rousseau +Date: Mon Dec 31 14:43:30 2007 +0000 + + create a symlink from libccidtwin.so to libccidtwin.so.VERSION so that + the /etc/reader.conf configuration file do not need to edited for each + new driver version + + Closes Debian bug #457657 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2715 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 1 + + 1 file changed, 1 insertion(+) + +commit fb6d55709a3084311d232d0132c284558ee5d07c +Author: Ludovic Rousseau +Date: Tue Dec 11 15:21:55 2007 +0000 + + increase sleep delay from 0.1 to 1 second + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2713 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscd_ccid.rules | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0bddd2904740b3fea32aac1136ad9f5654e03d68 +Author: Ludovic Rousseau +Date: Mon Dec 10 13:43:32 2007 +0000 + + wait until the field bInterfaceProtocol is created. Should solve the + hotplug problem on Ubuntu 7.10 + + Thanks to OpenCT for the code + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2712 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscd_ccid.rules | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 841d25afe70bb7dab8945d656d5a90afef5d8286 +Author: Ludovic Rousseau +Date: Fri Nov 23 14:23:37 2007 +0000 + + add Gemalto Smart Enterprise Guardian Secure USB Device + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2711 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemaltoSmartEnterpriseGuardian.txt | 52 ++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 53 insertions(+) + +commit 2ec4dc7c87aa091f18bdcaf59f6ae9d9ad7ff545 +Author: Ludovic Rousseau +Date: Fri Nov 16 16:38:05 2007 +0000 + + update Reiner-SCT cyberJack pinpad(a) bug description + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2699 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 71fa81b0096d7863c801d892f77b416b5bd00f5c +Author: Ludovic Rousseau +Date: Fri Nov 16 16:29:19 2007 +0000 + + Reiner-SCT cyberJack pinpad(a) bug is "just" a non-management of time + requests + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2698 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 0ae70ad59e5e4aeee1eff28fdbb86633dd70f4c3 +Author: Ludovic Rousseau +Date: Fri Nov 16 16:28:41 2007 +0000 + + remove Reiner-SCT cyberJack pinpad(a) from bogus firmware list since yhe + bug is just a missing management of time requests + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2697 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 1 - + 1 file changed, 1 deletion(-) + +commit 7dabf313605869faa4af058cb3476a2435f0185d +Author: Ludovic Rousseau +Date: Fri Nov 16 14:43:59 2007 +0000 + + update Reiner-SCT bug: only case 1 APDU do not work + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2693 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e9335fa1741c4df27d3036fe09a57630d15727d7 (tag: ccid-1.3.1) +Author: Ludovic Rousseau +Date: Fri Nov 16 13:27:00 2007 +0000 + + release 1.3.1 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2692 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 11 +++++++++++ + configure.in | 2 +- + 2 files changed, 12 insertions(+), 1 deletion(-) + +commit c127cdaff55166d56087b8913f7dad6ed88838db +Author: Ludovic Rousseau +Date: Fri Nov 16 13:26:40 2007 +0000 + + move the readers without a correct firmware together at the end of the + list of bogus firmwares + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2691 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +commit 08b48cf99ae3061fe4e82ba9038b62007c1a4249 +Author: Ludovic Rousseau +Date: Fri Nov 16 13:24:28 2007 +0000 + + add Reiner-SCT cyberJack pinpad(a) in the list of bogus firmwares + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2690 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 1 + + 1 file changed, 1 insertion(+) + +commit 67197e45834ac58f94f4ae5e8e0c4dfc6a86cb0c +Author: Ludovic Rousseau +Date: Fri Nov 16 09:28:08 2007 +0000 + + use the complete name for "Reiner-SCT cyberJack pinpad(a)" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2689 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 02b84b1cf78c0ccee3984dd9bfe2e1e6a7c718d1 +Author: Ludovic Rousseau +Date: Fri Nov 16 09:27:13 2007 +0000 + + add Reiner-SCT cyberJack pinpad(a) in the bogus section + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2688 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 1 + + 1 file changed, 1 insertion(+) + +commit c2f63f4a5a98048677c9ec32004693c4d2e1afae +Author: Ludovic Rousseau +Date: Fri Nov 16 09:26:14 2007 +0000 + + create a section "Bogus readers but partly supported" and move the C3PO + LTC31 (old model) and ActivCard USB Reader 2.0 in this section + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2687 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +commit 746340ca107aebd79efa662452197269f5827ea1 +Author: Ludovic Rousseau +Date: Thu Nov 15 23:11:23 2007 +0000 + + add Reiner SCT in the unsupported list. The reader does not work + correctly. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2686 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + 1 file changed, 2 insertions(+) + +commit 071b75a66355e0d88be5515c794b93f47e8572a2 +Author: Ludovic Rousseau +Date: Thu Nov 15 23:10:36 2007 +0000 + + add support for Reiner SCT + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2685 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + src/ccid_usb.c | 3 ++- + 2 files changed, 3 insertions(+), 1 deletion(-) + +commit 78c1266f663f1efe46055507e3d60842f21eb9a8 +Author: Ludovic Rousseau +Date: Thu Nov 15 23:02:54 2007 +0000 + + add ReinerSCT.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2684 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 1 + + readers/ReinerSCT.txt | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 60 insertions(+) + +commit 955261c214e773180dc8f72e31d4b6cc9c6b2da2 +Author: Ludovic Rousseau +Date: Thu Nov 15 22:03:44 2007 +0000 + + add Charismathics token in the "Should work but untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2683 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 3 +++ + 2 files changed, 4 insertions(+) + +commit 9c04f7d1f701e853125c28c14975d0eec70339cc +Author: Ludovic Rousseau +Date: Thu Nov 15 21:59:37 2007 +0000 + + add Charismathics.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2682 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Charismathics.txt | 51 +++++++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 52 insertions(+) + +commit 1f2f0f26a276dac024e1fc4a1e487a2049d41e05 +Author: Ludovic Rousseau +Date: Thu Nov 1 17:16:43 2007 +0000 + + do not claim/release the device on Mac OS X + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2679 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 31a19a069adb3bbc594c386bea5065ce66f877b2 +Author: Ludovic Rousseau +Date: Thu Nov 1 15:13:46 2007 +0000 + + if usb_claim_interface() fails we ask the user to stop pcscd and retry + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2677 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 2a0398e8cd28bfed1e6c30b7761dbd1252a99ad6 +Author: Ludovic Rousseau +Date: Thu Nov 1 14:37:01 2007 +0000 + + new firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2676 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Kobil_EMV_CAP.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 9f9ba1b4e922c5f270fc830dd0d0be173485abf9 +Author: Ludovic Rousseau +Date: Thu Nov 1 14:35:29 2007 +0000 + + claim and release the interface + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2675 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +commit 48b0127119d4e8fe92d7b469524eabf987b65c1f +Author: Ludovic Rousseau +Date: Wed Oct 24 16:01:24 2007 +0000 + + add Eutron Digipass 860 in the supported list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2674 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/supported_readers.txt | 1 + + 2 files changed, 3 insertions(+) + +commit d8a2b7810f01673f9b42b83e80db2bc88d7bcd42 +Author: Ludovic Rousseau +Date: Wed Oct 24 15:58:13 2007 +0000 + + add Eutron Digipass 860 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2673 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Eutron_Digipass_860.txt | 51 +++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 52 insertions(+) + +commit 5010951d3d09f6f6c895c35e5baf73393490880d +Author: Ludovic Rousseau +Date: Wed Oct 24 15:50:57 2007 +0000 + + new firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2672 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Eutron_CryptoIdentity.txt | 265 +------------------------------------- + 1 file changed, 5 insertions(+), 260 deletions(-) + +commit 84a6554b31888423a98f0dc64e71fd7d75a6b164 +Author: Ludovic Rousseau +Date: Wed Oct 24 15:49:02 2007 +0000 + + add "Eutron Smart Pocket" in the supported list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2671 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/supported_readers.txt | 1 + + 2 files changed, 3 insertions(+) + +commit 772b972a0f8a1dbce3e849a22da69b843d2d80a4 +Author: Ludovic Rousseau +Date: Wed Oct 24 15:48:32 2007 +0000 + + add Eutron_Smart_Pocket.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2670 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Eutron_Smart_Pocket.txt | 51 +++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 52 insertions(+) + +commit 6dd49dd75bdea3d560e61dc91ae4c2dbdf49ac8c +Author: Ludovic Rousseau +Date: Wed Oct 24 15:27:03 2007 +0000 + + add "Kobil EMV CAP - SecOVID Reader III" in the "should work" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2669 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 1 + + 2 files changed, 2 insertions(+) + +commit ddbfbd38b14f7583d9139fe30e2749b3da71cb98 +Author: Ludovic Rousseau +Date: Wed Oct 24 15:25:26 2007 +0000 + + add Kobil_EMV_CAP.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2668 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Kobil_EMV_CAP.txt | 59 +++++++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 60 insertions(+) + +commit 0c4faf0052ce75ee08c2de2af3588a80d18cdc3b +Author: Ludovic Rousseau +Date: Tue Oct 23 09:33:57 2007 +0000 + + firmware update + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2667 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCR3320.txt | 12 +++++++----- + readers/SCR333.txt | 18 ++++++++++-------- + readers/SCR3340.txt | 12 +++++++----- + 3 files changed, 24 insertions(+), 18 deletions(-) + +commit 028b21f86a6e05f724db727d5ca09247ec6baf92 +Author: Ludovic Rousseau +Date: Sun Oct 21 16:37:32 2007 +0000 + + regenerated on linux + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2666 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCR331.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit bdc7741671360e6869ae7a447c2943e9c9533aca +Author: Ludovic Rousseau +Date: Sun Oct 21 14:55:46 2007 +0000 + + update firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2665 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCR331.txt | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit b09fb204bb194d39e309f3dc37174915c3442bd9 +Author: Ludovic Rousseau +Date: Sun Oct 21 14:54:54 2007 +0000 + + get_end_points(): check that dev->config is not NULL before + dereferencing dev->config->bNumInterfaces + + Avoid a crash on Mac OS X + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2664 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 110f768131bfc0f7887b251f2e588950cb0712e1 +Author: Ludovic Rousseau +Date: Tue Oct 16 19:51:12 2007 +0000 + + add "Lenovo Integrated Smart Card Reader" in "Should work but untested + by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2656 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 3 +++ + 2 files changed, 4 insertions(+) + +commit 36715a2542fbeff89292cfd48cd1449818743f76 +Author: Ludovic Rousseau +Date: Tue Oct 16 19:45:24 2007 +0000 + + add Lenovo Integrated Smart Card Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2655 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Lenovo.txt | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 92 insertions(+) + +commit fd6767afc1332aaad972a59f91a769c234337fff +Author: Ludovic Rousseau +Date: Mon Oct 15 07:45:32 2007 +0000 + + use SCARD_LEAVE_CARD instead of SCARD_UNPOWER_CARD for SCardReconnect() + since SCardReconnect() returns SCARD_W_REMOVED_CARD on Mac OS X 10.4 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2653 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5049fa6620fbeb38652827c5fb8586baaa6437f0 +Author: Ludovic Rousseau +Date: Sun Oct 14 14:15:43 2007 +0000 + + new firmware version + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2652 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCR3310.txt | 6 +++--- + readers/SCR3311.txt | 6 +++--- + readers/SCR335.txt | 18 ++++++++++-------- + 3 files changed, 16 insertions(+), 14 deletions(-) + +commit 9365328421f672d68c749157200f4c30e1371fdf +Author: Ludovic Rousseau +Date: Sat Oct 13 19:43:52 2007 +0000 + + display "Can't find any CCID device. Maybe you must run parse as root?" + if appropriate + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2650 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 59d178a6cd710a96b1d58881932d3323309381bc +Author: Ludovic Rousseau +Date: Thu Oct 11 14:45:09 2007 +0000 + + update + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2649 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemPCPinpad.txt | 3 ++- + readers/GemPCTwin.txt | 2 ++ + 2 files changed, 4 insertions(+), 1 deletion(-) + +commit 5f3bbac4549227176ed1dbac2c92713d22560a77 +Author: Ludovic Rousseau +Date: Thu Oct 11 13:41:35 2007 +0000 + + typo in log message + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2648 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit eddc818979ab2a022cbe7d278f3abea37f8e82d4 +Author: Ludovic Rousseau +Date: Sat Sep 29 19:41:09 2007 +0000 + + contrib/Kobil_mIDentity_switch/Makefile.am:2: compiling `Kobil_mIDentity_switch.c' with per-target flags requires `AM_PROG_CC_C_O' in `configure.in' + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2632 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 1 + + 1 file changed, 1 insertion(+) + +commit 3371ea137821dca6d2238e9b042940377983e98a +Author: Ludovic Rousseau +Date: Fri Sep 28 12:21:19 2007 +0000 + + call usb_detach_kernel_driver_np() only if libusb provides it (Linux + only) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2631 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/Kobil_mIDentity_switch/Kobil_mIDentity_switch.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 02e0e0e5e2784392882312449a629fc1df11b5fc +Author: Ludovic Rousseau +Date: Fri Sep 28 12:20:53 2007 +0000 + + check for usb_detach_kernel_driver_np() since only libusb on Linux provides it + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2630 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 3 +++ + 1 file changed, 3 insertions(+) + +commit 4f5e88d4836e299604c6a4fa40fa3dc83e39e3f9 +Author: Ludovic Rousseau +Date: Fri Sep 28 12:08:24 2007 +0000 + + use $(PTHREAD_CFLAGS) and $(PTHREAD_LIBS) since the thread library must + be explicitly used on *BSD + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2629 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/Makefile.am | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 853b672f5cfcaefe344e69e6f2d24007e3fbe5e3 +Author: Ludovic Rousseau +Date: Fri Sep 28 09:55:57 2007 +0000 + + add Eutron CryptoIdentity + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2628 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 1 + + 1 file changed, 1 insertion(+) + +commit d316393ac4b8caf3a8db54e8ceb7e3d7a35d33ef +Author: Ludovic Rousseau +Date: Fri Sep 28 09:54:13 2007 +0000 + + add Eutron CryptoIdentity (generated under FreeBSD 6.2-STABLE) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2627 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Eutron_CryptoIdentity.txt | 306 ++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 307 insertions(+) + +commit 4fe4acad936bbb0b23547fa4f6c7b5b27be70781 +Author: Ludovic Rousseau +Date: Fri Sep 21 20:49:08 2007 +0000 + + add Giesecke & Devrient CardToken 350 and 550. + They were listed in the README, the web site but not in this list. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2626 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 4ac5e93cd60b3e29a807d4a361a82cd0384d977d +Author: Ludovic Rousseau +Date: Fri Sep 14 07:47:07 2007 +0000 + + use PCSC_LIBS instead of LDLIBS in the error message if + SCardEstablishContext() is not found + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2624 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2cb5ab274e10522c0ce0d77b9873f510c4c4312c +Author: Ludovic Rousseau +Date: Tue Aug 21 21:14:23 2007 +0000 + + add SafeNet IKey4000 in the "Should work but untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2617 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 3 +++ + 2 files changed, 4 insertions(+) + +commit 1b7b94554dcb49716b34293e8d4ddc7609676b17 +Author: Ludovic Rousseau +Date: Tue Aug 21 21:12:16 2007 +0000 + + add SafeNet IKey4000 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2616 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 1 + + readers/SafeNet_IKey4000.txt | 49 ++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 50 insertions(+) + +commit a68275e2a647357d92ae8ed96b140b21a6f2ac71 +Author: Ludovic Rousseau +Date: Fri Aug 3 20:12:08 2007 +0000 + + add Giesecke & Devrient StarSign Card Token 350 and 550 in the "Should + work but untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2610 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 3 +++ + 1 file changed, 3 insertions(+) + +commit 5a5f563cd248ffdd1a604331aa9181fd268a3a94 +Author: Ludovic Rousseau +Date: Fri Aug 3 20:08:18 2007 +0000 + + DISTCLEANFILES = Info.plist + so that make distcheck works + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2609 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 ++ + 1 file changed, 2 insertions(+) + +commit a3e5d923acdbd0f1e7acc6fa96fcf519569e44bf +Author: Ludovic Rousseau +Date: Fri Aug 3 20:07:23 2007 +0000 + + add Giesecke & Devrient StarSign Card Token 350 and 550 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2608 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GnD_StarSignCardToken350.txt | 49 ++++++++++++++++++++++++++++++++++++ + readers/GnD_StarSignCardToken550.txt | 49 ++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 2 ++ + 3 files changed, 100 insertions(+) + +commit 3d4181c2b1d5776f2b752520680b27c03aec5f28 +Author: Ludovic Rousseau +Date: Fri Aug 3 14:32:47 2007 +0000 + + add OmniKey CardMan 5321 in the "Should work but untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2607 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + 1 file changed, 2 insertions(+) + +commit 8e879005073841111b1127b85041d9c71c0256fc +Author: Ludovic Rousseau +Date: Fri Aug 3 14:31:17 2007 +0000 + + add CardMan5321 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2606 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CardMan5321.txt | 170 ++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + readers/supported_readers.txt | 1 + + 3 files changed, 172 insertions(+) + +commit ffb9debf0a67882fa814a013debe07c52802705b +Author: Ludovic Rousseau +Date: Thu Aug 2 20:17:44 2007 +0000 + + update svn:ignore + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2605 0ce88b0d-b2fd-0310-8134-9614164e65ea + +commit f682a5a4a4008a29ab9596b80cafc4e22b90c372 +Author: Ludovic Rousseau +Date: Thu Aug 2 20:13:51 2007 +0000 + + add O2 Micro Oz776 (ProductID 0x7772) to the "Should work but untested + by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2604 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 +- + readers/supported_readers.txt | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +commit 20d6267fd200ca468d0d608c5a69d86821b37c3e +Author: Ludovic Rousseau +Date: Thu Aug 2 20:07:47 2007 +0000 + + add new O2Micro Oz776 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2603 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 1 + + readers/Oz776_7772.txt | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 51 insertions(+) + +commit bd72b4fef76c74398158b52ed57aca0568325a73 +Author: Ludovic Rousseau +Date: Thu Aug 2 20:04:12 2007 +0000 + + add support of the O2Micro oz776 (ProductID 0x7772) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2602 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + src/ccid_usb.c | 7 +++++-- + src/commands.c | 3 ++- + 3 files changed, 8 insertions(+), 3 deletions(-) + +commit 6e6d359cafdebfe05d8c9a707a845cf891fde3ca +Author: Ludovic Rousseau +Date: Thu Jul 5 19:24:00 2007 +0000 + + replace BUS by SUBSYSTEMS + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2599 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscd_ccid.rules | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +commit acd74bf67896d86a7721533fda207b849d4fb317 +Author: Ludovic Rousseau +Date: Thu Jul 5 09:06:52 2007 +0000 + + add support for Mac OS X + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2597 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 380e0fbf69eea058304a2ef5008f96478732be00 +Author: Ludovic Rousseau +Date: Tue Jul 3 16:10:28 2007 +0000 + + ccid_error(): increase the size of var_text[] to avoid a buffer overflow + + Thanks to Anders Storsveen for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2596 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d36a679b8f8618c91eb4db970dc4bac7007f2195 +Author: Ludovic Rousseau +Date: Mon Jul 2 13:06:41 2007 +0000 + + update version and copyright date + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2593 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 135e96abb3e3baafbf6284bd17db2a0ee0c3d9e9 +Author: Ludovic Rousseau +Date: Mon Jul 2 13:06:10 2007 +0000 + + remove compilation warnings + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2592 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c528fe1bad98c119d9bd3391622e261a0daf5774 +Author: Ludovic Rousseau +Date: Mon Jul 2 13:05:34 2007 +0000 + + do not free() unallocated memory + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2591 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +commit d5af56adc1ce9c38a41c60433678cddea1c6cdb3 +Author: Ludovic Rousseau +Date: Mon Jul 2 13:03:41 2007 +0000 + + use PCSC_ERROR_EXIT() for SCardListReaders() call + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2590 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +commit 2944da5a972b693a4b483f61c9354df1750bf2f9 +Author: Ludovic Rousseau +Date: Mon Jul 2 12:44:43 2007 +0000 + + display an explicit message when no card is present + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2585 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5eec1098a234c9d32440e915613bec6d16b7ebf8 +Author: Ludovic Rousseau +Date: Mon Jul 2 09:36:31 2007 +0000 + + update versions of autotools used + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2584 0ce88b0d-b2fd-0310-8134-9614164e65ea + + reconf | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 3ee0b703264654e63b685469e0593c69039e8799 +Author: Ludovic Rousseau +Date: Mon Jul 2 09:32:51 2007 +0000 + + regenerated using automake-1.10 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2583 0ce88b0d-b2fd-0310-8134-9614164e65ea + + build/ylwrap | 253 +++++++++++++++++++++++++++++++++++++---------------------- + 1 file changed, 158 insertions(+), 95 deletions(-) + +commit ec93be0de306a12bcded9884ca44190b1b03f3b4 +Author: Ludovic Rousseau +Date: Sat Jun 30 16:07:59 2007 +0000 + + update + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2582 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ActivkeySim.txt | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit c66f265f2a755e084a9d4f25fe277174e68dc817 +Author: Ludovic Rousseau +Date: Thu Jun 28 13:34:21 2007 +0000 + + use DRIVERS== instead of DRIVER== + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2581 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscd_ccid.rules | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 59db97c23cedc51c36ac367977df63a4daff8932 +Author: Ludovic Rousseau +Date: Mon Jun 25 12:23:36 2007 +0000 + + add "Philips Semiconductors JCOP41V221" ICCD card in "Should work but + untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2579 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/JCOP41V221.txt | 49 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 2 ++ + 3 files changed, 52 insertions(+) + +commit 406e8785e135275c1c8f415418cf52b0576f019c +Author: Ludovic Rousseau +Date: Mon Jun 18 08:27:56 2007 +0000 + + remove trash at end of file + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2566 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Sitecom_MD-010.txt | 21 --------------------- + 1 file changed, 21 deletions(-) + +commit e5ebd818ad4a692fc25560d77d64578243b0738a +Author: Ludovic Rousseau +Date: Wed Jun 13 12:32:27 2007 +0000 + + SecurePINVerify(): avoid a possible buffer overflow detected by sparse + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2557 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 3 --- + 1 file changed, 3 deletions(-) + +commit c9e3dfb41539b98644c1c66748f912fa04485fab +Author: Ludovic Rousseau +Date: Sat May 19 12:15:10 2007 +0000 + + generate a local Info.plist before trying to install it + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2533 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +commit 9a7548e43c5d8276674296afedab8a862d9b5ee4 +Author: Ludovic Rousseau +Date: Sat May 19 12:14:37 2007 +0000 + + rename Info.plist as Info.plist.src since it is just a template + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2532 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/{Info.plist => Info.plist.src} | 0 + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit b3995c5e4f0dc5149350d74d563c68a2afb5abcb +Author: Ludovic Rousseau +Date: Thu May 10 15:26:16 2007 +0000 + + typos + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2526 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 742ba838ddc4817acebdfec09fde127bb726b255 +Author: Ludovic Rousseau +Date: Thu May 10 13:05:51 2007 +0000 + + manpage section is 1 instead of 8 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2524 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/RSA_SecurID/RSA_SecurID_getpasswd.1 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ec316fc748c8103840fd5a1bc54c044c7258fce8 (tag: ccid-1.3.0) +Author: Ludovic Rousseau +Date: Thu May 10 09:16:42 2007 +0000 + + release 1.3.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2522 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 14 ++++++++++++++ + configure.in | 2 +- + 2 files changed, 15 insertions(+), 1 deletion(-) + +commit 098840067b05be4de0c0f08f8e640e84c4367522 +Author: Ludovic Rousseau +Date: Thu May 10 09:10:54 2007 +0000 + + add SchlumbergerSema Cyberflex Access e-gate in the should work list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2521 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/Makefile.am | 1 + + readers/e-gate.txt | 51 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 4 ++++ + 4 files changed, 57 insertions(+) + +commit 5629a66dc57bf874e39346387d849052c29a4df8 +Author: Ludovic Rousseau +Date: Thu May 10 09:03:28 2007 +0000 + + rename midswitch to Kobil_mIDentity_switch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2520 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/Kobil_mIDentity_switch/README_Kobil_mIDentity_switch.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 5c5900bd36d5964367a99b1716be948a6ff23123 +Author: Ludovic Rousseau +Date: Thu May 10 08:28:19 2007 +0000 + + update svn:ignore properties + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2519 0ce88b0d-b2fd-0310-8134-9614164e65ea + +commit 931749f14ae5d318e69d63f16c560abcf4ecc780 +Author: Ludovic Rousseau +Date: Thu May 10 08:25:21 2007 +0000 + + update snn:ignore properties + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2518 0ce88b0d-b2fd-0310-8134-9614164e65ea + +commit eef47a0b4bbdb400f3a6477eaedbe4da67c3eddb +Author: Ludovic Rousseau +Date: Thu May 10 08:22:33 2007 +0000 + + set svn:ignore properties + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2517 0ce88b0d-b2fd-0310-8134-9614164e65ea + +commit 2ea4a0df382f9d413b2118bfc7a396cf4d4e15e9 +Author: Ludovic Rousseau +Date: Thu May 10 08:03:44 2007 +0000 + + add Sitecom USB simcard reader MD-010 in the "Should work but untested + by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2516 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/Makefile.am | 1 + + readers/Sitecom_MD-010.txt | 130 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 + + 4 files changed, 135 insertions(+) + +commit e53e13879179eedb5e70ad5560120ed8940bea7e +Author: Ludovic Rousseau +Date: Thu May 10 07:57:23 2007 +0000 + + correct KOBIL mIDentity names + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2515 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 0c4ddab5567d24c8b1d2ff9621eec1814189f9cf +Author: Ludovic Rousseau +Date: Wed May 9 06:57:12 2007 +0000 + + exit if ACTION!="add" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2514 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscd_ccid.rules | 30 ++++++++++++++++++------------ + 1 file changed, 18 insertions(+), 12 deletions(-) + +commit 763586f6e8c04f536121a34a41b30c6dedddc943 +Author: Ludovic Rousseau +Date: Mon May 7 09:31:13 2007 +0000 + + #include "ccid_usb.h" to avoid + commands.c:103: warning: implicit declaration of function 'ControlUSB' + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2511 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 1 + + 1 file changed, 1 insertion(+) + +commit f1d6ede6358cf6111bd06a937ec6386cf7c4b222 +Author: Ludovic Rousseau +Date: Thu May 3 19:21:54 2007 +0000 + + get_end_points(): avoid a double free on close for the O2MICRO_OZ776 + special case. + + " In ccid_usb.c you move the extra descriptor from the endpoint 2 + descriptor to the interface descriptor. The problem is, when libusb try + to free the descriptors associated to this device on shutdown or if the + device disappears, it tries to free the same buffer twice. For me it + means the pcscd is killed with a glibc detected "double free". " + + Thanks to Michael Wegner for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2510 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit a90093d5869c165011263829c59caf824f61ecbf +Author: Ludovic Rousseau +Date: Thu May 3 15:21:29 2007 +0000 + + add OmniKey CardMan 4321 in "Should work but untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2509 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/supported_readers.txt | 1 + + 2 files changed, 3 insertions(+) + +commit 06700534e07fc021f28d49ce97e6d96f904dbbec +Author: Ludovic Rousseau +Date: Thu May 3 15:19:00 2007 +0000 + + add CardMan4321.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2508 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CardMan4321.txt | 170 ++++++++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 171 insertions(+) + +commit 2361b051713d63769cd1f3e5ac0bb27866b54826 +Author: Ludovic Rousseau +Date: Wed Mar 28 16:42:22 2007 +0000 + + define BOGUS_SCM_FIRMWARE_FOR_dwMaxCCIDMessageLength and code to avoid + the bogus limitation of dwMaxCCIDMessageLength on SCM firmwares + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2498 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 20 ++++++++++++++++++-- + 1 file changed, 18 insertions(+), 2 deletions(-) + +commit 04605997238a5ae4f98da1676b2c8250258a008f +Author: Ludovic Rousseau +Date: Wed Mar 21 12:44:38 2007 +0000 + + ccid_open_hack(): add Dutch(nl) and Tukish(tr) messages for the GemPC + pinpad + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2489 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 28 ++++++++++++++++++++++++++++ + 1 file changed, 28 insertions(+) + +commit e33a580f8f34e46fcd9893d67f423492a64643a3 +Author: Ludovic Rousseau +Date: Tue Mar 20 21:23:19 2007 +0000 + + firmware updates + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2488 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCR331-DI.txt | 12 +++++++----- + readers/SCR331.txt | 14 ++++++++------ + readers/SCR3310.txt | 14 ++++++++------ + readers/SCR3311.txt | 14 ++++++++------ + 4 files changed, 31 insertions(+), 23 deletions(-) + +commit 5f635f8d2833348539fe3d1356c1924debc7a373 +Author: Ludovic Rousseau +Date: Mon Mar 19 08:14:13 2007 +0000 + + improve documentation of SCARD_ATTR_MAXINPUT + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2487 0ce88b0d-b2fd-0310-8134-9614164e65ea + + SCARDGETATTRIB.txt | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +commit be4196b9e7db6121e150be785f3b9bef931c8ec8 +Author: Ludovic Rousseau +Date: Thu Mar 15 21:39:46 2007 +0000 + + if usb_control_msg() fails because the device is busy this is because + pcscd has claimed the device already + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2485 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit 32ced858f1c44468b5820f43f75abbd5dc8d3087 +Author: Ludovic Rousseau +Date: Thu Mar 15 20:56:25 2007 +0000 + + add Fujitsu Siemens Computers SmartCard Keyboard USB 2A and SmartCard + USB 2A to the "Should work but untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2484 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 2c2effb2f90a80c521dcab5c11bfff8d28c31fdf +Author: Ludovic Rousseau +Date: Thu Mar 15 20:50:09 2007 +0000 + + add Fujitsu Siemens Computers SmartCard USB 2A and SmartCard Keyboard + USB 2A readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2483 0ce88b0d-b2fd-0310-8134-9614164e65ea + + .../FujitsuSiemens_SmartCard_Keyboard_USB_2A.txt | 170 +++++++++++++++++++++ + readers/FujitsuSiemens_SmartCard_USB_2A.txt | 170 +++++++++++++++++++++ + readers/Makefile.am | 2 + + readers/supported_readers.txt | 3 + + 4 files changed, 345 insertions(+) + +commit 67c8b4adffb91927f929d8a5b0907e62099ddf60 +Author: Ludovic Rousseau +Date: Tue Mar 13 20:49:42 2007 +0000 + + use an unsigned char buffer[] to have unsigned multi-bytes convertions + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2480 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1b2016b5c66a459a4f3900f9df6d773d1869729a +Author: Ludovic Rousseau +Date: Mon Mar 12 10:07:35 2007 +0000 + + move #include of config.h before pcsclite.h and reader.h + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2473 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3cbd749d86e622f69e29b9fc6d408bb422360e65 +Author: Ludovic Rousseau +Date: Thu Mar 8 12:53:18 2007 +0000 + + In case of error set the received length to 0 in IFDHTransmitToICC() and + IFDHControl() instead of in all the lower level commands + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2472 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 28 ---------------------------- + src/ifdhandler.c | 8 +++++++- + 2 files changed, 7 insertions(+), 29 deletions(-) + +commit ebdf779091f72cf5e036f5f2480cbc34a7e4a18a +Author: Ludovic Rousseau +Date: Thu Mar 8 12:46:23 2007 +0000 + + add SchlumbergerSema Cyberflex Access e-gate ICCD + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2471 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscd_ccid.rules | 2 ++ + 1 file changed, 2 insertions(+) + +commit 35c2292f8f88bc50daad6771a2e0d92fd55e1ed0 +Author: Ludovic Rousseau +Date: Thu Mar 8 12:44:37 2007 +0000 + + add support of ICCD version A and B + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2470 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 32 +++++ + src/ccid.h | 9 ++ + src/ccid_usb.c | 1 + + src/commands.c | 404 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 446 insertions(+) + +commit e1115b8b0c4f1a614f46e6ce7fed57ce0a1c00fb +Author: Ludovic Rousseau +Date: Thu Mar 8 10:21:47 2007 +0000 + + ControlUSB(): add some debug: request value and data send/received + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2469 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 14 +++++++++++++- + 1 file changed, 13 insertions(+), 1 deletion(-) + +commit f1689b9b649497d8d6fab997c0d887c755168c53 +Author: Ludovic Rousseau +Date: Thu Mar 8 10:19:43 2007 +0000 + + bit 0x000800 of dwFeatures is undocumented but used by ICCD? + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2468 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit f0240397ef3489f74ff171e1549432dc9af182c8 +Author: Ludovic Rousseau +Date: Wed Feb 28 21:12:57 2007 +0000 + + differentiate the two KOBIL mIDentity devices (Basic and Classic) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2454 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit af519c5ab75b6a0ebc49d93d1e313e5ea5ad86d6 +Author: Ludovic Rousseau +Date: Wed Feb 28 13:08:59 2007 +0000 + + usb_detach_kernel_driver_np() is not available on libusb for Mac OS X + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2453 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/Kobil_mIDentity_switch/Kobil_mIDentity_switch.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 676471f441bfb41db7382d1f7edd8cd1fb3a6146 +Author: Ludovic Rousseau +Date: Wed Feb 28 12:21:26 2007 +0000 + + require autoconf 2.61 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2452 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 430a0829ff469b70ed4b8fcf4e77efe1c21d7a5a +Author: Ludovic Rousseau +Date: Wed Feb 28 10:58:32 2007 +0000 + + check for strlcpy + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2451 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9acfe6fef8bd265c56321eeeb6d0ea1fc86a8181 +Author: Ludovic Rousseau +Date: Tue Feb 27 07:49:26 2007 +0000 + + small reformat + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2450 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/RSA_SecurID/RSA_SecurID_getpasswd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 92a67446ee9d04b833e89f92ac6fda834edbf287 +Author: Ludovic Rousseau +Date: Mon Feb 26 07:37:06 2007 +0000 + + replace a C++ comment by a C comment + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2448 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/Kobil_mIDentity_switch/Kobil_mIDentity_switch.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 55fa815e49f7da1f2f96fa5c868b1313175c31bd +Author: Ludovic Rousseau +Date: Sun Feb 25 13:54:42 2007 +0000 + + EXTRA_DIST = $(doc_DATA) $(man_MANS) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2444 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/Kobil_mIDentity_switch/Makefile.am | 2 ++ + contrib/RSA_SecurID/Makefile.am | 2 ++ + 2 files changed, 4 insertions(+) + +commit d6bd0d1b31ba506f5ec92305dd590ed4bee096cd +Author: Ludovic Rousseau +Date: Sun Feb 25 13:54:10 2007 +0000 + + remove from SVN + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2443 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/RSA_SecurID/Makefile.in | 549 ---------------------------------------- + 1 file changed, 549 deletions(-) + +commit 8841396326fd5d04d9f3e71aaf76b93eb3974f46 +Author: Ludovic Rousseau +Date: Sun Feb 25 13:48:34 2007 +0000 + + add rule to call /usr/sbin/Kobil_mIDentity_switch for mIDentity devices + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2442 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscd_ccid.rules | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 9d330211ddb5983bab8c2d844feca5ad47af52cd +Author: Ludovic Rousseau +Date: Sun Feb 25 13:28:34 2007 +0000 + + move the Kobil mIDentity from the "Supported" to "Unsupported or partly + supported" because of a time request problem + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2441 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +commit 8001d64d640aad8864fb38f3d7f8f8c9228d80d7 +Author: Ludovic Rousseau +Date: Sun Feb 25 13:22:49 2007 +0000 + + add (new) KOBIL mIDentity + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2440 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 1 + + 1 file changed, 1 insertion(+) + +commit f57ad429a897420d85f62bf75a5f5e9f5677e5ab +Author: Ludovic Rousseau +Date: Sun Feb 25 13:19:19 2007 +0000 + + use $(LIBUSB_LIBS) instead of -lusb + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2439 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/Kobil_mIDentity_switch/Makefile.am | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 3173fbf42b5684bece6cfc37aec5ca0f33c7d710 +Author: Ludovic Rousseau +Date: Sun Feb 25 13:17:50 2007 +0000 + + add contrib/RSA_SecurID + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2438 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 1 + + contrib/Makefile.am | 2 +- + contrib/RSA_SecurID/Makefile.am | 7 + + contrib/RSA_SecurID/Makefile.in | 549 ++++++++++++++++++++++++++++ + contrib/RSA_SecurID/RSA_SecurID_getpasswd.1 | 14 + + contrib/RSA_SecurID/RSA_SecurID_getpasswd.c | 162 ++++++++ + 6 files changed, 734 insertions(+), 1 deletion(-) + +commit f53ec8417417f4202b6d67519615501d764654f0 +Author: Ludovic Rousseau +Date: Sun Feb 25 13:07:42 2007 +0000 + + add GNU GPL v2 licence + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2437 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/GPL-2 | 339 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 339 insertions(+) + +commit 8e90634f28bb7e1d41f59265ca06318c35f006cd +Author: Ludovic Rousseau +Date: Sun Feb 25 13:01:39 2007 +0000 + + add manpage Kobil_mIDentity_switch.8 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2436 0ce88b0d-b2fd-0310-8134-9614164e65ea + + .../Kobil_mIDentity_switch/Kobil_mIDentity_switch.8 | 19 +++++++++++++++++++ + contrib/Kobil_mIDentity_switch/Makefile.am | 2 ++ + 2 files changed, 21 insertions(+) + +commit 9f9138aef6c60fa12603aacf6200bcbd386bc93b +Author: Ludovic Rousseau +Date: Sun Feb 25 11:28:27 2007 +0000 + + doc_DATA = README_Kobil_mIDentity_switch.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2435 0ce88b0d-b2fd-0310-8134-9614164e65ea + + contrib/Kobil_mIDentity_switch/Makefile.am | 2 ++ + 1 file changed, 2 insertions(+) + +commit 12f800162564729edf704374abeb6536fb6512cf +Author: Ludovic Rousseau +Date: Sun Feb 25 11:27:47 2007 +0000 + + rename README.txt in README_Kobil_mIDentity_switch.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2434 0ce88b0d-b2fd-0310-8134-9614164e65ea + + .../{README.txt => README_Kobil_mIDentity_switch.txt} | 0 + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit fd36054f7a0945ad80a81dae8d290628f73db3f3 +Author: Ludovic Rousseau +Date: Sun Feb 25 10:51:52 2007 +0000 + + rename midswitch{.c,} in Kobil_mIDentity_switch{.c,} + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2433 0ce88b0d-b2fd-0310-8134-9614164e65ea + + .../{midswitch.c => Kobil_mIDentity_switch.c} | 0 + contrib/Kobil_mIDentity_switch/Makefile.am | 6 +++--- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit 0a009b6362cd099b906f56f79e5487310f8074ab +Author: Ludovic Rousseau +Date: Sun Feb 25 10:47:39 2007 +0000 + + rename contrib/midswitch/ in contrib/Kobil_mIDentity_switch/ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2432 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + contrib/{midswitch => Kobil_mIDentity_switch}/Makefile.am | 0 + contrib/{midswitch => Kobil_mIDentity_switch}/README.txt | 0 + contrib/{midswitch => Kobil_mIDentity_switch}/midswitch.c | 0 + contrib/Makefile.am | 2 +- + 5 files changed, 2 insertions(+), 2 deletions(-) + +commit cb92532bdafcb90a5277c54d0236d0423b9027d7 +Author: Ludovic Rousseau +Date: Sat Feb 24 17:41:24 2007 +0000 + + add contrib/midswitch to activate the CCID reader of the Kobil mIDentity + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2431 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + configure.in | 2 + + contrib/Makefile.am | 1 + + contrib/midswitch/Makefile.am | 3 + + contrib/midswitch/README.txt | 250 ++++++++++++++++++++++++++++++++++++++++++ + contrib/midswitch/midswitch.c | 199 +++++++++++++++++++++++++++++++++ + 6 files changed, 456 insertions(+), 1 deletion(-) + +commit f4779ac1611ad79ed844d849cce4ab8031d80bf1 +Author: Ludovic Rousseau +Date: Fri Feb 23 17:09:49 2007 +0000 + + CmdPowerOn() & SecurePINVerify(): rename 6 local variables to avoid: + warning: declaration of 'cmd' shadows a previous local + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2430 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +commit c9d8254bd2f8f10539a0a81632f2b42bda19fa23 +Author: Ludovic Rousseau +Date: Fri Feb 23 17:02:43 2007 +0000 + + display the error message if usb_control_msg() fails + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2429 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 56c5bec934ec69df2b37ec04a1d676392e6ef7c0 +Author: Ludovic Rousseau +Date: Fri Feb 23 17:01:25 2007 +0000 + + do not declare another buffer variable to avoid: declaration of ‘buffer’ + shadows a previous local + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2428 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +commit 19d17384319b9ae6412cebf23febb24751aaeb55 +Author: Ludovic Rousseau +Date: Fri Feb 23 16:49:50 2007 +0000 + + allow multiple inclusion using #ifndef __CCID_USB_H__ ... + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2427 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.h | 3 +++ + 1 file changed, 3 insertions(+) + +commit 712c29e73c1109b5d08c2e549b36bf62fdabcc96 +Author: Ludovic Rousseau +Date: Fri Feb 23 16:45:05 2007 +0000 + + get_end_points(): change parameter name from usb_device to usbdevice to + avoid: warning: declaration of 'usb_device' shadows a global declaration + /usr/include/usb.h:329: warning: shadowed declaration is here + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2426 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 0aa54c535ef98fd8ae0faaaed6d94f9f7447d6a2 +Author: Ludovic Rousseau +Date: Fri Feb 23 16:41:18 2007 +0000 + + ControlUSB(): explicit cast to avoid warning: pointer targets in passing + argument 6 of 'usb_control_msg' differ in signedness + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2425 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit fa5a86c004200ee300984002dc4be500d1aeadf7 +Author: Ludovic Rousseau +Date: Fri Feb 23 16:40:08 2007 +0000 + + get_data_rates(): use ControlUSB() instead of usb_control_msg() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2424 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +commit 457a73de89bbd732b763bfdf006e82232a5d0eb8 +Author: Ludovic Rousseau +Date: Fri Feb 23 16:37:09 2007 +0000 + + add ControlUSB() declaration and implementation + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2423 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 8 ++++++++ + src/ccid_usb.h | 3 +++ + 2 files changed, 11 insertions(+) + +commit f957ee466cce91a4f0e93fed7567d6d461ca4119 +Author: Ludovic Rousseau +Date: Fri Feb 23 16:16:57 2007 +0000 + + remove a redundant declaration of i + scardcontrol.c:486: attention : declaration of ‘i’ shadows a previous + local + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2422 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 1 - + 1 file changed, 1 deletion(-) + +commit ce91745455b9830fdb3336f9fe0f568994236c38 +Author: Ludovic Rousseau +Date: Thu Feb 22 15:11:49 2007 +0000 + + CmdXfrBlockTPDU_T0(): set *rx_length to 0 in case of command too long + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2421 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit ba15f0564ef70d0c18c0b04a863d44d5c1e876dc +Author: Ludovic Rousseau +Date: Thu Feb 22 14:15:37 2007 +0000 + + CmdXfrBlockTPDU_T0(): set *rx_length to 0 if CCID_Transmit() fails + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2420 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit b07a7f41fa5acab99d47526c1e0bcb238322024d +Author: Ludovic Rousseau +Date: Tue Feb 20 13:38:00 2007 +0000 + + Secure modify PIN: add a bConfirmPIN and bNumberMessage table + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2407 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +commit 45ba8b4b480e5022496aa70e2a3a0745443f44a7 +Author: Ludovic Rousseau +Date: Tue Feb 20 13:34:44 2007 +0000 + + SecurePINModify(): set bNumberMessages in all cases + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2406 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2d3b3db8dfbd7b26500baa9f320a8ee61b1a5a89 +Author: Ludovic Rousseau +Date: Tue Feb 20 13:25:41 2007 +0000 + + set max pin size to 8 instead of 4 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2405 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 7149245d8ae34e68444e5b5c455276e6283858ca +Author: Ludovic Rousseau +Date: Tue Feb 20 13:23:44 2007 +0000 + + SecurePINModify(): the GemPC Twin does support different values of + bNumberMessages but all the bMsgIndex? must be present in the CCID + command + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2404 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit 8c7bd8656e6a6ad350f7ff616d3a7f33342713de +Author: Ludovic Rousseau +Date: Sat Feb 17 14:56:45 2007 +0000 + + IFDHControl(): log the Rx and Rx buffers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2399 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit c1f434b677a7d2adb73d110a437a7201353cb725 +Author: Ludovic Rousseau +Date: Sat Feb 17 13:53:53 2007 +0000 + + add DEBUG_INFO_XXD() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2398 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.h | 2 ++ + 1 file changed, 2 insertions(+) + +commit dfc70152fffcc14f072d79b90401e1673c4756fd +Author: Ludovic Rousseau +Date: Sat Feb 10 19:45:51 2007 +0000 + + get_end_points(): correct bug in revision 2392 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2393 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c4b34aa58c1b74fba858bbe565bc21a802d2ffac +Author: Ludovic Rousseau +Date: Sat Feb 10 19:43:13 2007 +0000 + + get_end_points(): use usb_interface->altsetting->bNumEndpoints instead + of the hardcoded value 3 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2392 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d27f9cfa4dd6f37f7f3a52f81b74b0a4660fe168 +Author: Ludovic Rousseau +Date: Thu Feb 8 14:47:52 2007 +0000 + + use ATTRS{} instead of SYSFS{} for use with recent udev versions + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2391 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscd_ccid.rules | 23 +++++++++++------------ + 1 file changed, 11 insertions(+), 12 deletions(-) + +commit f49c87781f666d56bb890a8fd068fafbb1df6836 +Author: Ludovic Rousseau +Date: Thu Feb 8 14:18:56 2007 +0000 + + parse bInterfaceProtocol field + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2390 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) + +commit 43eea6b02e0566021401b056f8bcc9baaebe7b56 +Author: Ludovic Rousseau +Date: Thu Feb 8 14:13:47 2007 +0000 + + parse bNumEndpoints field + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2389 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +commit 0894e34d601d10cb8e1bd83e00dfd7db4562ebff +Author: Ludovic Rousseau +Date: Mon Feb 5 17:11:52 2007 +0000 + + ChangeLog: use svn2cl instead of svn2cl.sh + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2387 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5cd96adf7eaf53fb832edae8960eba52915259bb +Author: Ludovic Rousseau +Date: Tue Jan 30 15:46:07 2007 +0000 + + ccid_open_hack(): add the l10n of the 10th string "PIN blocked" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2366 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 20 +++++++++++++------- + 1 file changed, 13 insertions(+), 7 deletions(-) + +commit 6ba5c979de98fe4d88b3eab3124a0850097c72a0 +Author: Ludovic Rousseau +Date: Tue Jan 30 15:01:50 2007 +0000 + + ccid_open_hack(): add portugese strings for the GemPC Pinpad. + + Thanks to Stef Hoeben + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2365 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +commit 949365adef6369b258129c77a57b8f235031d147 (tag: ccid-1.2.1) +Author: Ludovic Rousseau +Date: Sat Jan 27 16:48:06 2007 +0000 + + release 1.2.1 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2363 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 9 +++++++++ + configure.in | 2 +- + 2 files changed, 10 insertions(+), 1 deletion(-) + +commit b797bd14f1879abca817aa51ff8b4c2916ba4c3e +Author: Ludovic Rousseau +Date: Sat Jan 27 16:41:14 2007 +0000 + + move the O2Micro Oz7762 from the unsupported to the supported list since + patches to support it are applied by default (O2MICRO_OZ776_PATCH) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2362 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 12 +----------- + 1 file changed, 1 insertion(+), 11 deletions(-) + +commit 38ff9ab5882d594275785c684d85dc9857d7e74a +Author: Ludovic Rousseau +Date: Sat Jan 27 16:36:55 2007 +0000 + + add non CCID generic (InterfaceClass: 0xFF) readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2361 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscd_ccid.rules | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +commit 90611495fc17fbb5e7613d595d471d4d64f94a23 +Author: Ludovic Rousseau +Date: Sat Jan 27 15:42:28 2007 +0000 + + SK-3106.txt is a duplicate of DellSK-3106.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2360 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 1 - + readers/SK-3106.txt | 194 ---------------------------------------------------- + 2 files changed, 195 deletions(-) + +commit 84223d63ebe365144c3e44b4fb96f6a8219bdb95 +Author: Ludovic Rousseau +Date: Sat Jan 27 13:31:33 2007 +0000 + + Bogus_firmwares[]: the driver now contains patches to circumvent the + Oz776 reader. It is then declared bogus only if O2MICRO_OZ776_PATCH is + not defined + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2359 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit ff525dbf0a89808bbf233394d22a0f713c746cfd +Author: Ludovic Rousseau +Date: Sat Jan 27 13:28:26 2007 +0000 + + T0ProcACK(): use a hack to circumvent the Oz776 firmware bug with + commands of size modulo 64 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2358 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 43 +++++++++++++++++++++++++++++++++++-------- + 1 file changed, 35 insertions(+), 8 deletions(-) + +commit 806fb31e354db3e3bf1632d6401bebfea62a710a +Author: Ludovic Rousseau +Date: Fri Jan 26 16:57:45 2007 +0000 + + CmdGetSlotStatus(): the O2MICRO OZ 776 reader sends "card absent or + mute" errors when no card is inserted. We do not log this error since it + is normal execution and just fill the syslog files + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2357 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit a25bdde1cb90577dd5564cd50950da8901dfd533 +Author: Ludovic Rousseau +Date: Fri Jan 26 16:43:45 2007 +0000 + + move #define O2MICRO_OZ776_PATCH from ccid_usb.c to ccid.h so we can use + it in other .c files + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2356 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 7 +++++++ + src/ccid_usb.c | 7 ------- + 2 files changed, 7 insertions(+), 7 deletions(-) + +commit ab3730fe4ee6fc533fea0f5e9d336ea0479d1ee2 +Author: Ludovic Rousseau +Date: Wed Jan 24 13:21:39 2007 +0000 + + document how to use --enable-udev on FreeBSD. + + Thanks to Tilman Linneweh + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2355 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +commit e00b7361bba4a41095a2cd8b7db8abf273f1b436 +Author: Ludovic Rousseau +Date: Sat Jan 20 15:47:19 2007 +0000 + + version 1.2.0 was released in 2007 not 2006 :-) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2351 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1f320ef0e0e1b03bd259a666e222a08a48a2ecf4 (tag: ccid-1.2.0) +Author: Ludovic Rousseau +Date: Fri Jan 19 19:53:39 2007 +0000 + + release 1.2.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2345 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 13 +++++++++++++ + configure.in | 2 +- + 2 files changed, 14 insertions(+), 1 deletion(-) + +commit 89c255c75b30d4ae57ae3d6bda68fd14cef51162 +Author: Ludovic Rousseau +Date: Fri Jan 19 15:33:40 2007 +0000 + + removed since generated from configure.in by autoheader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2342 0ce88b0d-b2fd-0310-8134-9614164e65ea + + config.h.in | 117 ------------------------------------------------------------ + 1 file changed, 117 deletions(-) + +commit cb94edd74a2bfa3fbf25948bc62ddde9b33ce18f +Author: Ludovic Rousseau +Date: Thu Jan 18 09:46:04 2007 +0000 + + document udev use + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2338 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +commit 6bf778ceb58b94551d91e67d84f33e5286981dab +Author: Ludovic Rousseau +Date: Thu Jan 18 09:41:27 2007 +0000 + + pcsc-lite versions before 1.3.3 are not supported so remove notes about + CHANNELID + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2337 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 25 +++---------------------- + 1 file changed, 3 insertions(+), 22 deletions(-) + +commit afc9715e6037dc39f6a172c9a782b046f1328067 +Author: Ludovic Rousseau +Date: Thu Jan 18 09:34:49 2007 +0000 + + add #CCID_compliant URL refenrece when a reader is not yet supported + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2336 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit f6b59ebd977e455ebbde7f1aefc488a85fbf32cf +Author: Ludovic Rousseau +Date: Wed Jan 10 21:01:39 2007 +0000 + + do not install the pcscd_ccid.rules file but display a message telling + so. The exact location of this file is Linux distribution dependent. + + Thanks to Alon Bar-Lev for the idea. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2329 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c6c5c2bf3a7bf674e7a8bb05a355ecf51a09cf0b +Author: Ludovic Rousseau +Date: Wed Jan 10 20:53:44 2007 +0000 + + typo: "busses" -> "buses" + + Thanks to Martin Paljak for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2328 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9bc9c6566d195c8ae08a938cae2d8c35c6031454 +Author: Ludovic Rousseau +Date: Wed Jan 10 15:50:51 2007 +0000 + + add a missing \n in printf + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2326 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit cdbc8736f30e0726c1f464ea4177d36841477fd4 +Author: Ludovic Rousseau +Date: Tue Jan 9 19:55:03 2007 +0000 + + use 60-pcscd_ccid.rules instead of 50-pcscd_ccid.rules so udev default + > rules will run before are run before this one. + + Thanks to Alon Bar-Lev. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2322 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3e5ac3ec9a37e0aaaf923337de643229121ecd48 +Author: Ludovic Rousseau +Date: Mon Jan 8 08:01:04 2007 +0000 + + add pcscd_ccid.rules in EXTRA_DIST + + Thanks to Kjell M. Myksvoll for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2318 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit fc752d9f0c37602105b172a975f76093f453236c +Author: Ludovic Rousseau +Date: Sat Jan 6 22:15:16 2007 +0000 + + add SCARDGETATTRIB.txt to EXTRA_DIST + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2317 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 61db69a61e5dba7bd914a6d5e89339fbc963bf68 +Author: Ludovic Rousseau +Date: Sat Jan 6 21:54:46 2007 +0000 + + use LPSTR instead or the deprecated LPTSTR + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2316 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1c93588be6dcb1ee46e5220dde47bc98ac10ae2b +Author: Ludovic Rousseau +Date: Sat Jan 6 21:53:22 2007 +0000 + + if --enable-udev is used we define IFD_GENERATE_HOTPLUG in + ifdCapabilities and install the pcscd_ccid.rules for udev + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2315 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +commit a4766819dc5a0e91987648feadab1d54267bf3b8 +Author: Ludovic Rousseau +Date: Sat Jan 6 21:52:18 2007 +0000 + + replace MAGIC_IFDCAPABILITIES by the 3rd command line argument + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2314 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/create_Info_plist.pl | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +commit 97f4fd85e920babfe7c0be7b0c8a8fa28402bc41 +Author: Ludovic Rousseau +Date: Sat Jan 6 21:51:32 2007 +0000 + + use MAGIC_IFDCAPABILITIES + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2313 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +commit a586d4a7cf4c3fed2cc2646ea9d2471b0513189e +Author: Ludovic Rousseau +Date: Sat Jan 6 21:50:46 2007 +0000 + + add --enable-udev + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2312 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit 55b2345fe1a69a62596a6f17a87617c62a7bc400 +Author: Ludovic Rousseau +Date: Sat Jan 6 21:39:39 2007 +0000 + + udev file for hotplug capability + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2311 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscd_ccid.rules | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit 76b87385ad1f549fad24d16d3282c6aa4d091930 +Author: Ludovic Rousseau +Date: Thu Jan 4 20:27:13 2007 +0000 + + add "HP USB Smartcard Reader" in the "Should work but untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2298 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + 1 file changed, 1 insertion(+) + +commit 65f7dd455a189eb5dd393d744668490f3d55cf92 +Author: Ludovic Rousseau +Date: Thu Jan 4 20:26:45 2007 +0000 + + add HP USB Smartcard Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2297 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/HPUSBSmartCardReader.txt | 51 ++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 52 insertions(+) + +commit 7bd416ca873db4cd996acc86ca4f60030cac3753 +Author: Ludovic Rousseau +Date: Tue Jan 2 19:55:40 2007 +0000 + + CloseUSB(): free .dirname and .filename only for the last slot + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2296 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 3aefc0b8857828bd7fd943e7405eb323d1a2beb3 +Author: Ludovic Rousseau +Date: Tue Jan 2 17:01:15 2007 +0000 + + OpenUSBByName(): move the "Checking device: " log message out of the + usbDevice[] loop since we display info of the new device and not of + a device from usbDevice[] + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2295 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 1162dd0314fa124c08bbfb124dc2ec9cd092a4bf +Author: Ludovic Rousseau +Date: Tue Jan 2 16:55:33 2007 +0000 + + struct _usbDevice: replace struct usb_device *dev; by char *dirname; and + char *filename; since the libusb structure can be modified at any time + by libusb (this structure is reused for another USB device when the USB + device is removed) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2294 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 49 ++++++++++++++++++++++--------------------------- + 1 file changed, 22 insertions(+), 27 deletions(-) + +commit a8c16e5e8908dc6abbf57afa71f2b7d36ffdb282 +Author: Ludovic Rousseau +Date: Tue Jan 2 16:46:58 2007 +0000 + + get_data_rates() now has a struct usb_device *dev parameter to avoid + storing it in struct _usbDevice + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2293 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +commit 602ab609f4fa7c5394b2ca130a0d44ed082a1314 +Author: Ludovic Rousseau +Date: Tue Jan 2 16:25:03 2007 +0000 + + remove unused get_desc() function + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2292 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 20 -------------------- + src/ccid_usb.h | 2 -- + 2 files changed, 22 deletions(-) + +commit 1fa336a6cbf8826468e3a0bf57c0fd399961e32f +Author: Ludovic Rousseau +Date: Tue Jan 2 16:23:04 2007 +0000 + + revert revisions 2289 and 2290 + + It is not the correct solution to the problem + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2291 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 12 ------------ + 1 file changed, 12 deletions(-) + +commit a9d76e152782948c8fb2d8444aaff99eddf99785 +Author: Ludovic Rousseau +Date: Tue Jan 2 14:28:08 2007 +0000 + + WriteUSB()/ReadUSB(): check that the device entry is still valid before + using it + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2290 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 85864ecb15f271153b922470bbe6f2ee9abfc465 +Author: Ludovic Rousseau +Date: Tue Jan 2 14:25:30 2007 +0000 + + WriteUSB()/ReadUSB(): call CloseUSB() as soon as the device disapears + (ENODEV) since the libusb structures pointed by usbDevice[] may be + reused by another USB device + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2289 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 307bad043fe6c1d3907f30c0c30df694f5c7fef5 +Author: Ludovic Rousseau +Date: Sat Dec 30 20:33:45 2006 +0000 + + do not use two AM_CONDITIONAL() with the same variable + + Thanks to Alon Bar-Lev for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2288 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +commit 211937d13f3134a2fa56ea8c775a549d2888608d +Author: Ludovic Rousseau +Date: Sat Dec 30 20:17:32 2006 +0000 + + --disable-twinserial now works as expected. + + Thanks to Alon Bar-Lev for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2287 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +commit acd716402a5fc9bcc183786240ff2e59430c7dde +Author: Ludovic Rousseau +Date: Mon Dec 25 22:33:58 2006 +0000 + + many commands: make sure we received at least STATUS_OFFSET+1 bytes + before reading the value of buffer[STATUS_OFFSET] + + usb_bulk_read() may return 0 bytes instead of an error when the reader + is just disconnected + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2285 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 32 +++++++++++++++++++++++++++++++- + 1 file changed, 31 insertions(+), 1 deletion(-) + +commit db364b1b9befd8a629394f197ab34d9f2490bc31 +Author: Ludovic Rousseau +Date: Mon Dec 25 20:54:20 2006 +0000 + + GetNewReaderIndex(): check that Lun is NOT already used + + Thanks to Martin Preuss for the idea + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2280 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/utils.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +commit 3635e46be33d40f319ba55925babce85f94a453e +Author: Ludovic Rousseau +Date: Wed Dec 20 20:48:50 2006 +0000 + + add the OmniKey CardMan 1021 to the "Should work but untested by me" + list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2278 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + 1 file changed, 1 insertion(+) + +commit 32e19ed1e666cc2ee574df67fdf87c183c08d77b +Author: Ludovic Rousseau +Date: Wed Dec 20 20:41:59 2006 +0000 + + add OmniKey CardMan 1021 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2277 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CardMan1021.txt | 76 +++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + readers/supported_readers.txt | 1 + + 3 files changed, 78 insertions(+) + +commit 79a2365df78145134491e8aa83026d46d664f849 +Author: Ludovic Rousseau +Date: Wed Dec 20 20:40:58 2006 +0000 + + a line was wrapped + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2276 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CardMan3021.txt | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 7dc1aa07d019ef2b3af3f0912be6473ff485a4b9 +Author: Ludovic Rousseau +Date: Tue Dec 12 13:15:28 2006 +0000 + + new file + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2275 0ce88b0d-b2fd-0310-8134-9614164e65ea + + SCARDGETATTRIB.txt | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 76 insertions(+) + +commit 35594700c34d43dd87ff6b815cf0fd8b608afa10 +Author: Ludovic Rousseau +Date: Mon Dec 11 08:53:04 2006 +0000 + + add PKG_PROG_PKG_CONFIG + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2271 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 1 + + 1 file changed, 1 insertion(+) + +commit 1026f0b65c1f8530e44352c8361e52eba7681e02 +Author: Ludovic Rousseau +Date: Sun Dec 10 10:51:51 2006 +0000 + + add --enable-twinserial to build the serial reader driver + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2270 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c5631970c5e73b3d0ee0e393d95d96a41adb5abf +Author: Ludovic Rousseau +Date: Tue Dec 5 21:12:34 2006 +0000 + + upgrade firmware to 1.02 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2269 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/KAAN_Advanced.txt | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +commit a6cd351e6a5ce5c3ee909bde4d8e02f0ea932d75 +Author: Ludovic Rousseau +Date: Tue Dec 5 21:04:56 2006 +0000 + + upgrade firmware to 1.02 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2268 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/KAAN_Base.txt | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +commit 14f67b73b4babdbc3b6e60aebb75f93aaf8cd249 +Author: Ludovic Rousseau +Date: Sat Dec 2 17:20:29 2006 +0000 + + #include "checksum.h" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2260 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/checksum.c | 1 + + 1 file changed, 1 insertion(+) + +commit 360f0b11605ddd8c4f9284ab29b47a1635f8d87f +Author: Ludovic Rousseau +Date: Sat Dec 2 17:13:06 2006 +0000 + + warning: initialization discards qualifiers from pointer target type + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2258 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c4a2158f9ed61f79431b3fc77652710423b1e051 +Author: Ludovic Rousseau +Date: Sat Dec 2 17:12:22 2006 +0000 + + warning: initialization discards qualifiers from pointer target type + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2257 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 84e15a2f7fae1e557146f66deea372da8042778e +Author: Ludovic Rousseau +Date: Sat Dec 2 17:09:03 2006 +0000 + + remove unused argc and argv arguments + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2256 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 942f91d58978905707b874519ec28f6ed549bd8c +Author: Ludovic Rousseau +Date: Sat Dec 2 17:08:01 2006 +0000 + + ccid_error(): "char *file" argument -> "const char *file" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2255 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 2 +- + src/ccid.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 026361ec8c682a38373f6c8b303657576f3b1eeb +Author: Ludovic Rousseau +Date: Sat Dec 2 17:03:26 2006 +0000 + + warning: assignment discards qualifiers from pointer target type + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2254 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +commit 5786d12d4e790732b23a612e2af6679034b0d4dd +Author: Ludovic Rousseau +Date: Sat Dec 2 16:55:17 2006 +0000 + + warning: redundant redeclaration of 'LogLevel' + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2253 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_ifdhandler.h | 1 - + 1 file changed, 1 deletion(-) + +commit c08c869010399d819f3e370f4a0b27a2b76e8a83 +Author: Ludovic Rousseau +Date: Thu Nov 30 22:37:52 2006 +0000 + + use $(srcdir)/convert_version.pl + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2252 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c0657aef7ca7e914923d3474229420cca669582c +Author: Ludovic Rousseau +Date: Thu Nov 30 22:35:31 2006 +0000 + + change C3PO_LTC32_USBv_old.txt in C3PO_LTC32_USBv2_old.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2251 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e4b80eb9825b9a2657efdc44b506706d7210be31 +Author: Ludovic Rousseau +Date: Wed Nov 29 10:31:11 2006 +0000 + + test if IFD_NO_SUCH_DEVICE is defined in ifdhandler.h + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2240 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 1 + + 1 file changed, 1 insertion(+) + +commit aad7353a531fb87e9a10a45a29d76826219cf02e +Author: Ludovic Rousseau +Date: Wed Nov 29 10:12:04 2006 +0000 + + use AC_TRY_LINK_FUNC() instead of AC_CHECK_LIB() to not hard code the use of + -lpcsclite + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2239 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 36030627c30da3ba4ab04326ec7cca8d3b5add24 +Author: Ludovic Rousseau +Date: Wed Nov 29 10:10:55 2006 +0000 + + distribute convert_version.pl + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2238 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit ebe60405b912212e5331a68b504f6bee91dd8483 +Author: Ludovic Rousseau +Date: Thu Nov 23 19:58:13 2006 +0000 + + add C3PO_* files + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2237 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/C3PO_KBR36.txt | 54 ++++++++++++++++++++++++++++++++++++++++ + readers/C3PO_LTC32_USBv2.txt | 54 ++++++++++++++++++++++++++++++++++++++++ + readers/C3PO_LTC32_USBv2_old.txt | 50 +++++++++++++++++++++++++++++++++++++ + readers/C3PO_TLTC2USB.txt | 50 +++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 4 +++ + 5 files changed, 212 insertions(+) + +commit 9e3cbdac9c681f4c092b94ca82e471e669d9e45a +Author: Ludovic Rousseau +Date: Wed Nov 22 19:40:15 2006 +0000 + + exit if the command is not run as root and getting iManufacturer fails + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2234 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit 136339bdba3c09e4334909bba02940cd9c943f49 +Author: Ludovic Rousseau +Date: Sat Nov 18 20:56:22 2006 +0000 + + add C3PO TLTC2USB, LTC32 USBv2 with keyboard support and KBR36 in the + "Should work but untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2224 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/supported_readers.txt | 4 ++++ + 2 files changed, 6 insertions(+) + +commit d5e5a016e55b8f4a3a1a342793a9b109353389ec +Author: Ludovic Rousseau +Date: Fri Nov 17 20:19:17 2006 +0000 + + set IFSC in the SetParameters argument for T=1 if TAi (i>2) is present: IFSC + + Thanks to Stefan Neis for the bug report and patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2223 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +commit 81dfb0d9c6717a0bcef420afd65b7d0cb6ab244c +Author: Ludovic Rousseau +Date: Fri Nov 17 16:39:49 2006 +0000 + + add Teo by Xiring in the supported list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2222 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 + + readers/Teo.txt | 168 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 3 files changed, 171 insertions(+) + +commit 399749abc181e080b629c7869aec12c22abf22ca +Author: Ludovic Rousseau +Date: Fri Nov 17 16:36:58 2006 +0000 + + add C3PO LTC32 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2221 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/LTC32.txt | 54 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 55 insertions(+) + +commit 5af22c26550dfa500c5ec72d1183bf23ab897d59 +Author: Ludovic Rousseau +Date: Wed Nov 15 14:52:54 2006 +0000 + + we need pcsc-lite 1.3.3 since we now use IFD_NO_SUCH_DEVICE + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2210 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +commit 519ae8848bca2a8e4f6f4d3bebfc1a124d210866 +Author: Ludovic Rousseau +Date: Wed Nov 15 14:35:21 2006 +0000 + + IFDHICCPresence(): return the error code returned by CmdGetSlotStatus() + instead of using IFD_COMMUNICATION_ERROR + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2208 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0c6237df3e24c0e905f6e7d2d96a1faa6b8d003d +Author: Ludovic Rousseau +Date: Wed Nov 15 14:33:41 2006 +0000 + + CmdGetSlotStatus(), CCID_Transmit() and CCID_Receive(): return + IFD_NO_SUCH_DEVICE if the lower communication layer returns + STATUS_NO_SUCH_DEVICE + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2207 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) + +commit 9aad6258168f5246aab74eea66ccc0c5a2b53238 +Author: Ludovic Rousseau +Date: Wed Nov 15 14:31:38 2006 +0000 + + WriteUSB() & ReadUSB(): return STATUS_NO_SUCH_DEVICE if read() or + write() fails with ENODEV + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2206 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 87d4d2d510fc576d187982d74088d8caf63562ad +Author: Ludovic Rousseau +Date: Wed Nov 15 14:28:20 2006 +0000 + + add STATUS_NO_SUCH_DEVICE + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2205 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/defs.h | 1 + + 1 file changed, 1 insertion(+) + +commit e5112c49a11edc3dcd1052b5f638b4442fb55704 +Author: Ludovic Rousseau +Date: Wed Nov 15 10:04:18 2006 +0000 + + IFDHGetCapabilities(): add support of SCARD_ATTR_MAXINPUT to get the + maximal APDU size (dwMaxCCIDMessageLength -10) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2197 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit c6d482695caaa5acd0ecd7cc223b40469febac56 +Author: Ludovic Rousseau +Date: Mon Nov 6 14:36:56 2006 +0000 + + SecurePINVerify(): the GemPC Pinpad does not support + a bEntryValidationCondition different of 0x02 (validation key pressed) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2195 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit 825f64133b37cf57d92bec750a727a3c68585806 +Author: Ludovic Rousseau +Date: Fri Oct 13 17:00:43 2006 +0000 + + remove unneeded dependency on dl library + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2186 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 4 ---- + src/Makefile.am | 2 +- + 2 files changed, 1 insertion(+), 5 deletions(-) + +commit 181ad8b942c193e9256a0958682ce8ca30f0710c +Author: Ludovic Rousseau +Date: Tue Sep 26 13:32:05 2006 +0000 + + IFDHICCPresence(): the patch in revision 2150 was not correct. + SCardReconnect(..., SCARD_UNPOWER_CARD, ...) failed since the + card was reported as non present after the power off + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2176 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit c0015e764c5aa00d9eefcbde3c92a586b2a09c56 +Author: Ludovic Rousseau +Date: Tue Sep 26 13:29:57 2006 +0000 + + IFDHPowerICC(): log the action performed (PowerUp, PowerDown, Reset) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2175 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit ee345891abecdb7ba9f95f23052ed0dacb178c98 +Author: Ludovic Rousseau +Date: Fri Sep 22 14:51:24 2006 +0000 + + add OmniKey CardMan 5125 in the should work but unsupported list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2174 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 + + readers/CardMan5125.txt | 168 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 3 files changed, 171 insertions(+) + +commit 5b46a303a3170c057ad35af98a8f8782230b5426 +Author: Ludovic Rousseau +Date: Fri Sep 22 14:49:51 2006 +0000 + + update OmniKey URLs + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2173 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 542fbe8f75403346c6ff2076dba081b06c5add9d +Author: Ludovic Rousseau +Date: Fri Sep 22 14:04:46 2006 +0000 + + move the RSA SID800 in the supported list now that I have a working + model + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2172 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 6 ++---- + readers/supported_readers.txt | 3 +++ + 2 files changed, 5 insertions(+), 4 deletions(-) + +commit 11717cda132a39247f78bf5ec2bb70938827737e +Author: Ludovic Rousseau +Date: Fri Sep 22 14:04:04 2006 +0000 + + update using a new SID800 model. Unfortunately the firmware version has + not changed so it is not possible to detect a non working model + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2171 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/sid800.txt | 12 +++++------- + 1 file changed, 5 insertions(+), 7 deletions(-) + +commit 76787d94c452c7b10a2a44a37a9e5e151fb96a16 +Author: Ludovic Rousseau +Date: Fri Sep 22 13:36:21 2006 +0000 + + add O2Micro Oz7762 in the unsupported list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2170 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +commit 4c02ff5747ddd357166d4278ed7a6d825024adc1 +Author: Ludovic Rousseau +Date: Wed Sep 20 14:01:14 2006 +0000 + + IFDHGetCapabilities(): add support of SCARD_ATTR_VENDOR_NAME + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2168 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit f7a8e89123ca1981267f1214a5be14aefe0372d0 +Author: Ludovic Rousseau +Date: Wed Sep 20 13:40:19 2006 +0000 + + add support for SCARD_ATTR_VENDOR_IFD_VERSION tag used by + SCardGetAttrib() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2166 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 6 ++++-- + src/ifdhandler.c | 9 +++++++++ + 2 files changed, 13 insertions(+), 2 deletions(-) + +commit a6b39170b6930a60870e3f189ceb73396d834b93 +Author: Ludovic Rousseau +Date: Wed Sep 20 13:39:23 2006 +0000 + + Perl script to convert a version format from "1.2.3-svn-xyz" to "0x01020003" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2165 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/convert_version.pl | 31 +++++++++++++++++++++++++++++++ + 1 file changed, 31 insertions(+) + +commit d5661c7227893883f19c2cbeb1b3ce2cab1700da +Author: Ludovic Rousseau +Date: Thu Sep 14 20:02:00 2006 +0000 + + update OmniKey URLs + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2163 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +commit 4bed513053c4affec3103da7ec1084d5013a8336 +Author: Ludovic Rousseau +Date: Thu Sep 14 19:58:29 2006 +0000 + + the OmniKey 5125 was a 5121 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2162 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 5cad273bd46d43f86c11487b5f90edcdf8459440 +Author: Ludovic Rousseau +Date: Thu Sep 14 19:55:24 2006 +0000 + + The reader was a 5121 in fact + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2161 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/{CardMan5125.txt => CardMan5121.txt} | 0 + readers/supported_readers.txt | 2 +- + 2 files changed, 1 insertion(+), 1 deletion(-) + +commit 41e0bf12741f48c0a3d81a1b096b2b6a7ff06867 +Author: Ludovic Rousseau +Date: Mon Sep 11 07:01:55 2006 +0000 + + do not #include the tested .h file since it is already included by the + macro. A double inclusion fails with SuSE gcc 4.1.0 with fdopen: Bad + file descriptor + + Thanks to Byron Johnson for the bug report + see http://www.mail-archive.com/muscle@lists.musclecard.com/msg05632.html + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2156 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +commit 16e052977df60266dc7f3c1ba42c1c56eca76807 +Author: Ludovic Rousseau +Date: Sun Sep 10 20:00:47 2006 +0000 + + add a note about Alcor Micro AU9520 firmware 1.01 bug (time request + not forwarded) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2155 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + 1 file changed, 2 insertions(+) + +commit 67b069549c1fc35405789674b01a105b06692d4f +Author: Ludovic Rousseau +Date: Sun Sep 10 19:58:02 2006 +0000 + + Bogus_firm[]: firmware 1.01 for Alcor AU9520 is bogus. The time request + of the card is not forwarded to the host by the reader. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2154 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 1 + + 1 file changed, 1 insertion(+) + +commit 6177084e9865d65f40103c386d17c5b237c50d86 +Author: Ludovic Rousseau +Date: Sun Sep 10 19:56:23 2006 +0000 + + new firmware (1.02) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2153 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/AU9520.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 2429ab95e79b0b0a0ebf58871feb5daa7de9a236 +Author: Ludovic Rousseau +Date: Wed Sep 6 20:06:58 2006 +0000 + + remove trailing spaces at end of lines + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2152 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 2 +- + src/ccid.h | 2 +- + src/ccid_serial.c | 26 +++++++++++++------------- + src/ccid_usb.c | 8 ++++---- + src/commands.c | 8 ++++---- + src/debug.h | 4 ++-- + src/defs.h | 2 +- + src/ifdhandler.c | 20 ++++++++++---------- + src/openct/proto-t1.c | 10 +++++----- + src/parse.c | 16 ++++++++-------- + src/towitoko/atr.c | 32 ++++++++++++++++---------------- + src/towitoko/pps.c | 2 +- + 12 files changed, 66 insertions(+), 66 deletions(-) + +commit 6197f0a2a2cb4f7cf0bc8a8a18660a9e3773a1d0 +Author: Ludovic Rousseau +Date: Wed Sep 6 13:49:40 2006 +0000 + + IFDHICCPresence(): correctly support the removal and insertion between + two consecutive IFDHICCPresence() calls + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2150 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) + +commit c408dd5db5aab9566dd9f1f8c191252c739b4b73 (tag: ccid-1.1.0) +Author: Ludovic Rousseau +Date: Fri Aug 11 17:20:57 2006 +0000 + + release 1.1.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2135 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 20 ++++++++++++++++++++ + configure.in | 2 +- + 2 files changed, 21 insertions(+), 1 deletion(-) + +commit 9d7091faca4c84e6423c18222f57c74627548d48 +Author: Ludovic Rousseau +Date: Fri Aug 11 17:15:28 2006 +0000 + + use ./configure --enable-twinserial to compile and install the the + driver for the GemPC Twin serial + + Thanks to Wolfgang Glas for the idea + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2134 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 11 +++++++++++ + src/Makefile.am | 11 +++++++---- + 2 files changed, 18 insertions(+), 4 deletions(-) + +commit 69efedf8447bd6e35eecaceccfb3087e01eede0a +Author: Ludovic Rousseau +Date: Fri Aug 11 16:10:28 2006 +0000 + + add id3 Semiconductors CL1356T in the "should work but unsuported" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2133 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 3 +++ + readers/CL1356T.txt | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 3 files changed, 54 insertions(+) + +commit 2e520e24a7a6c724c9fb01294d1d2751c0771f29 +Author: Ludovic Rousseau +Date: Fri Aug 11 16:03:39 2006 +0000 + + Regenerate + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2132 0ce88b0d-b2fd-0310-8134-9614164e65ea + + config.h.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 13cd89ea728f7e1ba13208718cc16e613b6a9218 +Author: Ludovic Rousseau +Date: Thu Aug 10 22:31:08 2006 +0000 + + Add iDream (or THRC2002-2) to the "Unsupported or partly supported CCID + readers" list. + + Thanks to Dr Jean-Pierre Szikora for the report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2131 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 12 +++++++++--- + readers/Makefile.am | 1 + + readers/iDream.txt | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 60 insertions(+), 3 deletions(-) + +commit e5a339811855f198fddecdc3b49c48c890c1c92d +Author: Ludovic Rousseau +Date: Wed Aug 9 07:17:31 2006 +0000 + + IFDHCreateChannelByName(): add a "warm up" sequence. This sequence is + sometimes needed when pcscd is restarted with the reader already + connected. We get some "usb_bulk_read: Resource temporarily unavailable" + on the first few tries. It is an empirical hack + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2130 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +commit f9954021eab156f065bf5d51087a8cadf2550d08 +Author: Ludovic Rousseau +Date: Mon Aug 7 10:05:40 2006 +0000 + + CMD_BUF_SIZE should not include a byte for the cmd. This definition was + reused as-is from the ifd-gempc source code. + + Thanks to Wolfgang Glas for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2123 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/defs.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 449dd8b902306ac4268864b926a8207e5010411e +Author: Ludovic Rousseau +Date: Thu Aug 3 13:14:27 2006 +0000 + + IFDHICCPresence(): check the value returned by CmdEscape() in the + SCR331-DI contactless reader familly code. + + Byg detected by using __attribute__((warn_unused_result)) also used as + __must_check by the Linux kernel + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2122 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +commit bb58ac6b407de2dd10e06daf79fac76d676365ba +Author: Ludovic Rousseau +Date: Thu Aug 3 13:12:20 2006 +0000 + + change the prototype of ReleaseReaderIndex() to return void since he + function always returned 0 and the returned value was never checked + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2121 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/utils.c | 4 +--- + src/utils.h | 2 +- + 2 files changed, 2 insertions(+), 4 deletions(-) + +commit dfecd8324e2a2df47a468175c5f3d5483a1fccdc +Author: Ludovic Rousseau +Date: Thu Aug 3 10:04:01 2006 +0000 + + SecurePINVerify()/SecurePINModify(): the USB timeout shall be greater + than the reader timeout so we get the reader answer. I use a margin of + 10 seconds. + + Thanks to Gerald Richter for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2120 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit eb289efcc0ff63d99d863eea9e448d9c345dba00 +Author: Ludovic Rousseau +Date: Tue Aug 1 20:05:22 2006 +0000 + + ReadUSB(): check that usbDevice[reader_index].dev->bus is still non-NULL + (as we do in WriteUSB()) before dereferencing it in the debug message. + + Thanks to Michael Wegner for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2119 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +commit 324de0ebf47b8a8cd163048bfe0b2e709d247e52 +Author: Ludovic Rousseau +Date: Tue Aug 1 07:13:50 2006 +0000 + + Exit the ./configure script if some include files are not found + + Use AC_MSG_ERROR() instead of AC_MSG_WARN() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2118 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 879cc1f696b50e9b2fe89c70d37130f2d15fba9a +Author: Ludovic Rousseau +Date: Mon Jul 31 15:11:07 2006 +0000 + + regenerate + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2117 0ce88b0d-b2fd-0310-8134-9614164e65ea + + config.h.in | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 071bc295c9c5585a36171d30c1df079e4a6f0742 +Author: Ludovic Rousseau +Date: Mon Jul 31 15:10:48 2006 +0000 + + use ntohl/htonl from arpa/inet.h since the tag value for + IOCTL_FEATURE_VERIFY_PIN_DIRECT and IOCTL_FEATURE_MODIFY_PIN_DIRECT + _shall_ be encoded in big endian as documented in PCSC v2 part 10 ch 2.2 + page 2. + + The applications using this feature shall be updated (to respect the + PCSC specification) + + Thanks to Ulrich Vogl for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2116 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + examples/scardcontrol.c | 5 +++-- + src/ifdhandler.c | 5 +++-- + 3 files changed, 7 insertions(+), 5 deletions(-) + +commit 62b74bb82df30ceda778dfa2d70584780a896d28 +Author: Ludovic Rousseau +Date: Wed Jul 12 09:52:30 2006 +0000 + + CCID_Receive(): check that we received at least enough bytes to test + cmd[STATUS_OFFSET]. + + usb_bulk_read() will return 0 bytes without error in case of timeout + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2110 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit ebc4ffef17684632fb789d0272a24a1548ee435d +Author: Ludovic Rousseau +Date: Wed Jul 12 08:30:26 2006 +0000 + + use LPSTR instead of LPTSTR (deprecated) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2109 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 688d0f0e6201f30e441858e762cf330ad148dce7 +Author: Ludovic Rousseau +Date: Wed Jul 12 08:21:07 2006 +0000 + + SetParameters(): do not fail if the command fails to set a parameter + that is not changeable by the CCID + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2108 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +commit 9c56acd44bc5b7d4c2d20a1f3f78b8f33f750b99 +Author: Ludovic Rousseau +Date: Tue Jul 11 18:35:25 2006 +0000 + + correct a typo in a comment + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2107 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 7fa72cf82450e8b50d9e912f443160af2a7dc49a +Author: Ludovic Rousseau +Date: Sun Jul 9 15:03:18 2006 +0000 + + add Alcor Micro AU9520 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2101 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 + + readers/AU9520.txt | 109 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 ++ + 3 files changed, 114 insertions(+) + +commit b5778a510bf4fbfd0e64d7366e0d0f6e9d46c6d8 +Author: Ludovic Rousseau +Date: Sun Jul 9 14:50:20 2006 +0000 + + add id3 Semiconductors CL1356D + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2100 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 3 +++ + readers/id3_CL1356D.txt | 50 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 4 ++++ + 3 files changed, 57 insertions(+) + +commit d30ed8fa025e070062a21237430ce659a127fca1 +Author: Ludovic Rousseau +Date: Tue Jul 4 20:07:01 2006 +0000 + + update comment for size_t + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2099 0ce88b0d-b2fd-0310-8134-9614164e65ea + + config.h.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 289ba19ea24c0277397b172a17fef83b154453e4 +Author: Ludovic Rousseau +Date: Tue Jul 4 07:11:43 2006 +0000 + + make pcscd detect a buffer overflow when the receiving buffer is too + small instead of silently ignoring the detected problem. This problem + only occured with readers supporting Extended APDU. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2098 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +commit 67e9499dc26b9e1d9d101a096007eda9f8d3aaf2 +Author: Ludovic Rousseau +Date: Tue Jul 4 07:06:10 2006 +0000 + + ReadUSB(): be sure we have read enough bytes before checking for frame + detectation + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2097 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 68d3a5cf5302634e6f3d83be2e3551e97d8ca158 +Author: Ludovic Rousseau +Date: Mon Jul 3 14:56:08 2006 +0000 + + CmdXfrBlock(): remove the unused clean_up_and_return goto label + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2096 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 1 - + 1 file changed, 1 deletion(-) + +commit ce81fa9c6aa72909bdd1fa53dc446f37e79b4e89 +Author: Ludovic Rousseau +Date: Mon Jul 3 14:54:59 2006 +0000 + + CmdXfrBlock(): call CmdXfrBlockAPDU_extended() if the reader supports + Extended APDU + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2095 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +commit 265ae8702bc7c800cf700daf07cb91fe941bec21 +Author: Ludovic Rousseau +Date: Mon Jul 3 14:21:15 2006 +0000 + + add CmdXfrBlockAPDU_extended() to support Extended APDU readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2094 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 124 insertions(+) + +commit 2f5c5712484f6fae2b5c5218aed33861292102a2 +Author: Ludovic Rousseau +Date: Mon Jul 3 14:03:58 2006 +0000 + + CCID_Receive(): return the value of bChainParameter in *chain_parameter + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2093 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 5 +++++ + 1 file changed, 5 insertions(+) + +commit b9ea66a7619fbdec166aaf59aec6c1fb576dfdee +Author: Ludovic Rousseau +Date: Mon Jul 3 14:00:55 2006 +0000 + + CmdXfrBlockTPDU_T1(): also log the length of the reception buffer + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2092 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 556113e1cd387dfec5926f3eba3386469a7fb88a +Author: Ludovic Rousseau +Date: Mon Jul 3 13:59:13 2006 +0000 + + use CCID_Receive() with the new API (use NULL as chain_parameter) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2091 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 12 ++++++------ + src/openct/proto-t1.c | 6 +++--- + src/towitoko/pps.c | 2 +- + 3 files changed, 10 insertions(+), 10 deletions(-) + +commit b8e89a2d7d74c050ac221d8b2ec6cc4991a2950d +Author: Ludovic Rousseau +Date: Mon Jul 3 13:56:42 2006 +0000 + + CCID_Receive() has a new parameter: chain_parameter + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2090 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 +- + src/commands.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 8084bef804b241bbc99f6559fdf6c1b811340cf3 +Author: Ludovic Rousseau +Date: Mon Jul 3 13:55:10 2006 +0000 + + add #define CHAIN_PARAMETER_OFFSET + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2089 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.h | 1 + + 1 file changed, 1 insertion(+) + +commit 507144aa80e6da0dd9e9ae25d8ca691003735ac2 +Author: Ludovic Rousseau +Date: Mon Jul 3 13:44:28 2006 +0000 + + move the "command length too big" checks from CmdXfrBlock() to + CmdXfrBlockTPDU_T0() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2088 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 35 +++++++++++++++++------------------ + 1 file changed, 17 insertions(+), 18 deletions(-) + +commit 7bdb15dd42344346870da8e6a3e237c5d3824aba +Author: Ludovic Rousseau +Date: Mon Jul 3 13:36:49 2006 +0000 + + CCID_Transmit(): log if the transmit buffer is too big + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2087 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit e2806f08e5365be49e6dce1f74c306557faae5ac +Author: Ludovic Rousseau +Date: Mon Jul 3 13:15:59 2006 +0000 + + CCID_Receive(): use <= instead of < to detect a reception buffer overrun + and log an error if it occurs + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2086 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 1339b4c838d0e3f42518fd84c7b9d4db441d9fff +Author: Ludovic Rousseau +Date: Mon Jul 3 12:57:50 2006 +0000 + + ccid_open_hack(): the CL1356D firmware needs some time to initialize. + Wait 1 second here + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2085 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 83e6b553ac88cbaab8f897c9f64a9df83e4f7eb8 +Author: Ludovic Rousseau +Date: Mon Jul 3 12:56:13 2006 +0000 + + add #define CL1356D + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2084 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + 1 file changed, 1 insertion(+) + +commit d0ecc183a8947964c15eefac03be8755f2f39740 +Author: Ludovic Rousseau +Date: Mon Jul 3 12:51:59 2006 +0000 + + ReadUSB(): detect and ignore duplicated CCID frames + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2083 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +commit da797041d9497fef1c6004a33ce8914b458e393b +Author: Ludovic Rousseau +Date: Fri Jun 30 14:04:33 2006 +0000 + + ccid_error(): display the value of the Unknown CCID error code + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2082 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 0b46c9a7abe919791e04d8e9ce0cf3fa9cc5026a +Author: Ludovic Rousseau +Date: Thu Jun 8 08:36:49 2006 +0000 + + add support of FreeBSD + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2078 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 862e10d7a8645fec3067cb746ecdc881a62cf95c +Author: Ludovic Rousseau +Date: Thu May 25 20:48:11 2006 +0000 + + update the licence from GPL to LGPL + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2055 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f20a8cfa1faabde3dbbf69a8a98aafb4f9f51200 +Author: Ludovic Rousseau +Date: Fri May 19 12:18:49 2006 +0000 + + SCM SPR 532 with firmware < 5.10 has problems + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2048 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit dffac9b0146cd1fadd378bea42a03fabe975ef94 +Author: Ludovic Rousseau +Date: Fri May 19 11:58:33 2006 +0000 + + update with firmware 5.10 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2047 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SPR532.txt | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 13ca21b5d4b3b07c0111da667d078b1718250e1e +Author: Ludovic Rousseau +Date: Fri May 19 11:56:18 2006 +0000 + + t1_transceive(): add a overrun debug message if we received more bytes + than we can store. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2046 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit fb75847b1081088fe4dac2f5cf7755dd1a5d215a +Author: Ludovic Rousseau +Date: Fri May 19 11:53:54 2006 +0000 + + t1_transceive(): add a debug message if we are in state DEAD. The card + must be reset first. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2045 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit ff4203df350fb3dbaf1a02064c18db8e4eaf4f21 +Author: Ludovic Rousseau +Date: Tue May 16 22:00:31 2006 +0000 + + add Actividentity (ActiveCard) Activkey Sim + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2044 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ActivkeySim.txt | 49 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 50 insertions(+) + +commit 36a6d6132ee120c6f849d87a79ad03ce37d6c7a7 +Author: Ludovic Rousseau +Date: Wed May 10 20:53:49 2006 +0000 + + correct a typo in a comment + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2041 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bbe3efdab5cf099cf134fe8c8ca055e5b21dce63 +Author: Ludovic Rousseau +Date: Thu May 4 13:14:56 2006 +0000 + + Use a timeout of 0.1 second instead of 0 for waiting characters from the + keyboard + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2039 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit d3a984fd7d48c6578222e05d63c488ebcea080df +Author: Ludovic Rousseau +Date: Thu May 4 12:13:47 2006 +0000 + + add C3PO LTC31 (new model, USB product id 0x0006) in the supported list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2038 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 3 ++- + readers/supported_readers.txt | 1 + + 2 files changed, 3 insertions(+), 1 deletion(-) + +commit d00b4737624e48e6da3d0d24affd09f5fc52bc94 +Author: Ludovic Rousseau +Date: Thu May 4 11:33:35 2006 +0000 + + add "HP USB Smart Card Keyboard" in the "Should work but untested by + me:" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2037 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/supported_readers.txt | 2 ++ + 2 files changed, 4 insertions(+) + +commit 68f3fcb74cb2ccd7aec41928cbb78d14512086d0 +Author: Ludovic Rousseau +Date: Thu May 4 11:31:49 2006 +0000 + + add HPUSBSmartCardKeyboard.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2036 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/HPUSBSmartCardKeyboard.txt | 53 ++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 54 insertions(+) + +commit d42b02b18b9de0c32f1f4f628b0577bed436ba2f +Author: Ludovic Rousseau +Date: Wed May 3 20:48:48 2006 +0000 + + ccid_open_hack(): add SCM SCR331-DI-NTTCOM in the list of dual slots + contactless readers hack + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2035 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 9cb97482a96add529083066e505b4fc254414cf1 +Author: Ludovic Rousseau +Date: Wed May 3 20:18:35 2006 +0000 + + add OmniKey CardMan 3021 in the "Should work but untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2034 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/CardMan3021.txt | 166 ++++++++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 3 files changed, 168 insertions(+) + +commit b211c9f4cc2f71c2e38434936c02690b66bb4f5c +Author: Ludovic Rousseau +Date: Wed May 3 17:46:38 2006 +0000 + + add LTC31 (new version) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2033 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/LTC31v2.txt | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 51 insertions(+) + +commit f041c02ce96ea153ce79beb4c57bf95b7c75c6de +Author: Ludovic Rousseau +Date: Wed May 3 15:47:53 2006 +0000 + + I used the MSB instead of LSB in parsing dwSynchProtocols + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2032 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 660021e5949df92bfe57bebeb62566710d571435 +Author: Ludovic Rousseau +Date: Sun Apr 23 18:33:20 2006 +0000 + + update the Free Software Foundation postal address + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2026 0ce88b0d-b2fd-0310-8134-9614164e65ea + + COPYING | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 689fad8905063972b5c2736cc34507da3daa6411 +Author: Ludovic Rousseau +Date: Sat Apr 22 16:00:28 2006 +0000 + + add $(PROVIDED_BY_PCSC) to libccidtwin_la_SOURCES so that libccidtwin + uses its own log_xxd/log_msg when configured with --disable-pcsclite + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2022 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit a6c812e3f75273ae9a25a4c64832b1127487f4eb +Author: Ludovic Rousseau +Date: Sat Apr 22 15:54:22 2006 +0000 + + add $(TOKEN_PARSER) to libccidtwin_la_SOURCES + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2021 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f16c909b3da4869eb00a221e3907001d1bb3295d (tag: ccid-1.0.1) +Author: Ludovic Rousseau +Date: Sat Apr 22 15:31:05 2006 +0000 + + release 1.0.1 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2020 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 14 ++++++++++++++ + configure.in | 2 +- + 2 files changed, 15 insertions(+), 1 deletion(-) + +commit 0e8f484bd314bcdf0af61ccaa3cfe4072e5bfd85 +Author: Ludovic Rousseau +Date: Thu Apr 20 18:57:14 2006 +0000 + + declare the functions to export as EXTERNAL + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2019 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 23 ++++++++++++----------- + 1 file changed, 12 insertions(+), 11 deletions(-) + +commit 909efd9f44debbb00aca3016e5cf5f2951a744ac +Author: Ludovic Rousseau +Date: Thu Apr 20 14:39:52 2006 +0000 + + regenerate using the latest version of parse + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2017 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACR38U-CCID.txt | 9 ++--- + readers/CardMan3121.txt | 9 ++--- + readers/CryptoIdentity.txt | 9 ++--- + readers/GemPCKey.txt | 9 ++--- + readers/GemPCTwin.txt | 9 ++--- + readers/KAAN_Advanced.txt | 11 +++--- + readers/KAAN_Base.txt | 11 +++--- + readers/KAAN_SIM_III.txt | 11 +++--- + readers/LTC31.txt | 9 ++--- + readers/MySmartPad.txt | 1 - + readers/Oz776S.txt | 9 ++--- + readers/SCR331-DI.txt | 63 +++---------------------------- + readers/SCR331.txt | 11 +++--- + readers/SCR3310.txt | 11 +++--- + readers/SCR335.txt | 11 +++--- + readers/SCR355.txt | 1 - + readers/SIM_Pocket_Combo.txt | 18 ++++----- + readers/SPR532.txt | 1 - + readers/Verisign_secure_storage_token.txt | 1 - + readers/mIDentity.txt | 11 +++--- + readers/sid800.txt | 9 ++--- + 21 files changed, 88 insertions(+), 146 deletions(-) + +commit 6c3128ec041e930ada3125d56db4d4dab6d10e1c +Author: Ludovic Rousseau +Date: Thu Apr 20 13:34:00 2006 +0000 + + add OmniKey CardMan 3621 in the "Should work but untested by me" list + Thanks to Bruce Stephens. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2016 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 + + readers/CardMan3621.txt | 167 ++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + readers/supported_readers.txt | 1 + + 4 files changed, 171 insertions(+) + +commit 58dbf5f5176f7cb2c3c064ef2bfaea0942122c44 +Author: Ludovic Rousseau +Date: Tue Apr 18 15:05:33 2006 +0000 + + declare get_ccid_usb_interface() as EXTERNAL since this function is used + by src/parse + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2014 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit bf0598d25a55d8e574c3ef886aa72a4fc9755f86 +Author: Ludovic Rousseau +Date: Tue Apr 18 15:04:58 2006 +0000 + + #include "misc.h" so that ifdhandler.h functions are declared EXTERNAL + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2013 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 1 + + 1 file changed, 1 insertion(+) + +commit 7bf7484e8a18c1ac79c7836df40f10a50914c057 +Author: Ludovic Rousseau +Date: Tue Apr 18 15:03:41 2006 +0000 + + add $(SYMBOL_VISIBILITY) to libccid_la_CFLAGS and libccidtwin_la_CFLAGS + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2012 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit a15f1c4652c6602818d10887db3055a70eda0c36 +Author: Ludovic Rousseau +Date: Tue Apr 18 15:03:10 2006 +0000 + + add code to detect the support of -fvisibility=hidden + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2011 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +commit 9f9037934cc1a2e62db8391f5188ea4f260edeab +Author: Ludovic Rousseau +Date: Tue Apr 18 12:29:03 2006 +0000 + + use tokenparser.l and parser.h from pcsc-lite (using a symlink in + subversion). So we also need strlcpy.c, strlcpycat.h and misc.h + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2007 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 5 ++++- + src/misc.h | 1 + + src/parser.h | 1 + + src/strlcpy.c | 1 + + src/strlcpycat.h | 1 + + src/tokenparser.l | 1 + + 6 files changed, 9 insertions(+), 1 deletion(-) + +commit de24807b2d8d9e04bcfcaa2a589b04b3b029f16d +Author: Ludovic Rousseau +Date: Tue Apr 18 12:27:59 2006 +0000 + + remove + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2006 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parser.h | 22 -------- + src/tokenparser.l | 146 ------------------------------------------------------ + 2 files changed, 168 deletions(-) + +commit bdead349f796af6dc1c682c2d9f46f33358366ea +Author: Ludovic Rousseau +Date: Tue Apr 18 12:10:29 2006 +0000 + + always use our own tokenparser.l even when pcsc-lite is used (do not use + LTPBundleFindValueWithKey from pcscd) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2005 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 -- + src/Makefile.am | 11 ++--------- + 2 files changed, 2 insertions(+), 11 deletions(-) + +commit 60b54d52d03743c4226b9d8c7ff20d886a4774a0 +Author: Ludovic Rousseau +Date: Fri Apr 14 18:46:46 2006 +0000 + + add SCR3311.txt, SCR355.txt and SDI010.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2004 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +commit 05ffa7bc1ac962099262c964cba4aba0aab5a154 +Author: Ludovic Rousseau +Date: Fri Apr 14 18:45:18 2006 +0000 + + rename SSI010.txt in SDI010.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2003 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/{SSI010.txt => SDI010.txt} | 0 + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit 42acdbd615349761908e2d0e866573edcbcbebe5 +Author: Ludovic Rousseau +Date: Fri Apr 14 18:42:41 2006 +0000 + + firmwares for Athena ASE IIIe USBv2 and ASE IIIe KB USB were bogus. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2002 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 739518d1597424061d1b519ae1c661880af9f9b6 +Author: Ludovic Rousseau +Date: Fri Apr 14 18:41:37 2006 +0000 + + add ASE_IIIe.txt and ASEDrive_IIIe_KB.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2001 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 2 ++ + 1 file changed, 2 insertions(+) + +commit bb117049ecf0cee557e74e9d1e68ce2004c42041 +Author: Ludovic Rousseau +Date: Fri Apr 14 18:41:15 2006 +0000 + + add Athena ASE IIIe KB USB + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@2000 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/ASEDrive_IIIe_KB.txt | 52 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 3 files changed, 55 insertions(+) + +commit 41671aeea824ac1d60a7b048d6a8df4b23b9b4c0 +Author: Ludovic Rousseau +Date: Fri Apr 14 18:38:18 2006 +0000 + + update firmware version + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1999 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ASE_IIIe.txt | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit e02791f4ed99b5ba5c713d9a7249b49b875fecdd +Author: Ludovic Rousseau +Date: Tue Mar 28 06:55:31 2006 +0000 + + SecurePINVerify() and SecurePINModify(): Make sure + bEntryValidationCondition is valid + + The Cherry XX44 keyboard smart card reader crashes when a wrong value is + used + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1986 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +commit 8aa4a81a65ade053a2dc7c9a124f729a0270f24c +Author: Ludovic Rousseau +Date: Mon Mar 27 14:46:57 2006 +0000 + + Modify PIN: use a for() loop instead of 3 fgets() since we will not read + every "PIN" if the command is aborted + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1985 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 41 +++++++++++++++++++---------------------- + 1 file changed, 19 insertions(+), 22 deletions(-) + +commit f86a1866b79c7871ed799684ce5ad7accf276fd4 +Author: Ludovic Rousseau +Date: Mon Mar 27 14:39:48 2006 +0000 + + SecurePINVerify(): debug a debug message. use dw2i(TxBuffer, 15) instead + of just the first byte TxBuffer[15] + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1984 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 11e573011f6e713b9f99ff4c0993acec2df8b65e +Author: Ludovic Rousseau +Date: Mon Mar 27 14:38:35 2006 +0000 + + SecurePINModify(): separate the validation test in three different tests + and add a debug message for each test + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1983 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 20 +++++++++++++++++--- + 1 file changed, 17 insertions(+), 3 deletions(-) + +commit 7658bb72110a665ac96a7d925c5c4c087b0bdfba +Author: Ludovic Rousseau +Date: Mon Mar 27 14:23:30 2006 +0000 + + SecurePINVerify(): debug a debug message :-) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1982 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b4494ec4ac3fa4caff75609e7e23f0c1874d4593 +Author: Ludovic Rousseau +Date: Mon Mar 27 14:17:58 2006 +0000 + + SecurePINModify(): circumvent a bug in Cherry XX44 keyboard firmware + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1981 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + src/commands.c | 9 +++++++++ + 2 files changed, 10 insertions(+) + +commit be6045b1a03501e9922d93ae6ebf07b535ec6021 +Author: Ludovic Rousseau +Date: Tue Mar 21 21:06:54 2006 +0000 + + add Gemplus GemPC Card in the "supported" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1969 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + 1 file changed, 2 insertions(+) + +commit 7aad04198a5e010a5b5758381f84307f61cac5bf +Author: Ludovic Rousseau +Date: Tue Mar 21 19:25:15 2006 +0000 + + add Winbond Electronics W81E381 chipset + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1968 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/Makefile.am | 3 ++- + readers/Winbond.txt | 55 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 4 ++++ + 4 files changed, 63 insertions(+), 1 deletion(-) + +commit c33cbea8acd96bf68a28b91bfb8e45cd47f59a7f +Author: Ludovic Rousseau +Date: Tue Mar 21 08:50:03 2006 +0000 + + add SCM Micro SDI 010 in the "Should work" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1951 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + 1 file changed, 2 insertions(+) + +commit 455bce4e268f6029c3d73322cc7f1dd585f22778 +Author: Ludovic Rousseau +Date: Tue Mar 21 08:48:09 2006 +0000 + + add support for SCM SDI 010 contactless reader + + thanks to Oleg Makarenko for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1950 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SSI010.txt | 54 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + src/ccid.c | 2 ++ + src/ccid.h | 1 + + src/ifdhandler.c | 1 + + 5 files changed, 59 insertions(+) + +commit 5396501ef30f1858b69992df14aa79d176b89e24 +Author: Ludovic Rousseau +Date: Tue Mar 21 08:30:19 2006 +0000 + + add Axalto Reflex USB V3 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1949 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/AxaltoV3.txt | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + 2 files changed, 52 insertions(+) + +commit 881ea573d665628627527fcb3666164ba4a1c85d +Author: Ludovic Rousseau +Date: Mon Mar 20 08:45:51 2006 +0000 + + add Axalto Reflex USB v3 in the "should work" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1945 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/supported_readers.txt | 1 + + 2 files changed, 3 insertions(+) + +commit cf1bd8c6df142a56755b1c822f80419ccb4aee52 +Author: Ludovic Rousseau +Date: Mon Mar 20 08:20:00 2006 +0000 + + document --disable-multi-thread instead of --enable-multi-thread since + safe threading is used by default + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1944 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit 2da0b2b979f6cd81c5fa11e71fca0a98dc988f0e +Author: Ludovic Rousseau +Date: Mon Mar 20 08:16:26 2006 +0000 + + document --disable-pcsclite instead of --enable-pcsclite since pcsc-lite + is used by default + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1943 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +commit a1ad221f7051926c071265567ba2768f4b0fe3ef +Author: Ludovic Rousseau +Date: Mon Mar 20 08:04:22 2006 +0000 + + display the status "use libusb : yes/no" + + document --disable-libusb instead of --enable-libusb since libusb is + used by default. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1942 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +commit 59f54ae477d0e8bb97dbab7de5cba78c575cff2c +Author: Ludovic Rousseau +Date: Mon Mar 6 09:13:56 2006 +0000 + + use #if defined (__USB_H__) || defined (_SYS_USB_LIBUSB_USB_H) instead + of #ifdef __USB_H__ to support the Solaris libusb + + thanks to Iain MacDonnell for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1927 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b726099218b11407babd2ade7c7bdd94d63a6ed0 +Author: Ludovic Rousseau +Date: Mon Mar 6 09:12:44 2006 +0000 + + remove CFLAGS="$CFLAGS -Wall" since it is GCC specific + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1926 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 -- + 1 file changed, 2 deletions(-) + +commit 4570e6ef9708c11c81c347e7ca52ba4d273730f0 +Author: Ludovic Rousseau +Date: Mon Mar 6 09:09:19 2006 +0000 + + add support of Solaris + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1925 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 4 ++++ + 1 file changed, 4 insertions(+) + +commit e6475898991f0e9c9414c8e2823f7bb7e0b55d46 (tag: ccid-1.0.0) +Author: Ludovic Rousseau +Date: Fri Mar 3 17:21:52 2006 +0000 + + release 1.0.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1911 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 23 +++++++++++++++++++++++ + 1 file changed, 23 insertions(+) + +commit 4b58622b2d12c19ccdd61496c096376ae2e17872 +Author: Ludovic Rousseau +Date: Fri Mar 3 17:21:43 2006 +0000 + + version 1.0.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1910 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a472f39f78af21d8cea86dbe5fa311c27b103620 +Author: Ludovic Rousseau +Date: Fri Mar 3 17:20:43 2006 +0000 + + add OmniKey CardMan 3821 and CardMan 6121 in the "Should work but + untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1909 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 4 ++++ + 1 file changed, 4 insertions(+) + +commit b37e5c7556b43daf2f475fbad86675148b66e909 +Author: Ludovic Rousseau +Date: Fri Mar 3 17:10:57 2006 +0000 + + add OmniKey CardMan 3821 and CardMan 6121 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1908 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CardMan3821.txt | 170 ++++++++++++++++++++++++++++++++++++++++++ + readers/CardMan6121.txt | 166 +++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 2 + + readers/supported_readers.txt | 2 + + 4 files changed, 340 insertions(+) + +commit 08501670966dc7eae2d37a6a296db6dad0cd1e8c +Author: Ludovic Rousseau +Date: Fri Mar 3 13:21:00 2006 +0000 + + update the "Debug informations:" chapter. The two options comm and + periodic have been swaped + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1905 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit e319b70fca54d4c971aa2401235c4cb966d62805 +Author: Ludovic Rousseau +Date: Fri Mar 3 09:01:18 2006 +0000 + + new firmware (5.08) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1904 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CherrySmartTerminalST2XXX.txt | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +commit 916067e102ab2d8ad60502b32f9e1170bc5bbff3 +Author: Ludovic Rousseau +Date: Tue Feb 28 22:59:07 2006 +0000 + + add SCR333.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1903 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 1 + + readers/SCR333.txt | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 52 insertions(+) + +commit 2916e097b02e88f341ac74dd16a22baca56f65aa +Author: Ludovic Rousseau +Date: Tue Feb 28 08:39:08 2006 +0000 + + IFDHSetProtocolParameters(): if the card is in specific mode and request + a speed not supported by the reader we return IFD_COMMUNICATION_ERROR + instead of IFD_PROTOCOL_NOT_SUPPORTED so that pcsc-lite do not try to + talk to the card + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1886 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 61ba50e5df4fcf0f7b1a61fc5599a7a80a18f138 +Author: Ludovic Rousseau +Date: Fri Feb 24 17:14:25 2006 +0000 + + add URL for the Cherry SmartTerminal ST2000U + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1883 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit e0483a3300734bf91643ee0dd2e91b8d2ce2a207 +Author: Ludovic Rousseau +Date: Tue Feb 21 23:04:39 2006 +0000 + + - move the ActivCard USB reader 2.0 from "Should work but untested by me" + to "Unsupported or partly supported CCID readers" + - add the ActivCard USB reader 3.0 in the "Supported CCID readers" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1876 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +commit 17388389d49661291691973e569a6491bb8c3f37 +Author: Ludovic Rousseau +Date: Tue Feb 21 23:03:27 2006 +0000 + + the ActivCard V2 is bogus (problem with wMaxPacketSize size frames) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1875 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 1 + + 1 file changed, 1 insertion(+) + +commit c9e451a7ef5e80d32cdd83c1f424f81662b79229 +Author: Ludovic Rousseau +Date: Tue Feb 21 23:02:37 2006 +0000 + + distribute ActivCardV2.txt and ActivCardV3.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1874 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 2 ++ + 1 file changed, 2 insertions(+) + +commit c9aeab91a93c5ad5260943e8fe398ed0b7bac6f5 +Author: Ludovic Rousseau +Date: Tue Feb 21 23:02:15 2006 +0000 + + add ActivCard USB Reader 3.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1873 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 1 + + 1 file changed, 1 insertion(+) + +commit 4519d7c3bde010db98dee0565fa9cff8ae3a6e35 +Author: Ludovic Rousseau +Date: Tue Feb 21 23:01:31 2006 +0000 + + add ActivCard v2 and v3 descriptions + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1872 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ActivCardV2.txt | 53 +++++++++++++++++++++++++++++++++++++++++++++++++ + readers/ActivCardV3.txt | 51 +++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 104 insertions(+) + +commit aa804f1dd67b33168a4a1cdf2e2b6020cc79d912 +Author: Ludovic Rousseau +Date: Tue Feb 21 22:49:23 2006 +0000 + + correct the Perl regexp in ChangeLog rule + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1870 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 489f5c152133ad30482441cfbbf831ffa58beec4 +Author: Ludovic Rousseau +Date: Tue Feb 21 09:06:12 2006 +0000 + + add subversion revision in ChangeLog.svn + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1869 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a8e6d7c8ee36e4170469cdeefb02868e1744d3f9 +Author: Ludovic Rousseau +Date: Mon Feb 20 19:17:35 2006 +0000 + + add SCM SCR3320.txt and SCR3340.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1867 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 2 ++ + 1 file changed, 2 insertions(+) + +commit 2e6f5326c6181db9ecfbb0795295d568f6db5bb2 +Author: Ludovic Rousseau +Date: Mon Feb 20 19:17:15 2006 +0000 + + add SCM SCR3320 - Smart Card Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1866 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCR3320.txt | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 51 insertions(+) + +commit c7501731ab67aef49bd3fc80df506c51d5fb69f2 +Author: Ludovic Rousseau +Date: Mon Feb 20 19:16:49 2006 +0000 + + add SCR3340 - ExpressCard54 Smart Card Reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1865 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCR3340.txt | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 51 insertions(+) + +commit a29a448f9a19095e61a0e68588f7b66ceeab82a0 +Author: Ludovic Rousseau +Date: Tue Feb 7 19:21:46 2006 +0000 + + add "SCM SCR 3340 ExpressCard54" in the "Should work but untested by me" + list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1864 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/supported_readers.txt | 1 + + 2 files changed, 3 insertions(+) + +commit 678e01fc49181a57a66650400fcd56b4b9dd4d34 +Author: Ludovic Rousseau +Date: Tue Feb 7 09:48:40 2006 +0000 + + add Gemplus GemPC Express in the "Should work but untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1863 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + 1 file changed, 1 insertion(+) + +commit d5ca3c762db21412134948c11b2add7bae748ccd +Author: Ludovic Rousseau +Date: Tue Feb 7 09:47:01 2006 +0000 + + add Gemplus GemPC Express + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1862 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemPC_Express.txt | 89 +++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 1 + + readers/supported_readers.txt | 1 + + 3 files changed, 91 insertions(+) + +commit 29930d846c9221ba152c80d4331f1d1b2db7de21 +Author: Ludovic Rousseau +Date: Mon Feb 6 15:45:27 2006 +0000 + + rename POS Pro & SIM Pro to a more real name "Gemplus GemCore xxx" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1861 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 4aa3856382f867b44cae8a19cc5ee84d98bc63cf +Author: Ludovic Rousseau +Date: Mon Feb 6 15:44:27 2006 +0000 + + SecurePINVerify/SecurePINModify: get the data from a T=1 TPDU block only + if the exchange was successful (with special treatment for timeout and + cancel cases) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1860 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 42 ++++++++++++++++++++++++++++++++---------- + 1 file changed, 32 insertions(+), 10 deletions(-) + +commit 9a13ad9340abac49356492a43aa87d4a1b2154de +Author: Ludovic Rousseau +Date: Mon Feb 6 15:26:28 2006 +0000 + + SecurePINVerify(): move the prologue filing part to be homogenous with + SecurePINModify() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1859 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 51 ++++++++++++++++++++++++++------------------------- + 1 file changed, 26 insertions(+), 25 deletions(-) + +commit b90363b29b9f1176b554cda02adafabd332fde44 +Author: Ludovic Rousseau +Date: Mon Feb 6 15:23:41 2006 +0000 + + SecurePINModify(): add support of T=1 cards with TPDU readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1858 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 36 ++++++++++++++++++++++++++++++++++++ + 1 file changed, 36 insertions(+) + +commit 169223cd7f05961aeb356a0be2f8f309250c14f4 +Author: Ludovic Rousseau +Date: Mon Feb 6 15:14:01 2006 +0000 + + SecurePINVerify(): add support of T=1 cards with TPDU readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1857 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 37 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 37 insertions(+) + +commit e4627311d88bc5861bd0a2b44e17a785c16a0b32 +Author: Ludovic Rousseau +Date: Mon Feb 6 15:08:53 2006 +0000 + + export t1_build() and some constants + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1856 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 11 +---------- + src/openct/proto-t1.h | 10 ++++++++++ + 2 files changed, 11 insertions(+), 10 deletions(-) + +commit e78bdca76f11bdb21795c998a9694bfdefe92e78 +Author: Ludovic Rousseau +Date: Mon Feb 6 15:08:10 2006 +0000 + + IFDHSetProtocolParameters(): store the card protocol in + ccid_desc->cardProtocol + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1855 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 85e6e0929295597ea97ba5c8f8ac4aa1b5759c06 +Author: Ludovic Rousseau +Date: Mon Feb 6 15:07:32 2006 +0000 + + add a cardProtocol field to store the card protocol in use + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1854 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 4 ++++ + 1 file changed, 4 insertions(+) + +commit b4097d79b9ef024179b8a2f63b9b3236f4e1c91c +Author: Ludovic Rousseau +Date: Mon Jan 30 15:13:51 2006 +0000 + + add support for OpenBSD + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1846 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 78998dc75c9774efdae5c23d99c5eb21ce59acff +Author: Ludovic Rousseau +Date: Mon Jan 30 14:46:27 2006 +0000 + + use $(foo) instead of @foo@ to do not replace the values but the variables + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1845 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/Makefile.am | 4 ++-- + src/Makefile.am | 11 ++++++----- + 2 files changed, 8 insertions(+), 7 deletions(-) + +commit 3070188b57208ac9e45743bf52b9a48edf9fe214 +Author: Ludovic Rousseau +Date: Mon Jan 30 10:40:49 2006 +0000 + + when checking for PCSC exit with en error only if + /usr/local/lib/pkgconfig/libpcsclite.pc exists _and_ pkg-config is + installed + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1842 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 325f5b4666380e5f58562a84aac0932c7a19d1d6 +Author: Ludovic Rousseau +Date: Wed Jan 25 19:18:20 2006 +0000 + + add CardMan5125.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1841 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 1 + + 1 file changed, 1 insertion(+) + +commit 99a568e526bba35d25d4d513a36f3105ff752478 +Author: Ludovic Rousseau +Date: Wed Jan 25 19:16:59 2006 +0000 + + add OmniKey CardMan 5125 in the "Should work but untested by me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1840 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit f2c85072db5e9e78b84c102ff51fe794ded4fd78 +Author: Ludovic Rousseau +Date: Wed Jan 25 19:16:30 2006 +0000 + + add OmniKey CardMan 5125 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1839 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CardMan5125.txt | 165 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 166 insertions(+) + +commit 042e8ce52d9f78e4a2cfd6819b4ea16c616fc7da +Author: Ludovic Rousseau +Date: Tue Jan 24 22:10:51 2006 +0000 + + add SmartEpad + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1834 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 3 +++ + 1 file changed, 3 insertions(+) + +commit be8bfab7fa974fbe9ecee53092e2e3600474faa8 +Author: Ludovic Rousseau +Date: Tue Jan 24 16:37:23 2006 +0000 + + add SmartEpad (v 2.0) in the supported list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1833 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 9d4cb4174a86e5166fa6046ea5633fc3d7e5501f +Author: Ludovic Rousseau +Date: Tue Jan 24 16:32:14 2006 +0000 + + add support for the SmartEpad (v 2.0) reader (MYSMARTPAD) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1832 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 4 ++++ + src/ccid.h | 1 + + 2 files changed, 5 insertions(+) + +commit 713727d95bf3b48125c2dfdaca09e5f409b59b94 +Author: Ludovic Rousseau +Date: Tue Jan 24 16:17:12 2006 +0000 + + add MySmartPad.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1831 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 1 + + 1 file changed, 1 insertion(+) + +commit d0b8a1b6618222cd436b24011ebaa1292a608f40 +Author: Ludovic Rousseau +Date: Fri Jan 20 13:44:06 2006 +0000 + + move the SCM Micro SCR 3311 from the "should work" list to the + "supported" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1820 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 +- + readers/SCR3311.txt | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 52 insertions(+), 1 deletion(-) + +commit b18e86f7943440f6b0dd9f0bedb634d3b08df9ff +Author: Ludovic Rousseau +Date: Fri Jan 20 13:27:21 2006 +0000 + + rewrite to scan the devices ourself instead of calling + IFDHCreateChannel(). No need to have an updated Info.plist anymore. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1819 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 88 ++++++++++++++++++++++++++++++++++++++++--------------------- + 1 file changed, 58 insertions(+), 30 deletions(-) + +commit 967cb91aa98d888267892a46af769834baee0354 +Author: Ludovic Rousseau +Date: Fri Jan 20 13:25:56 2006 +0000 + + get_ccid_usb_interface(): use the same code for a device with 1 or >1 + interfaces + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1818 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 26 +++++++++----------------- + 1 file changed, 9 insertions(+), 17 deletions(-) + +commit 83eb18714506d25218db5fa8c174fa4171bc9445 +Author: Ludovic Rousseau +Date: Wed Jan 18 13:44:24 2006 +0000 + + add Gemplus GemPC PinPad, Gemplus GemCore POS Pro & Gemplus GemCore SIM Pro + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1815 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 3 +++ + 1 file changed, 3 insertions(+) + +commit 386fd2ba414ff1679b38f36508b24266fbd96de7 +Author: Ludovic Rousseau +Date: Wed Jan 18 13:40:30 2006 +0000 + + document the configuration of /etc/reader.conf for a GemPC PinPad, a + GemCore POS Pro or a GemCore SIM Pro + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1814 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 586ac08dbbe0ec10a1765e695f7b60c190d615c2 +Author: Ludovic Rousseau +Date: Wed Jan 18 11:01:17 2006 +0000 + + add GemCore SIM Pro + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1810 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemCoreSIMPro.txt | 180 ++++++++++++++++++++++++++++++++++++++++++++++ + readers/Makefile.am | 2 + + 2 files changed, 182 insertions(+) + +commit 80c195d624024e005ec1ba53a1382cd4e0e02fcc +Author: Ludovic Rousseau +Date: Wed Jan 18 10:55:34 2006 +0000 + + add GemCore POS Pro & Gemplus SIM Pro + --Cette ligne, et les suivantes ci-dessous, seront ignorées-- + + M readers/supported_readers.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1809 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 2 ++ + 1 file changed, 2 insertions(+) + +commit 7a252cae622eb1eaf82da12a5e74d01594b90a65 +Author: Ludovic Rousseau +Date: Wed Jan 18 10:25:34 2006 +0000 + + add support of GemCore SIM Pro and GemCore POS Pro (serial and USB). + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1808 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 16 ++++ + src/ccid_serial.c | 271 ++++++++++++++++++++++++++++++++++++++--------------- + src/ccid_usb.c | 11 +++ + src/defs.h | 3 +- + src/reader.conf.in | 17 ++-- + 5 files changed, 236 insertions(+), 82 deletions(-) + +commit dcf192d7942c8bc8f2e5cf83870c306dee8611c7 +Author: Ludovic Rousseau +Date: Wed Jan 18 10:24:09 2006 +0000 + + CloseUSB(): free the allocated arrayOfSupportedDataRates only for the + pimary slot. The other slots of the same reader either point to the + same array or point to a statically allocated array. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1807 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +commit 95227f3b13d7f4eff8fcd1652563804d66106985 +Author: Ludovic Rousseau +Date: Wed Jan 18 09:24:15 2006 +0000 + + IFDHSetProtocolParameters(): exit the while if you find a correct speed + in the case of a card too fast + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1806 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit b0951ca06d26210b19dff41f438daa41dd8f9245 +Author: Ludovic Rousseau +Date: Wed Jan 18 07:38:06 2006 +0000 + + ccid_open_hack(): update the spanish PIN Pad string since the number of + remaining tries in always displayed at the first character + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1805 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5b93939f40b21b4cc74457e1fe3e555ef812811e +Author: Ludovic Rousseau +Date: Tue Jan 17 19:57:11 2006 +0000 + + OpenUSBByName(): check that usbDevice[previous_reader_index].dev is + still valid before dereferencing it + + Thanks to Martin Paljak for the bug report + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1804 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 1 + + 1 file changed, 1 insertion(+) + +commit 247f011387f98cdb1d554ab71593296e9e47b2cc +Author: Ludovic Rousseau +Date: Tue Jan 17 19:49:49 2006 +0000 + + use @PTHREAD_CFLAGS@ and @PTHREAD_LIBS@ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1803 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit 4406b3b71d516b06c9fff34d6ec1c7758c00b745 +Author: Ludovic Rousseau +Date: Tue Jan 17 19:49:14 2006 +0000 + + use LIBS instead of LDLIBS when checking if pcsc-lite is installed + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1802 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +commit 773d5bf347a074c3bad9505e0e662946c092fd7d +Author: Ludovic Rousseau +Date: Tue Jan 17 13:41:26 2006 +0000 + + OpenSerialByName(): call CloseSerial() if the "Get firmware" or "Change + card movement notification" command failed + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1801 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 25a49c69ec26b3f735cac7526ddd56b9d4766818 +Author: Ludovic Rousseau +Date: Mon Jan 16 13:45:50 2006 +0000 + + SecurePINVerify(): bug circumvention for the GemPC Pinpad + (bNumberMessage) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1800 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 17 ++++++++++++++++- + src/commands.h | 2 +- + 2 files changed, 17 insertions(+), 2 deletions(-) + +commit ac0688858f8e9d0b0680aa3cdddf13152c88218d +Author: Ludovic Rousseau +Date: Thu Jan 12 21:51:25 2006 +0000 + + ccid_open_hack(): use { } around DEBUG_COMM() in an if-else since + DEBUG_COMM() is not a function but an multi-instruction macro + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1799 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 320457f552e4e76e34270656d86b07cad5d33354 +Author: Ludovic Rousseau +Date: Wed Jan 11 16:03:07 2006 +0000 + + add Gemplus GemPC Pinpad + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1798 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/GemPCPinpad.txt | 92 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 93 insertions(+) + +commit e9899861ba355cf2863a8cc69b8d97afbcb9658d +Author: Ludovic Rousseau +Date: Wed Jan 11 15:32:37 2006 +0000 + + IFDHSetProtocolParameters(): if the card is faster than the reader + (TA1=97 for example) we try to use a no so bad speed (corresponding to + TA1=96, 95 or 94) instead of the default speed of TA1=11 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1797 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 47 insertions(+) + +commit 7f8ece553ad9323a4ff228156b2ccc05a43181f5 +Author: Ludovic Rousseau +Date: Wed Jan 11 14:56:24 2006 +0000 + + ccid_open_hack(): load the localisation strings according to LANG + environment variable. Languages supported: de, en, es, fr, it + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1796 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 115 insertions(+) + +commit c48a7e3c94cec0618a1ab4349b39eff7283e95c1 +Author: Ludovic Rousseau +Date: Wed Jan 11 10:39:54 2006 +0000 + + move the comment about APDU mode from ccid_open_hack() to Info.plist + since it is configured there + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1795 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist | 6 ++++-- + src/ccid.c | 4 ---- + 2 files changed, 4 insertions(+), 6 deletions(-) + +commit 0cec33cd813c101e49ae2d20987741dbe20b0264 +Author: Ludovic Rousseau +Date: Wed Jan 11 10:34:06 2006 +0000 + + SecurePINModify(): bug circumvention for the GemPC Pinpad + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1794 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + src/commands.c | 22 ++++++++++++++++++++++ + 2 files changed, 23 insertions(+) + +commit cee9eb8bcf6461c52dc4621d6ec0bfb4c5919b3b +Author: Ludovic Rousseau +Date: Wed Jan 11 10:16:48 2006 +0000 + + SecurePINModify(): modify the user command to make the SPR 532 and + Cherry ST 2000C firmware happy + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1793 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 42 ++++++++++++++++++++++++++++-------------- + src/commands.h | 2 +- + 2 files changed, 29 insertions(+), 15 deletions(-) + +commit b0958ef6d724ef0146cf787668cf6db157f98492 +Author: Ludovic Rousseau +Date: Wed Jan 11 09:14:47 2006 +0000 + + OpenUSBByName(): use log level INFO instead of CRITICAL to display + copyright information + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1792 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 1ae23fa80e1c17cdc428948022969b363edb58bf +Author: Ludovic Rousseau +Date: Wed Jan 11 09:08:43 2006 +0000 + + release the allocated ressources only when the last slot of a multi-slot + reader is closed + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1791 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 32 ++++++++++++++++++++++++-------- + 1 file changed, 24 insertions(+), 8 deletions(-) + +commit a712cce29d6e52ccb74537af93ea2e97fccc9de6 +Author: Ludovic Rousseau +Date: Wed Jan 11 07:51:13 2006 +0000 + + allow to select the power on voltage using Info.plist instead of + recompiling the source code + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1790 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist | 6 ++++++ + src/ccid.h | 16 ++++++++++++++++ + src/commands.c | 22 +++++----------------- + src/commands.h | 2 +- + src/ifdhandler.c | 24 +++++++++++++++++++++++- + 5 files changed, 51 insertions(+), 19 deletions(-) + +commit a9eaf931004064c198e66e321bd668ad8e981d60 +Author: Ludovic Rousseau +Date: Tue Jan 3 20:03:42 2006 +0000 + + add SCM Micro SCR 3311 and 3320 in the "Should work but untested by me" + list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1789 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 8 ++++++-- + readers/supported_readers.txt | 2 ++ + 2 files changed, 8 insertions(+), 2 deletions(-) + +commit fa2fc14b26d49ad9c223bf36800595aa5938fe3e +Author: Ludovic Rousseau +Date: Tue Jan 3 18:46:34 2006 +0000 + + add URL for SCM Micro SCR 3310 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1788 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 5fea05cc745e65e7f74cfc1db3fa2dd60e2eff1d +Author: Ludovic Rousseau +Date: Tue Jan 3 18:45:20 2006 +0000 + + add support for SCM Micro SCR 355 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1787 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/SCR355.txt | 52 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 3 files changed, 54 insertions(+) + +commit 3ac9f7a0dc5b447bdc2bcb9d51307bdfe28f9e47 +Author: Ludovic Rousseau +Date: Mon Jan 2 09:19:03 2006 +0000 + + use ACR38U-CCID.txt instead of ACR38.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1785 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3b1c6d750e554285180c45328712b2375553009d +Author: Ludovic Rousseau +Date: Mon Jan 2 08:25:22 2006 +0000 + + use pkg-config for libusb if available + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1784 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 20 ++++++++++++-------- + 1 file changed, 12 insertions(+), 8 deletions(-) + +commit 38fb3a1a834c75a1f405fdcb62c7ea15ea7684b0 +Author: Ludovic Rousseau +Date: Wed Dec 14 13:28:14 2005 +0000 + + update with new ./parse version + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1782 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Verisign_secure_storage_token.txt | 21 +++++++++++---------- + 1 file changed, 11 insertions(+), 10 deletions(-) + +commit 7fff0475690647948256c3add080cce57f50e35a +Author: Ludovic Rousseau +Date: Thu Dec 8 09:32:36 2005 +0000 + + typo in a comment + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1780 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3e06b89176a119e09dc3d9b2dbac10cb82978e9e +Author: Ludovic Rousseau +Date: Thu Dec 8 09:14:59 2005 +0000 + + The GemPC Twin is not the only serial CCID reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1779 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit 00b9c2713a54ff7132528187397fcf49b876c955 +Author: Ludovic Rousseau +Date: Wed Dec 7 20:27:24 2005 +0000 + + replace ACR 38 by ACR 38U-CCID since they are two different readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1778 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 4 ++-- + readers/{ACR38.txt => ACR38U-CCID.txt} | 0 + readers/supported_readers.txt | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +commit 815cfdc6162e7308b8f7db289a25cdc70d7655d5 +Author: Ludovic Rousseau +Date: Thu Dec 1 15:41:02 2005 +0000 + + add Athena ASE IIIe USB V2 in "Supported CCID readers" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1776 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/ASE_IIIe.txt | 51 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 2 ++ + 3 files changed, 55 insertions(+) + +commit a5ce3fdd2ae04342d8a0cae12b34929698c229fb +Author: Ludovic Rousseau +Date: Tue Nov 29 14:33:22 2005 +0000 + + OpenUSBByName(): do not (re)set the usbDevice[].ccid.pbSeq field since + we just copied the complete structure just before + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1775 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 1 - + 1 file changed, 1 deletion(-) + +commit cb412fb9298ec57940654291d5de6c81f7813c6d +Author: Ludovic Rousseau +Date: Tue Nov 29 13:54:07 2005 +0000 + + Avoid a possible division by 0 if f or d parameter is null. + This could happen only with non-ISO cards with TA1=0x00 or other + undefined values + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1774 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +commit 8954b36477bff91cdf6fe47f521f31665625fe66 +Author: Ludovic Rousseau +Date: Tue Nov 29 13:43:40 2005 +0000 + + add support of non-ISO TA1=0x97 (Di=7 is/was RFU) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1773 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/atr.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1908085ed1605a6304d6a95c112d05fa2e5c94df +Author: Ludovic Rousseau +Date: Tue Nov 29 12:21:00 2005 +0000 + + remove PCSC/ from the pcsc-lite #include header files since the PCSC/ + part is already given by `pkg-config --cflags libpcsclite` + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1771 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 4 ++-- + src/ccid.c | 4 ++-- + src/ccid_serial.c | 2 +- + src/commands.c | 4 ++-- + src/defs.h | 2 +- + src/ifdhandler.c | 6 +++--- + src/openct/proto-t1.c | 4 ++-- + src/towitoko/defines.h | 2 +- + src/towitoko/pps.c | 2 +- + src/utils.c | 2 +- + 10 files changed, 16 insertions(+), 16 deletions(-) + +commit 17b8c0fcf749a66ee04794944b6893269741abfb +Author: Ludovic Rousseau +Date: Tue Nov 29 09:24:15 2005 +0000 + + rewrite the libusb detection code to: + - use libusb-config if available + - --enable-libusb do not give a path anymore but just a yes/no status. + paths/arguments/etc must be given using LIBUSB_CFLAGS and LIBUSB_LIBS + - use AC_TRY_LINK_FUNC() instead of AC_CHECK_LIB() so we do not + explicitely give the library name. This name should come from LIBUSB_LIBS + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1770 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 48 ++++++++++++++++++++++-------------------------- + 1 file changed, 22 insertions(+), 26 deletions(-) + +commit 9ecc95ef97150532fe0e21675abd35a0d5aa0889 +Author: Ludovic Rousseau +Date: Tue Nov 29 09:19:22 2005 +0000 + + in libusb detection code: restore CPPFLAGS to $saved_CPPFLAGS instead of + $saved_LIBS + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1769 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1bee5edaadddce736b16f47639f7d736c7b31e32 +Author: Ludovic Rousseau +Date: Tue Nov 29 09:16:44 2005 +0000 + + recommand the use of PCSC_CFLAGS=... instead of CFLAGS=... to find the + pcsc-lite headers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1768 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 6125411c9f63f2c72ab76aed7cc5fba80eed30ab +Author: Ludovic Rousseau +Date: Tue Nov 29 09:15:13 2005 +0000 + + use $CPPFLAGS instead of $CFLAGS since we only need to set the C + preprocessor to find the .h files + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1767 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 11516ae737ce5122394b474dcb852b9959735c90 (tag: ccid-0.9.4) +Author: Ludovic Rousseau +Date: Sun Nov 27 19:44:29 2005 +0000 + + release 0.9.4 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1761 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 27 +++++++++++++++++++++++++++ + 1 file changed, 27 insertions(+) + +commit 284b69a193efe489898292667b28d09362aa6faa +Author: Ludovic Rousseau +Date: Sun Nov 27 19:43:31 2005 +0000 + + new file for MySMART PAD V2.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1760 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/MySmartPad.txt | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 49 insertions(+) + +commit 3a3ccc209dc72413869d461314b72af22bb48d68 +Author: Ludovic Rousseau +Date: Sun Nov 27 19:42:14 2005 +0000 + + add Cherry SmartTerminal ST2XXX + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1759 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + 1 file changed, 1 insertion(+) + +commit 3f1e9f5564a0218d8c1822aba5b07d38740e5028 +Author: Ludovic Rousseau +Date: Sun Nov 27 17:22:43 2005 +0000 + + add 3 missing reader descriptions + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1758 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +commit 9e03439d17f22fe94fe76719531f39664458faae +Author: Ludovic Rousseau +Date: Thu Nov 24 16:18:57 2005 +0000 + + we need pcsc-lite 1.2.9-beta9 or greater + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1754 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit b24ac09a271cfb85e9aed95a5acfcd8e97cd1445 +Author: Ludovic Rousseau +Date: Thu Nov 24 16:16:33 2005 +0000 + + IFDHGetCapabilities(): use info instead of comm debug level to print the + number of slots supported by the reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1752 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6f126914a97e8d2539f25d593b6dfc8ee3862a70 +Author: Ludovic Rousseau +Date: Thu Nov 24 16:15:30 2005 +0000 + + update copyright date + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1751 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f3f5afaa07cd512c8ab2e211d06a59b453936085 +Author: Ludovic Rousseau +Date: Thu Nov 24 16:14:48 2005 +0000 + + in Modify PIN command we need to read 3 lines from the keyboard (old, + new and confirm PINs) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1750 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +commit 7f66b4c8d447d08018cd6a8cf44be1405fa0508a +Author: Ludovic Rousseau +Date: Thu Nov 24 16:12:21 2005 +0000 + + use a buffer of 40 instead of 10 to reader the keyboard since the PIN + may be longer than 8 digits + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1749 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit c8a2c0cc1cfc9ea20e9c21994c0079c0ed3a92b5 +Author: Ludovic Rousseau +Date: Thu Nov 24 15:49:00 2005 +0000 + + SecurePINVerify()/SecurePINModify(): set the response length to 0 in + case of (write) communication error + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1747 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 613ea9dc3e412862b4d302bfb7cd64617d998aad +Author: Ludovic Rousseau +Date: Thu Nov 24 15:47:10 2005 +0000 + + SecurePINModify(): set the response length to 0 in case of error in the + command format + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1746 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit be26c35a3524954f08854e5cca64e21e4a8a3048 +Author: Ludovic Rousseau +Date: Thu Nov 24 15:46:21 2005 +0000 + + IFDHControl(): use sizeof(PCSC_TLV_STRUCTURE) instead of 6 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1745 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 398e0a8dbca838d95ee5d42af3064b624074660d +Author: Ludovic Rousseau +Date: Thu Nov 24 15:32:41 2005 +0000 + + my check if the applet is present was wrong + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1743 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit efd4ff72d2603e16e6315aae179f7e01cb791485 +Author: Ludovic Rousseau +Date: Thu Nov 24 15:26:41 2005 +0000 + + exit if the test applet is not found + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1742 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 1af741a1f3181e6f186f963a81809eab6c8ce84f +Author: Ludovic Rousseau +Date: Thu Nov 24 14:35:24 2005 +0000 + + do not duplicate the definition of PCSCLITE_HP_DROPDIR in + --enable-ccidtwindir since it is already defined in --enable-usbdropdir + + This prevented the successful execution of ./configure when + -pedantic-errors is used + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1740 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 1 - + 1 file changed, 1 deletion(-) + +commit ca4a336cc3fda57f16c1ca58010f013b06ed64f9 +Author: Ludovic Rousseau +Date: Thu Nov 24 14:21:00 2005 +0000 + + t1_xcv(): correct the comment about &rmax + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1739 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 7d660d21f054d815214a8688ee92752ade3c7ea4 +Author: Ludovic Rousseau +Date: Thu Nov 24 14:19:30 2005 +0000 + + t1_xcv(): the second argument of CCID_Receive() is (unsigned int *) + so we can't use &rmax since &rmax is a (size_t *) and may not + be the same on 64-bits architectures for example (iMac G5) */ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1738 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 17 ++++++++++++++--- + 1 file changed, 14 insertions(+), 3 deletions(-) + +commit a72db9caa6375a3c539a4ba5052a18dfce5594f4 +Author: Ludovic Rousseau +Date: Thu Nov 24 13:50:24 2005 +0000 + + tokenparser.l is only needed when pcscd is not used (Solaris). It is not + needed on Mac OS X since LTPBundleFindValueWithKey() is provided by + pcscd + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1737 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 3 +-- + src/Makefile.am | 2 +- + 2 files changed, 2 insertions(+), 3 deletions(-) + +commit 16929f7804d765181529988757f7513d55e84bb5 +Author: Ludovic Rousseau +Date: Thu Nov 24 10:40:06 2005 +0000 + + use libusb-config(1) to get, if possible, correct values for LIBUSB_CFLAGS + and LIBUSB_LIBS + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1735 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 ++ + 1 file changed, 2 insertions(+) + +commit bc0ce4011948289d6e456ade36b08e7b5934cde6 +Author: Ludovic Rousseau +Date: Thu Nov 24 10:07:20 2005 +0000 + + replace dnl by # + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1734 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 54 +++++++++++++++++++++++++++--------------------------- + 1 file changed, 27 insertions(+), 27 deletions(-) + +commit d063ed012a0c6181f7892023a9398395cde398e5 +Author: Ludovic Rousseau +Date: Thu Nov 24 10:06:04 2005 +0000 + + use LIBUSB_CFLAGS/LIBUSB_LIBS instead of LDFLAGS/CPPFLAGS for libusb + configuration + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1733 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 22 ++++++++++++++-------- + src/Makefile.am | 6 +++--- + 2 files changed, 17 insertions(+), 11 deletions(-) + +commit 83b19ca43131d4e6a83ac9e4eb92ef50e61da648 +Author: Ludovic Rousseau +Date: Tue Nov 22 09:38:29 2005 +0000 + + add the "SCM Micro SCR 3310-NTTCOM" in the "Should work but untested by + me" list. + See http://archives.neohapsis.com/archives/dev/muscle/2005-q4/0217.html + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1730 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + 1 file changed, 2 insertions(+) + +commit aa07a5efc1c30f471c38111bfeaae48ecba3829d +Author: Ludovic Rousseau +Date: Tue Nov 22 07:21:05 2005 +0000 + + add SCM SCR 3310 NTTCom. + See http://archives.neohapsis.com/archives/dev/muscle/2005-q4/0217.html + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1729 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 7ab2538ab60b66a15d0551e17c108c1cba0390fb +Author: Ludovic Rousseau +Date: Wed Nov 16 09:22:55 2005 +0000 + + Modify PIN: use a 4 digit PIN so we can test it using the test Java Card applet + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1717 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 14 +++----------- + 1 file changed, 3 insertions(+), 11 deletions(-) + +commit e883c099bbd395b7654c0281f727737599a8d859 +Author: Ludovic Rousseau +Date: Wed Nov 16 09:18:24 2005 +0000 + + Modify PIN: bInsertionOffsetOld and bInsertionOffsetNew starts from the + APDU data (5th byte) and not the APDU start (first byte) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1716 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 74056eb4b2779a51aa670befb22d5f179c877810 +Author: Ludovic Rousseau +Date: Wed Nov 16 09:14:17 2005 +0000 + + add a modify PIN dump command + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1715 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 37 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 37 insertions(+) + +commit f74a28c596750e304d0a6cb285390d5d618a9b9e +Author: Ludovic Rousseau +Date: Wed Nov 16 09:12:09 2005 +0000 + + Modify PIN: add a comment for bNumberMessage + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1714 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 33bf30513209040dbc685848bfe6f249a52d7b98 +Author: Ludovic Rousseau +Date: Wed Nov 16 09:11:10 2005 +0000 + + Modify PIN: use 0x03 for bNumberMessage since the GemPC Pinpad rejects + any other valu. The SPR 532 needs 0 here + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1713 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 02b38eb7a70f0fd69c90b0375b50860692105a6b +Author: Ludovic Rousseau +Date: Wed Nov 16 09:07:13 2005 +0000 + + verify PIN: use 0x01 for bNumberMessage for the GemPC Pinpad + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1712 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b7fdc0ebb3675558657f296a2ad0b933626a7078 +Author: Ludovic Rousseau +Date: Wed Nov 16 09:06:01 2005 +0000 + + verify PIN: use 0x02 (validation key pressed) for + bEntryValidationCondition as the GemPC Pinpad rejects any other values + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1711 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9e4a8c18de24871da1cdcc708b190da4a9689c37 +Author: Ludovic Rousseau +Date: Tue Nov 15 11:04:35 2005 +0000 + + use svn2cl.sh instead of rcs2log since we migrated to subversion + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1705 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit ae21c19a8d7354a056cc399ba3a945ade1a1baf0 +Author: Ludovic Rousseau +Date: Tue Nov 15 11:04:07 2005 +0000 + + SecurePINModify(): set the readTimeout to at least 30 seconds since we + are not waiting after an APDU but after a human (after the reader in + fact). + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1704 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +commit 257922cf13c12c694daa5f10959909217b751f20 +Author: Ludovic Rousseau +Date: Mon Nov 7 15:46:03 2005 +0000 + + remove #ifdef DEBUG_LEVEL_COMM since DEBUG_LEVEL_COMM is a numeric value + and not a compilation flag anymore. Debug is always active and filtered + by pcscd. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1703 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 12 +----------- + src/ccid_usb.c | 8 -------- + 2 files changed, 1 insertion(+), 19 deletions(-) + +commit d83b8153f159bc85a7a1002de41bdbd8a710dc8c +Author: Ludovic Rousseau +Date: Mon Nov 7 15:41:47 2005 +0000 + + exchange COMM and PERIODIC debug values so that all except PERIODIC + value is 7 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1702 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist | 6 +++--- + src/debug.h | 4 ++-- + 2 files changed, 5 insertions(+), 5 deletions(-) + +commit dcb9f8cd04646e71d938690de2e6562cbe3a975b +Author: Ludovic Rousseau +Date: Sun Oct 30 14:44:25 2005 +0000 + + SecurePINModify(): correct management of bMsgIndex2 and bMsgIndex3 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1701 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 18 +++++++++++++----- + 1 file changed, 13 insertions(+), 5 deletions(-) + +commit 175583d250f2a119a9e7395f17ba741b3a0553f2 +Author: Ludovic Rousseau +Date: Sun Oct 30 14:43:16 2005 +0000 + + SecurePINModify(): do not copy the ulDataLength field to the CCID frame + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1700 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 6615689cc614554374d11a4965a850177eecdbfc +Author: Ludovic Rousseau +Date: Sun Oct 30 14:40:42 2005 +0000 + + #define CHERRYST2000 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1699 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + 1 file changed, 1 insertion(+) + +commit 3fd15ccb2f265726059bf7d1e1844d7ff4141aba +Author: Ludovic Rousseau +Date: Wed Oct 19 08:11:32 2005 +0000 + + firmware 5.07 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1692 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SPR532.txt | 18 ++++++++++-------- + 1 file changed, 10 insertions(+), 8 deletions(-) + +commit 6f895ae4dabb646fc94eedb454ee11e57d3781dc +Author: Ludovic Rousseau +Date: Wed Oct 19 06:20:54 2005 +0000 + + declare offset, pin_verify and pin_modify variable only if needed + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1691 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +commit 5fd17cc31bd892396590af925c6221e221672d90 +Author: Ludovic Rousseau +Date: Tue Sep 27 13:07:38 2005 +0000 + + CCID_Transmit(): cmd[8-9] is the expected length in character mode only. + It shall be 0x0000 for TPDU and short APDU modes. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1677 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 374f3a57c40f078c7eca56d425d91c68f49d4dac +Author: Ludovic Rousseau +Date: Mon Sep 26 14:43:51 2005 +0000 + + use the new HandlerTest applet commands + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1676 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 87 ++++++++++++++++++++++++++++++++++++------------- + 1 file changed, 65 insertions(+), 22 deletions(-) + +commit f96367b639e982ddec7e07b019dbd0935e2fe55c +Author: Ludovic Rousseau +Date: Mon Sep 26 14:42:26 2005 +0000 + + SecurePINVerify(): set the readTimeout to at least 30 seconds since we + are not waiting after an APDU but after a human. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1675 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +commit 8059f19a6e5a6bd8c03d7c692bd82e0bd6e42ab5 +Author: Ludovic Rousseau +Date: Mon Sep 26 13:19:04 2005 +0000 + + _ccid_descriptor.readTimeout is in seconds even for USB. The comment was + wrong + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1674 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d80016d2fe8f7ea5c69c9b2fba5f3625a1e27c80 +Author: Ludovic Rousseau +Date: Tue Sep 20 07:07:26 2005 +0000 + + SecurePINVerify(): update the size of ulDataLength field as defined in + PCSCv2 part 10, revision 2.01.04, september 2005 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1670 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +commit 3ca9d8eac482a588b05eb30da9d24d31562cab1a +Author: Ludovic Rousseau +Date: Tue Sep 20 07:05:04 2005 +0000 + + use HOST_TO_CCID_16/HOST_TO_CCID_32 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1669 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit 526730f8e2e94a3468be9c335fec9dbb40ece5a0 +Author: Ludovic Rousseau +Date: Mon Sep 5 14:43:02 2005 +0000 + + get_data_rates(): check the response size only if bNumDataRatesSupported + is non zero + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1641 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8c4cc35635d1893e49b7838ac47414559529ef7f +Author: Ludovic Rousseau +Date: Mon Sep 5 14:40:13 2005 +0000 + + if bNumDataRatesSupported is 0 we get the list size from what + GET DATA RATES command returns + + idem for bNumClockSupported + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1640 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit 908588b2f2ac0cce7ebc63f671d04de3399f90ce +Author: Ludovic Rousseau +Date: Mon Sep 5 13:17:09 2005 +0000 + + do not request data rates if the reader reports it support a 0 length + list. Idem for clocks. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1639 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit e65e154c2dc1b9f2d668bf6101b0968a6d013849 +Author: Ludovic Rousseau +Date: Mon Sep 5 13:15:14 2005 +0000 + + print bNumClockSupported: as %d and not 0x%02X + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1638 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c5938b04c44c00e9cc2faf0b5151e923be4af818 +Author: Ludovic Rousseau +Date: Thu Sep 1 12:38:09 2005 +0000 + + also work with T=1 cards + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1635 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 21 ++++++++++++++++++--- + 1 file changed, 18 insertions(+), 3 deletions(-) + +commit aecc5d25a65deead8907c5f19d64c86435c7cfe5 +Author: Ludovic Rousseau +Date: Thu Sep 1 12:33:06 2005 +0000 + + debug modify PIN test code + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1634 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 31 +++++++++++++++++++++---------- + 1 file changed, 21 insertions(+), 10 deletions(-) + +commit 456380d77641e39cfecc93f05aab45d70c1b6c23 +Author: Ludovic Rousseau +Date: Thu Sep 1 12:32:32 2005 +0000 + + add Cherry ST1044U + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1633 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 1 + + 1 file changed, 1 insertion(+) + +commit ee3a36f7fca5585e7906bb141379087848adb284 +Author: Ludovic Rousseau +Date: Thu Sep 1 12:29:57 2005 +0000 + + add Cherry SmartTerminal ST-2XXX + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1632 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CherrySmartTerminalST2XXX.txt | 56 +++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 57 insertions(+) + +commit 54835bbe6d5c11bccaf2f6be5d561eaa995f8830 +Author: Ludovic Rousseau +Date: Thu Sep 1 09:13:38 2005 +0000 + + add sample code to perform FEATURE_VERIFY_PIN_DIRECT and + FEATURE_MODIFY_PIN_DIRECT if the reader supports it + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1631 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 199 ++++++++++++++++++++++++++++++++++++++---------- + 1 file changed, 157 insertions(+), 42 deletions(-) + +commit 656bbaacd78edd5b23fc112bedc1860d90c4ac4f +Author: Ludovic Rousseau +Date: Thu Sep 1 09:11:30 2005 +0000 + + add support of PC/SC v2 part 10 CM_IOCTL_GET_FEATURE_REQUEST + add support of FEATURE_VERIFY_PIN_DIRECT and FEATURE_MODIFY_PIN_DIRECT + + remove support of IOCTL_SMARTCARD_VENDOR_VERIFY_PIN (now obsoleted) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1630 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_ifdhandler.h | 7 ++- + src/commands.c | 168 +++++++++++++++++++++++++++++++++++++++++++++----- + src/commands.h | 6 +- + src/ifdhandler.c | 64 +++++++++++++++---- + 4 files changed, 216 insertions(+), 29 deletions(-) + +commit 9a43235c9575c2bd008d948c34146d6fcfd86268 +Author: Ludovic Rousseau +Date: Thu Aug 25 20:07:04 2005 +0000 + + add Cherry ST-1044U in the supported list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1626 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + 1 file changed, 2 insertions(+) + +commit 8c376cd4e589a23ef796f8d1b30ecc3e91b238a2 +Author: Ludovic Rousseau +Date: Thu Aug 25 20:06:41 2005 +0000 + + new file + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1625 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CherryST1044U.txt | 166 ++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 166 insertions(+) + +commit d12a5fed5ceeab1dd6260f570fe3a342ce287359 +Author: Ludovic Rousseau +Date: Sun Aug 21 10:51:23 2005 +0000 + + move the "Cherry XX44 keyboard" from "should work" to "supported" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1622 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit fb04360db5f7e472056cf91474db5cff6c1108d0 +Author: Ludovic Rousseau +Date: Tue Aug 16 06:50:18 2005 +0000 + + removed since we use SVN and not CVS anymore + + Thanks to Martin Paljak for the idea + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1619 0ce88b0d-b2fd-0310-8134-9614164e65ea + + .cvsignore | 14 -------------- + aclocal/.cvsignore | 2 -- + build/.cvsignore | 9 --------- + examples/.cvsignore | 5 ----- + readers/.cvsignore | 2 -- + src/.cvsignore | 10 ---------- + src/towitoko/.cvsignore | 1 - + 7 files changed, 43 deletions(-) + +commit 326de4e7f944f260d12ca15de29cdd80e663396a +Author: Ludovic Rousseau +Date: Sat Aug 13 14:27:23 2005 +0000 + + document DRIVER_OPTION_RESET_ON_CLOSE + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1614 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit d0a539a004dc8605abd30d6c8f6ff0e94f39749f +Author: Ludovic Rousseau +Date: Sat Aug 13 14:26:22 2005 +0000 + + CloseUSB(): call usb_reset() only if DRIVER_OPTION_RESET_ON_CLOSE is + set. + + The problem was that a device reset also disconnects the keyboard on a + keyboard + reader device. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1613 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 571c627fe293c0c6e83bfeb3fc1ffa4c6f086bf3 +Author: Ludovic Rousseau +Date: Sat Aug 13 14:24:25 2005 +0000 + + #define DRIVER_OPTION_RESET_ON_CLOSE + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1612 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_ifdhandler.h | 1 + + 1 file changed, 1 insertion(+) + +commit fd1dee004a5f65d99a2adc5c132279c15540debf +Author: Ludovic Rousseau +Date: Thu Aug 11 13:51:12 2005 +0000 + + update adding clock frequencies and data rates + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1610 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CherryXX44.txt | 136 +++++++++++++++++++++++++++++++++++++++++++++---- + 1 file changed, 125 insertions(+), 11 deletions(-) + +commit f5203332e8f9222b2fa50c3a2be08ceee4810312 +Author: Ludovic Rousseau +Date: Thu Aug 11 13:50:34 2005 +0000 + + check that we do not receive more data rates anc clock frequencies than the + reader supports + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1609 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 22 ++++++++++++++++++++++ + 1 file changed, 22 insertions(+) + +commit 17136ab97b2d8fe7d9ef14d46a694aad19719ff2 +Author: Ludovic Rousseau +Date: Thu Aug 11 13:48:21 2005 +0000 + + get_data_rates(): check that we do not get more data rates than the + reader supports + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1608 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) + +commit 0a223f74d65af008ebacbea6655497ffb2709950 +Author: Ludovic Rousseau +Date: Wed Aug 3 18:00:47 2005 +0000 + + CCID_Receive(): log time extension messages at priority COMM instead of + CRITICAL. + + Thanks to Martin Paljak for the patch. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1600 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ad9a8e3c397bea04e8d2b4546bca78c5d495464b +Author: Ludovic Rousseau +Date: Tue Aug 2 13:44:09 2005 +0000 + + OpenUSBByName(): call usb_close() if the device can't be used + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1585 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit b3439b97058ae9c7d5b2dc3906db4353441d6989 +Author: Ludovic Rousseau +Date: Mon Jul 4 10:17:50 2005 +0000 + + IFDHControl(): having a NULL RxBuffer is not an error since it is enough + to send the code in dwControlCode + + Thanks to Martin Paljak for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1570 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 8056ce8bcf64587452bf378439dceef1275681b9 +Author: Ludovic Rousseau +Date: Mon Jul 4 09:17:27 2005 +0000 + + OpenUSBByName(): vendorID, productID are unsigned + avoids a "comparison between signed and unsigned" warning + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1569 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 62731b7783810cf5f1327cb11293f0eb8a1c6d3d +Author: Ludovic Rousseau +Date: Mon Jul 4 09:11:52 2005 +0000 + + struct _ccid_descriptor: dwMaxDataRate is unsigned + avoids a "comparison between signed and unsigned" warning + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1568 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 458c9b5dfcaaf6b7b75ec9f2f40c9dae9aa96de5 +Author: Ludovic Rousseau +Date: Mon Jul 4 09:10:07 2005 +0000 + + struct _ccid_descriptor: dwMaxCCIDMessageLength is unsigned + avoids a "comparison between signed and unsigned" warning + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1567 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3ee94bc5f5cf43fda070f0fcaf57a452aa2b2f03 +Author: Ludovic Rousseau +Date: Mon Jul 4 09:08:27 2005 +0000 + + CmdPowerOn(): atr_len is unsigned + avoids a "comparison between signed and unsigned" warning + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1566 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 6b0a1b785d440689e2f54035ccd9dd0fca7e9dcd +Author: Ludovic Rousseau +Date: Thu Jun 16 14:12:11 2005 +0000 + + parse wLcdLayout + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1563 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 746c8d1836428be41308dc5918e3c986f7d61bf5 +Author: Ludovic Rousseau +Date: Thu Jun 16 14:08:07 2005 +0000 + + parse bClassEnveloppe + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1562 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 07f38f09a5eab7640ba81cc00208ee5a7a0472a5 +Author: Ludovic Rousseau +Date: Thu Jun 16 14:06:16 2005 +0000 + + pares bClassGetResponse + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1561 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 9574b138787b7e73291955b9e57c7599fe3d7aa9 +Author: Ludovic Rousseau +Date: Thu Jun 16 13:52:17 2005 +0000 + + parse dwSynchProtocols + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1560 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit e3415d6f92cc3d4fa77b372b2211beea6ba9576e +Author: Ludovic Rousseau +Date: Wed Jun 15 12:55:45 2005 +0000 + + #include + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1559 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 1 + + 1 file changed, 1 insertion(+) + +commit 71af3d1d1220c2ec88af2b12cc6995c6a43866cc +Author: Ludovic Rousseau +Date: Wed Jun 15 12:55:20 2005 +0000 + + remove definition of SCARD_CTL_CODE and #include + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1558 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit d4f4c88f8c9e1e78d18b34328175b5998d43695f +Author: Ludovic Rousseau +Date: Wed Jun 15 12:54:34 2005 +0000 + + remove definition of SCARD_CTL_CODE + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1557 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_ifdhandler.h | 4 ---- + 1 file changed, 4 deletions(-) + +commit ed44b3f4f07eac2800337263704d46ba5384e188 +Author: Ludovic Rousseau +Date: Wed Jun 15 12:53:41 2005 +0000 + + check the availability of reader.h (provided by pcsc-lite 1.2.9-beta8) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1556 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 3 +++ + 1 file changed, 3 insertions(+) + +commit 3b3d68b5e5c252fe9ff63850b4795eea195a275b +Author: Ludovic Rousseau +Date: Wed Jun 15 12:46:05 2005 +0000 + + check against pcsc-lite 1.2.9-beta8 instead of beta7 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1555 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 35daf5c9ee48ebee38a09d1c05ebdf24b29d83e7 +Author: Ludovic Rousseau +Date: Sat Jun 4 09:44:31 2005 +0000 + + WriteUSB(): do not parse usbDevice[reader_index].dev->bus if it is a + NULL pointer (the device has been removed for example) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1547 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +commit ac8376ee0fce11c85d60ee9c8dbf67a4e350b484 +Author: Ludovic Rousseau +Date: Fri May 27 07:07:41 2005 +0000 + + Add Eutron SIM Pocket Combo and Eutron CryptoIdentity in the supported + list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1546 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 453385985818ede6c25500962c03074917c823d7 +Author: Ludovic Rousseau +Date: Fri May 27 07:04:08 2005 +0000 + + add Eutron CryptoIdentity + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1545 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CryptoIdentity.txt | 51 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 52 insertions(+) + +commit 73b912ba9d66e4018fc0bb3b4c6d9339c51c7ee4 +Author: Ludovic Rousseau +Date: Fri May 20 10:35:11 2005 +0000 + + add Verisign Secure Token in the supported list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1523 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + 1 file changed, 1 insertion(+) + +commit d4ca44364f7ff866b1983b9a7efa3c80fb890b5c +Author: Ludovic Rousseau +Date: Fri May 20 10:20:53 2005 +0000 + + add RSA SecureID SID800 in the UNsupported list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1522 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 4 ++++ + 1 file changed, 4 insertions(+) + +commit e1e42e0aa7934a0ac5ab87645b957377da7cd1f2 +Author: Ludovic Rousseau +Date: Fri May 20 08:54:41 2005 +0000 + + add Verisign Secure Storage Token in the supported list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1521 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + 1 file changed, 2 insertions(+) + +commit 8875ea238dbe8812b47575ca07343957d864c61c +Author: Ludovic Rousseau +Date: Fri May 20 08:54:11 2005 +0000 + + regenerate using new ./parse + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1520 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/sid800.txt | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +commit cce698d3f3fcf122dd3766bb1609b1f328ee6d78 +Author: Ludovic Rousseau +Date: Thu May 5 10:31:53 2005 +0000 + + add SCR331-DI-NTTCom.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1514 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 1 + + readers/SCR331-DI-NTTCom.txt | 104 +++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 105 insertions(+) + +commit 01d46abfc6af6b8dfdce16b8838f39e82e7ddb8b +Author: Ludovic Rousseau +Date: Thu May 5 10:27:16 2005 +0000 + + rename KAAN_mIDentity.txt in mIDentity.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1513 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 147cad90c0100d38fed431c69c2e992a3afb3432 +Author: Ludovic Rousseau +Date: Thu May 5 10:25:56 2005 +0000 + + regenerate using the latest src/parse program + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1512 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACR38.txt | 14 ++++----- + readers/CardMan3121.txt | 16 ++++++----- + readers/GemPCKey.txt | 49 ++++++++++++++++++++++++++++--- + readers/KAAN_Advanced.txt | 18 ++++++------ + readers/KAAN_Base.txt | 18 ++++++------ + readers/LTC31.txt | 6 ++-- + readers/Oz776S.txt | 12 ++++---- + readers/SCR331-DI.txt | 68 +++++++++++++++++++++++++++++++++++++++----- + readers/SCR331.txt | 16 ++++++----- + readers/SCR3310.txt | 14 +++++---- + readers/SCR335.txt | 14 +++++---- + readers/SIM_Pocket_Combo.txt | 24 +++++++++------- + readers/SPR532.txt | 14 +++++---- + readers/mIDentity.txt | 18 ++++++------ + 14 files changed, 210 insertions(+), 91 deletions(-) + +commit ba326c5a55fc4541bba90a992f5090b7d36a4c14 +Author: Ludovic Rousseau +Date: Thu May 5 10:05:02 2005 +0000 + + do not #include since we now use +1 instead of ceil() to round + the calculated timeouts to the upper integer + - we do not need an mathematical exact value. the {usb,serial}read must + just not timeout before the reader firmware timeouts + - we avoid a dependency/link on the math library + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1511 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 1 - + 1 file changed, 1 deletion(-) + +commit a4df31de6ead4d02368675df164c0d0cb7cb3fda +Author: Ludovic Rousseau +Date: Thu May 5 10:01:17 2005 +0000 + + T0_card_timeout(): use intermediate variables EGT, BWT, CWT, etu to + improve code readability + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1510 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 24 +++++++++++++++++++----- + 1 file changed, 19 insertions(+), 5 deletions(-) + +commit e39495ec0a3468e903723eb9f952ac47f1ce797a +Author: Ludovic Rousseau +Date: Thu May 5 09:59:21 2005 +0000 + + T0_card_timeout(): declare EGT, WWT as double instead of int to have + some precision + We also calculate EGT and WWT in milliseconds instead of seconds + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1509 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 15 ++++++++++++--- + 1 file changed, 12 insertions(+), 3 deletions(-) + +commit 27c1325d3b8bcbb4fdbaf3e4217f36fb84cef803 +Author: Ludovic Rousseau +Date: Wed May 4 15:58:48 2005 +0000 + + add SCM Micro SCR 331-DI NTTCom in the "Should work but untested by me" + list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1508 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/supported_readers.txt | 1 + + 2 files changed, 3 insertions(+) + +commit cb254e8e57c8699e835553fc11114430086414c1 +Author: Ludovic Rousseau +Date: Wed May 4 10:11:28 2005 +0000 + + IFDHCreateChannelByName(), T0_card_timeout(), T1_card_timeout(): also + include other card parameters (TC1 for T=0, TC1 and CWI for T=1) in the + timeout formula + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1507 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 101 +++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 65 insertions(+), 36 deletions(-) + +commit 4fef940c357e05ba36d2e686fd3c018c7f8ce198 +Author: Ludovic Rousseau +Date: Wed May 4 09:30:13 2005 +0000 + + rename "Kobil KAAN mIDentity" in "Kobil mIDentity" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1506 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 +- + readers/supported_readers.txt | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 8e08cbec699f2ede7389f8853095349593834b23 +Author: Ludovic Rousseau +Date: Wed May 4 06:16:49 2005 +0000 + + IFDHICCPresence(): add support of SCR331-DI NTTCom + + Thanks to Takuto Matsuu fro the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1505 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit d902a9155576f18996e7e66a205081afc9e2939e +Author: Ludovic Rousseau +Date: Wed May 4 06:14:52 2005 +0000 + + #define SCR331DINTTCOM 0x04E65120 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1504 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + 1 file changed, 1 insertion(+) + +commit e27aa28df44cd4ae4ebe82bc5130b847d0936d0f +Author: Ludovic Rousseau +Date: Wed May 4 06:04:50 2005 +0000 + + add the manufacturer name in the reader name + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1503 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 40 ++++++++++++++++++++-------------------- + 1 file changed, 20 insertions(+), 20 deletions(-) + +commit 65c72e66f5e4f8ea39f57a06abb3cdb28d085940 +Author: Ludovic Rousseau +Date: Mon May 2 13:37:13 2005 +0000 + + typo in the data rates list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1496 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d4bf2c449c73dd6e8e83fd6faf05804f7477259d +Author: Ludovic Rousseau +Date: Mon May 2 13:28:30 2005 +0000 + + T0_card_timeout()/T1_card_timeout(): use ceil() to round the timeout + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1495 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +commit 78c0236d0c8216f07a41714222f396991f79a6b8 +Author: Ludovic Rousseau +Date: Mon May 2 12:07:13 2005 +0000 + + ccid_error(): function is (const char *) instead of (char *) to avoid a + "warning: passing arg 4 of `ccid_error' discards qualifiers from pointer + target type" using gcc 3.4 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1494 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 2 +- + src/ccid.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 8dad314e6872c61945daae2a454c78623b371d47 +Author: Ludovic Rousseau +Date: Mon May 2 11:47:15 2005 +0000 + + regenerate using the new parse command + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1493 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CherryXX33.txt | 14 ++++++++------ + readers/DellSCRK.txt | 49 ++++++++++++++++++++++++++++++++++++++++++++---- + readers/GemPC433_SL.txt | 14 ++++++++------ + readers/GemPCTwin.txt | 49 ++++++++++++++++++++++++++++++++++++++++++++---- + readers/KAAN_SIM_III.txt | 18 ++++++++++-------- + 5 files changed, 116 insertions(+), 28 deletions(-) + +commit cb7cc0e4e5b2effbf5277cba916de1ea447815a4 +Author: Ludovic Rousseau +Date: Mon May 2 11:36:08 2005 +0000 + + CmdEscape(): replay the command if we receive STATUS_COMM_NAK + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1492 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +commit 7621dd804ffa9df360314097b7c2a0b45ae78b02 +Author: Ludovic Rousseau +Date: Mon May 2 11:33:04 2005 +0000 + + ReadSerial(): if we get a NAK we return STATUS_COMM_NAK to the above + layer to replay the command instead of just restarting the read + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1491 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 16ac98d1e606274e1c6778af4f07561ff89a10af +Author: Ludovic Rousseau +Date: Mon May 2 11:31:11 2005 +0000 + + add STATUS_COMM_NAK + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1490 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/defs.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit e4aaac3a04eae52d7ffad6a8de452f2ee9e80121 +Author: Ludovic Rousseau +Date: Mon May 2 09:55:31 2005 +0000 + + display the clock frequencies supported by the reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1489 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 28 ++++++++++++++++++++++++++++ + 1 file changed, 28 insertions(+) + +commit 7a17ce262619f4e50b3333912c72bac1e4359714 +Author: Ludovic Rousseau +Date: Mon May 2 09:53:24 2005 +0000 + + move the display of supported data rates after printing + bNumDataRatesSupported info + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1488 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +commit 534a2e8344238486e6ad1280c5b7e654e820fc83 +Author: Ludovic Rousseau +Date: Mon May 2 09:21:56 2005 +0000 + + IFDHSetProtocolParameters(): check if the baud rate is present in the + baud rates list only if the list is present. Otherwise we use the old + behavior. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1487 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +commit 9722f676e512499299e224636d1bd15f045f8cf8 +Author: Ludovic Rousseau +Date: Mon May 2 09:19:36 2005 +0000 + + get_data_rates(): if the reader do not support GET DATA RATES we return + NULL instead of a manually constructed/fake list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1486 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 31 +++++++++++-------------------- + 1 file changed, 11 insertions(+), 20 deletions(-) + +commit 9120f95cb5c9b5f6035c6c1512971722b40af262 +Author: Ludovic Rousseau +Date: Mon May 2 09:17:53 2005 +0000 + + Open*ByName(): initialise dwMaxDataRate field + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1485 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 1 + + src/ccid_usb.c | 1 + + 2 files changed, 2 insertions(+) + +commit 22370b9adc1db26153e8adce61e8d49f3d44689b +Author: Ludovic Rousseau +Date: Mon May 2 09:16:26 2005 +0000 + + add dwMaxDataRate field (again) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1484 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 16d593d4bf216859fe76986419812f58cd5c0fbc +Author: Ludovic Rousseau +Date: Mon May 2 08:30:57 2005 +0000 + + get_data_rates(): check that the reader sends a DATA RATES list size + multiple of 4 othewise it is an error + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1483 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 30 ++++++++++++------------------ + 1 file changed, 12 insertions(+), 18 deletions(-) + +commit 17afae8ba6c5a4972a83aece81fb992e6ef73c50 +Author: Ludovic Rousseau +Date: Mon May 2 08:24:57 2005 +0000 + + display the bit value of dwFeatures in the text message + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1482 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 28 ++++++++++++++-------------- + 1 file changed, 14 insertions(+), 14 deletions(-) + +commit 50831e5b8e547c5a857cebec0e94655af5f19b94 +Author: Ludovic Rousseau +Date: Mon May 2 08:21:47 2005 +0000 + + test all the 4 bytes of dwFeatures against 0 and not just the first one + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1481 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e5705968a56ef2b508a17dc0d5799cbec3568155 +Author: Ludovic Rousseau +Date: Mon May 2 08:20:10 2005 +0000 + + do not display the list returned by GET DATA RATES if the list size is + not a multiple of 4 (n % 4 != 0) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1480 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 13 ++++++++----- + 1 file changed, 8 insertions(+), 5 deletions(-) + +commit e061342ded094ad1441fde5681f81fbba93c7006 +Author: Ludovic Rousseau +Date: Wed Apr 27 14:10:38 2005 +0000 + + Open*ByName: do not initialise the now disappeared .dwMaxDataRate field + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1479 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 1 - + src/ccid_usb.c | 1 - + 2 files changed, 2 deletions(-) + +commit 7f681951b8b8d420751ed046be9f8a118f188645 +Author: Ludovic Rousseau +Date: Wed Apr 27 14:09:16 2005 +0000 + + _ccid_descriptor: remove the now useless dwMaxDataRate field + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1478 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 5 ----- + 1 file changed, 5 deletions(-) + +commit 3c1346eb05d04e649988d54b938de76b67804bff +Author: Ludovic Rousseau +Date: Wed Apr 27 14:08:35 2005 +0000 + + IFDHSetProtocolParameters(): we do not check if (card_baudrate <= + ccid_desc->dwMaxDataRate) since find_baud_rate() will tell us if the + speed is supported or not by the reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1477 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +commit e66e3b5607887d754ab534d525635181d93c878e +Author: Ludovic Rousseau +Date: Wed Apr 27 14:04:38 2005 +0000 + + get_data_rates(): if the CCID command GET DATA RATES is nto supported + the array of supported rates contains only the default and max data + rates + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1476 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 27 +++++++++++++++++++++++++-- + 1 file changed, 25 insertions(+), 2 deletions(-) + +commit f59d0d452d15644036165eaf79e4dd7553e58948 +Author: Ludovic Rousseau +Date: Wed Apr 27 13:55:52 2005 +0000 + + get_data_rates(): test if int_array is NULL (and not buffer) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1475 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 79445240e951f5b9865a28da642b6c6fda87eb48 +Author: Ludovic Rousseau +Date: Wed Apr 27 13:40:54 2005 +0000 + + add the new or missing readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1474 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +commit f93de790d2f148d907b584d0e5711dd5f0bac849 +Author: Ludovic Rousseau +Date: Wed Apr 27 13:36:01 2005 +0000 + + version 0.9.4 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1473 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ca274024802754b2028b457c452c8f18c9cd0855 +Author: Ludovic Rousseau +Date: Wed Apr 27 13:35:19 2005 +0000 + + OpenSerialByName(): inhibit the Plug-n-Play string by setting the RTS + signal to low. Mainly useful for the GemPC Card (PCMCIA) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1472 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + +commit b3d2f37d2ca78153305f05da9daaea66c63509dc +Author: Ludovic Rousseau +Date: Wed Apr 27 13:23:06 2005 +0000 + + Verisign Secure Storage Token + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1471 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Verisign_secure_storage_token.txt | 53 +++++++++++++++++++++++++++++++ + 1 file changed, 53 insertions(+) + +commit 8961a90a62a36ae4f90d6fb8365347ca7ed196de +Author: Ludovic Rousseau +Date: Wed Apr 27 13:22:41 2005 +0000 + + Verisign Secure Token (without mass memory) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1470 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Verisign_secure_token.txt | 53 +++++++++++++++++++++++++++++++++++++++ + 1 file changed, 53 insertions(+) + +commit a93fe73623f1da92eceade33a4df705422c654c0 +Author: Ludovic Rousseau +Date: Wed Apr 27 13:22:03 2005 +0000 + + add Verisign Secure Token and VeriSign Secure Storage Token + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1469 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 3 +++ + 1 file changed, 3 insertions(+) + +commit a0a87b8c7c0f768fd6010927811f7fb7e3f1fdb6 +Author: Ludovic Rousseau +Date: Wed Apr 27 13:21:32 2005 +0000 + + display the supported data rates using the CCID command GET DATA RATES + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1468 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + +commit 4c3328a008f5da5d81159be10098080b3224510b +Author: Ludovic Rousseau +Date: Wed Apr 27 13:20:39 2005 +0000 + + get_data_rates(): use the real interface number instead of 0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1467 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f125830e79475ca58245c76875f94c462383c7cf +Author: Ludovic Rousseau +Date: Wed Apr 27 12:11:47 2005 +0000 + + get_data_rates(): buffer argument of usb_control_msg is (char *) and not + (unsigned char *) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1460 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 544834a10dc19a4f7912bde74f86b69cd0b5fad1 +Author: Ludovic Rousseau +Date: Wed Apr 27 12:10:45 2005 +0000 + + get_data_rates() returns an unsigned int [] (not just int []) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1459 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 373db5d23558e6360085efd3f048c15259e8f11f +Author: Ludovic Rousseau +Date: Wed Apr 27 12:09:26 2005 +0000 + + SerialDataRates[] is unsigned + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1458 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit fdb3cfeae56b376e7ae6635fd85f35a826c2a10b +Author: Ludovic Rousseau +Date: Tue Apr 26 14:35:50 2005 +0000 + + t1_xcv(): increase the read timeout if the card sends and WTX request + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1454 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +commit ab7a66b90b63ce902afcac722ffc4e122a82cabe +Author: Ludovic Rousseau +Date: Tue Apr 26 14:34:52 2005 +0000 + + use the calculated read timeout instead of a fixed value + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1453 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 14 +++++--------- + src/ccid_usb.c | 11 +++-------- + 2 files changed, 8 insertions(+), 17 deletions(-) + +commit d50f87e27cfdd0fe0e368992f99bd92a33b8418b +Author: Ludovic Rousseau +Date: Tue Apr 26 14:33:43 2005 +0000 + + calculate and store the read timeout according to the card ATR instead + of using a fixed value of 60 seconds + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1452 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 35 +++++++++++++++++++++++++++++++++++ + 1 file changed, 35 insertions(+) + +commit 6836e685249021d2544b68dde36cb74f852c84b6 +Author: Ludovic Rousseau +Date: Tue Apr 26 14:30:38 2005 +0000 + + add T0_card_timeout() and T1_card_timeout() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1451 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 52 insertions(+) + +commit 4f3ded0abdc754384eb92db6ba1b798844df10a6 +Author: Ludovic Rousseau +Date: Tue Apr 26 14:23:23 2005 +0000 + + /* Default communication read timeout in seconds */ + #define DEFAULT_COM_READ_TIMEOUT 2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1450 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/defs.h | 2 ++ + 1 file changed, 2 insertions(+) + +commit c4b554b547fbb196618f57ba43dfad82e0260707 +Author: Ludovic Rousseau +Date: Tue Apr 26 14:22:50 2005 +0000 + + struct _ccid_descriptor: add unsigned int readTimeout field + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1449 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit f498d3678732e38a62af6f290ee536c87a332194 +Author: Ludovic Rousseau +Date: Tue Apr 26 13:46:07 2005 +0000 + + IFDHSetProtocolParameters(): only use a data rate supported by the + reader in the PPS negociation, otherwise we stay at the default speed. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1448 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 40 +++++++++++++++++++++++++++++++++++++--- + 1 file changed, 37 insertions(+), 3 deletions(-) + +commit 499ccc7eed3a277a78b3313e439d4b2d7b6b825b +Author: Ludovic Rousseau +Date: Tue Apr 26 13:44:08 2005 +0000 + + OpenSerialByName(): the reader does not support the Get Data Rates CCID + function so the list of supported data rates is hard coded. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1447 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 45 insertions(+) + +commit d17d50430e1f9a08a8a20e78737305f107b9d6d1 +Author: Ludovic Rousseau +Date: Tue Apr 26 13:43:13 2005 +0000 + + OpenUSBByName(): get the list of data rates the reader supports + + See 3.7.3 Get Data Rates (page 25) from CCID spec 1.00 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1446 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 55 insertions(+) + +commit 8b3d9e9a65af38f6e151864cedf458215fc70def +Author: Ludovic Rousseau +Date: Tue Apr 26 13:40:48 2005 +0000 + + struct _ccid_descriptor: add unsigned int *arrayOfSupportedDataRates field + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1445 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 83dc54693a77092a8004bfe8f235df9dbaad31a6 +Author: Ludovic Rousseau +Date: Tue Apr 26 12:38:25 2005 +0000 + + OpenSerialByName(): set card movement notification in synchronous mde + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1444 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +commit 3a70c55316b5f8a0b95342b15db3ec101e21df52 +Author: Ludovic Rousseau +Date: Tue Apr 26 12:31:35 2005 +0000 + + we need pcsc-lite 1.2.9-beta7 and not just beta5 since we use the new + log API + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1443 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit e63610a341a212eb67e75b3b4eec020b143a4200 +Author: Ludovic Rousseau +Date: Tue Apr 26 12:29:45 2005 +0000 + + extra_egt(): rewrite the function comment + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1442 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 17 ++++++++++------- + 1 file changed, 10 insertions(+), 7 deletions(-) + +commit b3893229d72910717b91d3227a668f19ecc1a479 +Author: Ludovic Rousseau +Date: Tue Apr 26 12:16:26 2005 +0000 + + extra_egt(): reuse the same baud rate calculation formula + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1441 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit 82cd9c8f3a4d33c4a2b69e3379023eee1b5f6e19 +Author: Ludovic Rousseau +Date: Tue Apr 26 12:07:44 2005 +0000 + + extra_egt(): change two if() in one + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1440 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 20 +++++++++----------- + 1 file changed, 9 insertions(+), 11 deletions(-) + +commit d6ae38c433a49f1511d8d38b4aef911a97be06a8 +Author: Ludovic Rousseau +Date: Tue Apr 26 12:06:13 2005 +0000 + + change comments: TBi (i>2) is BWI/CWI not BWI/BCI + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1439 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit e5085993ede915759513ae17c90d60449c804a0c +Author: Ludovic Rousseau +Date: Mon Apr 25 13:34:27 2005 +0000 + + extra_egt(): some (bogus) cards require an extra EGT but the ATR does + not say so. We try to detect the bogus cards and set TC1=2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1438 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 75 insertions(+) + +commit 4836ed7fce18966fefc6a92d8284ff87772a485c +Author: Ludovic Rousseau +Date: Mon Apr 25 13:12:24 2005 +0000 + + light code reformating + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1437 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 19 +++++++------------ + 1 file changed, 7 insertions(+), 12 deletions(-) + +commit 742fc05a9b95af85715e45d8bc6b5161d6cb61c8 +Author: Ludovic Rousseau +Date: Fri Apr 22 09:04:44 2005 +0000 + + add Eutron SIM Pocket Combo + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1436 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 3 +++ + 1 file changed, 3 insertions(+) + +commit 876cd69fd4f49448b2fdfb22972132be9a806657 +Author: Ludovic Rousseau +Date: Thu Apr 21 07:41:27 2005 +0000 + + #include only if HAVE_STDINT_H is defined. + Some old FreeBSD do not have stdint.h. + + Thanks to Tilman Linneweh for the patch + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1427 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/checksum.c | 3 +++ + src/openct/checksum.h | 3 +++ + src/openct/proto-t1.h | 5 ++++- + 3 files changed, 10 insertions(+), 1 deletion(-) + +commit 5ffec89a3ce744af9dfef0a06bc61df7806cfe47 +Author: Ludovic Rousseau +Date: Wed Apr 13 21:39:15 2005 +0000 + + Eutron SIM Pocket Combo + (the reader is dual slot and is seen as two readers) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1426 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SIM_Pocket_Combo.txt | 98 ++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 98 insertions(+) + +commit cc1ef4576d9d12de472610b536b682c6ff91a646 +Author: Ludovic Rousseau +Date: Wed Apr 13 19:33:57 2005 +0000 + + RSA SecurID SID800 Hardware Authenticator + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1425 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/sid800.txt | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 48 insertions(+) + +commit 944df11e2dfdf46f45a964b443a6caca5b4a053b +Author: Ludovic Rousseau +Date: Tue Apr 12 19:17:26 2005 +0000 + + "Generic CCID reader" -> "Generic CCID driver" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1422 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b693ede628133e42a49c0cd95ee0d83c9bf8f40a +Author: Ludovic Rousseau +Date: Thu Mar 17 10:27:57 2005 +0000 + + ccid_error(): use log_msg() instead of debug_msg() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1411 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit f385af009e21393258de879cc7cab00249b1f54f +Author: Ludovic Rousseau +Date: Thu Mar 17 10:27:08 2005 +0000 + + change debug_msg() in log_msg() and add the priority argument + same for debug_xxd() changed in log_xxd() + + These functions are only used by the parse command and if the driver is + not used with pcsclite + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1410 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +commit e1adfb6c6d2a1a217d41c582dfbc50c07f6b9317 +Author: Ludovic Rousseau +Date: Thu Mar 17 10:24:41 2005 +0000 + + use pcsclite debuglog.h header file and use its Log?() macro instead of + debug_msg(). + + This adds color to the log messages because Log?() macros use log_msg() + instead of the deprecated debug_msg() function. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1409 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.h | 36 +++++++++++++++++------------------- + 1 file changed, 17 insertions(+), 19 deletions(-) + +commit 65929aa834d69d105ec37dc5c1194ddfbf05a20b +Author: Ludovic Rousseau +Date: Thu Mar 17 10:22:18 2005 +0000 + + init_driver(): use DEBUG_INFO2() instead of debug_msg() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1408 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +commit 69c3df2d223307325d196a19682a7472c63a5683 +Author: Ludovic Rousseau +Date: Thu Mar 17 10:16:06 2005 +0000 + + add "%option nounput" to avoid the compilation warning + "`yyunput' defined but not used" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1407 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/tokenparser.l | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 6e6c111d57a7ca2345a53b340618bcaad396c535 +Author: Ludovic Rousseau +Date: Thu Mar 17 10:14:20 2005 +0000 + + ATR_GetDefaultProtocol(): the message "no default protocol found in ATR. + Using T=0" is not CRITICAL but INFO only + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1406 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/atr.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9e3cc76629c1529313ee28392d079b5073fd1735 +Author: Ludovic Rousseau +Date: Thu Mar 17 10:13:02 2005 +0000 + + store & restore the value of LIBS around the macro + AC_CHECK_LIB(pcsclite,...) to avoid adding an automatic -lpcsclite to + LIBS + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1405 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 ++ + 1 file changed, 2 insertions(+) + +commit 49a333c205d369526ca96e114197257a3e1c4512 +Author: Ludovic Rousseau +Date: Thu Mar 17 10:11:14 2005 +0000 + + do not check for SCardEstablishContext is the user does NOT want to use + pcsc-lite (with --disable-pcsclite) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1404 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +commit f9148888fe39c6844f932c3261706bc71419373d (tag: ccid-0.9.3) +Author: Ludovic Rousseau +Date: Mon Mar 14 19:36:21 2005 +0000 + + release 0.9.3 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1400 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +commit b3a113153e104818056f45f31caf1936b1fb361b +Author: Ludovic Rousseau +Date: Mon Mar 14 18:56:53 2005 +0000 + + change licence from GNU GPL to GNU LGPL + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1399 0ce88b0d-b2fd-0310-8134-9614164e65ea + + COPYING | 672 +++++++++++++++++++++++++++++++------------------- + README | 18 +- + src/ccid.c | 20 +- + src/ccid.h | 20 +- + src/ccid_ifdhandler.h | 20 +- + src/ccid_serial.c | 26 +- + src/ccid_serial.h | 20 +- + src/ccid_usb.c | 20 +- + src/ccid_usb.h | 20 +- + src/commands.c | 20 +- + src/commands.h | 20 +- + src/debug.c | 20 +- + src/debug.h | 20 +- + src/defs.h | 20 +- + src/ifdhandler.c | 20 +- + src/openct/checksum.h | 20 +- + src/openct/proto-t1.h | 20 +- + src/utils.c | 20 +- + src/utils.h | 20 +- + 19 files changed, 603 insertions(+), 433 deletions(-) + +commit f6e74b9bb3d634cb3f0aa5b161882cdc7abe04e5 +Author: Ludovic Rousseau +Date: Mon Mar 14 18:48:56 2005 +0000 + + version 0.9.3 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1398 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 40d5c5790d72e09d54cd49efbcd7f131755f074e +Author: Ludovic Rousseau +Date: Fri Mar 4 21:30:00 2005 +0000 + + Add KAAN SIM III and KAAN mIDentity + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1397 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/KAAN_SIM_III.txt | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ + readers/mIDentity.txt | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 104 insertions(+) + +commit 0b72cf0d08d77557a6441f6ca600bf80c94de61d +Author: Ludovic Rousseau +Date: Fri Mar 4 21:17:25 2005 +0000 + + add HAVE_LIBPCSCLITE + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1396 0ce88b0d-b2fd-0310-8134-9614164e65ea + + config.h.in | 3 +++ + 1 file changed, 3 insertions(+) + +commit f9fe6e5f8e0fe7782502b97659f25a9a4a5d8a84 +Author: Ludovic Rousseau +Date: Fri Mar 4 21:17:03 2005 +0000 + + use $PCSC_LIBS instead of $PCSCLITE_LIBS since we used + PKG_CHECK_MODULES(PCSC, ...) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1395 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5f5d8521c43b0228e5820c2329faffc04c5855a5 +Author: Ludovic Rousseau +Date: Fri Mar 4 21:07:01 2005 +0000 + + add Kobil KAAN mIDentity in supported reader list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1394 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 4 +++- + readers/supported_readers.txt | 1 + + 2 files changed, 4 insertions(+), 1 deletion(-) + +commit 4581bdc3e08b29aebf9ec1c5814739306a6996d9 +Author: Ludovic Rousseau +Date: Fri Mar 4 11:14:16 2005 +0000 + + add Kobil KAAN SIM III in supported readers list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1393 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + readers/supported_readers.txt | 1 + + 2 files changed, 3 insertions(+) + +commit b6fb77395cf76c79fceffc0d1cff988e77c394c6 +Author: Ludovic Rousseau +Date: Fri Mar 4 10:44:07 2005 +0000 + + add SCR 3310 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1392 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + readers/supported_readers.txt | 1 + + 2 files changed, 2 insertions(+) + +commit 22745e881df361ea4298c2acfa486c84a57029f8 +Author: Ludovic Rousseau +Date: Fri Mar 4 10:31:52 2005 +0000 + + SCR3310 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1391 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCR3310.txt | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 48 insertions(+) + +commit d84c45e6b9545db953f5302479cbd65528e3bcf4 +Author: Ludovic Rousseau +Date: Mon Feb 28 09:35:56 2005 +0000 + + use ATR_t instead of ATR + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1368 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + src/towitoko/atr.c | 10 +++++----- + 2 files changed, 6 insertions(+), 6 deletions(-) + +commit acc4ae2054a8acf8aab5f4314facab91814a060b +Author: Ludovic Rousseau +Date: Mon Feb 28 09:34:20 2005 +0000 + + rename ATR struct to ATR_t do not conflict with ATR field defined by + PCSC/ifdhandler.h. + This allows compilation using tcc (Tiny C Compiler) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1367 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/atr.h | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +commit 5e5316d08befc367c409611fea005b2329cecaac +Author: Ludovic Rousseau +Date: Sun Feb 27 21:13:39 2005 +0000 + + check that we can link with libpcsclite needed by + examples/scardcontrol.c + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1361 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 0979bb41887a2eb96a08ff782b887828fea5d20c +Author: Ludovic Rousseau +Date: Sun Feb 27 21:12:02 2005 +0000 + + exits with an error if usbdropdir is not defined + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1360 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 3 +++ + 1 file changed, 3 insertions(+) + +commit 2930991a9ef8f177d4e4180f7daa9084cf0447b9 +Author: Ludovic Rousseau +Date: Sun Feb 27 21:03:14 2005 +0000 + + if /usr/local/lib/pkgconfig/libpcsclite.pc exists (default pcsc-lite + configuration) we exit telling the user to use + PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1359 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit dacea72948485158838732b48a3210673cfd0153 +Author: Ludovic Rousseau +Date: Sun Feb 27 20:53:15 2005 +0000 + + do not check for pkg-config since we can do without it + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1358 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 1 - + 1 file changed, 1 deletion(-) + +commit ce6140725162529a56f007832bab184e009c2749 +Author: Ludovic Rousseau +Date: Fri Feb 25 17:29:50 2005 +0000 + + typo: correct ICC by CCID where needed + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1356 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CardMan3121.txt | 2 +- + readers/CherryXX33.txt | 2 +- + readers/CherryXX44.txt | 2 +- + readers/GemPC433_SL.txt | 2 +- + readers/KAAN_Advanced.txt | 2 +- + readers/KAAN_Base.txt | 2 +- + readers/SCR331-DI.txt | 2 +- + readers/SCR331.txt | 2 +- + readers/SCR335.txt | 2 +- + readers/SPR532.txt | 2 +- + 10 files changed, 10 insertions(+), 10 deletions(-) + +commit f2041548e8a71d9e188d17e5e2ff3956db875c45 +Author: Ludovic Rousseau +Date: Fri Feb 25 17:26:57 2005 +0000 + + typo: used "ICC" instead of "CCID" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1355 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit da797546de3cb496526d7b2f6466cfdf9adac5c2 +Author: Ludovic Rousseau +Date: Fri Feb 25 17:25:44 2005 +0000 + + IFDHSetProtocolParameters(): return immediately if the reader has the + bit CCID_CLASS_AUTO_PPS_PROP set since he will perform PPS and + SetParameters himself + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1354 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 4ddd22fd20b0c7db0a199bae6a61f1de22431d72 +Author: Ludovic Rousseau +Date: Fri Feb 25 17:24:48 2005 +0000 + + #define CCID_CLASS_AUTO_PPS_PROP 0x00000040 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1353 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + 1 file changed, 1 insertion(+) + +commit bd74fde9051ba1ef589d9728854a420ddf94d273 +Author: Ludovic Rousseau +Date: Fri Feb 25 17:19:00 2005 +0000 + + IFDHSetProtocolParameters(): calculate the value of pps[2] (TA1) even if + CCID_CLASS_AUTO_PPS_CUR bit is set and no PPS will be generated by the + driver since this value is also used later by the SetParameters() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1352 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +commit 2a4d24fd066ffc9253161b6b020160d39b621607 +Author: Ludovic Rousseau +Date: Fri Feb 25 17:14:46 2005 +0000 + + IFDHSetProtocolParameters(): use "card_baudrate <= ccid_desc->dwMaxDataRate" + instead of "card_baudrate < ccid_desc->dwMaxDataRate" to not miss the + maximum speed value + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1351 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 577e393cdb17da91915652c7b5e036e557854ad3 +Author: Ludovic Rousseau +Date: Fri Feb 25 08:20:35 2005 +0000 + + we do not need to distribute mkinstalldirs + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1350 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 1 - + 1 file changed, 1 deletion(-) + +commit 032ef03aaaa57d85129b54113ecba79fa828a3a4 +Author: Ludovic Rousseau +Date: Fri Feb 25 08:15:27 2005 +0000 + + define WITHOUT_PCSC=false when pcsclite _is_ used + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1349 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 ++ + 1 file changed, 2 insertions(+) + +commit eebd50be3b685dc37bb98d4cb2e8a0be73fe7041 +Author: Ludovic Rousseau +Date: Wed Feb 23 13:19:23 2005 +0000 + + #include instead of to get correct definition of + struct timeval under Mac OS X + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1346 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b222e0b865b8a05949d0354ab9eb8bbcc0238ca3 +Author: Ludovic Rousseau +Date: Wed Feb 23 12:15:54 2005 +0000 + + if you use --disable-pcsclite and do _not_ want to see the logs sent to + stderr just #undef LOG_TO_STDERR + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1343 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +commit 382cf211be412c2436dc5b2cf079cc7acb52430e +Author: Ludovic Rousseau +Date: Wed Feb 23 12:08:51 2005 +0000 + + if --disable-pcsclite is used we must link the library with debug.c + to provide debug_msg() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1342 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 1 + + src/Makefile.am | 6 +++++- + 2 files changed, 6 insertions(+), 1 deletion(-) + +commit 893f57b4f6d404d505ad13164e08278136f8e8bc +Author: Ludovic Rousseau +Date: Wed Feb 23 09:59:59 2005 +0000 + + use @PCSC_CFLAGS@ and @PCSC_LIBS@ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1341 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/Makefile.am | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +commit 715640f3b014b011e2068abe2bd2d0731058c3c1 +Author: Ludovic Rousseau +Date: Mon Feb 21 14:06:53 2005 +0000 + + OpenSerialByName(): use tx_buffer[] = { 0x02 } insead of "\x02" since we + want 1 byte only and not a null-terminated string + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1330 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 628d3679a254fa020edda293860cf5bca93be001 +Author: Ludovic Rousseau +Date: Mon Feb 21 12:29:53 2005 +0000 + + use @PCSC_CFLAGS@ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1329 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit dbac8ba9e36517237b48060788ca59aec578bacb +Author: Ludovic Rousseau +Date: Mon Feb 21 12:29:32 2005 +0000 + + use pkg-config(1) to find everything related to pcsc-lite + + if you installed pcsc-lite in /usr/local you may use + $ PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure + + if you do not have pkg-config installed you may use + $ CFLAGS=-I/usr/local/include/PCSC ./configure + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1328 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 56 +++++++++++--------------------------------------------- + 1 file changed, 11 insertions(+), 45 deletions(-) + +commit 6010e01b5062df0ceabe892732f757c18789541f +Author: Ludovic Rousseau +Date: Sun Feb 20 14:34:42 2005 +0000 + + add an "interface field" in _usbDevice. This value is set in OpenUSB() + and used in CloseUSB(). + + The struct usb_device structure is half "corrupted" after the USB device + is removed and we wanted to use it when when closing the driver after a + reader removal. This caused a crash with libusb 0.1.10. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1327 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 14 +++++--------- + 1 file changed, 5 insertions(+), 9 deletions(-) + +commit 16a615f434b3791949e7ac394d9be06b28a26c29 +Author: Ludovic Rousseau +Date: Sun Feb 20 14:07:40 2005 +0000 + + add Kobil KAAN Base & KAAN Advanced readers in the supported list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1326 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 30be0ad8196d195c6a5f55309b789fa6f83341d8 +Author: Ludovic Rousseau +Date: Sun Feb 20 14:03:07 2005 +0000 + + Bogus_firmwares[]: add Kobil KAAN Base & KAAN Advanced readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1325 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 9364d5746c02c467c4a05448f0006672cb438bb2 +Author: Ludovic Rousseau +Date: Sun Feb 20 14:01:19 2005 +0000 + + add Kobil KAAN Base & KAAN Advanced readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1324 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 2135e832240120d8cdbbcc971e70dda2e1615cd9 +Author: Ludovic Rousseau +Date: Sun Feb 20 14:00:46 2005 +0000 + + firmware 0.37 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1323 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/KAAN_Advanced.txt | 5 +++-- + readers/KAAN_Base.txt | 5 +++-- + 2 files changed, 6 insertions(+), 4 deletions(-) + +commit dc87ca06ed059d8d430facd7d68d84c44301ec36 +Author: Ludovic Rousseau +Date: Fri Feb 4 08:12:04 2005 +0000 + + new firmware (but still with version 1.0) with the wMaxPacketSize bug removed + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1322 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACR38.txt | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit a670c9c7b5f473c0857848155a4b8c1ff1a57614 +Author: Ludovic Rousseau +Date: Wed Feb 2 18:46:45 2005 +0000 + + move the ACR 38 from Unsupported to Supported list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1321 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 12 +++++------- + 1 file changed, 5 insertions(+), 7 deletions(-) + +commit bd30b14d2d51e2859be683129d9cbafa4e1e28ab +Author: Ludovic Rousseau +Date: Wed Jan 26 18:24:56 2005 +0000 + + add the new or missing readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1319 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +commit cd1a49b4a9889fb8d3b2f166c3c40288aa94108b +Author: Ludovic Rousseau +Date: Wed Jan 26 18:24:30 2005 +0000 + + new readers descriptions + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1318 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CherryXX44.txt | 54 +++++++++++++++++++++++++++++++++++++++++++++++ + readers/KAAN_Advanced.txt | 53 ++++++++++++++++++++++++++++++++++++++++++++++ + readers/KAAN_Base.txt | 51 ++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 158 insertions(+) + +commit a63e8e1977ebdca950e907ac12d72d7a91fcdf0b +Author: Ludovic Rousseau +Date: Thu Jan 20 19:54:12 2005 +0000 + + add Cherry XX44 keyboard (SmartBoard G83-6744) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1317 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + 1 file changed, 2 insertions(+) + +commit 1f2cda2df646a6857a6ec2e31846b04b6262770e +Author: Ludovic Rousseau +Date: Thu Jan 20 19:51:21 2005 +0000 + + add Cherry XX44 (SmartBoard G83-6744) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1316 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 1 + + 1 file changed, 1 insertion(+) + +commit 0e8e2c94a7876a9396d148ced8c6c001cd361719 +Author: Ludovic Rousseau +Date: Thu Jan 13 10:48:47 2005 +0000 + + move the SCM Micro readers from unsupported to supported list and + document how to upgrade the firmwares + + Thanks to Torsten Maykranz for his support + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1314 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 17 ++++++++++++----- + 1 file changed, 12 insertions(+), 5 deletions(-) + +commit 3241e4c26dcd7825ecab7ac10c64f34b0cffca7b +Author: Ludovic Rousseau +Date: Thu Jan 13 10:43:58 2005 +0000 + + New model with firmware 5.14 (instead of 4.16) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1313 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCR335.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit bb24f611cb4f7ec05da78efa903f1e32bbac0d2c +Author: Ludovic Rousseau +Date: Thu Jan 13 10:37:40 2005 +0000 + + Bogus_firmwares[]: the 3 SMC readers had the same (cut-n-paste) USB + identification + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1312 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit d22721e1dad0f81b8c9af8b53292da5ac3eb5ad3 +Author: Ludovic Rousseau +Date: Thu Jan 13 09:35:16 2005 +0000 + + CmdXfrBlockCHAR_T0(): move a variable declaration at the beginning of + the function since ISO C89 forbids mixed declarations and code + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1311 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e24a00e5664ca1d5c464e6a29496155e2a1fa215 +Author: Ludovic Rousseau +Date: Thu Jan 13 09:32:17 2005 +0000 + + SecurePIN(): proprietary command to add the PIN code in the APDU without + any padding (this is not possible with the CCID specs). + + Thanks to Martin Paljak for the patch. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1310 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +commit bfbb324ca2ad96535da746954999993743335d7b +Author: Ludovic Rousseau +Date: Thu Jan 13 09:21:11 2005 +0000 + + define SPR532 USB identification + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1309 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + 1 file changed, 1 insertion(+) + +commit 0cacd88cd13dc1b0b82faa10ade9a245fa7b5a6b +Author: Ludovic Rousseau +Date: Tue Jan 11 14:30:36 2005 +0000 + + typo: shat -> what + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1302 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 99ece70b632d9fedf07ab1381406b4f826a7e0f2 +Author: Ludovic Rousseau +Date: Sun Jan 9 21:29:57 2005 +0000 + + SecurePIN(), CCID_Transmit(), SetParameters(): check that the user + provided command is not too large (avoid a possible buffer overflow) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1301 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +commit a4ec75b6aa66a64806a685d612f563b657f1f5df +Author: Ludovic Rousseau +Date: Sun Jan 9 21:27:41 2005 +0000 + + The APDU now comes _after_ the CCID structure as described the CCID + specifications. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1300 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 29 +++++++++++++++-------------- + 1 file changed, 15 insertions(+), 14 deletions(-) + +commit 92980442eb4f7053d1b03aa5aa617327ecac33cc +Author: Ludovic Rousseau +Date: Sun Jan 9 21:26:29 2005 +0000 + + SecurePIN(): directly use the user buffer passed instead of reversing + the APDU/CCID structure. It is now as described in the CCID + specifications. + + Thanks to Martin Paljak. I was wrong. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1299 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 47 +++++------------------------------------------ + 1 file changed, 5 insertions(+), 42 deletions(-) + +commit 2f90bc4c08ba5b066baa5cdaf0cad2b93cf11b87 +Author: Ludovic Rousseau +Date: Sun Dec 19 17:13:27 2004 +0000 + + SPR 532 firmware previous to 5.04 is bogus regarding min/max pin lengths + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1298 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5878c9b84bdaeda87f22473bf2fd00223ab1bd4a +Author: Ludovic Rousseau +Date: Sun Dec 19 17:09:05 2004 +0000 + + update with firmware 5.04 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1297 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SPR532.txt | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +commit f6fbe0fece52195734c7be87201477b55e1987df +Author: Ludovic Rousseau +Date: Wed Oct 27 13:52:44 2004 +0000 + + OpenSerialByName(): use %s instead of %d for dev_name + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1292 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0b9b2f5f8cd323a5ea6cec8bbe2d6c9eb7282545 +Author: Ludovic Rousseau +Date: Wed Oct 20 13:57:38 2004 +0000 + + set wPINMaxExtraDigit: set max to 8 (instead of 4) to differentiate it + from min (set to 4) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1290 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 54b75299fe6c5f57452381e491d49997233363ec +Author: Ludovic Rousseau +Date: Wed Oct 20 13:56:25 2004 +0000 + + in wPINMaxExtraDigit the bytes order is max,min and not min,max. + The comments were wrong + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1289 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 593ba00f0a17b1e212355670a04a6e7c5fb25139 +Author: Ludovic Rousseau +Date: Tue Oct 19 08:41:49 2004 +0000 + + add Oz776 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1288 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 4 ++++ + 1 file changed, 4 insertions(+) + +commit cde1f152dab5c21808ce66b90f832189c68aa0ea +Author: Ludovic Rousseau +Date: Tue Oct 19 08:40:42 2004 +0000 + + check firmware version to avoid firmwares with bugs. You can still use a + bigus firmware by setting DRIVER_OPTION_USE_BOGUS_FIRMWARE in Info.plist + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1287 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist | 12 ++++++++++ + src/ccid_ifdhandler.h | 1 + + src/ccid_usb.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 75 insertions(+) + +commit 66bc27b23a63bf4682c729679cd3e2bf0a8bc5da +Author: Ludovic Rousseau +Date: Tue Oct 19 07:22:07 2004 +0000 + + Add support of character level communication (CCID_CLASS_CHARACTER). + + Thanks to Jeffrey Dai + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1286 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 358 +++++++++++++++++++++++++++++++++++++++++++++++++- + src/commands.h | 4 +- + src/openct/proto-t1.c | 59 +++++++-- + src/towitoko/pps.c | 3 +- + 4 files changed, 404 insertions(+), 20 deletions(-) + +commit bdaa8ed0c5086ec34534e60504532e80ed55f6e9 +Author: Ludovic Rousseau +Date: Thu Oct 14 14:33:39 2004 +0000 + + add idVendor & idProduct using the new parse command + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1285 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/DellSCRK.txt | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +commit f4e225e8ca3bdbebdbd9786ed031be5a00e8944c +Author: Ludovic Rousseau +Date: Thu Oct 7 20:58:19 2004 +0000 + + reorganize the list and add Oz776S.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1284 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 18 ++++++++++++++---- + 1 file changed, 14 insertions(+), 4 deletions(-) + +commit 6138bfe6213eed01536408372e6b5becb5c2e495 +Author: Ludovic Rousseau +Date: Thu Oct 7 20:40:15 2004 +0000 + + O2Micro Oz776S USB Hub smartcard reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1283 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Oz776S.txt | 46 ++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 46 insertions(+) + +commit b401f26dcaddb37c77ca9a34c957289930acb8a9 +Author: Ludovic Rousseau +Date: Thu Oct 7 20:34:53 2004 +0000 + + add idVendor & idProduct using the new parse command + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1282 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCR331-DI.txt | 14 ++++++++++---- + readers/SCR335.txt | 9 ++++++--- + readers/SPR532.txt | 8 +++++--- + 3 files changed, 21 insertions(+), 10 deletions(-) + +commit f3bc70350a983b2a0e14286b6369bfbc41a09c5a +Author: Ludovic Rousseau +Date: Thu Oct 7 20:28:49 2004 +0000 + + the first argument of get_desc() is lun instead of channel and the + function uses LunToReaderIndex() to get the reader index + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1281 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 14 ++++++++------ + src/ccid_usb.h | 2 +- + 2 files changed, 9 insertions(+), 7 deletions(-) + +commit 52278b18d0b8c42ad6b23d4ccf0b1772904a4813 +Author: Ludovic Rousseau +Date: Thu Oct 7 20:27:16 2004 +0000 + + use lun instead of channel as first argument to get_desc() and use the + returned value to detect an error + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1280 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 3dd9f9ac4d548cda232bc8dd233ab65a3f236111 +Author: Ludovic Rousseau +Date: Thu Oct 7 19:59:53 2004 +0000 + + add idVendor & idProduct using the new parse command + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1279 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCR331.txt | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +commit c3f085f8283c2cf8845c4e4f10025a84c57979d5 +Author: Ludovic Rousseau +Date: Wed Oct 6 12:13:00 2004 +0000 + + add idVendor & idProduct using the new parse command + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1278 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACR38.txt | 9 ++++++--- + readers/CardMan3121.txt | 7 +++++-- + readers/CherryXX33.txt | 7 +++++-- + readers/DellSK-3106.txt | 7 +++++-- + readers/GemPC433_SL.txt | 7 +++++-- + readers/GemPCKey.txt | 7 +++++-- + readers/GemPCTwin.txt | 7 +++++-- + readers/LTC31.txt | 7 +++++-- + 8 files changed, 41 insertions(+), 17 deletions(-) + +commit 3bda85aa2996ef0809295f60c5ea64e35cf4d8d8 +Author: Ludovic Rousseau +Date: Wed Oct 6 12:01:29 2004 +0000 + + display idVendor and idProduct + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1277 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +commit 2dc2b5606ce244a1d05ce8e0831ac3938726ffe7 +Author: Ludovic Rousseau +Date: Wed Oct 6 11:52:45 2004 +0000 + + display USB bcdDevice field. Is it the device firmware release? + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1276 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 859a9d1935356d0635b1bd39a750e46a09e63e95 +Author: Ludovic Rousseau +Date: Wed Oct 6 11:42:41 2004 +0000 + + add support of "Character level exchange" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1275 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 24 ++++++++++++++++++------ + 1 file changed, 18 insertions(+), 6 deletions(-) + +commit e1b17f1995a2927c3f9d79f7280d2f973b7947fb +Author: Ludovic Rousseau +Date: Mon Oct 4 08:09:13 2004 +0000 + + do not redefine PKG_CONFIG_PATH when checking the pcsc-lite version + since the variable is already defined a few lines above + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1265 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6ac9a2d7fd60326ef562428a175fb3db19cb8658 +Author: Ludovic Rousseau +Date: Sun Oct 3 12:52:28 2004 +0000 + + add "THIS PROGRAM IS NOT DESIGNED AS A TESTING TOOL! + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1263 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 760e81e269fd976af97b1193888b593a85742def +Author: Ludovic Rousseau +Date: Thu Sep 30 14:12:20 2004 +0000 + + mask bStatus to get the ICC state since bSatus may also indicate + an error in b6-b7 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1261 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit ec36229216a089a9af3fa39b244dfe0f94a42d49 +Author: Ludovic Rousseau +Date: Thu Sep 30 14:05:54 2004 +0000 + + #define CCID_CLASS_CHARACTER + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1260 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + 1 file changed, 1 insertion(+) + +commit a8821161abad762191a9a0db119145618aabd305 +Author: Ludovic Rousseau +Date: Thu Sep 30 14:03:57 2004 +0000 + + define OZ776 USB identification + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1259 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + 1 file changed, 1 insertion(+) + +commit f744032b7329d4f01f298938754b4ea06ad36063 +Author: Ludovic Rousseau +Date: Thu Sep 30 14:02:35 2004 +0000 + + define CCID_ICC_STATUS_MASK and status states + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1258 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 526d20c5c9cb391d84e762bef74b1f77eebc8218 +Author: Ludovic Rousseau +Date: Thu Sep 30 14:00:13 2004 +0000 + + CmdGetSlotStatus(): card absent or mute is not an communication error + (even if the CCID command result indicates a command failure) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1257 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 9089f65bfc31a08d79527f9c358a0d8e4dfcb9ce +Author: Ludovic Rousseau +Date: Thu Sep 30 13:57:07 2004 +0000 + + get_ccid_usb_interface(): the O2Micro OZ776S reader has a wrong USB + descriptor. The extra[] field is associated with the last endpoint instead + of the main USB descriptor. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1256 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 32 +++++++++++++++++++++++++++++++- + 1 file changed, 31 insertions(+), 1 deletion(-) + +commit 5d852348285eba0c88a3865fa2b89b4311ca185f +Author: Ludovic Rousseau +Date: Wed Sep 29 08:08:39 2004 +0000 + + use @AM_CPPFLAGS@ (defined by configure.in) instead of `pkg-config + libpcsclite --cflags` since PKG_CONFIG_PATH may not be correct here + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1254 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/Makefile.am | 2 +- + src/Makefile.am | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 02cb4efbe5c7e6b47fbe85af355d6b53916e4418 +Author: Ludovic Rousseau +Date: Wed Sep 29 08:06:58 2004 +0000 + + define AM_CPPFLAGS=`pkg-config libpcsclite --cflags` here since we also + defined/exported a "valid" PKG_CONFIG_PATH + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1253 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 3 +++ + 1 file changed, 3 insertions(+) + +commit fba61945774207c5d543b92327ae9e0acca69f9e +Author: Ludovic Rousseau +Date: Wed Sep 29 07:13:14 2004 +0000 + + do not define parse_CFLAGS since AM_CPPFLAGS is already defined with the + same value + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1252 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 1 - + 1 file changed, 1 deletion(-) + +commit 32095468718571b56c34f6b1f733614e68d1945b +Author: Ludovic Rousseau +Date: Wed Sep 29 07:04:55 2004 +0000 + + try to find pkg-config files in /usr/local/lib/pkgconfig since pcsc-lite + installs them in this directory by default + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1251 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +commit 27b60d8146e17a0407defa403ee5eee25deb4330 +Author: Ludovic Rousseau +Date: Wed Sep 8 20:48:30 2004 +0000 + + ccid_open_hack(): do not use a null terminated C string for the + TPDU->APDU switch command since the command is NOT a C string + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1228 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit c14853165977f970eafd9beefe279a3bbedd753d +Author: Ludovic Rousseau +Date: Wed Sep 8 20:45:19 2004 +0000 + + CmdPowerOn(): do not use a null terminated C string for the EMV->ISO + switch command since the command is NOT a C string + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1227 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit dfe1a69ab3383993399aa8b72c8d36d63f102ad8 +Author: Ludovic Rousseau +Date: Wed Sep 8 20:41:24 2004 +0000 + + switch the Cherry xx33 reader in ISO mode if power up in EMV mode fails. + Thanks to St�phane Durand for the bug report. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1226 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 73eec3901ac64dd0bd43e615d1ac1f60108dc24b +Author: Ludovic Rousseau +Date: Wed Sep 8 20:40:05 2004 +0000 + + #define CHERRYXX33 0x046A0005 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1225 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + 1 file changed, 1 insertion(+) + +commit 54018310ce3cd97bb90076d24ab8eb300b5e537f +Author: Ludovic Rousseau +Date: Fri Sep 3 19:42:37 2004 +0000 + + IFDHSetProtocolParameters(): return the result value of SetParameters() + in case of error instead of always IFD_COMMUNICATION_ERROR. + + This will allow to return IFD_NOT_SUPPORTED in some cases and avoid a + PTS negociation failure (and card ignored) in pcscd. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1213 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +commit 978b087bba5ced03f951f152884dc622219ca21b +Author: Ludovic Rousseau +Date: Fri Sep 3 19:39:34 2004 +0000 + + SetParameters(): returns IFD_NOT_SUPPORTED if the CCID error is "command + not supported". + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1212 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit fab758be2cb0cce2418b1937b7c1719513a7c0b9 +Author: Ludovic Rousseau +Date: Tue Aug 24 07:58:01 2004 +0000 + + IFDHSetProtocolParameters(): the bmTCCKST bits shall be _set_ not cleared + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1196 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit d841aaf797155c9c1c9720144894cce5e7366de3 +Author: Ludovic Rousseau +Date: Tue Aug 24 07:34:10 2004 +0000 + + IFDHSetProtocolParameters(): we shall indicate the T=1 checksum used + (LRC/CRC) in the SetParameters() command + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1195 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 334e857e636247a47a2b94388231e958737ecb26 +Author: Ludovic Rousseau +Date: Tue Aug 24 07:32:27 2004 +0000 + + t1_negociate_ifsd: the frame size is 5 only for LRC checksum. The + correct size is (4 + t1->rc_bytes) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1194 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 4dd360272c00382c6982ce336ecd6498462861c5 +Author: Ludovic Rousseau +Date: Tue Aug 24 07:30:21 2004 +0000 + + ReleaseReaderIndex: return 0 since the function is not void () + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1193 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/utils.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit efcc1ad0da20ad4c615ca3b7b2c70ed56cc467b7 +Author: Ludovic Rousseau +Date: Tue Aug 17 16:56:19 2004 +0000 + + use the official doctype, public and system ids. Thanks to Ville Skytt� + and OpenCT + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1189 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 430640bfea8afad3464fcc6113db8c53da9a6ced (tag: ccid-0.9.2) +Author: Ludovic Rousseau +Date: Sun Aug 15 20:43:59 2004 +0000 + + release 0.9.2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1186 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 29 ++++++++++++++++++++++++++++- + 1 file changed, 28 insertions(+), 1 deletion(-) + +commit b41c6aad1d23d0c559bf3510722b88960f095922 +Author: Ludovic Rousseau +Date: Sun Aug 15 19:08:51 2004 +0000 + + use AM_CPPFLAGS = `pkg-config libpcsclite --cflags` + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1185 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/Makefile.am | 2 ++ + src/Makefile.am | 2 ++ + 2 files changed, 4 insertions(+) + +commit 2add197713b7f0f5c09b41f03f3293cecb932560 +Author: Ludovic Rousseau +Date: Sun Aug 15 19:08:25 2004 +0000 + + no need to define HAVE_PCSC_IFDHANDLER_H (the check section changed in + configure.in) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1184 0ce88b0d-b2fd-0310-8134-9614164e65ea + + config.h.in | 3 --- + 1 file changed, 3 deletions(-) + +commit cf95c10a85cdc2c0c2e98803f722cc684f6a9649 +Author: Ludovic Rousseau +Date: Sun Aug 15 19:07:48 2004 +0000 + + use `pkg-config libpcsclite --cflags` to locate ifdhandler.h and do not + use PCSC/ifdhandler.h but just ifdhandler.h + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1183 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +commit 8edafb9e059b4f9154eeca55f972223076ebe320 +Author: Ludovic Rousseau +Date: Tue Aug 10 15:38:46 2004 +0000 + + place the "Known problems" near the affected reader and not in a + independent section for clarification + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1165 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 31 +++++++++++++------------------ + 1 file changed, 13 insertions(+), 18 deletions(-) + +commit 7bf51992cff4a627d4ffb1a75c5f4f18d368c44e +Author: Ludovic Rousseau +Date: Fri Aug 6 13:29:00 2004 +0000 + + try to IFDHCloseChannel() only if we opened at least one reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1160 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit d2b110b0446c6010d54aaf14d85578971445f9a7 +Author: Ludovic Rousseau +Date: Fri Aug 6 11:56:07 2004 +0000 + + ccid_open_hack(): update the hack for the SCR331-DI contactless now we + use multi-slots + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1157 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +commit af876460f5798d3cc2385821e57ed0021098d39e +Author: Ludovic Rousseau +Date: Fri Aug 6 11:32:01 2004 +0000 + + IFDHICCPresence(): periodic debug message indicating the card presence/absence + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1156 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit aa18bf7ceb7b84625f76bfc1264c65dd87f1d997 +Author: Ludovic Rousseau +Date: Fri Aug 6 11:30:33 2004 +0000 + + use a much cleaner way to check presence of a contactless card with a + multislot SCR331-DI reader + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1155 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 19 +++++++++---------- + 1 file changed, 9 insertions(+), 10 deletions(-) + +commit fac0339cd4860b2c8cc60ec7ec300988e671135f +Author: Ludovic Rousseau +Date: Fri Aug 6 11:25:46 2004 +0000 + + IFDHICCPresence(): call get_ccid_descriptor() on reader_index instead of Lun + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1154 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit bd6ec648742a552408ff4cc87a446bb85c797134 +Author: Ludovic Rousseau +Date: Fri Aug 6 11:23:59 2004 +0000 + + FDHGetCapabilities() tag TAG_IFD_SLOT_THREAD_SAFE: Can NOT talk to + multiple slots at the same time (at least until it is fully validated) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1153 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 42c120e7cb4828cbe7f006a5206a1d56f7a93bfa +Author: Ludovic Rousseau +Date: Fri Aug 6 11:21:56 2004 +0000 + + IFDHCreateChannel()/IFDHCreateChannelByName(): if the OpenPort() call + fails we ReleaseReaderIndex() and do not call ccid_open_hack() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1152 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 18 ++++++++++++------ + 1 file changed, 12 insertions(+), 6 deletions(-) + +commit 451e44d912661e90204c7214b71a971b07f473e6 +Author: Ludovic Rousseau +Date: Fri Aug 6 11:18:41 2004 +0000 + + for multi-slots readers IFDHCreateChannel*()/OpenUSB is called for each + slot. If we are opening a new slot of an already opened reader we reuse + the same data (same libusb structures) and share the same pbSeq. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1151 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 27 +++++++++++++++++++++++++-- + 1 file changed, 25 insertions(+), 2 deletions(-) + +commit bdbf1c298a548a054cd6f208d34c0b0b3372273d +Author: Ludovic Rousseau +Date: Fri Aug 6 11:13:25 2004 +0000 + + use (*ccid_descriptor->pbSeq)++ instead of ccid_descriptor->bSeq++ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1150 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +commit 307b9d9585c1045b62bad619d2dce39d2c756f27 +Author: Ludovic Rousseau +Date: Fri Aug 6 11:00:25 2004 +0000 + + use pbSeq instead of bSeq + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1149 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 3 ++- + src/ccid_usb.c | 3 ++- + 2 files changed, 4 insertions(+), 2 deletions(-) + +commit b18525957229d6a7cab10e681bd89d5e38f3050f +Author: Ludovic Rousseau +Date: Fri Aug 6 10:57:06 2004 +0000 + + replace "unsigned char bSeq" by "unsigned char *pbSeq" so that two slots + of a same reader can share the same sequence number + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1148 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 40d812b805411d96d1b7746e2e93fd193714803b +Author: Ludovic Rousseau +Date: Fri Aug 6 10:19:48 2004 +0000 + + use a dynamic timeout when reading the serial port. + + The first timeout use when detecting the reader is 2 seconds to not wait + too long if no reader is connected. Later timeouts are set to 1 minute + to allow long time APDU. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1147 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 19 +++++++++++++------ + 1 file changed, 13 insertions(+), 6 deletions(-) + +commit 72041e9159a58f02c531d4b0fc5467da0f63e794 +Author: Ludovic Rousseau +Date: Wed Aug 4 21:30:14 2004 +0000 + + remove defaultFeatures management (was used for SCR331-DI hack) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1146 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 6 ------ + src/ccid_serial.c | 1 - + src/ccid_usb.c | 1 - + src/ifdhandler.c | 8 -------- + 4 files changed, 16 deletions(-) + +commit 50deebdc8083147bb358b78b7da7e1f6b7cfc239 +Author: Ludovic Rousseau +Date: Wed Aug 4 19:56:02 2004 +0000 + + add "parse_CFLAGS = `pkg-config libpcsclite --cflags`" so that parse.c + can find and use + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1145 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 1 + + 1 file changed, 1 insertion(+) + +commit 95639ed30d8895e297b8e29a89e8cf6ed0f8b95d +Author: Ludovic Rousseau +Date: Wed Aug 4 19:53:34 2004 +0000 + + do not use OpenUSB/CloseUSB but IFDHCreateChannel/IFDHCloseChannel to + use the ReaderIndex[] mechanism + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1144 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit d677a580bfd08a4fab3ddf60b2697ab011ca920b +Author: Ludovic Rousseau +Date: Wed Aug 4 19:51:16 2004 +0000 + + update copyright date (add 2004) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1143 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/utils.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ef5d582a44a9fb59e9411cc1c1742f4f867409f3 +Author: Ludovic Rousseau +Date: Wed Aug 4 19:50:45 2004 +0000 + + LunToReaderIndex(): debug message when Lun is not found + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1142 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/utils.c | 1 + + 1 file changed, 1 insertion(+) + +commit 90ea1f748e9b6fcecb4feb4809a6cd1089422428 +Author: Ludovic Rousseau +Date: Wed Aug 4 19:49:58 2004 +0000 + + GetNewReaderIndex(): debug message when ReaderIndex[] is full + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1141 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/utils.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit c6681aba57dcb3009699af0b7ac4c5523be76c31 +Author: Ludovic Rousseau +Date: Wed Aug 4 19:48:33 2004 +0000 + + GetNewReaderIndex(): store Lun in the first free ReaderIndex[] entry + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1140 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/utils.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 69ce4bbb73d552ad88ba2cee8db6c9c74af33bda +Author: Ludovic Rousseau +Date: Wed Aug 4 19:43:03 2004 +0000 + + typo: Receivig -> Receiving + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1139 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/pps.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b72659ac166a4e894165032d89ed357cdaed51c0 +Author: Ludovic Rousseau +Date: Wed Aug 4 19:42:18 2004 +0000 + + PPS_Exchange(): do not recalculate the PPS length from the received PPS + but take it from the number of bytes actually received (it may not be + a PPS) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1138 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/pps.c | 2 -- + 1 file changed, 2 deletions(-) + +commit 541fcf75a5bc26b2c49c79336f2fc474ec3d98a7 +Author: Ludovic Rousseau +Date: Wed Jul 28 08:36:57 2004 +0000 + + use reader_index instead of lun as reader identification + allocate (in IFDHCreateChannel*) and release (in IFDHCloseChannel) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1107 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 132 ++++++++++++++++++++++++++++++++----------------------- + 1 file changed, 78 insertions(+), 54 deletions(-) + +commit c84864c1d775535ea199b659941bd642468a7611 +Author: Ludovic Rousseau +Date: Wed Jul 28 08:33:18 2004 +0000 + + use reader_index instead of lun as reader identification + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1106 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 10 ++--- + src/ccid.h | 4 +- + src/ccid_ifdhandler.h | 2 +- + src/ccid_serial.c | 85 +++++++++++++++++++++------------------- + src/ccid_serial.h | 14 +++---- + src/ccid_usb.c | 102 ++++++++++++++++++++++++------------------------ + src/ccid_usb.h | 12 +++--- + src/commands.c | 106 ++++++++++++++++++++++++++------------------------ + src/commands.h | 27 +++++++------ + 9 files changed, 188 insertions(+), 174 deletions(-) + +commit a76f5007f2711d01d0c4c2f5004319a1eef2e177 +Author: Ludovic Rousseau +Date: Wed Jul 28 08:30:30 2004 +0000 + + use a more complex Lun -> reader transformation + (Lun>>16) is not usable for multi-slots readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1105 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/utils.c | 42 ++++++++++++++++++++++++++++++++++-------- + src/utils.h | 9 +++++---- + 2 files changed, 39 insertions(+), 12 deletions(-) + +commit cf42b3dcc2c61ac641411924dd8bfeb266fc1512 +Author: Ludovic Rousseau +Date: Tue Jul 27 06:42:57 2004 +0000 + + this code fails EMV test 1771-4 (should be a residue) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1103 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 26 ++++++++------------------ + 1 file changed, 8 insertions(+), 18 deletions(-) + +commit c82a9a3881b05b9a621be90ec101d7aa4659df1f +Author: Ludovic Rousseau +Date: Mon Jul 26 13:41:14 2004 +0000 + + - debug some cases + - add ISO 7816-3 rule number in comments + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1102 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 57 +++++++++++++++++++++++++++++++++++++++++++-------- + 1 file changed, 48 insertions(+), 9 deletions(-) + +commit 16c1e51ef1eaf6ea2ace1bb2770a00c88ad2f9c3 +Author: Ludovic Rousseau +Date: Mon Jul 26 09:16:16 2004 +0000 + + initialise ccid.defaultFeatures field + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1101 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 1 + + src/ccid_usb.c | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +commit 42b1167a87ae2bb5d3914b5cb8d46da19de7ca01 +Author: Ludovic Rousseau +Date: Thu Jul 22 10:01:37 2004 +0000 + + use pkg-config to test the release version of pcsc-lite + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1096 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +commit 6384995696929c8f71607b9359dd7791f673f838 +Author: Ludovic Rousseau +Date: Wed Jul 21 09:04:04 2004 +0000 + + version 0.9.2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1095 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8fea30d36b227b0230ca5bf93fa105b67a0ecea0 +Author: Ludovic Rousseau +Date: Wed Jul 21 09:02:44 2004 +0000 + + hack to support the SCR331-DI contactless interface + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1094 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 48 insertions(+) + +commit e4404f173d702b62c0ccadeb449f7f440d97dc2a +Author: Ludovic Rousseau +Date: Wed Jul 21 09:01:11 2004 +0000 + + ccid_open_hack(): detect and activate the contactless interface of the + SCR331-DI + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1093 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 30 ++++++++++++++++++++++++++++++ + 1 file changed, 30 insertions(+) + +commit f5a6c648827090edcac54fa47b5aed9d9ac65592 +Author: Ludovic Rousseau +Date: Wed Jul 21 09:00:09 2004 +0000 + + use bCurrentSlotIndex as the slot number in the CCID commands (instead of 0) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1092 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +commit ac980bd8d213a10708d9005a468f09743aaba7aa +Author: Ludovic Rousseau +Date: Wed Jul 21 08:59:28 2004 +0000 + + initialise bMaxSlotIndex and ccid.bCurrentSlotIndex fields + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1091 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 2 ++ + src/ccid_usb.c | 2 ++ + 2 files changed, 4 insertions(+) + +commit 90321a395c51384a38b957fd633c673a0910e53f +Author: Ludovic Rousseau +Date: Wed Jul 21 08:56:56 2004 +0000 + + add defaultFeatures field for multislot readers with different + dwFeatures for each slot. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1090 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit f2a1b9893edfdbaaa736c41a6ed928869fa36de8 +Author: Ludovic Rousseau +Date: Wed Jul 21 08:56:16 2004 +0000 + + add SCR331DI identification + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1089 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + 1 file changed, 1 insertion(+) + +commit 99787efe51e4963c2f4c982f9b4fe3da40b371b9 +Author: Ludovic Rousseau +Date: Wed Jul 21 08:55:31 2004 +0000 + + add bMaxSlotIndex and bCurrentSlotIndex fields to support multislot + readers (one USB device with two or more card readers) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1088 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit 9362970500e39b5fa96ad8e9ccb56973ccc43a99 +Author: Ludovic Rousseau +Date: Tue Jul 20 09:19:41 2004 +0000 + + remove "|| sent_length" in "if (retries == 0 || sent_length)" since it + is an OpenCT code that should not be needed with the new automata. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1087 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 80a23edfb4d337ebd82d473f12e7ac45766974aa +Author: Ludovic Rousseau +Date: Tue Jul 20 09:16:26 2004 +0000 + + update the copyright, add my name to reflect the same change in OpenCT + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1086 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 6300ef9feb7d54813ee88124d276a4fd417c01fe +Author: Ludovic Rousseau +Date: Mon Jul 19 14:58:16 2004 +0000 + + update IFDHControl() prototype to replace LPVOID by PUCHAR (prototype + changed in pcsc-lite-1.2.9-beta5) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1085 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit c18765aeb20164f5ea429e6cea507bdf5b3572fa +Author: Ludovic Rousseau +Date: Mon Jul 19 13:32:26 2004 +0000 + + BUG: I forgot to initialise the t1.lun field. It failed to work with + more than one readers and a T=1 card in a TPDU reader. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1084 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 2 +- + src/openct/proto-t1.c | 4 +++- + src/openct/proto-t1.h | 2 +- + 3 files changed, 5 insertions(+), 3 deletions(-) + +commit 45a1e4ed1fef27b0609e27a3f78b612a8fb79657 +Author: Ludovic Rousseau +Date: Mon Jul 19 09:36:09 2004 +0000 + + in resync: we set retries = 1 since when we return in the loop we have + retries--; + Without this retries goes negative and the test 'if (retries == 0)' will + not become true again before a looooong time. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1083 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 1 + + 1 file changed, 1 insertion(+) + +commit 3b3cea3c0ddaec32f7c5938ec0b99890d957f4ba +Author: Ludovic Rousseau +Date: Fri Jul 16 09:07:26 2004 +0000 + + OpenUSBByName(): use base 0 instead of 16 in strtoul() so that you can + express the decimal value 15 as: 15 (decimal), 0xF (hex) or 017 (octal). + + It is not really needed since the reader descriptions in Info.plist are + all in hex. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1079 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit ddc0af86a80ddc9868dbfb78f4b096c2edb59a48 +Author: Ludovic Rousseau +Date: Fri Jul 16 07:06:14 2004 +0000 + + init_driver(): use base 0 instead of 16 in strtoul() so that you can + express the decimal value 15 as: 15 (decimal), 0xF (hex) or 017 (octal) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1078 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 054c8156d354ad4de336a41421b202b186673809 +Author: Ludovic Rousseau +Date: Fri Jul 16 06:53:25 2004 +0000 + + rename PCSCLITE_MAX_READERS in CCID_DRIVER_MAX_READERS + + This value is not defined by pcsc-lite but is internal to the CCID + driver. By default pcsc-lite supports the same number of readers (16). + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1077 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_ifdhandler.h | 5 ++++- + src/ccid_serial.c | 4 ++-- + src/ccid_usb.c | 6 +++--- + src/ifdhandler.c | 4 ++-- + src/parse.c | 2 +- + src/utils.c | 2 +- + 6 files changed, 13 insertions(+), 10 deletions(-) + +commit 89fbee09b0b6fa925685e9a94c63ba67a9ef4002 +Author: Ludovic Rousseau +Date: Fri Jul 16 06:31:15 2004 +0000 + + BUG: CmdPowerOn(): use memmove() instead of memcpy() to copy the ATR + bytes since the source end destination buffers (with a more than 10 + bytes long ATR) overlaps. + + Bug spotted by splint http://www.splint.org/ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1076 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 11ae1401d50a4821fd83c053a4edafe8239faa8b +Author: Ludovic Rousseau +Date: Thu Jul 15 14:52:18 2004 +0000 + + use "uint8_t *" instead of "unsigned char *" in the prototype of + t1_state_t.checksum field. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1075 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit ac867c00c24cfb4e532bafa0079c8e5ba03fd0c2 +Author: Ludovic Rousseau +Date: Thu Jul 15 14:51:03 2004 +0000 + + initialise pcDesiredKey to NULL instead of 0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1074 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/tokenparser.l | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 19acba1d1afaad37c6ad2b7756a88c7e6bb34446 +Author: Ludovic Rousseau +Date: Thu Jul 15 14:08:52 2004 +0000 + + BUG in CmdXfrBlockTPDU_T1(): the t1_transceive() returned value was + stored in an unsigned int and tested if < 0 (error case). Of course the + test was never true. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1073 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +commit 8e273ff028b581b07f5db7cfe8149e448410a825 +Author: Ludovic Rousseau +Date: Thu Jul 15 09:31:04 2004 +0000 + + remove a useless break; after a goto; + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1071 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 1 - + 1 file changed, 1 deletion(-) + +commit 3359d9854f77236144961134cacbc39abc7cc190 +Author: Ludovic Rousseau +Date: Thu Jul 15 09:19:11 2004 +0000 + + in t1_transceive() and t1_negociate_ifsd() dad argument is unsigned. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1070 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 4 ++-- + src/openct/proto-t1.h | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 8f53ff3fbdc5a0db775f84c3e5062db5eae9a8a4 +Author: Ludovic Rousseau +Date: Thu Jul 15 09:11:18 2004 +0000 + + replace "unsigned char *" by "uint8_t *" to use the exact same prototype as in + the functions definition + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1069 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/checksum.h | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 24eecd25677ddd1d5476792a2a1aa4522a8e5d19 +Author: Ludovic Rousseau +Date: Thu Jul 15 08:48:59 2004 +0000 + + i2dw() is not used outside commands.c so declare it static + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1068 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 4 +++- + src/commands.h | 2 -- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit 25f498d60781ecf2e06c00f9066b5b6128b2ca80 +Author: Ludovic Rousseau +Date: Thu Jul 15 08:45:21 2004 +0000 + + allow splint to continue parsing after use of type fd_set + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1067 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 6d8ba310503fda42452e684e1900096b66e17558 +Author: Ludovic Rousseau +Date: Thu Jul 15 08:33:37 2004 +0000 + + CmdXfrBlockTPDU_T0() and CmdXfrBlockTPDU_T1() are internal functions so + declare them static + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1066 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 14 ++++++++++++-- + src/commands.h | 8 -------- + 2 files changed, 12 insertions(+), 10 deletions(-) + +commit c03757b3f380444cddd6e887119eb0d9b9ce9c95 +Author: Ludovic Rousseau +Date: Thu Jul 15 08:30:24 2004 +0000 + + atr tables are internal only so declare them static + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1065 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/atr.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit f057e1f1e4b2b6c2a5f161bc73ed3a0662dc395f +Author: Ludovic Rousseau +Date: Thu Jul 15 08:24:37 2004 +0000 + + define internal functions as static + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1064 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +commit 333ffffc388942c8494acb9b0ab56032254e181d +Author: Ludovic Rousseau +Date: Thu Jul 15 07:26:40 2004 +0000 + + remove unused functions + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1063 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/buffer.c | 96 ----------------------------------------------------- + src/openct/buffer.h | 9 ----- + 2 files changed, 105 deletions(-) + +commit 7c3d40140d0a9fca50e34d79dd6d6a6a3575659b +Author: Ludovic Rousseau +Date: Sat Jul 10 13:46:20 2004 +0000 + + change "previous_block[1]" in "previous_block[PCB]" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1062 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit 7c1a656fd577b24a2be263a02c91254d32415721 +Author: Ludovic Rousseau +Date: Sat Jul 10 13:32:15 2004 +0000 + + remove unused struct ifd_protocol_ops + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1061 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 19 ------------------- + 1 file changed, 19 deletions(-) + +commit 0e35b6a7eac8b35787d54846c0b7aa45ad8028a0 +Author: Ludovic Rousseau +Date: Sat Jul 10 13:23:12 2004 +0000 + + IFD_PROTOCOL_MORE -> IFD_PROTOCOL_T1_MORE + IFD_PROTOCOL_STATE -> IFD_PROTOCOL_T1_STATE + renamed to be in line with OpenCT + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1060 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.c | 8 ++++---- + src/openct/proto-t1.h | 4 ++-- + 2 files changed, 6 insertions(+), 6 deletions(-) + +commit 2d1652591db40d482c064553dfeaab1591428818 +Author: Ludovic Rousseau +Date: Fri Jul 9 14:08:28 2004 +0000 + + explicitely cast the returned value as (void) if we don't use it + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1059 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + src/ifdhandler.c | 4 ++-- + src/parse.c | 2 +- + 3 files changed, 4 insertions(+), 4 deletions(-) + +commit 148244369a0dabd8a087e0a69caf3d705169ea44 +Author: Ludovic Rousseau +Date: Fri Jul 9 14:06:58 2004 +0000 + + IFDHSetProtocolParameters(): test the return value of SetParameters() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1058 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit cfe0ff373c39675b3c8bd3917d6672d756ea4778 +Author: Ludovic Rousseau +Date: Fri Jul 9 13:29:02 2004 +0000 + + ccid_parse_interface_descriptor() is now static + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1057 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit a5cb0271869b8125206fb677d2201183107fca55 +Author: Ludovic Rousseau +Date: Fri Jul 9 13:27:56 2004 +0000 + + make channel variable (unsigned int) instead of (int) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1056 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 1d34c23e68f5625b53ceddcbabe46ba380fdded9 +Author: Ludovic Rousseau +Date: Fri Jul 9 13:25:04 2004 +0000 + + include so splint can parse the file + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1055 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 95b49631eea4f1fe04f68c2dc3bdb289b43c734a +Author: Ludovic Rousseau +Date: Fri Jul 9 13:23:37 2004 +0000 + + mark potentially null values as /*@null@*/ for splint + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1054 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 2 +- + src/ccid_usb.c | 4 ++-- + src/ccid_usb.h | 4 ++-- + 3 files changed, 5 insertions(+), 5 deletions(-) + +commit a34e3dcaa16db5daa61b6650317f65e83b1eaf44 +Author: Ludovic Rousseau +Date: Fri Jul 9 13:21:44 2004 +0000 + + mark unused arguments as /*@unused@*/ for splint + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1053 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 3 ++- + src/ccid_usb.c | 2 +- + src/ifdhandler.c | 4 ++-- + src/openct/proto-t1.c | 2 +- + src/parse.c | 2 +- + 5 files changed, 7 insertions(+), 6 deletions(-) + +commit e221687df2ceb29a2fcd7c68d8ab2c5c1f80d3eb +Author: Ludovic Rousseau +Date: Fri Jul 9 13:19:09 2004 +0000 + + include so splint can parse the file + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1052 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 8c954eb2085fafb898ade241975fde091012956f +Author: Ludovic Rousseau +Date: Fri Jul 9 08:45:21 2004 +0000 + + the buffer var_text[] was, in fact, used outside its declaration + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1051 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 917584da5e7ddc6d1d0ef6047da12699f39bf908 +Author: Ludovic Rousseau +Date: Fri Jul 9 08:40:15 2004 +0000 + + ReadChunk() and get_bytes() are internal use in ccid_serial.c so declare + them static + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1050 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 10 +++++++++- + src/ccid_serial.h | 5 ----- + 2 files changed, 9 insertions(+), 6 deletions(-) + +commit ee473cba661982abbfa7eb2bed3691c899ec2fd8 +Author: Ludovic Rousseau +Date: Fri Jul 9 08:28:44 2004 +0000 + + lun is (unsigned int) so reader = LunToReaderIndex(lun) is also (unsigned int) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1049 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 4 ++-- + src/ccid_usb.c | 8 ++++---- + 2 files changed, 6 insertions(+), 6 deletions(-) + +commit 9e28247942c6f16b0d5210c8ea3febcee54dbe21 +Author: Ludovic Rousseau +Date: Fri Jul 9 08:25:51 2004 +0000 + + OpenSerialByName(): arguments of CmdEscape() are unsigned + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1048 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit dc3067683df1d9105bc16139b7cc340ea093266d +Author: Ludovic Rousseau +Date: Fri Jul 9 08:22:24 2004 +0000 + + replace "121234" by "123456" to make it more clear it is a memory reservation + for 6 characters + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1047 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit eb1ee3589fbd1342c89010117a0e3d1078100a73 +Author: Ludovic Rousseau +Date: Fri Jul 9 08:21:07 2004 +0000 + + remove a unneeded cast in (int)lun + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1046 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d23cbdecd51417e4c9aaa5f26081abc8e30a56f7 +Author: Ludovic Rousseau +Date: Fri Jul 9 08:18:17 2004 +0000 + + allow splint to continue parsing after use of type fd_set + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1045 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit ef7ed8b18b55559d46565a1d7c6a4c2879bd3962 +Author: Ludovic Rousseau +Date: Fri Jul 9 08:11:11 2004 +0000 + + ReadSerial(): the unknown card movement byte is in "c" not "buffer[3]" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1044 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 79d640676ede09a7b15273bd538a698d25d741af +Author: Ludovic Rousseau +Date: Fri Jul 9 07:10:17 2004 +0000 + + lun is (unsigned int) instead of (int) + + Avoid a warning by splint in #define LunToReaderIndex(Lun) (Lun>>16) + Left operand of >> may be negative (int): lun >> 16 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1043 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 2 +- + src/ccid.h | 4 ++-- + src/ccid_ifdhandler.h | 2 +- + src/ccid_serial.c | 18 +++++++++--------- + src/ccid_serial.h | 23 ++++++++++++++++------- + src/ccid_usb.c | 12 ++++++------ + src/ccid_usb.h | 15 ++++++++++----- + src/commands.c | 23 ++++++++++++----------- + src/commands.h | 32 +++++++++++++++++++++----------- + src/ifdhandler.c | 2 +- + 10 files changed, 79 insertions(+), 54 deletions(-) + +commit 8e03dc83430ebc4dc18438e01abfd40666cedb27 +Author: Ludovic Rousseau +Date: Fri Jul 2 14:12:36 2004 +0000 + + replace VENDOR pattern by MAGIC_VENDOR since we also have a VENDOR in + IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE and then a collision. + + same change for PRODUCT and FRIENDLYNAME to be homogenous. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1023 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist | 6 +++--- + src/create_Info_plist.pl | 6 +++--- + 2 files changed, 6 insertions(+), 6 deletions(-) + +commit 1eccdbc20c9b9bbec62978ac51a2c8ae4c707056 +Author: Ludovic Rousseau +Date: Fri Jul 2 13:58:11 2004 +0000 + + OpenSerialByName(): perform a command (get the reader firmware) to be + sure a GemPC Twin (serial or pcmcia) reader is connected + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1022 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +commit c5c734bbb684ddcc491672c282d8bb690fb69ec4 +Author: Ludovic Rousseau +Date: Fri Jul 2 12:06:44 2004 +0000 + + present where the files come from and what I did + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1021 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/README | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit 264cf2ce141bf47385d841360d584e64b1a74187 (tag: ccid-0.9.1) +Author: Ludovic Rousseau +Date: Thu Jul 1 11:42:39 2004 +0000 + + version 0.9.1 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1019 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b61dbabfd807967ab8edaf445300983827ce7588 +Author: Ludovic Rousseau +Date: Thu Jul 1 11:38:03 2004 +0000 + + release 0.9.1 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1018 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 3 +++ + 1 file changed, 3 insertions(+) + +commit 4cf93b2f6440b6a5bd13db83898c9fe14ccbde4c +Author: Ludovic Rousseau +Date: Thu Jul 1 11:37:27 2004 +0000 + + #define IFD_PARITY_ERROR + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1017 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/proto-t1.h | 4 ++++ + 1 file changed, 4 insertions(+) + +commit c02edf126602c18190c0dddef58bbfa9e4483bcd +Author: Ludovic Rousseau +Date: Thu Jul 1 07:46:28 2004 +0000 + + release 0.9.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1015 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 45 ++++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 44 insertions(+), 1 deletion(-) + +commit 15069defed396d4cf61adbf4b83181d4789cf09b +Author: Ludovic Rousseau +Date: Wed Jun 30 14:47:30 2004 +0000 + + correct a signedness issue + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1014 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6ee232741035bbac051c0ed1d0de3a5e78d4f12b +Author: Ludovic Rousseau +Date: Wed Jun 30 14:44:16 2004 +0000 + + rename tokenparser_macosx.? in tokenparser_fake.? + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1013 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/.cvsignore | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit ccfaea4763968011241574fa9de4b369cb9aae26 +Author: Ludovic Rousseau +Date: Wed Jun 30 14:42:36 2004 +0000 + + add build-stamp and configure-stamp + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1012 0ce88b0d-b2fd-0310-8134-9614164e65ea + + .cvsignore | 2 ++ + 1 file changed, 2 insertions(+) + +commit 3f345af97ecbf204f18e93800239387a37ad6bcb +Author: Ludovic Rousseau +Date: Wed Jun 30 14:41:42 2004 +0000 + + ignore temporary files + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1011 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/.cvsignore | 5 +++++ + 1 file changed, 5 insertions(+) + +commit eeef3ccaf2e9337c1bd0690d8a581122b8504d8c +Author: Ludovic Rousseau +Date: Wed Jun 30 14:41:18 2004 +0000 + + LGPL licence + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1010 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/COPYING | 504 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 504 insertions(+) + +commit 87f903f5610a480864f9357bfd8c22abc7c9ae6d (tag: ccid-0.9.0) +Author: Ludovic Rousseau +Date: Wed Jun 30 14:06:29 2004 +0000 + + version 0.9.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1009 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 35f6e5dcba1410ee604291cbd65d6f052555289e +Author: Ludovic Rousseau +Date: Wed Jun 30 14:05:38 2004 +0000 + + PPS_Match() was wrong when the confirmation is shorter than the request + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1008 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/pps.c | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +commit 8b16c1423cfb963cf1d082a3baa70a97249ab8ef +Author: Ludovic Rousseau +Date: Wed Jun 30 14:02:54 2004 +0000 + + PPS_Exchange() has a new argument (unsigned char *pps1) which is the + PPS1 returned by the card (TA1 the card wants to use) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1007 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/pps.c | 8 +++++++- + src/towitoko/pps.h | 3 ++- + 2 files changed, 9 insertions(+), 2 deletions(-) + +commit 785df6dbd7a080b3a74e732b144ce1899a7e286f +Author: Ludovic Rousseau +Date: Wed Jun 30 14:00:19 2004 +0000 + + CCID_Transmit() now uses a 4th argument (unsigned char bBWI) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1006 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/pps.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ab2b8d189b78040add96df2b70f3e03cca173ab6 +Author: Ludovic Rousseau +Date: Wed Jun 30 13:57:33 2004 +0000 + + move macros PPS_HAS_PPS?() from pps.c to pps.h + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1005 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/pps.c | 17 +---------------- + src/towitoko/pps.h | 5 +++++ + 2 files changed, 6 insertions(+), 16 deletions(-) + +commit 09e9d316e4cdb425afa932e128fc82dbebeb4a0c +Author: Ludovic Rousseau +Date: Wed Jun 30 13:54:57 2004 +0000 + + add ATR_GetDefaultProtocol() function + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1004 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/atr.c | 38 ++++++++++++++++++++++++++++++++++++++ + src/towitoko/atr.h | 1 + + 2 files changed, 39 insertions(+) + +commit 71d21eeabd775f3f90376d903940a64a4a5ef46c +Author: Ludovic Rousseau +Date: Wed Jun 30 13:53:41 2004 +0000 + + remove unused functions + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1003 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/atr.c | 138 ----------------------------------------------------- + src/towitoko/atr.h | 22 --------- + 2 files changed, 160 deletions(-) + +commit 594bdf2b99805346e8d924fa53ea5e8df256d1c9 +Author: Ludovic Rousseau +Date: Wed Jun 30 13:51:23 2004 +0000 + + the atr_f_table[] and atr_d_table[] tables were partly wrong + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1002 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/atr.c | 14 ++++---------- + 1 file changed, 4 insertions(+), 10 deletions(-) + +commit 9012f867d75dcba69eb4610ea494511b3c52b12b +Author: Ludovic Rousseau +Date: Wed Jun 30 13:49:38 2004 +0000 + + - update the text + - the function ATR_GetDefaultProtocol() is mine (Ludovic Rousseau) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1001 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/README | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +commit 136cebae0f89359b3039cd41645354c42e082a2a +Author: Ludovic Rousseau +Date: Wed Jun 30 13:46:45 2004 +0000 + + remove MIN() and MAX() definitions + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@1000 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/defines.h | 10 +--------- + 1 file changed, 1 insertion(+), 9 deletions(-) + +commit 3dfc5299b0db4ed582490a84e816586d48a267f8 +Author: Ludovic Rousseau +Date: Wed Jun 30 13:42:23 2004 +0000 + + if DEBUG_LEVEL_PERIODIC is not set we temporaily remove DEBUG_LEVEL_COMM in + IFDHICCPresence() to avoid having the low level debug every time pcscd + test the card presence + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@999 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 14 +++++++++++++- + 1 file changed, 13 insertions(+), 1 deletion(-) + +commit 5016fe9a8d27e762dceea9b02d5c81145c6d05f2 +Author: Ludovic Rousseau +Date: Wed Jun 30 13:40:12 2004 +0000 + + - removed CardUp() and CardDown() + - all the reader initialisation/negotiation is now done in + IFDHSetProtocolParameters() (that's why you need pcsc-lite-1.2.9beta3) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@998 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 449 ++++++++++++++++++++++++++++++++++--------------------- + 1 file changed, 281 insertions(+), 168 deletions(-) + +commit c3d09c318df9cf9875ee200730a1c2d0fa8fb1af +Author: Ludovic Rousseau +Date: Wed Jun 30 13:30:45 2004 +0000 + + pcsclite.h moved in PCSC/ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@997 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/utils.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 97c5d6f9f2585070ee7261d054031c733c77e1dc +Author: Ludovic Rousseau +Date: Wed Jun 30 13:30:04 2004 +0000 + + the t1 field in struct CCID_DESC changed from Protocol_T1 (towitiko) to + t1_state_t (openct) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@996 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/defs.h | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 0060d419ccb4739aa22a4c0bd92d0359986c1ea1 +Author: Ludovic Rousseau +Date: Wed Jun 30 13:28:22 2004 +0000 + + we do not need to have PACKAGE defined (I do not remember what it was + used for) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@995 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.h | 4 ---- + 1 file changed, 4 deletions(-) + +commit f7cf1ce8c31e5952f36fc35001468ffa8485248e +Author: Ludovic Rousseau +Date: Wed Jun 30 13:25:03 2004 +0000 + + CmdXfrBlockTPDU_T1(): use the T=1 TPDU layer from opensc/ instead of towitoko/ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@994 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 25 +++---------------------- + 1 file changed, 3 insertions(+), 22 deletions(-) + +commit 61182142acbf748d90074480b3940d77c412118c +Author: Ludovic Rousseau +Date: Wed Jun 30 13:23:42 2004 +0000 + + CCID_Receive() returns IFD_PARITY_ERROR if the error returned by the + reader is 0xFD (parity error) and IFD_COMMUNICATION_ERROR otherwise (so + that the T=1 TPDU layer can recover the error) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@993 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 9a15b82e84604317055bdb688cc908bc00759b72 +Author: Ludovic Rousseau +Date: Wed Jun 30 13:21:18 2004 +0000 + + CCID_Transmit() now has a new "unsigned char bBWI" argument + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@992 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 7 ++++--- + src/commands.h | 2 +- + 2 files changed, 5 insertions(+), 4 deletions(-) + +commit 92aec3d2111bc1b077fbae0dbcc46ce0fee92fb4 +Author: Ludovic Rousseau +Date: Wed Jun 30 11:53:51 2004 +0000 + + CmdPowerOn(): add a mechanism to allow power on at 1.8V, 3V and then 5V + as specified by ISO 7816. We still use 5V for now to avoid problems with + non ISO compliant cards + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@991 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 31 +++++++++++++++++++++++++++---- + 1 file changed, 27 insertions(+), 4 deletions(-) + +commit 6196c16a4b752244816298e2f2db6a577be17e3b +Author: Ludovic Rousseau +Date: Wed Jun 30 11:52:19 2004 +0000 + + add __FUNCTION__ as argument to ccid_error() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@990 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +commit 9d5c22ef063a19812bd1592f07f2622deba6ea01 +Author: Ludovic Rousseau +Date: Wed Jun 30 09:43:45 2004 +0000 + + ccid_error() now also has a "char *function" argument to log the name of + the function in which the error occured + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@989 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 8 ++++---- + src/ccid.h | 2 +- + 2 files changed, 5 insertions(+), 5 deletions(-) + +commit 3009c264467e97a7a63f2acd2381285944a4e093 +Author: Ludovic Rousseau +Date: Wed Jun 30 09:42:26 2004 +0000 + + - rename protocol_t1/ in towitoko/ to reflect the project the code comes from + - remove the now useless files from towitoko/ and add the files from openct/ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@988 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 24 +++++++++++++----------- + 1 file changed, 13 insertions(+), 11 deletions(-) + +commit ec5cbb70daf121e6b566764c9301dafade9e87fe +Author: Ludovic Rousseau +Date: Wed Jun 30 09:40:21 2004 +0000 + + remove these files since I now use the T=1 TPDU code from OpenCT + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@987 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/apdu.h | 49 ------ + src/towitoko/protocol_t1.c | 361 --------------------------------------------- + src/towitoko/protocol_t1.h | 82 ---------- + src/towitoko/t1_block.c | 250 ------------------------------- + src/towitoko/t1_block.h | 109 -------------- + 5 files changed, 851 deletions(-) + +commit 7bccd25ac4a8dbd825e4911f3b94bf1f37808451 +Author: Ludovic Rousseau +Date: Wed Jun 30 09:37:08 2004 +0000 + + use T=1 TPDU code from the OpenCT project + + The state automata was greatly improved to manage "all" the possible + errors cases. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@986 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/openct/LICENSE | 28 ++ + src/openct/buffer.c | 169 ++++++++++++ + src/openct/buffer.h | 43 +++ + src/openct/checksum.c | 92 +++++++ + src/openct/checksum.h | 31 +++ + src/openct/proto-t1.c | 727 ++++++++++++++++++++++++++++++++++++++++++++++++++ + src/openct/proto-t1.h | 69 +++++ + 7 files changed, 1159 insertions(+) + +commit 9dfc5e419d3538f2a4825e6dc095e9dfa8f817f8 +Author: Ludovic Rousseau +Date: Wed Jun 30 09:34:19 2004 +0000 + + document the possible values for ifdLogLevel and ifdDriverOptions + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@985 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist | 26 ++++++++++++++++++++++++++ + 1 file changed, 26 insertions(+) + +commit 16633253553491937caf110886194c40ffde3d34 +Author: Ludovic Rousseau +Date: Wed Jun 23 14:54:44 2004 +0000 + + - send Select DF and Select EF APDU before Verify PIN + - read stdin (consume the "*" fake keys) if the pinpad is on a keyboard + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@972 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 62 ++++++++++++++++++++++++++++++++++++++++++++----- + 1 file changed, 56 insertions(+), 6 deletions(-) + +commit 2e428bc8bd153ad28450ef353c1e5fc55b0bc933 +Author: Ludovic Rousseau +Date: Wed Jun 23 13:27:17 2004 +0000 + + check for the presence of PCSC/ifdhandler.h instead of ifdhandler.h + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@971 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 9 +++------ + 1 file changed, 3 insertions(+), 6 deletions(-) + +commit 82e9870b33474400a744a5db7000adbec1e61dba +Author: Ludovic Rousseau +Date: Wed Jun 23 13:26:35 2004 +0000 + + HAVE_IFDHANDLER_H is renamed HAVE_PCSC_IFDHANDLER_H + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@970 0ce88b0d-b2fd-0310-8134-9614164e65ea + + config.h.in | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +commit a4b8099312150024ab6552f042dc58f5915d6904 +Author: Ludovic Rousseau +Date: Wed Jun 23 13:25:38 2004 +0000 + + add info for: + - Cherry XX33 keyboard + - Dell keyboard SK-3106 + - Dell smart card reader keyboard + + Move some readers in "Unsupported or partly supported CCID readers:" + - C3PO LTC31 + - SCM Micro SCR 331 + - SCM Micro SCR 335 + - SCM Micro SPR 532 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@969 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 43 ++++++++++++++++++++++++++++++------------- + 1 file changed, 30 insertions(+), 13 deletions(-) + +commit f17035db5b6038aba5bdc46298e3a5f93366338f +Author: Ludovic Rousseau +Date: Tue Jun 22 12:05:50 2004 +0000 + + ChangeLog is not a .PHONY target but a real file + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@966 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 -- + 1 file changed, 2 deletions(-) + +commit e3c11eb69df8345bc46abb635750f5c2b225f339 +Author: Ludovic Rousseau +Date: Sun Jun 13 16:59:13 2004 +0000 + + use SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1 instead of SCARD_PROTOCOL_ANY + since it is not defined in Micosoft PC/SC + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@940 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5bdd39538e4937099f581242337b8c1f594ed4e6 +Author: Ludovic Rousseau +Date: Sun May 30 19:45:30 2004 +0000 + + use 'pkg-config libpcsclite --variable=usbdropdir' even if --prefix= is + used. You should use --enable-usbdropdir= and --enable-ccidtwindir= to + set to different values. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@910 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 40 ++++++++++++++++++++-------------------- + 1 file changed, 20 insertions(+), 20 deletions(-) + +commit 9b37dd6dac3ce6ad9770debde90ce4bd18f341c2 +Author: Ludovic Rousseau +Date: Wed May 26 14:02:39 2004 +0000 + + Dell keyboard SK-3106 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@906 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/DellSK-3106.txt | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 49 insertions(+) + +commit fb3d158b13b33ab0a17d2a790c12298baf0a3bf0 +Author: Ludovic Rousseau +Date: Wed May 26 08:56:52 2004 +0000 + + set *rx_length to 0 when a ReadPort() error is returned. + The problem was not solved by ccid_usb.c 1.25. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@905 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 476c12dfeaa1f9f698b8c6e4a622ff6f3e01cfa2 +Author: Ludovic Rousseau +Date: Wed May 26 07:50:07 2004 +0000 + + bPINOperation is not passed in the user command since the command is + "PIN Verification" and nothing else + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@904 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +commit 9704a4414a784ec3101dd7a6b5afba2cd134336c +Author: Ludovic Rousseau +Date: Wed May 26 07:48:03 2004 +0000 + + remove useless bPINOperation + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@903 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +commit 31c16478da2dc61d2533bf5bdd0d134a7013c099 +Author: Ludovic Rousseau +Date: Tue May 25 14:46:02 2004 +0000 + + add support for SCardGetAttrib(.., IOCTL_SMARTCARD_VENDOR_VERIFY_PIN, ..) + to know if the reader supports SCardControl(.., IOCTL_SMARTCARD_VENDOR_VERIFY_PIN, ..) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@900 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 18 +++++++++++++++++- + src/ccid.h | 12 +++++++++++- + src/ccid_serial.c | 1 + + src/ccid_usb.c | 1 + + src/ifdhandler.c | 8 ++++++++ + 5 files changed, 38 insertions(+), 2 deletions(-) + +commit a01f8803479ade2dd11f7431e3bbdd4eac42bba7 +Author: Ludovic Rousseau +Date: Tue May 25 08:25:23 2004 +0000 + + add a --enable-pcsclite option (default yes) so that the driver can be + compiled for a different framework (one needing tokenparser.l) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@896 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit e0f87d5dfeb8619fe5d9035f4c7910af4b25833d +Author: Ludovic Rousseau +Date: Tue May 25 08:23:20 2004 +0000 + + set length to 0 when a usb_bulk_read() error is returned + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@895 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit f958540277bf7fe98e2e8e0b13d4423dd87750c9 +Author: Ludovic Rousseau +Date: Tue May 25 06:52:05 2004 +0000 + + install Info.plist before the lib. This is for my convenience only + because of my debug setup. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@894 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit fa0cafa8a4ae31027279d91e68e01bd281eb6934 +Author: Ludovic Rousseau +Date: Tue May 25 06:50:24 2004 +0000 + + rename tokenparser_macosx.l into tokenparser_fake.l since it is not + MacOSX specific. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@893 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit cba80207c4d4132b4007a8a00933017308b00322 +Author: Ludovic Rousseau +Date: Mon May 24 12:58:43 2004 +0000 + + recompile using gcc -pedantic and correct: + - some C++ syntax comments + - many signedness "problems" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@892 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/scardcontrol.c | 2 +- + src/ccid.c | 2 +- + src/ccid_serial.c | 14 +++++--------- + src/ccid_serial.h | 4 ++-- + src/ccid_usb.c | 23 ++++++++++++----------- + src/ccid_usb.h | 4 ++-- + src/commands.c | 43 ++++++++++++++++++++++++------------------- + src/commands.h | 33 +++++++++++++++++++-------------- + src/debug.c | 4 ++-- + src/ifdhandler.c | 15 +++++++-------- + src/towitoko/atr.h | 1 - + src/towitoko/protocol_t1.c | 2 +- + 12 files changed, 76 insertions(+), 71 deletions(-) + +commit 064e5b5b4d0acfacdf969286e23ca5f3a34561c5 +Author: Ludovic Rousseau +Date: Mon May 24 10:02:48 2004 +0000 + + add support for Secure PIN through SCardControl() (see sample code in examples/) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@891 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_ifdhandler.h | 7 ++++- + src/commands.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++--- + src/commands.h | 10 ++++--- + src/ifdhandler.c | 20 ++++++++++++-- + 4 files changed, 101 insertions(+), 9 deletions(-) + +commit ab87ac69d45ff04a7b3ae8b717eefddee13d60a8 +Author: Ludovic Rousseau +Date: Mon May 24 09:58:43 2004 +0000 + + - add some missing error codes + - low error values indicate the byte in error in the CCID frame + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@890 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 75 +++++++++++++++++++++++++++++++++++++++++++++----------------- + 1 file changed, 55 insertions(+), 20 deletions(-) + +commit ab3c9607029e74da393b65e799d34dba7d3e2ca4 +Author: Ludovic Rousseau +Date: Mon May 24 09:56:16 2004 +0000 + + add examples for SCardControl IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE and + IOCTL_SMARTCARD_VENDOR_VERIFY_PIN + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@889 0ce88b0d-b2fd-0310-8134-9614164e65ea + + examples/Makefile.am | 6 ++ + examples/scardcontrol.c | 257 ++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 263 insertions(+) + +commit 21507cbb4991ab6f09717cdb68563888ed59f6b8 +Author: Ludovic Rousseau +Date: Mon May 24 09:54:30 2004 +0000 + + add examples in SUBDIRS + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@888 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 55bd89b91e1a04662327e9690024035067b7ea45 +Author: Ludovic Rousseau +Date: Mon May 24 09:53:36 2004 +0000 + + remove -fno-common from CFLAGS since it is(?) gcc specific + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@887 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +commit f258f0888e1f9bef97dd98017023aba5e000807a +Author: Ludovic Rousseau +Date: Mon May 24 07:27:44 2004 +0000 + + add Advanced Card Systems ACR 38 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@886 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/ACR38.txt | 42 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 45 insertions(+) + +commit 43b6c2b4b56e34a0f44e3482bd6bea1640c9284f +Author: Ludovic Rousseau +Date: Mon May 24 06:39:27 2004 +0000 + + add Cherry XX33 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@885 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CherryXX33.txt | 46 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 3 +++ + 2 files changed, 49 insertions(+) + +commit 186f8f2d1f5670697405a131c6bf0f50ce1d7d7d +Author: Ludovic Rousseau +Date: Tue May 18 14:02:55 2004 +0000 + + in CardUp():SetParameters() the default TA1 is 0x11 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@882 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit a565396ebf1d34a1d54c8a4da9d9050c467dbdfe +Author: Ludovic Rousseau +Date: Mon May 17 14:46:12 2004 +0000 + + add default ifdDriverOptions set to 0x0000 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@881 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist | 3 +++ + 1 file changed, 3 insertions(+) + +commit b0589a8cb7dd22cdfaeb09a7c2d297f8b5df1ea1 +Author: Ludovic Rousseau +Date: Mon May 17 14:45:44 2004 +0000 + + - add support of IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE in IFDHControl() + - read ifdDriverOptions from Info.plist to limit the use of + IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE (idea from Peter Williams) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@880 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 77 ++++++++++++++++++++++++++++++++++++++------------------ + 1 file changed, 53 insertions(+), 24 deletions(-) + +commit b81853d0d7cca6f38b418651315e44261a271b96 +Author: Ludovic Rousseau +Date: Mon May 17 14:39:22 2004 +0000 + + redefined CmdEscape() to pass the CCID message instead of just a tag + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@879 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 24 ++++++++++------ + src/commands.c | 86 +++++++++++++++++++++++++++++++++------------------------- + 2 files changed, 65 insertions(+), 45 deletions(-) + +commit 60bed0dc986f6ab2ca4ba4093cafaa8467b7e530 +Author: Ludovic Rousseau +Date: Mon May 17 14:37:08 2004 +0000 + + do not export get_end_points() declaration and make the function static + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@878 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 9 ++++++--- + src/ccid_usb.h | 3 --- + 2 files changed, 6 insertions(+), 6 deletions(-) + +commit 69230f544944f52559cb079868306bd8e6aab6f4 +Author: Ludovic Rousseau +Date: Mon May 17 14:35:51 2004 +0000 + + reorganize header files + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@877 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 6 ++---- + src/ccid_ifdhandler.h | 7 +++++-- + src/ccid_serial.c | 3 ++- + src/commands.h | 3 ++- + src/defs.h | 10 +++++++++- + src/parse.c | 3 ++- + src/towitoko/atr.c | 1 - + src/towitoko/defines.h | 3 +-- + src/towitoko/protocol_t1.c | 5 ++++- + src/utils.c | 6 +++++- + 10 files changed, 32 insertions(+), 15 deletions(-) + +commit 69b39f2e672376c9d0aa3b1ad1f58b60538d700f +Author: Ludovic Rousseau +Date: Mon May 17 14:32:56 2004 +0000 + + check for pcsclite.h and ifdhandler.h installed by recent pcsc-lite + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@876 0ce88b0d-b2fd-0310-8134-9614164e65ea + + config.h.in | 6 ++++++ + configure.in | 16 ++++++++++------ + 2 files changed, 16 insertions(+), 6 deletions(-) + +commit f7d26fb623333ac33c093ff26c920022e561b0ec +Author: Ludovic Rousseau +Date: Mon May 17 13:53:10 2004 +0000 + + types and definitions are now in , "defs.h" and "ccid_ifdhandler.h" + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@875 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscdefines.h | 51 --------------------------------------------------- + 1 file changed, 51 deletions(-) + +commit f2b997839c78be0908b92529e49c17cf59bf1724 +Author: Ludovic Rousseau +Date: Mon May 17 13:14:57 2004 +0000 + + removed since pcsclite.h now defines SCARD_ATTR_* + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@874 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/winsmcrd.h | 84 ---------------------------------------------------------- + 1 file changed, 84 deletions(-) + +commit f1342aaaf5799fc5b46036899e937b7fbba4ae8f +Author: Ludovic Rousseau +Date: Mon May 17 13:00:12 2004 +0000 + + use the ifdhandler.h provided by pcsc-lite so remove a lot of lines + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@873 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_ifdhandler.h | 194 ++++++++------------------------------------------ + 1 file changed, 30 insertions(+), 164 deletions(-) + +commit c54bd46244ede4f329348fce156832f4d4187a55 +Author: Ludovic Rousseau +Date: Fri May 14 14:14:38 2004 +0000 + + check that pkg-config command is present before using it + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@872 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +commit 7c961242875171d78be1ea7a7d5476de8981ae7e +Author: Ludovic Rousseau +Date: Fri May 14 09:07:29 2004 +0000 + + use `pkg-config libpcsclite --variable=usbdropdir` so you do not have to + use --enable-usbdropdir=DIR or --enable-ccidtwindir=DIR even if pcscd + does not use the default /usr/local/pcsc/drivers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@871 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 19 +++++++++---------- + configure.in | 15 +++++++++++---- + 2 files changed, 20 insertions(+), 14 deletions(-) + +commit 465e33dece398015b324f366e3b64260a997c056 +Author: Ludovic Rousseau +Date: Wed May 12 12:20:20 2004 +0000 + + document the libusb bug on MacOS X with unplug/replug in a different USB + socket + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@863 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +commit c1b60e2bdd22da9423d65b66e75089126a243568 +Author: Ludovic Rousseau +Date: Wed May 12 12:09:09 2004 +0000 + + move debug configuration from INSTALL to README since it is dynamic now + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@862 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 19 ------------------- + README | 30 ++++++++++++++++++++++++++++++ + 2 files changed, 30 insertions(+), 19 deletions(-) + +commit 1934b0b95ef2f2373435fb5207ab3e527e852df1 +Author: Ludovic Rousseau +Date: Wed May 12 09:08:34 2004 +0000 + + remove the "readers enumeration" part since this problem is now solved + by pcsc-lite-1.2.9 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@861 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 36 ------------------------------------ + 1 file changed, 36 deletions(-) + +commit 10acdf94f43bf267d07d9320db87b8e933c43abc +Author: Ludovic Rousseau +Date: Wed May 12 09:03:49 2004 +0000 + + document the use of 'pkg-config libpcsclite --variable=usbdropdir' + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@860 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 17 ++++++++++------- + 1 file changed, 10 insertions(+), 7 deletions(-) + +commit c70df4a3b4d7c420a014f37c1d3fcd0b6417da79 +Author: Ludovic Rousseau +Date: Mon May 10 07:52:57 2004 +0000 + + in IFDHPowerICC() IFD_POWER_DOWN is just power down without a power up. + Changed to be compliant with IFD Handler specifications. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@840 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 1 + + 1 file changed, 1 insertion(+) + +commit 0641774da21c52de7900be41473bcec4ae80251c +Author: Ludovic Rousseau +Date: Fri May 7 12:20:18 2004 +0000 + + in Protocol_T1_Negociate_IFSD() rename sblock in block since the same + variable is used for sent and received block. + This was not clear and was the source of reported bug [ #300707 ] + "Delete block before using it in t1_protocol.c" which is not a bug in fact. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@837 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/protocol_t1.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +commit 26fe0ca053967cc60c026b27b5bb28abc712655b +Author: Ludovic Rousseau +Date: Thu May 6 14:09:27 2004 +0000 + + add a "configuring the driver for the serial reader (GemPC Twin)" part + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@836 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 38 ++++++++++++++++++++++++++++++++++++++ + 1 file changed, 38 insertions(+) + +commit dcb26cd61d5946021f0032d8c4b1c7504a289b83 +Author: Ludovic Rousseau +Date: Tue May 4 12:45:22 2004 +0000 + + add DellSCRK.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@825 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ec59b620a549eefc453383fec57b9c7567e99e73 +Author: Ludovic Rousseau +Date: Tue May 4 12:44:06 2004 +0000 + + add Dell smart card reader keyboard + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@824 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/DellSCRK.txt | 46 +++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 1 + + 2 files changed, 47 insertions(+) + +commit 75cbe1e9a60d7b6d423da530194a83aee5708956 +Author: Ludovic Rousseau +Date: Mon Apr 19 16:21:53 2004 +0000 + + add winsmcrd.h in COMMON + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@808 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 1c2bedc19a41f3f2da5661e86f031c5177c94a7c +Author: Ludovic Rousseau +Date: Mon Apr 19 16:18:43 2004 +0000 + + reset ATR string (length = 0) when the card is powered down or not present + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@807 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 17 ++++++++++++++--- + 1 file changed, 14 insertions(+), 3 deletions(-) + +commit 528e71c8270fac2c0e7f5f56206e746aa9cba9a6 +Author: Ludovic Rousseau +Date: Mon Apr 19 16:18:00 2004 +0000 + + typo in a comment + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@806 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/defs.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f1c366e4442697731f383aa33cc1887bdf2070aa +Author: Ludovic Rousseau +Date: Mon Apr 19 16:11:05 2004 +0000 + + list of tags for SCardGetAttrib() like SCARD_ATTR_ATR_STRING + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@805 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/winsmcrd.h | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 84 insertions(+) + +commit c8331f179a37b4012e90090bb5f8036a767c93b3 +Author: Ludovic Rousseau +Date: Mon Apr 19 16:09:24 2004 +0000 + + add SCARD_ATTR_ATR_STRING in addition to TAG_IFD_ATR in IFDHGetCapabilities() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@804 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit 31de5f8b8bbdf1b2ae6e943d98bc1c08527aa514 +Author: Ludovic Rousseau +Date: Fri Apr 16 15:22:02 2004 +0000 + + new IFDHControl() API + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@795 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +commit a0a58084d2841a1b02a74c18b39002ee6cb10d7d +Author: Ludovic Rousseau +Date: Fri Apr 16 15:21:34 2004 +0000 + + use a new version from pcsc-lite with support of the new IFDHControl() API + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@794 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_ifdhandler.h | 258 ++++++++++++++++++++++++++++---------------------- + 1 file changed, 145 insertions(+), 113 deletions(-) + +commit 70f17f1d6fc900f7755bf57722237e84481c2de9 +Author: Ludovic Rousseau +Date: Thu Apr 8 14:35:57 2004 +0000 + + add support for the libusb naming scheme: usb:%04x/%04x:libusb:%s + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@781 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 34 ++++++++++++++++++++++++++++++++++ + 1 file changed, 34 insertions(+) + +commit 9c25046c1f304e6fee1a2e3f86467e38b6839d06 +Author: Ludovic Rousseau +Date: Thu Apr 8 12:43:58 2004 +0000 + + parse bPINSupport field + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@780 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SK-3106.txt | 1 + + readers/SPR532.txt | 2 ++ + 2 files changed, 3 insertions(+) + +commit af2d3363a07f4759a623e2a884ceeccf9a01c7bc +Author: Ludovic Rousseau +Date: Thu Apr 8 09:46:54 2004 +0000 + + parse bPINSupport field + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@779 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit da41b720eee382a3d88df11cd158f6f3a545bbe0 +Author: Ludovic Rousseau +Date: Wed Apr 7 20:10:31 2004 +0000 + + also distribute SK-3106.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@778 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 1 + + 1 file changed, 1 insertion(+) + +commit 806703ad41d0d4a7a8c6bbf0653c8525686671f2 +Author: Ludovic Rousseau +Date: Tue Apr 6 13:32:54 2004 +0000 + + remove --enable-debugcritical, --enable-debuginfo, + --enable-debugperiodic and --enable-debugcomm options since the log + level is now dynamically managed by ifdLogLevel in Info.plist + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@777 0ce88b0d-b2fd-0310-8134-9614164e65ea + + config.h.in | 12 ------------ + configure.in | 56 -------------------------------------------------------- + 2 files changed, 68 deletions(-) + +commit 1483b6d146d1c95cb0f6be98df19b69e65748e98 +Author: Ludovic Rousseau +Date: Tue Apr 6 13:25:28 2004 +0000 + + define default ifdLogLevel at 3 (DEBUG_LEVEL_CRITICAL | DEBUG_LEVEL_INFO) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@776 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist | 3 +++ + 1 file changed, 3 insertions(+) + +commit 8fffd8b770a2dd9ded05e4162a10155de73290f7 +Author: Ludovic Rousseau +Date: Tue Apr 6 13:18:11 2004 +0000 + + remove now useless #ifdef DEBUG + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@775 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.c | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +commit f76d64b7bf797e763a3412e6f2244c7d73e8ab41 +Author: Ludovic Rousseau +Date: Tue Apr 6 13:15:34 2004 +0000 + + add { } to avoid ambiguities now that DEBUG_* are "if (x) y" constructions + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@774 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 6 ++++++ + src/ccid_usb.c | 6 ++++++ + 2 files changed, 12 insertions(+) + +commit 5fa107e89bc754740735ec5e57045990bc086c32 +Author: Ludovic Rousseau +Date: Tue Apr 6 13:14:02 2004 +0000 + + during the first IFDHCreateChannel*() init_debug() is called to read the + value of ifdLogLevel from the Info.plist + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@773 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 38 +++++++++++++++++++++++++++++++++++++- + 1 file changed, 37 insertions(+), 1 deletion(-) + +commit 8334a255ef0be856d91441ff0d4f4b1199230e41 +Author: Ludovic Rousseau +Date: Tue Apr 6 13:09:59 2004 +0000 + + change the DEBUG_* macros from static (compilation conditional) to + dynamic (if ()) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@772 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.h | 99 +++++++++++++++++++++++++++---------------------------------- + 1 file changed, 44 insertions(+), 55 deletions(-) + +commit a133470463ee5ff1927bee20cb84bbda6617ceab +Author: Ludovic Rousseau +Date: Tue Apr 6 13:07:45 2004 +0000 + + debug.c is only needed by parse_SOURCES not COMMON + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@771 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 920715490f4939fb41702087357e490e929f6f4e +Author: Ludovic Rousseau +Date: Tue Apr 6 08:59:26 2004 +0000 + + do not return before pthread_mutex_unlock() in IFDHCreateChannelByName() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@770 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +commit f23d9abdeaa64de2f6f6d4d5b9c0c430fd48054e +Author: Ludovic Rousseau +Date: Tue Apr 6 08:53:05 2004 +0000 + + also call ccid_open_hack() in IFDHCreateChannelByName() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@769 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 2b8eba7f140b98df74bde5dba4f40336da62cdbe +Author: Ludovic Rousseau +Date: Tue Apr 6 08:51:34 2004 +0000 + + T=1 context is initialized in CardUp(), not in IFDHCreateChannel() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@768 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +commit 00ca5aea9d09257b897159d1e4ba17c7a982cbfd +Author: Ludovic Rousseau +Date: Tue Apr 6 06:52:34 2004 +0000 + + revert to nearly previous version. + - IFD_POWER_DOWN is power down and power up (cold reset) + - IFD_RESET is power up (warm reset) + - IFD_POWER_UP is power up + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@766 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 74 ++++++++++++++++++++++++++++++++------------------------ + 1 file changed, 42 insertions(+), 32 deletions(-) + +commit c986e5c2d69e352d3bd3d70f2191fc0eea50ec02 (tag: ccid-0.4.2) +Author: Ludovic Rousseau +Date: Mon Apr 5 09:56:52 2004 +0000 + + version 0.4.2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@764 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c9eaa0b8d607d22734df5a7bdf95ce5a7921f754 +Author: Ludovic Rousseau +Date: Mon Apr 5 09:53:59 2004 +0000 + + add support for the Dell keyboard SK-3106 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@763 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SK-3106.txt | 193 ++++++++++++++++++++++++++++++++++++++++++ + readers/supported_readers.txt | 2 + + 2 files changed, 195 insertions(+) + +commit abcffb6f38a75f200d687df9f5b5802ef8217033 +Author: Ludovic Rousseau +Date: Mon Apr 5 09:47:21 2004 +0000 + + define ALLOW_PROPRIETARY_CLASS by default + + Proprietary USB Class (0xFF) are (or are not) accepted + A proprietary class is used for devices released before the final CCID + specifications were ready. + We should not have problems with non CCID devices becasue the + Manufacturer and Product ID are also used to identify the device */ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@762 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit b6c6fc803f45ac30149271de9dd68cb254e91b64 +Author: Ludovic Rousseau +Date: Wed Mar 31 14:58:43 2004 +0000 + + use $(srcdir) instead of ".". Thanks to Dr Russel Winder for the patch. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@755 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 863a3422e810a3875d2184891d88abb1d6720ce1 +Author: Ludovic Rousseau +Date: Tue Mar 30 13:01:05 2004 +0000 + + allow proprietary CCID Class byte but only if ALLOW_PROPRIETARY_CLASS is + defined. You should know what you do. Only useful for pre-CCID devices. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@738 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit 230ed28a9ad0be2a802eccc1f8c40ff13fabe4bd +Author: Ludovic Rousseau +Date: Tue Mar 30 12:45:26 2004 +0000 + + - use get_ccid_usb_interface() to also manage USB composite devices (keyboards) + - continue parsing even if bDescriptorType == 0xFF (proprietary) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@737 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +commit fd9455fb1669e25b94b8795ec4ab703af6680712 +Author: Ludovic Rousseau +Date: Tue Mar 30 12:43:20 2004 +0000 + + define get_ccid_usb_interface() only if __USB_H__ is defined (usb.h included) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@736 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ca647a82b72338eff18835bb9403cd18f1ebde4f +Author: Ludovic Rousseau +Date: Tue Mar 23 09:56:31 2004 +0000 + + move the "cp aclocal.m4 build/" after autoreconf + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@723 0ce88b0d-b2fd-0310-8134-9614164e65ea + + reconf | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9665fd14db9806f3513f173613ca1edd7e4fd954 +Author: Ludovic Rousseau +Date: Mon Mar 22 15:48:15 2004 +0000 + + cp aclocal.m4 build/ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@722 0ce88b0d-b2fd-0310-8134-9614164e65ea + + reconf | 1 + + 1 file changed, 1 insertion(+) + +commit 4acc65ab4d29dcac2213f9c2cb2b5cf7e34029e4 +Author: Ludovic Rousseau +Date: Thu Mar 18 10:35:53 2004 +0000 + + Reset action is power off and power on, not just power on + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@716 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 70 ++++++++++++++++++++++++++------------------------------ + 1 file changed, 32 insertions(+), 38 deletions(-) + +commit d90b57359403feff94ecf9e9655262e1f2203ec2 +Author: Ludovic Rousseau +Date: Fri Feb 27 17:51:35 2004 +0000 + + add C3PO LTC32, SCM Micro SCR 333 and C3PO TLTC2USB in the list of + "Should work but untested by me" readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@709 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +commit 92e233b9c8e09eb0383578004a298937651ea29c +Author: Ludovic Rousseau +Date: Fri Feb 27 17:46:41 2004 +0000 + + alphabetical reordering of readers + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@708 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 90067f148b43189d6b6f460d7b85b122e5036dd9 +Author: Ludovic Rousseau +Date: Fri Feb 27 17:37:16 2004 +0000 + + add SCR 333 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@707 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 1 + + 1 file changed, 1 insertion(+) + +commit 4165dffe87ca50a20ad0520fbba71641535ed1ac +Author: Ludovic Rousseau +Date: Tue Feb 24 21:16:51 2004 +0000 + + use a shorter Perl script to convert generate/convert ChangeLog + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@706 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 836596b64355779eaa919338ca9ae86758c88d38 (tag: ccid-0.4.1) +Author: Ludovic Rousseau +Date: Sat Feb 14 12:46:18 2004 +0000 + + release 0.4.1 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@703 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 0a8715b0fe5fd552f443b24fb6554b16e2bd0149 +Author: Ludovic Rousseau +Date: Sat Feb 14 12:26:56 2004 +0000 + + version 0.4.1 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@702 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 81821c2afd2e164c8cc24dc4a8a23c59391bf9a6 +Author: Ludovic Rousseau +Date: Sat Feb 14 12:26:34 2004 +0000 + + distribute SCR331-DI.txt and supported_readers.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@701 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit dac7f0a71423a7792fc0ec384c76e7b93fd5a35d +Author: Ludovic Rousseau +Date: Sat Feb 14 12:26:09 2004 +0000 + + disribute create_Info_plist.pl + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@700 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 34a5f203544fa61cd8ebc39091120bfd78df6e36 (tag: ccid-0.4.0) +Author: Ludovic Rousseau +Date: Fri Feb 13 07:58:21 2004 +0000 + + version 0.4.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@698 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1885154f6233650e8986faf502fa8781c2ab4297 +Author: Ludovic Rousseau +Date: Fri Feb 13 07:57:25 2004 +0000 + + release 0.4.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@697 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 42 ++++++++++++++++++++++++++++++++---------- + 1 file changed, 32 insertions(+), 10 deletions(-) + +commit e6bb0cf90f6ddb257fa83e824a8fdef786212225 +Author: Ludovic Rousseau +Date: Thu Feb 12 16:11:45 2004 +0000 + + huge rework of CardUp() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@696 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 113 +++++++++++++++++++++++++++++++++++++++++-------------- + 1 file changed, 85 insertions(+), 28 deletions(-) + +commit 33195188dfa6fad2dcec7adfdf0c17a96a95fa01 +Author: Ludovic Rousseau +Date: Thu Feb 12 16:11:08 2004 +0000 + + return with a error if the received bloc in less than 4 bytes (T=0 + error response for example) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@695 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/protocol_t1.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 125f828e5e052b911c6e0fdf069d7d6dd95262d9 +Author: Ludovic Rousseau +Date: Thu Feb 12 16:09:32 2004 +0000 + + fill dwDefaultClock and dwMaxDataRate according to the reader descriptor + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@694 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 2 ++ + src/ccid_usb.c | 4 ++-- + 2 files changed, 4 insertions(+), 2 deletions(-) + +commit 66756092f89c0365900a17c1e0ddb7a18548f617 +Author: Ludovic Rousseau +Date: Thu Feb 12 16:08:45 2004 +0000 + + add dwDefaultClock and dwMaxDataRate fields + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@693 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +commit 9fa23adcb1789b44bd99c7bdd850b447593ed1e0 +Author: Ludovic Rousseau +Date: Wed Feb 11 14:36:59 2004 +0000 + + Perform PPS and IFSD only if the reader does not do it automatically + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@692 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 51 +++++++++++++++++++++++++++++---------------------- + 1 file changed, 29 insertions(+), 22 deletions(-) + +commit 5410c7033537c21aaa20e178d85e2dd268e562ec +Author: Ludovic Rousseau +Date: Wed Feb 11 14:36:59 2004 +0000 + + add CCID_CLASS_AUTO_BAUD and CCID_CLASS_AUTO_IFSD + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@691 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 2 ++ + 1 file changed, 2 insertions(+) + +commit df61e303fa61d27c0dc622221317c5d6e1814147 +Author: Ludovic Rousseau +Date: Wed Feb 11 14:36:05 2004 +0000 + + add return code tests in Protocol_T1_Negociate_IFSD() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@690 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/protocol_t1.c | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +commit 57dd86fe4f5ab41fee2430ee4f9a98da01912c88 +Author: Ludovic Rousseau +Date: Wed Feb 11 14:33:04 2004 +0000 + + PPS_Exchange() now uses 'int lun' instead of 'Protocol_T1 * t1' + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@689 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/pps.c | 6 +++--- + src/towitoko/pps.h | 2 +- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 7e79250f457ac0d9caea390ffa48a80a5bd56f80 +Author: Ludovic Rousseau +Date: Wed Feb 11 10:12:47 2004 +0000 + + remove debug message + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@688 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/protocol_t1.c | 1 - + 1 file changed, 1 deletion(-) + +commit 7e7c461acc496bb532f8f2d63dde6d920ae2f73a +Author: Ludovic Rousseau +Date: Wed Feb 11 10:12:00 2004 +0000 + + use Protocol_T1_Negociate_IFSD() in CardUp() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@687 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +commit eb2a9d8bbead2b10cb594e37d314cfcff3247bc4 +Author: Ludovic Rousseau +Date: Wed Feb 11 10:10:29 2004 +0000 + + add Protocol_T1_Negociate_IFSD() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@686 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/protocol_t1.c | 23 ++++++++++++++++++++--- + src/towitoko/protocol_t1.h | 4 ++++ + 2 files changed, 24 insertions(+), 3 deletions(-) + +commit fa78394d50eb0146ebd5cb72f58c87fa14a6386d +Author: Ludovic Rousseau +Date: Wed Feb 11 10:09:55 2004 +0000 + + add CCID_CLASS_AUTO_CONF_ATR + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@685 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 1 + + 1 file changed, 1 insertion(+) + +commit 4dbc19e39ae525f9a7062a22d596527cdf30c8f7 +Author: Ludovic Rousseau +Date: Mon Feb 9 13:57:14 2004 +0000 + + first bSeq is 0 (even if 1 works ok) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@683 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 85f00ab3fce80ca48eeb9daabea69bb42a1fcee4 +Author: Ludovic Rousseau +Date: Mon Feb 9 13:55:09 2004 +0000 + + usb_reset() the device before usb_close() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@682 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 1 + + 1 file changed, 1 insertion(+) + +commit 4155fca804b98404414b24a4b1961428bc395a02 +Author: Ludovic Rousseau +Date: Thu Feb 5 19:40:57 2004 +0000 + + add Silitek SK-3105 keyboard URL + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@677 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit ad499a9e241203c1c024d5eb0b65c6b6f81d4dc4 +Author: Ludovic Rousseau +Date: Wed Feb 4 22:00:01 2004 +0000 + + DEBUG_COMM4 was named DEBUG_COMM3 due to cut-n-paste + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@676 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 106b8d39d8de00d77e8d6f56d69b62f8d0c4d25b +Author: Ludovic Rousseau +Date: Tue Feb 3 15:44:52 2004 +0000 + + add CardUp() and CardDown() for PowerOn and PowerOff actions + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@673 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_ifdhandler.h | 2 ++ + src/ifdhandler.c | 84 +++++++++++++++++++++++++++++++++++++++++++++++---- + 2 files changed, 80 insertions(+), 6 deletions(-) + +commit 179ac0923cf71ff7939c9eb71d129b86ebb0f092 +Author: Ludovic Rousseau +Date: Tue Feb 3 15:43:51 2004 +0000 + + add dwMaxIFSD field + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@672 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.h | 8 +++++++- + src/ccid_serial.c | 1 + + src/ccid_usb.c | 1 + + 3 files changed, 9 insertions(+), 1 deletion(-) + +commit c1920191e5c3dd92a61b3af97bddf9161bb23df6 +Author: Ludovic Rousseau +Date: Tue Feb 3 15:42:53 2004 +0000 + + add DEBUG_COMM3() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@671 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.h | 2 ++ + 1 file changed, 2 insertions(+) + +commit a05a6a03a00a3a8993878b2d5d0940aaf2e33973 +Author: Ludovic Rousseau +Date: Tue Feb 3 15:42:24 2004 +0000 + + use my own debug routines + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@670 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/pps.c | 18 +++--------------- + src/towitoko/protocol_t1.c | 39 +++++++++++++-------------------------- + src/towitoko/t1_block.c | 7 ------- + 3 files changed, 16 insertions(+), 48 deletions(-) + +commit 3df0d6ca10eba2726537c830cabe9a0c593c5692 +Author: Ludovic Rousseau +Date: Tue Feb 3 14:59:04 2004 +0000 + + new file + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@669 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SCR331-DI.txt | 44 ++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 44 insertions(+) + +commit eed50bfc5aa2e241f95a497a7bf42229cbfef7c6 +Author: Ludovic Rousseau +Date: Mon Feb 2 15:45:14 2004 +0000 + + do not restrict ifsc to Towitoko + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@668 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/protocol_t1.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8c4c1fea06dd75a625090c1aa65902d2c3f6979f +Author: Ludovic Rousseau +Date: Mon Feb 2 15:44:08 2004 +0000 + + remove PPS hack + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@667 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/protocol_t1.c | 11 ----------- + 1 file changed, 11 deletions(-) + +commit f571bade51ad63ebf825baf2ca6558347f6e8592 +Author: Ludovic Rousseau +Date: Mon Feb 2 10:33:26 2004 +0000 + + add SCR 331-DI in the "should work" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@666 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + 1 file changed, 2 insertions(+) + +commit dd2898179151de1ba2d0ac48e4e0ca3f18989138 +Author: Ludovic Rousseau +Date: Mon Feb 2 10:05:34 2004 +0000 + + use create_Info_plist.pl to generate the installed Info.plist from an + Info.plist template and a list of supported readers. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@665 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/supported_readers.txt | 26 +++++++++++++++ + src/Info.plist | 48 ++------------------------- + src/Makefile.am | 2 +- + src/create_Info_plist.pl | 76 +++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 106 insertions(+), 46 deletions(-) + +commit 9eebc2aea305880fde3ea3ea1de911ef7f8b0968 +Author: Ludovic Rousseau +Date: Thu Jan 29 13:37:35 2004 +0000 + + removed useless function name in debug messages since we use __FUNCTION__ + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@663 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 113f0ce99030be147c1cbe345d0bfbea9504bc81 +Author: Ludovic Rousseau +Date: Thu Jan 29 10:33:52 2004 +0000 + + - remove device_name[] from struct _usbDevice + - use naming scheme usb:vendor/product + - simplify (a bit) the code + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@662 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 240 ++++++++++++++++++++++++++++----------------------------- + 1 file changed, 116 insertions(+), 124 deletions(-) + +commit 9d3372a0f2fe48e35a1bd1737b9caac5be2b21d1 +Author: Ludovic Rousseau +Date: Thu Jan 29 10:32:20 2004 +0000 + + remore *device_name[] argument from get_desc() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@661 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.h | 3 +-- + src/parse.c | 12 ++++++------ + 2 files changed, 7 insertions(+), 8 deletions(-) + +commit 0adaa798c410000e16bb48cbb67a3579a13cc0a8 +Author: Ludovic Rousseau +Date: Thu Jan 29 10:31:15 2004 +0000 + + add DEBUG_CRITICAL4 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@660 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.h | 2 ++ + 1 file changed, 2 insertions(+) + +commit 41ad2b7390fb2501edec7827d66d5538cd6035cb +Author: Ludovic Rousseau +Date: Tue Jan 27 15:01:08 2004 +0000 + + set received size to 0 in case of error in CmdXfrBlockTPDU_T1 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@659 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit 28252029c75b98cef75fccc833b2f3976c9972dc +Author: Ludovic Rousseau +Date: Tue Jan 27 14:59:16 2004 +0000 + + in case of error exits CCID_Receive() without copying an nonexistent anwser + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@658 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +commit ad1659e3486db02a5b5140be06f8d806d2ada292 +Author: Ludovic Rousseau +Date: Tue Jan 27 14:46:01 2004 +0000 + + use DEBUG_CRITICAL2() instead of DEBUG_CRITICAL() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@655 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2aa5683710ba3b8856b0f0d2f10bd8fb5237b7c7 +Author: Ludovic Rousseau +Date: Tue Jan 27 13:53:10 2004 +0000 + + add the "Silitek SK-3105 keyboard" in the "Should work but untested by + me" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@654 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 1 + + 1 file changed, 1 insertion(+) + +commit ced3bb5a543ab9ec58189d7dc1a978c5cd943dcf +Author: Ludovic Rousseau +Date: Tue Jan 27 13:51:18 2004 +0000 + + ignore some build files + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@653 0ce88b0d-b2fd-0310-8134-9614164e65ea + + .cvsignore | 12 ++++++++++++ + aclocal/.cvsignore | 2 ++ + build/.cvsignore | 9 +++++++++ + readers/.cvsignore | 2 ++ + 4 files changed, 25 insertions(+) + +commit 6e1585b439be7b2673ed51b732d40a2970febd5b +Author: Ludovic Rousseau +Date: Tue Jan 27 13:45:41 2004 +0000 + + ignore some build files + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@652 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/.cvsignore | 10 ++++++++++ + src/towitoko/.cvsignore | 1 + + 2 files changed, 11 insertions(+) + +commit 75a66e18b2f0da354f725a6b830cc1a715ebfed3 +Author: Ludovic Rousseau +Date: Tue Jan 27 13:40:29 2004 +0000 + + add Silitek SK-3105 keyboard + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@651 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 7ceac8d2a0d97caad2e289042da0f5bb9dda275e +Author: Ludovic Rousseau +Date: Tue Jan 27 13:39:47 2004 +0000 + + add support of USB devices with multiple interfaces (like the Silitek + SK-3105 keyboard) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@650 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++--------- + src/ccid_usb.h | 3 ++- + 2 files changed, 57 insertions(+), 10 deletions(-) + +commit e50616bf036f8c3a204de39f6f29c6bae32c479a +Author: Ludovic Rousseau +Date: Tue Jan 27 13:32:55 2004 +0000 + + add support of IFDHCreateChannelByName + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@649 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 39 +++++++++++++++++++++++++----------- + src/ccid_serial.h | 1 + + src/ccid_usb.c | 60 +++++++++++++++++++++++++++++++++++++++++++------------ + src/ccid_usb.h | 1 + + src/defs.h | 2 ++ + src/ifdhandler.c | 32 +++++++++++++++++++++++++++++ + 6 files changed, 110 insertions(+), 25 deletions(-) + +commit 1f39686cc26f2587004eb42457f4cc5ca43f2625 +Author: Ludovic Rousseau +Date: Thu Jan 22 14:00:38 2004 +0000 + + move rules for src/protocol_t1/ files in src/Makefile.am to avoid + building a (problematic) static library + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@641 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 34 +++++++++++++++++++++++++--------- + 1 file changed, 25 insertions(+), 9 deletions(-) + +commit 896dbc0f2d7bff3028985ee0b52dab68a6ce95ff +Author: Ludovic Rousseau +Date: Thu Jan 22 13:59:24 2004 +0000 + + removed since rules for src/protocol_t1/ files are in src/Makefile.am + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@640 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/Makefile.am | 29 ----------------------------- + 1 file changed, 29 deletions(-) + +commit 5f33ac07e4bef758e14356cf36a75e1dfcb6da54 +Author: Ludovic Rousseau +Date: Thu Jan 15 15:41:31 2004 +0000 + + define APDU_Cmd and APDU_Rsp + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@620 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/apdu.h | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 49 insertions(+) + +commit 369dde145530c6a2f9ecca279d40c8705621a4ea +Author: Ludovic Rousseau +Date: Thu Jan 15 14:34:21 2004 +0000 + + new files from Carlos Prados towitoko-2.0.7 driver (with a bit of hacking) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@619 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/towitoko/Makefile.am | 29 +++ + src/towitoko/README | 11 ++ + src/towitoko/atr.c | 464 +++++++++++++++++++++++++++++++++++++++++++++ + src/towitoko/atr.h | 131 +++++++++++++ + src/towitoko/defines.h | 81 ++++++++ + src/towitoko/pps.c | 151 +++++++++++++++ + src/towitoko/pps.h | 64 +++++++ + src/towitoko/protocol_t1.c | 363 +++++++++++++++++++++++++++++++++++ + src/towitoko/protocol_t1.h | 78 ++++++++ + src/towitoko/t1_block.c | 257 +++++++++++++++++++++++++ + src/towitoko/t1_block.h | 109 +++++++++++ + 11 files changed, 1738 insertions(+) + +commit e29d296e24ccbecead855b2d72615bb6b17b6e7f +Author: Ludovic Rousseau +Date: Thu Jan 15 14:23:41 2004 +0000 + + build protocol_t1 library + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@618 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +commit 20ba6b58a1ddfd37e7ee5c9a4b7177d2f10c96f9 +Author: Ludovic Rousseau +Date: Thu Jan 15 14:19:02 2004 +0000 + + add SetParameters() CCID command + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@617 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 37 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 37 insertions(+) + +commit c502084d273c8b0b0b0486d5d7df7ff9c83c4834 +Author: Ludovic Rousseau +Date: Thu Jan 15 14:10:13 2004 +0000 + + add support of T=1 in TPDU mode + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@616 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 25 ++++++++++++++----------- + 1 file changed, 14 insertions(+), 11 deletions(-) + +commit a95eea970629fee79eaf312971d3e68c02ea5551 +Author: Ludovic Rousseau +Date: Thu Jan 15 14:09:38 2004 +0000 + + add CcidDesc.t1 field + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@615 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/defs.h | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +commit e47ba6a76230239c0823422aaa127804e839f430 +Author: Ludovic Rousseau +Date: Thu Jan 15 14:09:10 2004 +0000 + + replace CmdXfrBlockTPDU() by CmdXfrBlockTPDU_T0() and CmdXfrBlockTPDU_T1() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@614 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++-------- + src/commands.h | 11 ++++++---- + 2 files changed, 66 insertions(+), 13 deletions(-) + +commit f29b56b8772ea8be5c61031eb5d4ce85e72a14e9 +Author: Ludovic Rousseau +Date: Thu Jan 15 13:51:40 2004 +0000 + + split CmdXfrBlockShortAPDU() in CCID_Transmit() and CCID_Receive() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@613 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 149 ++++++++++----------------------------------------------- + 1 file changed, 26 insertions(+), 123 deletions(-) + +commit 62c8d6aa8fa696ee93995b757781b16c998bad9f +Author: Ludovic Rousseau +Date: Thu Jan 15 13:45:37 2004 +0000 + + call ccid_open_hack() in IFDHCreateChannel() instead of in each OpenPort() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@612 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 2 -- + src/ccid_usb.c | 4 ---- + src/ifdhandler.c | 3 +++ + 3 files changed, 3 insertions(+), 6 deletions(-) + +commit 4103d10fb6446aede9729e20763ec7910986500a +Author: Ludovic Rousseau +Date: Thu Jan 15 13:41:01 2004 +0000 + + use an (int *) instead of a PDWORD for rx_length argument + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@611 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 1 + + src/commands.c | 8 ++++---- + src/commands.h | 6 +++--- + src/ifdhandler.c | 12 ++++++------ + 4 files changed, 14 insertions(+), 13 deletions(-) + +commit 35ac1a75d1f8a1855df7f39bbb6bfe56ce82f3af +Author: Ludovic Rousseau +Date: Thu Jan 15 10:54:40 2004 +0000 + + new files. add definition of ACX_PTHREAD macro + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@610 0ce88b0d-b2fd-0310-8134-9614164e65ea + + aclocal/Makefile.am | 3 + + aclocal/acx_pthread.m4 | 190 +++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 193 insertions(+) + +commit 9d2bb363a35aff8db52f4e31fc1dc6efba9758a8 +Author: Ludovic Rousseau +Date: Thu Jan 15 08:34:20 2004 +0000 + + add get_ccid_slot() function + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@609 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_ifdhandler.h | 2 ++ + src/ifdhandler.c | 6 ++++++ + 2 files changed, 8 insertions(+) + +commit 36ed5f37528807618526ba37d88618331d50ecc5 +Author: Ludovic Rousseau +Date: Thu Jan 15 08:30:31 2004 +0000 + + remove function name from debug message since __FUNCTION__ is now used in + DEBUG_* macro definition + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@608 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 18 +++++++++--------- + src/ccid_usb.c | 2 +- + src/ifdhandler.c | 20 ++++++++++---------- + 3 files changed, 20 insertions(+), 20 deletions(-) + +commit 0163971481a1346f126dad0238fecca363f6e903 +Author: Ludovic Rousseau +Date: Thu Jan 15 08:19:03 2004 +0000 + + add ActivCard + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@607 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 057b482a6c700e193c855ea801dce7bdb40e0936 +Author: Ludovic Rousseau +Date: Thu Jan 15 08:18:38 2004 +0000 + + created an "Should work but untested by me" section and add SCM Micro + SPR 532 and ActivCard USB reader 2.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@606 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +commit 784bdd239bcac700ad6f7ef9e063eb1c5d9548ea +Author: Ludovic Rousseau +Date: Thu Jan 8 15:26:17 2004 +0000 + + The crashes under MacOS X were not because of a bug in libusb but because of + a bug in pcscd MacOS X hotplug. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@584 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 9 --------- + 1 file changed, 9 deletions(-) + +commit 48d7da4f20943aab8c0a06be908516d8de297e68 +Author: Ludovic Rousseau +Date: Tue Jan 6 07:21:27 2004 +0000 + + the USB extra field length shall be exactly 54 bytes to be CCID. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@581 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 97e5d6c9522bc63b1aac2b8430ee7c649c3d7eb7 +Author: Ludovic Rousseau +Date: Mon Jan 5 21:22:03 2004 +0000 + + also print the function name (__FUNCTION__) in the debug messages + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@580 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.h | 29 +++++++++++++++++------------ + 1 file changed, 17 insertions(+), 12 deletions(-) + +commit 797f84c90d02cd3155ee788f392e9ef7bc1ba668 +Author: Ludovic Rousseau +Date: Mon Jan 5 20:53:59 2004 +0000 + + add a test on the USB extra field length to avoid a crash and print an + error message. This occurs when the reader is _not_ CCID and the CCID + driver is used (wrong Info.plist for example). + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@579 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 8 ++++++-- + src/parse.c | 7 +++++++ + 2 files changed, 13 insertions(+), 2 deletions(-) + +commit ab5cd8dcf6b1ac5ba635ac753a6c06a0df4198e5 +Author: Ludovic Rousseau +Date: Fri Dec 19 09:03:49 2003 +0000 + + build but do not install the serial ccidtwin driver by default since it + is useless on computers without a serial port or without this reader for + example. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@578 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 13 +++++++++++-- + src/Makefile.am | 8 ++++++-- + 2 files changed, 17 insertions(+), 4 deletions(-) + +commit 34d8e585aa4dacfd01ae240898d8253e005a6ae9 +Author: Ludovic Rousseau +Date: Tue Dec 16 10:11:09 2003 +0000 + + read and write timeouts are not symmetric. write timout can be shorter + since the reader and card is not supposed to do anything before + receiving (write) a command. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@570 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 15 ++++++++++++--- + 1 file changed, 12 insertions(+), 3 deletions(-) + +commit 6798cf7138aac8533ef93a3905ff8f6b873b2a9a +Author: Ludovic Rousseau +Date: Fri Dec 12 09:38:25 2003 +0000 + + return IFD_NOT_SUPPORTED instead of IFD_SUCCESS in functions doing + nothing (yet) (IFDHSetCapabilities, IFDHSetProtocolParameters, + IFDHControl); + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@569 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit 146f6acfaf4b8c0371ab4e3dd7de8b96ff4aaecd +Author: Ludovic Rousseau +Date: Thu Dec 11 21:19:46 2003 +0000 + + set the result buffer length to 0 in IFDHControl() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@568 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 0bb480ab3857f4852ca5a1eb9ce280fa11966df1 +Author: Ludovic Rousseau +Date: Tue Nov 25 23:10:59 2003 +0000 + + do not try to find usb.h and other libusb files if --disable-libusb is + used. Needed if you only want to build the serial driver. Thanks to Niki + Waibel for the patch. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@565 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 32 +++++++++++++++++--------------- + 1 file changed, 17 insertions(+), 15 deletions(-) + +commit fd2c078e9140e5c23f09cef28c5a89a7ce04515b +Author: Ludovic Rousseau +Date: Tue Nov 25 23:07:33 2003 +0000 + + add a --enable-ccidtwindir argument to ./configure to specify the + serial GemPC Twin installation directory + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@564 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 36 ++++++++++++++++++++++++++++++++---- + configure.in | 25 +++++++++++++++++++++++-- + src/Makefile.am | 9 ++++----- + 3 files changed, 59 insertions(+), 11 deletions(-) + +commit d279ba4bb2c1e5ca4235e1448bfa6851b173c9cb +Author: Ludovic Rousseau +Date: Tue Nov 25 22:55:58 2003 +0000 + + use a updated version of acx_pthread.m4 needed for FreeBSD + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@563 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + config.h.in | 8 ++++++-- + configure.in | 10 +++++----- + reconf | 1 + + src/ifdhandler.c | 15 ++++++++------- + 5 files changed, 21 insertions(+), 15 deletions(-) + +commit f56372a862aeee1abb78cacb859e9852649ff9ef +Author: Ludovic Rousseau +Date: Thu Nov 6 18:53:40 2003 +0000 + + check that the installed libusb implements usb_get_string_simple() + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@556 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 4c140e3bb89875158cf5c8a179bfa4308add194e +Author: Ludovic Rousseau +Date: Tue Nov 4 22:20:28 2003 +0000 + + add SPR 532 in "Supported CCID readers" list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@553 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 2 ++ + 1 file changed, 2 insertions(+) + +commit 62d5599a12f167a7452771caf9007510b76ccc90 (tag: ccid-0.3.2) +Author: Ludovic Rousseau +Date: Tue Nov 4 22:16:38 2003 +0000 + + release 0.3.2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@552 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +commit 1742277b6150f51948aca8faa41e5855827b757e +Author: Ludovic Rousseau +Date: Tue Nov 4 21:58:44 2003 +0000 + + version 0.3.2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@551 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit be91e4479a90c42e8fdd3d39b23ef209a952ebe2 +Author: Ludovic Rousseau +Date: Tue Nov 4 21:57:19 2003 +0000 + + comment out the automatic GET RESPONSE part. I don't think it should be + in the driver. Maybe in pcscd instead? + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@550 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit f53fec7080bbb8aa299f076f3b38ba85982ee3b3 +Author: Ludovic Rousseau +Date: Mon Nov 3 16:08:48 2003 +0000 + + also distribute SPR532.txt + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@547 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 53ebb847fcf7d4220ea57dc2b9535a0b993f38e7 +Author: Ludovic Rousseau +Date: Sat Nov 1 00:40:36 2003 +0000 + + bootstrap is no more distributed (it is no more in CVS either) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@545 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e506125311e5a8031ad7bd20a18e97c4e5994fb0 +Author: Ludovic Rousseau +Date: Sat Nov 1 00:39:42 2003 +0000 + + $(CCID_BUNDLE) is a directory so use 'rm -r' in uninstall_ccid: target + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@544 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d3b36be81be222d2eb9a3e965bd0a1bf0c81afbb +Author: Ludovic Rousseau +Date: Fri Oct 31 23:55:18 2003 +0000 + + modify the hack to compile under MacOSX. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@543 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +commit 068083832633d4c63d1e9aae17acf2dacf039a06 +Author: Ludovic Rousseau +Date: Fri Oct 31 23:52:18 2003 +0000 + + config.guess, config.sub, depcomp and ltmain.sh are in build/ so removed + them there. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@542 0ce88b0d-b2fd-0310-8134-9614164e65ea + + reconf | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 16f680a9936df1cb1afd6386426a6492a72155c9 +Author: Ludovic Rousseau +Date: Fri Oct 31 23:51:25 2003 +0000 + + useless since we have a 'make dist' rule + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@541 0ce88b0d-b2fd-0310-8134-9614164e65ea + + create_distrib.sh | 80 ------------------------------------------------------- + 1 file changed, 80 deletions(-) + +commit fe5fe7ec54c9852d9fc8724c2c5e8632b3a60657 +Author: Ludovic Rousseau +Date: Wed Oct 29 18:06:08 2003 +0000 + + add USB identification for SPR 532 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@531 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist | 15 +++++++++------ + 1 file changed, 9 insertions(+), 6 deletions(-) + +commit c5557b7468f7af247bbbefa711287af0a11a86bf +Author: Ludovic Rousseau +Date: Wed Oct 29 18:02:45 2003 +0000 + + add SPR 532 description even if it is not a "real" CCID reader. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@530 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/SPR532.txt | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 50 insertions(+) + +commit 675ecd2d9c12b70d84a443c0b628452e4fddc41e +Author: Ludovic Rousseau +Date: Wed Oct 29 18:01:23 2003 +0000 + + continue parsing even if bInterfaceSubClass and bInterfaceProtocol are + unsupported. This may be the case with non "real" CCID readers. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@529 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 10 ++-------- + 1 file changed, 2 insertions(+), 8 deletions(-) + +commit 01ce4dd017548c1a2c2def5380cda574e0a4d7df +Author: Ludovic Rousseau +Date: Wed Oct 29 17:54:04 2003 +0000 + + do not exit if the InterfaceClass is 0xFF (proprietary). It is the case + with old readers manufactured before the final release of the CCID specs. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@528 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +commit c89419ed4a4849f3554ca21b323ff957207edd82 +Author: Ludovic Rousseau +Date: Tue Oct 28 18:18:11 2003 +0000 + + correctly use the device name in a debug message instead of a not yet initialised field. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@525 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 54dc6ff8af74d9b3c716ad1848f0e6f60eb8d9a4 +Author: Ludovic Rousseau +Date: Tue Oct 28 16:58:01 2003 +0000 + + removed since ./reconf is doing a correct job + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@524 0ce88b0d-b2fd-0310-8134-9614164e65ea + + bootstrap | 40 ---------------------------------------- + 1 file changed, 40 deletions(-) + +commit 116df86f0d6b28a4fda38cc12129b04b0b423428 +Author: Ludovic Rousseau +Date: Tue Oct 28 16:56:27 2003 +0000 + + move LTC31 reader from unsupported to supported reader list. It was my fault + since in used odd INS byte in my test applet and odd INS bytes are + forbidden by ISO 7816-4 ch. 5.4.2 Instruction byte. Thanks to Josep Mon�s + Teixidor for pointing the problem. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@523 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +commit e796854221e2461a2587afe141314eed3f045ec6 +Author: Ludovic Rousseau +Date: Tue Oct 28 16:51:37 2003 +0000 + + correct a stupid bug that occurs with an APDU with 2 bytes response. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@522 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 91491164758800c36ad6e8515889114cc1e6d613 (tag: ccid-0.3.1) +Author: Ludovic Rousseau +Date: Tue Sep 23 07:54:56 2003 +0000 + + release 0.3.1 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@467 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +commit a8f792adc6dbf11e821146d811638e5763a2a92f +Author: Ludovic Rousseau +Date: Tue Sep 23 07:51:42 2003 +0000 + + update file list + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@466 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MANIFEST | 19 ++++++++++++++++--- + 1 file changed, 16 insertions(+), 3 deletions(-) + +commit 9f48940154237483ca71072a6e7b3faa35b14762 +Author: Ludovic Rousseau +Date: Tue Sep 23 07:41:47 2003 +0000 + + add a note about T=1 cards and readers in TPDU mode + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@465 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit 67dc9a484bf103ceb269844515d91b9778c7cf37 +Author: Ludovic Rousseau +Date: Mon Sep 22 14:26:02 2003 +0000 + + define TAG_IFD_THREAD_SAFE introduced in pcsclite-1.2.0-rc3 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@464 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_ifdhandler.h | 1 + + 1 file changed, 1 insertion(+) + +commit 8c6ed32fa1649a3648eb768d7c692e0e1e67f2ed +Author: Ludovic Rousseau +Date: Mon Sep 22 14:25:19 2003 +0000 + + add support of thread safe (APDU multiplexing on different readers) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@463 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 38 ++++++++++++++++++++++++++++++++++---- + 1 file changed, 34 insertions(+), 4 deletions(-) + +commit 92348f7dd4ae84b658f3116e3d0470666833e57c +Author: Ludovic Rousseau +Date: Mon Sep 22 14:24:26 2003 +0000 + + ReadChunk() realy reads up to min_length bytes. Add some debug messages + in the state automata. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@462 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 88 +++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 56 insertions(+), 32 deletions(-) + +commit dabd29c260de59cf75bc38ad04f58f536974c909 +Author: Ludovic Rousseau +Date: Mon Sep 22 14:22:51 2003 +0000 + + modify install rules so that root can use them even over NFS where root is + nobody + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@461 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 13 +++++-------- + 1 file changed, 5 insertions(+), 8 deletions(-) + +commit f23346387b9a14f7e34784f1af8bdbd5bd7c8761 +Author: Ludovic Rousseau +Date: Mon Sep 22 14:21:57 2003 +0000 + + add --enable-multi-thread for thread safe support + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@460 0ce88b0d-b2fd-0310-8134-9614164e65ea + + config.h.in | 3 +++ + configure.in | 46 +++++++++++++++++++++++++++++++++------------- + 2 files changed, 36 insertions(+), 13 deletions(-) + +commit 7ac72812ea800d471599bd20cb1fc9103dabd1e6 +Author: Ludovic Rousseau +Date: Mon Sep 22 14:21:00 2003 +0000 + + add reconf file + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@459 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + reconf | 17 +++++++++++++++++ + 2 files changed, 18 insertions(+), 1 deletion(-) + +commit 0446a09723edc0d7f90c07726a67d407842bd2b6 +Author: Ludovic Rousseau +Date: Fri Sep 19 12:08:09 2003 +0000 + + complete reimplementation of the Twin serial protocol using a finite + state automata (code much simpler) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@453 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 277 +++++++++++++++++++++++++++--------------------------- + src/ccid_serial.h | 4 +- + 2 files changed, 140 insertions(+), 141 deletions(-) + +commit 65e79ef86fa6ffe76b63ad25d2b66a93880eb44e +Author: Ludovic Rousseau +Date: Tue Sep 16 16:51:02 2003 +0000 + + Put back AC_PROG_CPP, it has nothing to do with C++ but with C preprocessor + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@448 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 1 + + 1 file changed, 1 insertion(+) + +commit 47a762773c9dc86482e29674a04bf2f1d3928082 +Author: Ludovic Rousseau +Date: Tue Sep 16 14:19:11 2003 +0000 + + Do not switch to APDU mode since it also swicth in EMV mode and may not + work with non EMV cards + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@445 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 81bfd5fc393a65460c7212fe6c3c545cb237cfc1 +Author: Ludovic Rousseau +Date: Tue Sep 16 14:18:42 2003 +0000 + + honor DESTDIR in install rules (closes [ #300110 ]) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@444 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile.am | 23 ++++++++++++++--------- + 1 file changed, 14 insertions(+), 9 deletions(-) + +commit 73ac34a6a16f10b3f4876d0476d4b910b5ce1ee7 +Author: Ludovic Rousseau +Date: Tue Sep 16 14:17:33 2003 +0000 + + remove useless AC_PROG_CPP (no C++ code in ccid driver) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@443 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 1 - + 1 file changed, 1 deletion(-) + +commit c51d9d06095bc4a29b34b4042f88ff016088d1ad +Author: Ludovic Rousseau +Date: Tue Sep 16 13:12:29 2003 +0000 + + version 0.3.1 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@438 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 71ab03e985faf19a0362e883c3d6c53be92fb55e +Author: Ludovic Rousseau +Date: Tue Sep 16 13:12:07 2003 +0000 + + document the use of --enable-libusb=PATH + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@437 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit 5d7461274f910b5cc2e4f50982c2af1d1d2715cf +Author: Ludovic Rousseau +Date: Tue Sep 16 13:08:54 2003 +0000 + + add --enable-libusb=PATH option + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@436 0ce88b0d-b2fd-0310-8134-9614164e65ea + + configure.in | 23 +++++++++++++++++++++-- + 1 file changed, 21 insertions(+), 2 deletions(-) + +commit ddc1d81d9177038ddf7b1f06d1afb7828c1de3a3 +Author: Ludovic Rousseau +Date: Wed Sep 10 16:15:06 2003 +0000 + + I forgot to add "support of "time request" from the card." + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@425 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 5bb97c792ea0059af20ca01acbee48ecc81c4e46 (tag: ccid-0.3.0) +Author: Ludovic Rousseau +Date: Wed Sep 10 12:27:28 2003 +0000 + + release 0.3.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@423 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 21 +++++++++++++++++++-- + 1 file changed, 19 insertions(+), 2 deletions(-) + +commit 4bd33d3bb2873bdd5f4081ba4280a975026c9c66 +Author: Ludovic Rousseau +Date: Wed Sep 10 12:25:21 2003 +0000 + + document the use of ./configure script + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@422 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +commit 36f39d107c076d23c196b35e130b1092f3e2fc81 +Author: Ludovic Rousseau +Date: Wed Sep 10 12:03:39 2003 +0000 + + use ChangeLog instead of ChangeLog.cvs since the dist Makefile target is + looking at this file name. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@421 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 0141ef6ec3a2fb6c8288e7b3f7dcb4a29b9bdb62 +Author: Ludovic Rousseau +Date: Wed Sep 10 09:52:21 2003 +0000 + + config.h is now generated by ./configure + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@420 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/config.h | 42 ------------------------------------------ + 1 file changed, 42 deletions(-) + +commit e59c308ad6ffc855ec9e0e5793574766dbdaaf1b +Author: Ludovic Rousseau +Date: Wed Sep 10 09:45:58 2003 +0000 + + add readers/ in generated .tar.gz archive + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@418 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 2 +- + configure.in | 2 +- + readers/Makefile.am | 5 +++++ + 3 files changed, 7 insertions(+), 2 deletions(-) + +commit 8758afbd85d9ca8bb9db29639855076e26549aca +Author: Ludovic Rousseau +Date: Wed Sep 10 09:29:03 2003 +0000 + + use new parse indentation for more readability of supported features + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@417 0ce88b0d-b2fd-0310-8134-9614164e65ea + + readers/CardMan3121.txt | 27 ++++++++++++++++++++------- + readers/GemPC433_SL.txt | 20 +++++++++++++++----- + readers/GemPCKey.txt | 21 +++++++++++++++------ + readers/GemPCTwin.txt | 20 +++++++++++++++----- + readers/LTC31.txt | 16 +++++++++++----- + readers/SCR331.txt | 20 +++++++++++++++----- + readers/SCR335.txt | 20 +++++++++++++++----- + 7 files changed, 106 insertions(+), 38 deletions(-) + +commit 7b1203d411dfb3b4a9bff99b88daf757b7fc07a7 +Author: Ludovic Rousseau +Date: Wed Sep 10 09:19:05 2003 +0000 + + new build process using autoconf/automake + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@415 0ce88b0d-b2fd-0310-8134-9614164e65ea + + config.h.in | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 116 insertions(+) + +commit 8ac1db781ee217c0d3c6e9e1839d0f2de37641d8 +Author: Ludovic Rousseau +Date: Wed Sep 10 09:17:43 2003 +0000 + + manage serial protocol used by the GemPC Twin. Thanks to Niki W. Waibel + for a working prototype. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@414 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_serial.c | 540 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/ccid_serial.h | 30 +++ + 2 files changed, 570 insertions(+) + +commit 772b1590935a3831e2e84ed82110e58ea0014902 +Author: Ludovic Rousseau +Date: Wed Sep 10 09:15:51 2003 +0000 + + contains common CCID feature for USB and serial (was in ccid_usb before) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@413 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid.c | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/ccid.h | 75 ++++++++++++++++++++++++++++++ + 2 files changed, 228 insertions(+) + +commit 2f8f9b352fa7c02e4de49980c36b8e11b2b41b76 +Author: Ludovic Rousseau +Date: Wed Sep 10 09:14:41 2003 +0000 + + used to generate a correct reader.conf with the real library name + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@412 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/reader.conf.in | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit ecebfae68550a827ac103af5d00ae3431ec14414 +Author: Ludovic Rousseau +Date: Wed Sep 10 09:13:42 2003 +0000 + + remove IFDSetEmv() definition. It is now useless. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@411 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_ifdhandler.h | 1 - + 1 file changed, 1 deletion(-) + +commit 6d0c3ab7952b33e9d20b267441118bec690903b9 +Author: Ludovic Rousseau +Date: Wed Sep 10 09:12:20 2003 +0000 + + use OpenPort instead of OpenUSB. move the complex TPDU management in + commands.c (and use it only if reader does not support APDU mode) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@410 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ifdhandler.c | 143 ++++++++----------------------------------------------- + 1 file changed, 20 insertions(+), 123 deletions(-) + +commit 41488ab294dc65f25782360f15bcb06c7e085955 +Author: Ludovic Rousseau +Date: Wed Sep 10 09:10:28 2003 +0000 + + transport abstraction: define OpenPort, ClosePort, etc. to OpenSerial or + OpenUSB depending on TWIN_SERIAL compilation option + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@409 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/defs.h | 46 +++++++++++++++++++++++++++++++++------------- + 1 file changed, 33 insertions(+), 13 deletions(-) + +commit bfb8a157b91a8e6e9be79aa4af74537052ed718e +Author: Ludovic Rousseau +Date: Wed Sep 10 09:09:12 2003 +0000 + + test for PACKAGE and not __CONFIG_H__ since the config.h file is not + generated by ./configure + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@408 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/debug.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c4bb400fc1988e51b60aacc3c2e49902ea426176 +Author: Ludovic Rousseau +Date: Wed Sep 10 09:06:41 2003 +0000 + + - support auto voltage at power on if reader support it + - support Gemplus proprietary command to switch reader from TPDU to APDU mode + - use APDU mode if reader support it. make it easy to support extended + APDU but I have no reader to test this. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@407 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/commands.c | 293 +++++++++++++++++++++++++++++++++++++++++++++++++++------ + src/commands.h | 8 +- + 2 files changed, 271 insertions(+), 30 deletions(-) + +commit a1055af871a3856d9d36182cdbc8a0e83673f7ed +Author: Ludovic Rousseau +Date: Wed Sep 10 09:01:30 2003 +0000 + + redesign to separate communication media and CCID protocol. call + ccid_open_hack() upon open to do some reader dependent magic. + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@406 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 150 ++++++++++++--------------------------------------------- + src/ccid_usb.h | 11 ----- + 2 files changed, 31 insertions(+), 130 deletions(-) + +commit ec00f766851855dacb46b324597ec1a5117ed628 +Author: Ludovic Rousseau +Date: Wed Sep 10 08:57:29 2003 +0000 + + indent the output with one feature per line (and not on the same line + separated by ,) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@405 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 71 +++++++++++++++++++++++++++++++++---------------------------- + 1 file changed, 38 insertions(+), 33 deletions(-) + +commit bebaa5480b53714c799930fbc20149315c865b7d +Author: Ludovic Rousseau +Date: Wed Sep 10 08:55:45 2003 +0000 + + new build process using autoconf/automake + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@404 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile | 16 ----- + src/Makefile | 107 ---------------------------------- + src/check | 187 ----------------------------------------------------------- + src/ylwrap | 160 -------------------------------------------------- + 4 files changed, 470 deletions(-) + +commit 05c5caf2591f3a9b4eece602d7f849b7afc4112a +Author: Ludovic Rousseau +Date: Wed Sep 10 08:52:29 2003 +0000 + + use PCSCLITE_MAX_READERS instead of PCSCLITE_MAX_CHANNELS + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@403 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/pcscdefines.h | 4 ++-- + src/utils.c | 6 +++--- + 2 files changed, 5 insertions(+), 5 deletions(-) + +commit 8f6ee1234977f6ed4cd04df5f5bb79c5bcb018cb +Author: Ludovic Rousseau +Date: Wed Sep 10 08:47:41 2003 +0000 + + new build process using autoconf/automake + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@402 0ce88b0d-b2fd-0310-8134-9614164e65ea + + Makefile.am | 32 ++++++++++ + NEWS | 0 + bootstrap | 40 +++++++++++++ + build/ylwrap | 160 ++++++++++++++++++++++++++++++++++++++++++++++++++ + configure.in | 177 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/Makefile.am | 58 +++++++++++++++++++ + 6 files changed, 467 insertions(+) + +commit f4edc5831130225e28e01337e90be3cbceda88c8 +Author: Ludovic Rousseau +Date: Wed Aug 27 06:53:56 2003 +0000 + + remove unused capabilities.c file + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@343 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MANIFEST | 1 - + src/Makefile | 2 +- + src/capabilities.c | 30 ------------------------------ + 3 files changed, 1 insertion(+), 32 deletions(-) + +commit 75f9cf942f47aff203b9fbd2715ccd77a19628fb (tag: ccid-0.2.0) +Author: Ludovic Rousseau +Date: Tue Aug 26 20:16:00 2003 +0000 + + release 0.2.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@342 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 793276be8466163fbca9f75727ebfeffdc645a27 +Author: Ludovic Rousseau +Date: Tue Aug 26 20:14:38 2003 +0000 + + script to create the .tar.gz + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@341 0ce88b0d-b2fd-0310-8134-9614164e65ea + + create_distrib.sh | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 80 insertions(+) + +commit 93acd7c38bdd6bbd56c626fb54f9c97f9fc72a35 +Author: Ludovic Rousseau +Date: Tue Aug 26 19:51:29 2003 +0000 + + add a note about libusb problem under *BSD + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@340 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +commit c1b23d0f6f6bb047d6f3664c097fa5fc6980b5dd +Author: Ludovic Rousseau +Date: Tue Aug 26 19:48:04 2003 +0000 + + require pcsc-lite 1.2.0 instead of 1.1.2 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@339 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/check | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +commit 89842bd847c118a7a5fdd7617c8a15b498a785f9 +Author: Ludovic Rousseau +Date: Tue Aug 26 09:01:19 2003 +0000 + + the reader enumeration problem also exist under GNU/Linux (is not MacOS + specific) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@326 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 55 +++++++++++++++++++++++++++++++++---------------------- + 1 file changed, 33 insertions(+), 22 deletions(-) + +commit 7efe421ccea2c5d5ad982ea01bd3e935039be970 +Author: Ludovic Rousseau +Date: Sun Aug 24 16:57:59 2003 +0000 + + remove src/dep_stamp + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@322 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MANIFEST | 1 - + 1 file changed, 1 deletion(-) + +commit eed8de937b07919281c15c17534cdc42413e6c56 +Author: Ludovic Rousseau +Date: Sun Aug 24 16:57:23 2003 +0000 + + add not about bugs/limitations under MacOS X + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@321 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 46 ++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 46 insertions(+) + +commit 08d996e6a03f4c3c6c1ebe2f4266303dbafb0c32 +Author: Ludovic Rousseau +Date: Thu Aug 21 14:10:33 2003 +0000 + + do not print garbage if we can't get the iManufacturer or iProduct fields + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@314 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/parse.c | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +commit 532b4f62664d16e286bb033b69d36f7aea051cf4 +Author: Ludovic Rousseau +Date: Wed Aug 20 13:21:51 2003 +0000 + + comment low level debug messages + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@309 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/config.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 977fd952246f14fd112bc53d698eecc0aca68ce1 +Author: Ludovic Rousseau +Date: Wed Aug 20 13:21:29 2003 +0000 + + use ./ylwrap instead of ylwrap + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@308 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2644b3b2147a24ccbc6e472f0202018d10575e2a +Author: Ludovic Rousseau +Date: Wed Aug 20 12:28:55 2003 +0000 + + do not define LDFLAGS since we get it from outside + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@306 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/check | 3 --- + 1 file changed, 3 deletions(-) + +commit 52ef531b8dbe564a32c3f37a5367998e394ce489 +Author: Ludovic Rousseau +Date: Wed Aug 20 12:28:38 2003 +0000 + + add needed MacOS X frameworks to LDFLAGS (for parse and check) + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@305 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit a32aa2987e2cf9c6eec28741d85d92763b5cdc81 +Author: Ludovic Rousseau +Date: Wed Aug 20 09:28:07 2003 +0000 + + add src/ylwrap + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@304 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MANIFEST | 1 + + 1 file changed, 1 insertion(+) + +commit 05691e4ccfd6139f2e274958f3022ca57731d313 +Author: Ludovic Rousseau +Date: Wed Aug 20 09:27:43 2003 +0000 + + wrapper to call (f)lex + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@303 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ylwrap | 160 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 160 insertions(+) + +commit e42daab3e6c0812b03d5cb970ef57f4657426b12 +Author: Ludovic Rousseau +Date: Wed Aug 20 08:38:36 2003 +0000 + + src/parse shall not be distributed + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@302 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MANIFEST | 1 - + 1 file changed, 1 deletion(-) + +commit e552a48c221e1f110f35a01511ad376648da84b3 +Author: Ludovic Rousseau +Date: Wed Aug 20 08:37:34 2003 +0000 + + do not duplicate the Info.plist filename but "calculate" it once + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@301 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 56 ++++++++++++++++++++++++++++++++++++++++++-------------- + 1 file changed, 42 insertions(+), 14 deletions(-) + +commit 4da123069d345169b7984f40e8e08d387ea689a9 +Author: Ludovic Rousseau +Date: Wed Aug 20 08:35:34 2003 +0000 + + Add support of MacOS X + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@300 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile | 30 +++++++++++++++++++++++++----- + 1 file changed, 25 insertions(+), 5 deletions(-) + +commit 76ab63316cc663b6b9a8b669354d12c23b03ac94 +Author: Ludovic Rousseau +Date: Wed Aug 20 08:35:13 2003 +0000 + + use an for the alias enumeration + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@299 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Info.plist | 50 ++++++++++++++++++++++++++++---------------------- + 1 file changed, 28 insertions(+), 22 deletions(-) + +commit 3fdb65717d72cb30bf46e6baa34c9d7161cc1fce +Author: Ludovic Rousseau +Date: Thu Aug 14 06:53:21 2003 +0000 + + use a 1 minute USB timeout instead of the 1 second used for debug + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@279 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/ccid_usb.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit c7b429bc6848e2ae5b13983e62499a1008e2f263 +Author: Ludovic Rousseau +Date: Thu Aug 14 06:34:21 2003 +0000 + + include in CVS + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@278 0ce88b0d-b2fd-0310-8134-9614164e65ea + + MANIFEST | 37 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 37 insertions(+) + +commit 2019092543517ae0547db51fb70b6eb371258916 +Author: Ludovic Rousseau +Date: Thu Aug 14 06:32:24 2003 +0000 + + remove parse binary in clean target + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@277 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2419b4cf0011bf7d0c4340bc92465bbb357b0507 +Author: Ludovic Rousseau +Date: Wed Aug 13 15:06:36 2003 +0000 + + do not exit with failure if makedepend(1) does not exist + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@276 0ce88b0d-b2fd-0310-8134-9614164e65ea + + src/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e49dd3fab4ec75cafe77b37094d055274527472e +Author: Ludovic Rousseau +Date: Wed Aug 13 13:46:09 2003 +0000 + + Installation and check guide + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@275 0ce88b0d-b2fd-0310-8134-9614164e65ea + + INSTALL | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 58 insertions(+) + +commit 2581d621ab7f6a02033ed652bdafad9fdf5df30f (tag: ccid-0.1.0) +Author: Ludovic Rousseau +Date: Tue Aug 12 22:15:01 2003 +0000 + + release 0.1.0 + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@273 0ce88b0d-b2fd-0310-8134-9614164e65ea + + README | 28 ++++++++++++++++++---------- + 1 file changed, 18 insertions(+), 10 deletions(-) + +commit 631107ca310243cb8c9068c160106a580fd6ed64 +Author: Ludovic Rousseau +Date: Tue Aug 12 12:40:23 2003 +0000 + + Initial revision + + + git-svn-id: svn://anonscm.debian.org/svn/pcsclite/trunk/Drivers/ccid@269 0ce88b0d-b2fd-0310-8134-9614164e65ea + + AUTHORS | 1 + + COPYING | 340 ++++++++++++++++++++++++++++ + Makefile | 16 ++ + README | 63 ++++++ + readers/CardMan3121.txt | 35 +++ + readers/GemPC433_SL.txt | 35 +++ + readers/GemPCKey.txt | 36 +++ + readers/GemPCTwin.txt | 35 +++ + readers/LTC31.txt | 35 +++ + readers/SCR331.txt | 35 +++ + readers/SCR335.txt | 35 +++ + src/.dependencies | 0 + src/Info.plist | 71 ++++++ + src/Makefile | 86 +++++++ + src/capabilities.c | 30 +++ + src/ccid_ifdhandler.h | 141 ++++++++++++ + src/ccid_usb.c | 486 ++++++++++++++++++++++++++++++++++++++++ + src/ccid_usb.h | 47 ++++ + src/check | 189 ++++++++++++++++ + src/commands.c | 254 +++++++++++++++++++++ + src/commands.h | 34 +++ + src/config.h | 42 ++++ + src/debug.c | 72 ++++++ + src/debug.h | 100 +++++++++ + src/defs.h | 58 +++++ + src/ifdhandler.c | 579 ++++++++++++++++++++++++++++++++++++++++++++++++ + src/parse.c | 238 ++++++++++++++++++++ + src/parser.h | 22 ++ + src/pcscdefines.h | 51 +++++ + src/tokenparser.l | 144 ++++++++++++ + src/utils.c | 37 ++++ + src/utils.h | 32 +++ + 32 files changed, 3379 insertions(+) diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..afddb68 --- /dev/null +++ b/INSTALL @@ -0,0 +1,138 @@ +INSTALLATION PROCEDURE +====================== + +Installation from source: +""""""""""""""""""""""""" + +get the ccid-x.y.z.tar.gz archive and do: + +$ tar xzvf ccid-x.y.z.tar.gz +$ cd ccid-x.y.z +$ ./configure +$ make +$ sudo make install + +By default pcscd and my ccid driver use /usr/local/pcsc/drivers/ as +directory for hotplug drivers. The ./configure script try to get the +directory used by pcscd using 'pkg-config libpcsclite --variable=usbdropdir' +So you should not have to use the --enable-usbdropdir=DIR argument. + + +libusb not found +~~~~~~~~~~~~~~~~ + +If the ./configure script says something like: + configure: error: usb.h not found, use --enable-libusb=PATH +You should use --enable-libusb=PATH to tell ./configure where to find +the usb.h and libusb.so files. The ./configure script will use +PATH/include/ to search for usb.h and PATH/lib/ to search for libusb.so + + +building serial reader driver +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +A serial CCID reader can also be connected on a serial port. By default +the serial driver is not built. You must explicitely do: + +$ ./configure --enable-twinserial +$ make +# make install + + +builing serial reader driver only +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +It is possible to generate the driver for the GemPC Twin using serial +communication only (for example on an embedded system without USB). +Just do: +$ ./configure --enable-twinserial --disable-libusb +$ make +# make install + +By default ./configure try to get the directory used by pcscd using +'pkg-config libpcsclite --variable=usbdropdir' and add '/serial'. +You should not have to use --enable-ccidtwindir=DIR to specify the +target directory to use. + + +configuring the driver for the serial reader +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You have to create or edit the file /etc/reader.conf. The file should +contain something like: + +# Gemalto reader with serial communication +# - n is the serial port to use n in [0..3] +# - reader is the reader name. It is needed for multi-slot readers. +# Possible reader values are: +# GemCorePOSPro +# GemCoreSIMPro +# GemCoreSIMPro2 +# GemPCPinPad +# GemPCTwin (default value) +# example: /dev/ttyS0:GemPCPinPad +#DEVICENAME /dev/ttySn[:reader] +#FRIENDLYNAME "GemPCTwin serial" +#LIBPATH /usr/lib/pcsc/drivers/serial/libccidtwin.so + +FRIENDLYNAME "GemPC Twin serial" +DEVICENAME /dev/ttyS0 +LIBPATH /usr/lib/pcsc/drivers/serial/libccidtwin.so + +You will have to adapt the library path to your configuration. + +By default the GemPC Twin serial reader parameters are loaded by the +driver, if you use a GemPC PinPad, a GemCore POS Pro, a GemCore SIM +Pro or GemCore SIM Pro 2 (or IDBridge CR30) you have to indicate it in the +DEVICENAME field. Supported values are: +- GemCorePOSPro for GemCore POS Pro +- GemCoreSIMPro for GemCore SIM Pro +- GemCoreSIMPro2 for IDBridge CR30 +- GemPCPinPad for GemPC PinPad +- GemPCTwin for GemPC Twin (default value) + +You will then have something like: +DEVICENAME /dev/ttyS0:GemPCPinPad + +/dev/ttyS0 (DEVICENAME field) is the first serial port under Linux +(known as COM1 under DOS/Windows). Of course if your reader is connected +to another serial port you have to adapt that. + + +Binary installation: +"""""""""""""""""""" + +Contact your distribution support. + + +Test procedure: +""""""""""""""" + +- check the reader is supported by the driver. + Get your reader USB identification using the lsusb(1) command: + $ lsusb + [...] + Bus 001 Device 048: ID 08e6:4433 Gemplus + + Look for 08E6 (ifdVendorID) and 4433 (ifdProductID) in + /usr/local/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist + Of course your numbers will be different. + + If you can't find them add them (if you know what you do) and/or mail me. + +- (re)start pcscd with debug on stdout. Simply do 'pcscd --debug stdout' + (you will need to have root priviledges). And look for: + [...] + readerfactory.c:1319 RFInitializeReader: Attempting startup of ReaderName + readerfactory.c:1061 RFBindFunctions: Loading IFD Handler 2.0 + ifdhandler.c:76 Entering IFDHCreateChannel (lun: 0) + ccid_usb.c:131 Manufacturer: Ludovic Rousseau (ludovic.rousseau@free.fr) + ccid_usb.c:139 ProductString: Generic CCID reader v0.1.0 + ccid_usb.c:143 Copyright: This driver is protected by terms of the GNU General Public License version 2, or (at your option) any later version. + ccid_usb.c:223 Found Vendor/Product: 08E6/4433 (GemPC433 SL) + ccid_usb.c:224 Using USB bus/device: 001/047 + + If you don't see this the driver is not installed correctly or your + reader is not yet supported. Read + http://pcsclite.alioth.debian.org/ccid.html#CCID_compliant to know + what to do. diff --git a/MacOSX/configure b/MacOSX/configure new file mode 100755 index 0000000..7a79185 --- /dev/null +++ b/MacOSX/configure @@ -0,0 +1,151 @@ +#! /bin/bash + +# Copyright (C) 2007-2009 Ludovic Rousseau +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA. + +# to use +# ./MacOSX/configure +# make +# make install +# the driver is installed in /usr/libexec/SmartCardServices/drivers + +# Colors +RED="\033[31m" +NORMAL="\033[0m" + +# run this script as ./MacOSX/configure to configure for Mac OS X +if [ ! -d MacOSX ] +then + echo -e $RED + echo "ERROR!" + echo "run ./MacOSX/configure from the source top directory" + echo -e $NORMAL + exit; +fi + +# find pcsc-lite header files in MacOSX/ +# use ${varname:-word} to return word only if varname is not already defined +PCSC_CFLAGS=${PCSC_CFLAGS:--I$(pwd)/MacOSX} +PCSC_LIBS=${PCSC_LIBS:--framework PCSC} + +# use libusb-1.0 +LIBUSB_DIR=$(pkg-config --variable=libdir libusb-1.0) +LIBUSB_ARCHIVE="$LIBUSB_DIR"/libusb-1.0.a +LIBUSB_CFLAGS=$(pkg-config --cflags --static libusb-1.0) +LIBUSB_LIBS=$(pkg-config --libs --static libusb-1.0) + +if ls "$LIBUSB_DIR"/*.dylib 2> /dev/null +then + echo -en $RED + echo "*****************************" + echo "Dynamic library libusb found in $LIBUSB_DIR" + echo "*****************************" + echo -en $NORMAL + echo "Rename it to force a static link" + exit +fi + +# RESPONSECODE is already defined by PCSC/wintypes.h +# define needed here to compile examples/scardcontrol.c since config.h is +# not included +CFLAGS="$CFLAGS -DRESPONSECODE_DEFINED_IN_WINTYPES_H" + +# get the Mac OS X major version. Example: El Capitan 10.11 -> 10011 +MAC_VERSION=$(sw_vers -productVersion | awk -F '.' '{print $1 * 1000 + $2}') + +# check for Universal Binary only on macOS Mavericks 10.9 and earlier +if [ $MAC_VERSION -le 10009 ] +then + # Build a Universal Binary? + UB=$(file $LIBUSB_ARCHIVE | grep "Mach-O universal binary") + echo $UB + if [ -z "$UB" ] + then + echo -en $RED + echo "*************************" + echo "No Universal Binary build" + echo "*************************" + echo -en $NORMAL + else + echo "Universal Binary build" + CFLAGS="$CFLAGS -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk -arch i386 -arch x86_64" + fi + echo +fi + +CONFIGURE_ARGS="--disable-dependency-tracking" + +# Are we on a CryptoTokenKit system? (like Mac OS X 10.10 Yosemite) +if [ -d /System/Library/CryptoTokenKit ] +then + # so we use syslog(3) to log errors + CONFIGURE_ARGS="$CONFIGURE_ARGS --enable-syslog" +fi + +# Check where to install the driver +if [ 10011 -gt $MAC_VERSION ] +then + # Mac OS X < 10.11 + DROPDIR="/usr/libexec/SmartCardServices/drivers" +else + # Mac OS X >= 10.11 (El Capitan) + DROPDIR="/usr/local/libexec/SmartCardServices/drivers" +fi + +# do not build a static driver +# (building fails when linking statically with libusb) +CONFIGURE_ARGS="$CONFIGURE_ARGS --disable-static" + +# do not use pcscd debug feature +CONFIGURE_ARGS="$CONFIGURE_ARGS --disable-pcsclite" + +# simulate a composite device as multi slots +CONFIGURE_ARGS="$CONFIGURE_ARGS --enable-composite-as-multislot" + +# set BUNDLE_ID to a specific value for a specific driver +#BUNDLE_ID="vendor-reader" +if [ ! -z "$BUNDLE_ID" ] +then + # do not build a class driver (not yet used by pcsc-lite on Mac OS X) + CONFIGURE_ARGS="$CONFIGURE_ARGS --disable-class" + + # use a specific bundle name to NOT overwrite the official CCID driver + CONFIGURE_ARGS="$CONFIGURE_ARGS --enable-bundle=ifd-ccid-$BUNDLE_ID.bundle" + + # differentiate each libccid library by the dynamic linker + CONFIGURE_ARGS="$CONFIGURE_ARGS --prefix=/fake/$BUNDLE_ID" +fi + +set -x +./configure \ + CFLAGS="$CFLAGS" \ + PCSC_CFLAGS="$PCSC_CFLAGS" \ + PCSC_LIBS="$PCSC_LIBS" \ + LIBUSB_CFLAGS="$LIBUSB_CFLAGS" \ + LIBUSB_LIBS="$LIBUSB_LIBS" \ + LDFLAGS="$LDFLAGS" \ + --enable-usbdropdir="$DROPDIR" \ + $CONFIGURE_ARGS \ + "$@" + +r=$? + +# force a regeneration of Info.plist +rm -f src/Info.plist + +# exit with the return code from ./configure +exit $r diff --git a/MacOSX/convert_reader_h.pl b/MacOSX/convert_reader_h.pl new file mode 100755 index 0000000..6614875 --- /dev/null +++ b/MacOSX/convert_reader_h.pl @@ -0,0 +1,43 @@ +#!/usr/bin/env perl + +# convert_reader_h.pl: convert reader.h.in in reader.h with +# +# Copyright (C) 2008 Ludovic Rousseau +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +use warnings; +use strict; + +my $text = +"#ifdef __BIG_ENDIAN__ +#define HOST_TO_CCID_16(x) ((((x) >> 8) & 0xFF) + ((x & 0xFF) << 8)) +#define HOST_TO_CCID_32(x) ((((x) >> 24) & 0xFF) + (((x) >> 8) & 0xFF00) + ((x & 0xFF00) << 8) + (((x) & 0xFF) << 24)) +#else +#define HOST_TO_CCID_16(x) (x) +#define HOST_TO_CCID_32(x) (x) +#endif +"; + +while (<>) +{ + if (m/host_to_ccid_16/) + { + print $text; + <>; + next; + } + print; +} diff --git a/MacOSX/debuglog.h b/MacOSX/debuglog.h new file mode 100644 index 0000000..30c45fd --- /dev/null +++ b/MacOSX/debuglog.h @@ -0,0 +1,133 @@ +/* + * MUSCLE SmartCard Development ( http://pcsclite.alioth.debian.org/pcsclite.html ) + * + * Copyright (C) 1999-2004 + * David Corcoran + * Copyright (C) 1999-2011 + * Ludovic Rousseau + * +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 handles debugging. + * + * @note log message is sent to syslog or stderr depending on --foreground + * command line argument + * + * @code + * Log1(priority, "text"); + * log "text" with priority level priority + * Log2(priority, "text: %d", 1234); + * log "text: 1234" + * the format string can be anything printf() can understand + * Log3(priority, "text: %d %d", 1234, 5678); + * log "text: 1234 5678" + * the format string can be anything printf() can understand + * LogXxd(priority, msg, buffer, size); + * log "msg" + a hex dump of size bytes of buffer[] + * @endcode + */ + +#ifndef __debuglog_h__ +#define __debuglog_h__ + +#ifndef PCSC_API +#define PCSC_API +#endif + +enum { + DEBUGLOG_NO_DEBUG = 0, + DEBUGLOG_SYSLOG_DEBUG, + DEBUGLOG_STDOUT_DEBUG, + DEBUGLOG_STDOUT_COLOR_DEBUG +}; + +#define DEBUG_CATEGORY_NOTHING 0 +#define DEBUG_CATEGORY_APDU 1 +#define DEBUG_CATEGORY_SW 2 + +enum { + PCSC_LOG_DEBUG = 0, + PCSC_LOG_INFO, + PCSC_LOG_ERROR, + PCSC_LOG_CRITICAL +}; + +/* You can't do #ifndef __FUNCTION__ */ +#if !defined(__GNUC__) && !defined(__IBMC__) +#define __FUNCTION__ "" +#endif + +#ifndef __GNUC__ +#define __attribute__(x) /*nothing*/ +#endif + +#ifdef NO_LOG + +#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 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) +#define LogXxd(priority, msg, buffer, size) do { } while(0) + +#define DebugLogA(a) +#define DebugLogB(a, b) +#define DebugLogC(a, b,c) + +#else + +#define Log0(priority) log_msg(priority, "%s:%d:%s()", __FILE__, __LINE__, __FUNCTION__) +#define Log1(priority, fmt) log_msg(priority, "%s:%d:%s() " fmt, __FILE__, __LINE__, __FUNCTION__) +#define Log2(priority, fmt, data) log_msg(priority, "%s:%d:%s() " fmt, __FILE__, __LINE__, __FUNCTION__, data) +#define Log3(priority, fmt, data1, data2) log_msg(priority, "%s:%d:%s() " fmt, __FILE__, __LINE__, __FUNCTION__, data1, data2) +#define Log4(priority, fmt, data1, data2, data3) log_msg(priority, "%s:%d:%s() " fmt, __FILE__, __LINE__, __FUNCTION__, data1, data2, data3) +#define Log5(priority, fmt, data1, data2, data3, data4) log_msg(priority, "%s:%d:%s() " fmt, __FILE__, __LINE__, __FUNCTION__, data1, data2, data3, data4) +#define Log9(priority, fmt, data1, data2, data3, data4, data5, data6, data7, data8) log_msg(priority, "%s:%d:%s() " fmt, __FILE__, __LINE__, __FUNCTION__, data1, data2, data3, data4, data5, data6, data7, data8) +#define LogXxd(priority, msg, buffer, size) log_xxd(priority, msg, buffer, size) + +#define DebugLogA(a) Log1(PCSC_LOG_INFO, a) +#define DebugLogB(a, b) Log2(PCSC_LOG_INFO, a, b) +#define DebugLogC(a, b,c) Log3(PCSC_LOG_INFO, a, b, c) + +#endif /* NO_LOG */ + +PCSC_API void log_msg(const int priority, const char *fmt, ...) + __attribute__((format(printf, 2, 3))); + +PCSC_API void log_xxd(const int priority, const char *msg, + const unsigned char *buffer, const int size); + +void DebugLogSuppress(const int); +void DebugLogSetLogType(const int); +int DebugLogSetCategory(const int); +void DebugLogCategory(const int, const unsigned char *, const int); +PCSC_API void DebugLogSetLevel(const int level); + +#endif /* __debuglog_h__ */ + diff --git a/MacOSX/ifdhandler.h b/MacOSX/ifdhandler.h new file mode 100644 index 0000000..ffd31a0 --- /dev/null +++ b/MacOSX/ifdhandler.h @@ -0,0 +1,820 @@ +/* + * MUSCLE SmartCard Development ( http://pcsclite.alioth.debian.org/pcsclite.html ) + * + * Copyright (C) 1999-2004 + * David Corcoran + * Copyright (C) 2003-2004 + * Damien Sauveron + * Copyright (C) 2002-2011 + * Ludovic Rousseau + * +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 + * @defgroup IFDHandler IFDHandler + * @brief This provides reader specific low-level calls. + +The routines specified hereafter will allow you to write an IFD handler +for the PC/SC Lite resource manager. Please use the complement +developer's kit complete with headers and Makefile at: +http://www.musclecard.com/drivers.html + +This gives a common API for communication to most readers in a +homogeneous fashion. This document assumes that the driver developer is +experienced with standards such as ISO-7816-(1, 2, 3, 4), EMV and MCT +specifications. For listings of these specifications please access the +above web site. + +@section UsbReaders USB readers + +USB readers use the bundle approach so that the reader can be loaded +and unloaded upon automatic detection of the device. The bundle +approach is simple: the actual library is just embedded in a +directory so additional information can be gathered about the device. + +A bundle looks like the following: + +@verbatim +GenericReader.bundle/ + Contents/ + Info.plist - XML file describing the reader + MacOS/ - Driver directory for OS X + Solaris/ - Driver directory for Solaris + Linux/ - Driver directory for Linux + HPUX/ - Driver directory for HPUX +@endverbatim + +The @c Info.plist file describes the driver and gives the loader +all the necessary information. The following must be contained in the +@c Info.plist file: + +@subsection ifdVendorID + +The vendor ID of the USB device. + +Example: + +@verbatim + ifdVendorID + 0x04E6 +@endverbatim + +You may have an OEM of this reader in which an additional @c +can be used like in the below example: + +@verbatim + ifdVendorID + + 0x04E6 + 0x0973 + +@endverbatim + +If multiples exist all the other parameters must have a second value +also. You may chose not to support this feature but it is useful when +reader vendors OEM products so you only distribute one driver. + + +The CCID driver from Ludovic Rousseau +http://pcsclite.alioth.debian.org/ccid.html uses this feature since the +same driver supports many different readers. + +@subsection ifdProductID + + The product id of the USB device. + +@verbatim + ifdProductID + 0x3437 +@endverbatim + +@subsection ifdFriendlyName + + Example: + +@verbatim + ifdFriendlyName + SCM Microsystems USB Reader +@endverbatim + +The reader name must use the ASCII character set. + +@subsection CFBundleExecutable + + The executable name which exists in the particular platform's directory. + + Example: + +@verbatim + CFBundleExecutable + libccid.so.0.4.2 +@endverbatim + +@subsection ifdCapabilities + + List of capabilities supported by the driver. This is a bit field. Possible values are: + +- 0 + No special capabilities +- 1 IFD_GENERATE_HOTPLUG + The driver supports the hot plug feature. + +Complete sample file: + +@verbatim + + + + + CFBundleDevelopmentRegion + English + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleSignature + ???? + CFBundleVersion + 0.0.1d1 + ifdCapabilities + 0x00000000 + ifdProtocolSupport + 0x00000001 + ifdVersionNumber + 0x00000001 + + CFBundleExecutable + libfoobar.so.x.y + + ifdManufacturerString + Foo bar inc. + + ifdProductString + Driver for Foobar reader, version x.y + + ifdVendorID + 0x1234 + + ifdProductID + 0x5678 + + ifdFriendlyName + Foobar USB reader + + +@endverbatim + +As indicated in the XML file the DTD is available at +http://www.apple.com/DTDs/PropertyList-1.0.dtd. + +@section SerialReaders Serial readers + +Serial drivers must be configured to operate on a particular port and +respond to a particular name. The @c reader.conf file is used for this +purpose. + +It has the following syntax: + +@verbatim +# Configuration file for pcsc-lite +# David Corcoran + +FRIENDLYNAME Generic Reader +DEVICENAME /dev/ttyS0 +LIBPATH /usr/lib/pcsc/drivers/libgen_ifd.so +CHANNELID 1 +@endverbatim + +The pound sign # denotes a comment. + +@subsection FRIENDLYNAME +The FRIENDLYNAME field is an arbitrary text used to identify the reader. +This text is displayed by commands like @c pcsc_scan +http://ludovic.rousseau.free.fr/softwares/pcsc-tools/ that prints the +names of all the connected and detected readers. + +@subsection DEVICENAME +The DEVICENAME field was not used for old drivers (using the IFD handler +version 2.0 or previous). It is now (IFD handler version 3.0) used to +identify the physical port on which the reader is connected. This is +the device name of this port. It is dependent of the OS kernel. For +example the first serial port device is called @c /dev/ttyS0 under Linux +and @c /dev/cuaa0 under FreeBSD. + +If you want to use IFDHCreateChannel() instead of +IFDHCreateChannelByName() then do not use any DEVICENAME line in the +configuration file. IFDHCreateChannel() will then be called with the +CHANNELID parameter. + +@subsection LIBPATH +The LIBPATH field is the filename of the driver code. The driver is a +dynamically loaded piece of code (generally a @c drivername.so* file). + +@subsection CHANNELID +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 field is used to indicate the port to +use. You should read your driver documentation to know what information +is needed here. It should be the serial port number for a serial reader. + +CHANNELID was the numeric version of the port in which the reader will +be located. This may be done by a symbolic link where @c /dev/pcsc/1 is +the first device which may be a symbolic link to @c /dev/ttyS0 or +whichever location your reader resides. + + */ + +#ifndef _ifd_handler_h_ +#define _ifd_handler_h_ + +#include + + /* + * List of data structures available to ifdhandler + */ + typedef struct _DEVICE_CAPABILITIES + { + LPSTR Vendor_Name; /**< Tag 0x0100 */ + LPSTR IFD_Type; /**< Tag 0x0101 */ + DWORD IFD_Version; /**< Tag 0x0102 */ + LPSTR IFD_Serial; /**< Tag 0x0103 */ + DWORD IFD_Channel_ID; /**< Tag 0x0110 */ + + DWORD Asynch_Supported; /**< Tag 0x0120 */ + DWORD Default_Clock; /**< Tag 0x0121 */ + DWORD Max_Clock; /**< Tag 0x0122 */ + DWORD Default_Data_Rate; /**< Tag 0x0123 */ + DWORD Max_Data_Rate; /**< Tag 0x0124 */ + DWORD Max_IFSD; /**< Tag 0x0125 */ + DWORD Synch_Supported; /**< Tag 0x0126 */ + DWORD Power_Mgmt; /**< Tag 0x0131 */ + DWORD Card_Auth_Devices; /**< Tag 0x0140 */ + DWORD User_Auth_Device; /**< Tag 0x0142 */ + DWORD Mechanics_Supported; /**< Tag 0x0150 */ + DWORD Vendor_Features; /**< Tag 0x0180 - 0x01F0 User Defined. */ + } + DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES; + + typedef struct _ICC_STATE + { + UCHAR ICC_Presence; /**< Tag 0x0300 */ + UCHAR ICC_Interface_Status; /**< Tag 0x0301 */ + UCHAR ATR[MAX_ATR_SIZE]; /**< Tag 0x0303 */ + UCHAR ICC_Type; /**< Tag 0x0304 */ + } + ICC_STATE, *PICC_STATE; + + typedef struct _PROTOCOL_OPTIONS + { + DWORD Protocol_Type; /**< Tag 0x0201 */ + DWORD Current_Clock; /**< Tag 0x0202 */ + DWORD Current_F; /**< Tag 0x0203 */ + DWORD Current_D; /**< Tag 0x0204 */ + DWORD Current_N; /**< Tag 0x0205 */ + DWORD Current_W; /**< Tag 0x0206 */ + DWORD Current_IFSC; /**< Tag 0x0207 */ + DWORD Current_IFSD; /**< Tag 0x0208 */ + DWORD Current_BWT; /**< Tag 0x0209 */ + DWORD Current_CWT; /**< Tag 0x020A */ + DWORD Current_EBC; /**< Tag 0x020B */ + } + PROTOCOL_OPTIONS, *PPROTOCOL_OPTIONS; + + /** + * Use by SCardTransmit() + */ + typedef struct _SCARD_IO_HEADER + { + DWORD Protocol; + DWORD Length; + } + SCARD_IO_HEADER, *PSCARD_IO_HEADER; + + /* + * The list of tags should be alot more but this is all I use in the + * meantime + */ +#define TAG_IFD_ATR 0x0303 /**< ATR */ +#define TAG_IFD_SLOTNUM 0x0180 /**< select a slot */ +#define TAG_IFD_SLOT_THREAD_SAFE 0x0FAC /**< support access to different slots of the reader */ +#define TAG_IFD_THREAD_SAFE 0x0FAD /**< driver is thread safe */ +#define TAG_IFD_SLOTS_NUMBER 0x0FAE /**< number of slots of the reader */ +#define TAG_IFD_SIMULTANEOUS_ACCESS 0x0FAF /**< number of reader the driver can manage */ +#define TAG_IFD_POLLING_THREAD 0x0FB0 /**< not used. See TAG_IFD_POLLING_THREAD_WITH_TIMEOUT */ +#define TAG_IFD_POLLING_THREAD_KILLABLE 0x0FB1 /**< the polling thread can be killed */ +#define TAG_IFD_STOP_POLLING_THREAD 0x0FB2 /**< method used to stop the polling thread (instead of just pthread_kill()) */ +#define TAG_IFD_POLLING_THREAD_WITH_TIMEOUT 0x0FB3 /**< driver uses a polling thread with a timeout parameter */ + + /* + * IFD Handler version number enummerations + */ +#define IFD_HVERSION_1_0 0x00010000 +#define IFD_HVERSION_2_0 0x00020000 +#define IFD_HVERSION_3_0 0x00030000 + + /* + * List of defines available to ifdhandler + */ +#define IFD_POWER_UP 500 /**< power up the card */ +#define IFD_POWER_DOWN 501 /**< power down the card */ +#define IFD_RESET 502 /**< warm reset */ + +#define IFD_NEGOTIATE_PTS1 1 /**< negotiate PTS1 */ +#define IFD_NEGOTIATE_PTS2 2 /**< negotiate PTS2 */ +#define IFD_NEGOTIATE_PTS3 4 /**< negotiate PTS3 */ + +#define IFD_SUCCESS 0 /**< no error */ +#define IFD_ERROR_TAG 600 /**< tag unknown */ +#define IFD_ERROR_SET_FAILURE 601 /**< set failed */ +#define IFD_ERROR_VALUE_READ_ONLY 602 /**< value is read only */ +#define IFD_ERROR_PTS_FAILURE 605 /**< failed to negotiate PTS */ +#define IFD_ERROR_NOT_SUPPORTED 606 +#define IFD_PROTOCOL_NOT_SUPPORTED 607 /**< requested protocol not supported */ +#define IFD_ERROR_POWER_ACTION 608 /**< power up failed */ +#define IFD_ERROR_SWALLOW 609 +#define IFD_ERROR_EJECT 610 +#define IFD_ERROR_CONFISCATE 611 +#define IFD_COMMUNICATION_ERROR 612 /**< generic error */ +#define IFD_RESPONSE_TIMEOUT 613 /**< timeout */ +#define IFD_NOT_SUPPORTED 614 /**< request is not supported */ +#define IFD_ICC_PRESENT 615 /**< card is present */ +#define IFD_ICC_NOT_PRESENT 616 /**< card is absent */ +/** + * The \ref IFD_NO_SUCH_DEVICE error must be returned by the driver when + * it detects the reader is no more present. This will tell pcscd to + * remove the reader from the list of available readers. + */ +#define IFD_NO_SUCH_DEVICE 617 +#define IFD_ERROR_INSUFFICIENT_BUFFER 618 /**< buffer is too small */ + +#ifndef RESPONSECODE_DEFINED_IN_WINTYPES_H + typedef long RESPONSECODE; +#endif + + /* + * If you want to compile a V2.0 IFDHandler, define IFDHANDLERv2 + * before you include this file. + * + * By default it is setup for for most recent version of the API (V3.0) + */ + +#ifndef IFDHANDLERv2 + + /* + * List of Defined Functions Available to IFD_Handler 3.0 + * + * All the functions of IFD_Handler 2.0 are available + * IFDHCreateChannelByName() is new + * IFDHControl() API changed + */ + +/** +This function is required to open a communications channel to the port +listed by @p DeviceName. + +Once the channel is opened the reader must be in a state in which it is +possible to query IFDHICCPresence() for card status. + +@ingroup IFDHandler +@param[in] Lun Logical Unit Number\n + Use this for multiple card slots or multiple readers. 0xXXXXYYYY - + XXXX multiple readers, YYYY multiple slots. The resource manager will + set these automatically. By default the resource manager loads a new + instance of the driver so if your reader does not have more than one + smart card slot then ignore the Lun in all the functions.\n + \n + PC/SC supports the loading of multiple readers through one instance of + the driver in which XXXX is important. XXXX identifies the unique + reader in which the driver communicates to. The driver should set up + an array of structures that asociate this XXXX with the underlying + details of the particular reader. + +@param[in] DeviceName Filename to use by the driver.\n + For drivers configured by @p /etc/reader.conf this is the value of the + field \ref DEVICENAME. + \n + For USB drivers the @p DeviceName must start with @p usb:VID/PID. VID + is the Vendor ID and PID is the Product ID. Both are a 4-digits hex + number. + +Typically the string is generated by: + +@code +printf("usb:%04x/%04x", idVendor, idProduct); +@endcode + +The @p DeviceName string may also contain a more specialised +identification string. This additional information is used to +differentiate between two identical readers connected at the same time. +In this case the driver can't differentiate the two readers using VID +and PID and must use some additional information identifying the USB +port used by each reader. + +- libusb + + For USB drivers using libusb-1.0 http://libusb.sourceforge.net/ for USB + abstraction the @p DeviceName the string may be generated by: + + @code + printf("usb:%04x/%04x:libusb-1.0:%d:%d:%d", + idVendor, idProduct, bus_number, device_address, interface) + @endcode + + So it is something like: usb:08e6/3437:libusb-1.0:7:99:0 under + GNU/Linux. + +- libudev + + If pcscd is compiled with libudev support instead of libusb (default + since pcsc-lite 1.6.8) the string will look like: + + @code + printf("usb:%04x/%04x:libudev:%d:%s", idVendor, idProduct, + bInterfaceNumber, devpath); + @endcode + + bInterfaceNumber is the number of the interface on the device. It is + only usefull for devices with more than one CCID interface. + + devpath is the filename of the device on the file system. + + So it is something like: + usb:08e6/3437:libudev:0:/dev/bus/usb/008/047 + under GNU/Linux. + +- other + + If the driver does not understand the :libusb: or + :libudev: scheme or if a new scheme is used, the driver should + ignore the part it does not understand instead of failing. + + The driver shall recognize the usb:VID/PID part and, only if + possible, the remaining of the DeviceName field. + + It is the responsibility of the driver to correctly identify the reader. + +@return Error codes +@retval IFD_SUCCESS Successful (\ref IFD_SUCCESS) +@retval IFD_COMMUNICATION_ERROR Error has occurred (\ref IFD_COMMUNICATION_ERROR) +@retval IFD_NO_SUCH_DEVICE The reader is no more present (\ref IFD_NO_SUCH_DEVICE) + */ +RESPONSECODE IFDHCreateChannelByName(DWORD Lun, LPSTR DeviceName); + +/** +This function performs a data exchange with the reader (not the card) +specified by Lun. It is responsible for abstracting functionality such +as PIN pads, biometrics, LCD panels, etc. You should follow the MCT and +CTBCS specifications for a list of accepted commands to implement. This +function is fully voluntary and does not have to be implemented unless +you want extended functionality. + +@ingroup IFDHandler +@param[in] Lun Logical Unit Number +@param[in] dwControlCode Control code for the operation\n + This value identifies the specific operation to be performed. This + value is driver specific. +@param[in] TxBuffer Transmit data +@param[in] TxLength Length of this buffer +@param[out] RxBuffer Receive data +@param[in] RxLength Length of the response buffer +@param[out] pdwBytesReturned Length of response\n + This function will be passed the length of the buffer RxBuffer in + RxLength and it must set the length of the received data in + pdwBytesReturned. + +@note + @p *pdwBytesReturned should be set to zero on error. + +@return Error codes +@retval IFD_SUCCESS Successful (\ref IFD_SUCCESS) +@retval IFD_COMMUNICATION_ERROR Error has occurred (\ref IFD_COMMUNICATION_ERROR) +@retval IFD_RESPONSE_TIMEOUT The response timed out (\ref IFD_RESPONSE_TIMEOUT) +@retval IFD_NO_SUCH_DEVICE The reader is no more present (\ref IFD_NO_SUCH_DEVICE) + */ +RESPONSECODE IFDHControl(DWORD Lun, DWORD dwControlCode, PUCHAR + TxBuffer, DWORD TxLength, PUCHAR RxBuffer, DWORD RxLength, + LPDWORD pdwBytesReturned); + +#else + +/** + * Available in IFD_Handler 2.0 + * + * @deprecated + * You should use the new form of IFDHControl() + */ +RESPONSECODE IFDHControl(DWORD Lun, PUCHAR TxBuffer, DWORD TxLength, + PUCHAR RxBuffer, PDWORD RxLength); + +#endif + + /* + * common functions in IFD_Handler 2.0 and 3.0 + */ +/** +This function is required to open a communications channel to the port +listed by Channel. For example, the first serial reader on COM1 would +link to @p /dev/pcsc/1 which would be a symbolic link to @p /dev/ttyS0 +on some machines This is used to help with inter-machine independence. + +On machines with no /dev directory the driver writer may choose to map +their Channel to whatever they feel is appropriate. + +Once the channel is opened the reader must be in a state in which it is +possible to query IFDHICCPresence() for card status. + +USB readers can ignore the @p Channel parameter and query the USB bus +for the particular reader by manufacturer and product id. + +@ingroup IFDHandler +@param[in] Lun Logical Unit Number\n + Use this for multiple card slots or multiple readers. 0xXXXXYYYY - + XXXX multiple readers, YYYY multiple slots. The resource manager will + set these automatically. By default the resource manager loads a new + instance of the driver so if your reader does not have more than one + smart card slot then ignore the Lun in all the functions.\n + \n + PC/SC supports the loading of multiple readers through one instance of + the driver in which XXXX is important. XXXX identifies the unique + reader in which the driver communicates to. The driver should set up + an array of structures that associate this XXXX with the underlying + details of the particular reader. +@param[in] Channel Channel ID + This is denoted by the following: + - 0x000001 @p /dev/pcsc/1 + - 0x000002 @p /dev/pcsc/2 + - 0x000003 @p /dev/pcsc/3 + - 0x000004 @p /dev/pcsc/4 + +@return Error codes +@retval IFD_SUCCESS Successful (\ref IFD_SUCCESS) +@retval IFD_COMMUNICATION_ERROR Error has occurred (\ref IFD_COMMUNICATION_ERROR) +@retval IFD_NO_SUCH_DEVICE The reader is no more present (\ref IFD_NO_SUCH_DEVICE) + + */ +RESPONSECODE IFDHCreateChannel(DWORD Lun, DWORD Channel); + +/** +This function should close the reader communication channel for the +particular reader. Prior to closing the communication channel the reader +should make sure the card is powered down and the terminal is also +powered down. + +@ingroup IFDHandler +@param[in] Lun Logical Unit Number + +@return Error codes +@retval IFD_SUCCESS Successful (\ref IFD_SUCCESS) +@retval IFD_COMMUNICATION_ERROR Error has occurred (\ref IFD_COMMUNICATION_ERROR) +@retval IFD_NO_SUCH_DEVICE The reader is no more present (\ref IFD_NO_SUCH_DEVICE) + */ +RESPONSECODE IFDHCloseChannel(DWORD Lun); + +/** +This function should get the slot/card capabilities for a particular +slot/card specified by Lun. Again, if you have only 1 card slot and +don't mind loading a new driver for each reader then ignore Lun. + +@ingroup IFDHandler +@param[in] Lun Logical Unit Number +@param[in] Tag Tag of the desired data value +- \ref TAG_IFD_ATR + Return the ATR and its size (implementation is mandatory). +- \ref TAG_IFD_SLOTNUM + Unused/deprecated +- \ref SCARD_ATTR_ATR_STRING + Same as \ref TAG_IFD_ATR but this one is not mandatory. It is defined + in Microsoft PC/SC SCardGetAttrib(). +- \ref TAG_IFD_SIMULTANEOUS_ACCESS + Return the number of sessions (readers) the driver can handle in + Value[0]. + This is used for multiple readers sharing the same driver. +- \ref TAG_IFD_THREAD_SAFE + If the driver supports more than one reader (see + \ref TAG_IFD_SIMULTANEOUS_ACCESS above) this tag indicates if the + driver supports access to multiple readers at the same time.\n + Value[0] = 1 indicates the driver supports simultaneous accesses. +- \ref TAG_IFD_SLOTS_NUMBER + Return the number of slots in this reader in Value[0]. +- \ref TAG_IFD_SLOT_THREAD_SAFE + If the reader has more than one slot (see \ref TAG_IFD_SLOTS_NUMBER + above) this tag indicates if the driver supports access to multiple + slots of the same reader at the same time.\n + Value[0] = 1 indicates the driver supports simultaneous slot + accesses. +- \ref TAG_IFD_POLLING_THREAD + Unused/deprecated +- \ref TAG_IFD_POLLING_THREAD_WITH_TIMEOUT + If the driver provides a polling thread then @p Value is a pointer to + this function. The function prototype is: +@verbatim + RESPONSECODE foo(DWORD Lun, int timeout); +@endverbatim +- \ref TAG_IFD_POLLING_THREAD_KILLABLE + Tell if the polling thread can be killed (pthread_kill()) by pcscd +- \ref TAG_IFD_STOP_POLLING_THREAD + Returns a pointer in @p Value to the function used to stop the polling + thread returned by \ref TAG_IFD_POLLING_THREAD_WITH_TIMEOUT. The + function prototype is: +@verbatim + RESPONSECODE foo(DWORD Lun); +@endverbatim +@param[in,out] Length Length of the desired data value +@param[out] Value Value of the desired data + +@return Error codes +@retval IFD_SUCCESS Successful (\ref IFD_SUCCESS) +@retval IFD_ERROR_TAG Invalid tag given (\ref IFD_ERROR_TAG) +@retval IFD_NO_SUCH_DEVICE The reader is no more present (\ref IFD_NO_SUCH_DEVICE) + */ +RESPONSECODE IFDHGetCapabilities(DWORD Lun, DWORD Tag, PDWORD Length, + PUCHAR Value); + +/** +This function should set the slot/card capabilities for a particular +slot/card specified by @p Lun. Again, if you have only 1 card slot and +don't mind loading a new driver for each reader then ignore @p Lun. + +@ingroup IFDHandler +@param[in] Lun Logical Unit Number +@param[in] Tag Tag of the desired data value +@param[in,out] Length Length of the desired data value +@param[out] Value Value of the desired data + +This function is also called when the application uses the PC/SC +SCardGetAttrib() function. The list of supported tags is not limited. + +@return Error codes +@retval IFD_SUCCESS Successful (\ref IFD_SUCCESS) +@retval IFD_ERROR_TAG Invalid tag given (\ref IFD_ERROR_TAG) +@retval IFD_ERROR_SET_FAILURE Could not set value (\ref IFD_ERROR_SET_FAILURE) +@retval IFD_ERROR_VALUE_READ_ONLY Trying to set read only value (\ref IFD_ERROR_VALUE_READ_ONLY) +@retval IFD_NO_SUCH_DEVICE The reader is no more present (\ref IFD_NO_SUCH_DEVICE) + */ +RESPONSECODE IFDHSetCapabilities(DWORD Lun, DWORD Tag, DWORD Length, PUCHAR Value); + +/** +This function should set the Protocol Type Selection (PTS) of a +particular card/slot using the three PTS parameters sent + +@ingroup IFDHandler +@param[in] Lun Logical Unit Number +@param[in] Protocol Desired protocol +- \ref SCARD_PROTOCOL_T0 + T=0 protocol +- \ref SCARD_PROTOCOL_T1 + T=1 protocol +@param[in] Flags Logical OR of possible values to determine which PTS values +to negotiate +- \ref IFD_NEGOTIATE_PTS1 +- \ref IFD_NEGOTIATE_PTS2 +- \ref IFD_NEGOTIATE_PTS3 +@param[in] PTS1 1st PTS Value +@param[in] PTS2 2nd PTS Value +@param[in] PTS3 3rd PTS Value\n + See ISO 7816/EMV documentation. + +@return Error codes +@retval IFD_SUCCESS Successful (\ref IFD_SUCCESS) +@retval IFD_ERROR_PTS_FAILURE Could not set PTS value (\ref IFD_ERROR_PTS_FAILURE) +@retval IFD_COMMUNICATION_ERROR Error has occurred (\ref IFD_COMMUNICATION_ERROR) +@retval IFD_PROTOCOL_NOT_SUPPORTED Protocol is not supported (\ref IFD_PROTOCOL_NOT_SUPPORTED) +@retval IFD_NOT_SUPPORTED Action not supported (\ref IFD_NOT_SUPPORTED) +@retval IFD_NO_SUCH_DEVICE The reader is no more present (\ref IFD_NO_SUCH_DEVICE) + */ +RESPONSECODE IFDHSetProtocolParameters(DWORD Lun, DWORD Protocol, UCHAR Flags, + UCHAR PTS1, UCHAR PTS2, UCHAR PTS3); +/** +This function controls the power and reset signals of the smart card +reader at the particular reader/slot specified by @p Lun. + +@ingroup IFDHandler +@param[in] Lun Logical Unit Number +@param[in] Action Action to be taken on the card +- \ref IFD_POWER_UP + Power up the card (store and return Atr and AtrLength) +- \ref IFD_POWER_DOWN + Power down the card (Atr and AtrLength should be zeroed) +- \ref IFD_RESET + Perform a warm reset of the card (no power down). If the card is not powered then power up the card (store and return Atr and AtrLength) +@param[out] Atr Answer to Reset (ATR) of the card\n + The driver is responsible for caching this value in case + IFDHGetCapabilities() is called requesting the ATR and its length. The + ATR length should not exceed \ref MAX_ATR_SIZE. +@param[in,out] AtrLength Length of the ATR\n + This should not exceed \ref MAX_ATR_SIZE. + +@note +Memory cards without an ATR should return \ref IFD_SUCCESS on reset but the +Atr should be zeroed and the length should be zero Reset errors should +return zero for the AtrLength and return \ref IFD_ERROR_POWER_ACTION. + +@return Error codes +@retval IFD_SUCCESS Successful (\ref IFD_SUCCESS) +@retval IFD_ERROR_POWER_ACTION Error powering/resetting card (\ref IFD_ERROR_POWER_ACTION) +@retval IFD_COMMUNICATION_ERROR Error has occurred (\ref IFD_COMMUNICATION_ERROR) +@retval IFD_NOT_SUPPORTED Action not supported (\ref IFD_NOT_SUPPORTED) +@retval IFD_NO_SUCH_DEVICE The reader is no more present (\ref IFD_NO_SUCH_DEVICE) + */ +RESPONSECODE IFDHPowerICC(DWORD Lun, DWORD Action, PUCHAR Atr, PDWORD + AtrLength); + +/** +This function performs an APDU exchange with the card/slot specified by +Lun. The driver is responsible for performing any protocol specific +exchanges such as T=0, 1, etc. differences. Calling this function will +abstract all protocol differences. + +@ingroup IFDHandler +@param[in] Lun Logical Unit Number +@param[in] SendPci contains two structure members +- Protocol 0, 1, ... 14\n + T=0 ... T=14 +- Length\n + Not used. +@param[in] TxBuffer Transmit APDU\n + Example: "\x00\xA4\x00\x00\x02\x3F\x00" +@param[in] TxLength Length of this buffer +@param[out] RxBuffer Receive APDU\n + Example: "\x61\x14" +@param[in,out] RxLength Length of the received APDU\n + This function will be passed the size of the buffer of RxBuffer and + this function is responsible for setting this to the length of the + received APDU response. This should be ZERO on all errors. The + resource manager will take responsibility of zeroing out any temporary + APDU buffers for security reasons. +@param[out] RecvPci contains two structure members +- Protocol - 0, 1, ... 14\n + T=0 ... T=14 +- Length\n + Not used. + +@note +The driver is responsible for knowing what type of card it has. If the +current slot/card contains a memory card then this command should ignore +the Protocol and use the MCT style commands for support for these style +cards and transmit them appropriately. If your reader does not support +memory cards or you don't want to implement this functionality, then +ignore this. +@par +RxLength should be set to zero on error. +@par +The driver is not responsible for doing an automatic Get Response +command for received buffers containing 61 XX. + +@return Error codes +@retval IFD_SUCCESS Successful (\ref IFD_SUCCESS) +@retval IFD_COMMUNICATION_ERROR Error has occurred (\ref IFD_COMMUNICATION_ERROR) +@retval IFD_RESPONSE_TIMEOUT The response timed out (\ref IFD_RESPONSE_TIMEOUT) +@retval IFD_ICC_NOT_PRESENT ICC is not present (\ref IFD_ICC_NOT_PRESENT) +@retval IFD_NOT_SUPPORTED Action not supported (\ref IFD_NOT_SUPPORTED) +@retval IFD_NO_SUCH_DEVICE The reader is no more present (\ref IFD_NO_SUCH_DEVICE) + */ +RESPONSECODE IFDHTransmitToICC(DWORD Lun, SCARD_IO_HEADER SendPci, + PUCHAR TxBuffer, DWORD TxLength, PUCHAR RxBuffer, PDWORD + RxLength, PSCARD_IO_HEADER RecvPci); + +/** +This function returns the status of the card inserted in the reader/slot +specified by @p Lun. In cases where the device supports asynchronous +card insertion/removal detection, it is advised that the driver manages +this through a thread so the driver does not have to send and receive a +command each time this function is called. + +@ingroup IFDHandler +@param[in] Lun Logical Unit Number + +@return Error codes +@retval IFD_SUCCESS Successful (\ref IFD_SUCCESS) +@retval IFD_COMMUNICATION_ERROR Error has occurred (\ref IFD_COMMUNICATION_ERROR) +@retval IFD_ICC_NOT_PRESENT ICC is not present (\ref IFD_ICC_NOT_PRESENT) +@retval IFD_NO_SUCH_DEVICE The reader is no more present (\ref IFD_NO_SUCH_DEVICE) + */ +RESPONSECODE IFDHICCPresence(DWORD Lun); + +#endif diff --git a/MacOSX/pcsclite.h b/MacOSX/pcsclite.h new file mode 100644 index 0000000..0a454f6 --- /dev/null +++ b/MacOSX/pcsclite.h @@ -0,0 +1,2 @@ +#include +#include diff --git a/MacOSX/reader.h b/MacOSX/reader.h new file mode 100644 index 0000000..ea6fc63 --- /dev/null +++ b/MacOSX/reader.h @@ -0,0 +1,271 @@ +/* + * MUSCLE SmartCard Development ( http://pcsclite.alioth.debian.org/pcsclite.html ) + * + * Copyright (C) 1999-2005 + * David Corcoran + * Copyright (C) 2005-2009 + * Ludovic Rousseau + * +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 shared between the driver and the application + */ + +#ifndef __reader_h__ +#define __reader_h__ + +/* + * Tags for requesting card and reader attributes + */ + +#define SCARD_ATTR_VALUE(Class, Tag) ((((ULONG)(Class)) << 16) | ((ULONG)(Tag))) + +#define SCARD_CLASS_VENDOR_INFO 1 /**< Vendor information definitions */ +#define SCARD_CLASS_COMMUNICATIONS 2 /**< Communication definitions */ +#define SCARD_CLASS_PROTOCOL 3 /**< Protocol definitions */ +#define SCARD_CLASS_POWER_MGMT 4 /**< Power Management definitions */ +#define SCARD_CLASS_SECURITY 5 /**< Security Assurance definitions */ +#define SCARD_CLASS_MECHANICAL 6 /**< Mechanical characteristic definitions */ +#define SCARD_CLASS_VENDOR_DEFINED 7 /**< Vendor specific definitions */ +#define SCARD_CLASS_IFD_PROTOCOL 8 /**< Interface Device Protocol options */ +#define SCARD_CLASS_ICC_STATE 9 /**< ICC State specific definitions */ +#define SCARD_CLASS_SYSTEM 0x7fff /**< System-specific definitions */ + +#define SCARD_ATTR_VENDOR_NAME SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0100) /**< Vendor name. */ +#define SCARD_ATTR_VENDOR_IFD_TYPE SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0101) /**< Vendor-supplied interface device type (model designation of reader). */ +#define SCARD_ATTR_VENDOR_IFD_VERSION SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0102) /**< Vendor-supplied interface device version (DWORD in the form 0xMMmmbbbb where MM = major version, mm = minor version, and bbbb = build number). */ +#define SCARD_ATTR_VENDOR_IFD_SERIAL_NO SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0103) /**< Vendor-supplied interface device serial number. */ +#define SCARD_ATTR_CHANNEL_ID SCARD_ATTR_VALUE(SCARD_CLASS_COMMUNICATIONS, 0x0110) /**< DWORD encoded as 0xDDDDCCCC, where DDDD = data channel type and CCCC = channel number */ +#define SCARD_ATTR_ASYNC_PROTOCOL_TYPES SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0120) /**< FIXME */ +#define SCARD_ATTR_DEFAULT_CLK SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0121) /**< Default clock rate, in kHz. */ +#define SCARD_ATTR_MAX_CLK SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0122) /**< Maximum clock rate, in kHz. */ +#define SCARD_ATTR_DEFAULT_DATA_RATE SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0123) /**< Default data rate, in bps. */ +#define SCARD_ATTR_MAX_DATA_RATE SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0124) /**< Maximum data rate, in bps. */ +#define SCARD_ATTR_MAX_IFSD SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0125) /**< Maximum bytes for information file size device. */ +#define SCARD_ATTR_SYNC_PROTOCOL_TYPES SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0126) /**< FIXME */ +#define SCARD_ATTR_POWER_MGMT_SUPPORT SCARD_ATTR_VALUE(SCARD_CLASS_POWER_MGMT, 0x0131) /**< Zero if device does not support power down while smart card is inserted. Nonzero otherwise. */ +#define SCARD_ATTR_USER_TO_CARD_AUTH_DEVICE SCARD_ATTR_VALUE(SCARD_CLASS_SECURITY, 0x0140) /**< FIXME */ +#define SCARD_ATTR_USER_AUTH_INPUT_DEVICE SCARD_ATTR_VALUE(SCARD_CLASS_SECURITY, 0x0142) /**< FIXME */ +#define SCARD_ATTR_CHARACTERISTICS SCARD_ATTR_VALUE(SCARD_CLASS_MECHANICAL, 0x0150) /**< DWORD indicating which mechanical characteristics are supported. If zero, no special characteristics are supported. Note that multiple bits can be set */ + +#define SCARD_ATTR_CURRENT_PROTOCOL_TYPE SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0201) /**< FIXME */ +#define SCARD_ATTR_CURRENT_CLK SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0202) /**< Current clock rate, in kHz. */ +#define SCARD_ATTR_CURRENT_F SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0203) /**< Clock conversion factor. */ +#define SCARD_ATTR_CURRENT_D SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0204) /**< Bit rate conversion factor. */ +#define SCARD_ATTR_CURRENT_N SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0205) /**< Current guard time. */ +#define SCARD_ATTR_CURRENT_W SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0206) /**< Current work waiting time. */ +#define SCARD_ATTR_CURRENT_IFSC SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0207) /**< Current byte size for information field size card. */ +#define SCARD_ATTR_CURRENT_IFSD SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0208) /**< Current byte size for information field size device. */ +#define SCARD_ATTR_CURRENT_BWT SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0209) /**< Current block waiting time. */ +#define SCARD_ATTR_CURRENT_CWT SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x020a) /**< Current character waiting time. */ +#define SCARD_ATTR_CURRENT_EBC_ENCODING SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x020b) /**< Current error block control encoding. */ +#define SCARD_ATTR_EXTENDED_BWT SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x020c) /**< FIXME */ + +#define SCARD_ATTR_ICC_PRESENCE SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0300) /**< Single byte indicating smart card presence */ +#define SCARD_ATTR_ICC_INTERFACE_STATUS SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0301) /**< Single byte. Zero if smart card electrical contact is not active; nonzero if contact is active. */ +#define SCARD_ATTR_CURRENT_IO_STATE SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0302) /**< FIXME */ +#define SCARD_ATTR_ATR_STRING SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0303) /**< Answer to reset (ATR) string. */ +#define SCARD_ATTR_ICC_TYPE_PER_ATR SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0304) /**< Single byte indicating smart card type */ + +#define SCARD_ATTR_ESC_RESET SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xA000) /**< FIXME */ +#define SCARD_ATTR_ESC_CANCEL SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xA003) /**< FIXME */ +#define SCARD_ATTR_ESC_AUTHREQUEST SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xA005) /**< FIXME */ +#define SCARD_ATTR_MAXINPUT SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED, 0xA007) /**< FIXME */ + +#define SCARD_ATTR_DEVICE_UNIT SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0001) /**< Instance of this vendor's reader attached to the computer. The first instance will be device unit 0, the next will be unit 1 (if it is the same brand of reader) and so on. Two different brands of readers will both have zero for this value. */ +#define SCARD_ATTR_DEVICE_IN_USE SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0002) /**< Reserved for future use. */ +#define SCARD_ATTR_DEVICE_FRIENDLY_NAME_A SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0003) +#define SCARD_ATTR_DEVICE_SYSTEM_NAME_A SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0004) +#define SCARD_ATTR_DEVICE_FRIENDLY_NAME_W SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0005) +#define SCARD_ATTR_DEVICE_SYSTEM_NAME_W SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0006) +#define SCARD_ATTR_SUPRESS_T1_IFS_REQUEST SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0007) /**< FIXME */ + +#ifdef UNICODE +#define SCARD_ATTR_DEVICE_FRIENDLY_NAME SCARD_ATTR_DEVICE_FRIENDLY_NAME_W /**< Reader's display name. */ +#define SCARD_ATTR_DEVICE_SYSTEM_NAME SCARD_ATTR_DEVICE_SYSTEM_NAME_W /**< Reader's system name. */ +#else +#define SCARD_ATTR_DEVICE_FRIENDLY_NAME SCARD_ATTR_DEVICE_FRIENDLY_NAME_A /**< Reader's display name. */ +#define SCARD_ATTR_DEVICE_SYSTEM_NAME SCARD_ATTR_DEVICE_SYSTEM_NAME_A /**< Reader's system name. */ +#endif + +/** + * Provide source compatibility on different platforms + */ +#define SCARD_CTL_CODE(code) (0x42000000 + (code)) + +/** + * PC/SC part 10 v2.02.07 March 2010 reader tags + */ +#define CM_IOCTL_GET_FEATURE_REQUEST SCARD_CTL_CODE(3400) + +#define FEATURE_VERIFY_PIN_START 0x01 +#define FEATURE_VERIFY_PIN_FINISH 0x02 +#define FEATURE_MODIFY_PIN_START 0x03 +#define FEATURE_MODIFY_PIN_FINISH 0x04 +#define FEATURE_GET_KEY_PRESSED 0x05 +#define FEATURE_VERIFY_PIN_DIRECT 0x06 /**< Verify PIN */ +#define FEATURE_MODIFY_PIN_DIRECT 0x07 /**< Modify PIN */ +#define FEATURE_MCT_READER_DIRECT 0x08 +#define FEATURE_MCT_UNIVERSAL 0x09 +#define FEATURE_IFD_PIN_PROPERTIES 0x0A /**< retrieve properties of the IFD regarding PIN handling */ +#define FEATURE_ABORT 0x0B +#define FEATURE_SET_SPE_MESSAGE 0x0C +#define FEATURE_VERIFY_PIN_DIRECT_APP_ID 0x0D +#define FEATURE_MODIFY_PIN_DIRECT_APP_ID 0x0E +#define FEATURE_WRITE_DISPLAY 0x0F +#define FEATURE_GET_KEY 0x10 +#define FEATURE_IFD_DISPLAY_PROPERTIES 0x11 +#define FEATURE_GET_TLV_PROPERTIES 0x12 +#define FEATURE_CCID_ESC_COMMAND 0x13 +#define FEATURE_EXECUTE_PACE 0x20 + +/* structures used (but not defined) in PC/SC Part 10: + * "IFDs with Secure Pin Entry Capabilities" */ + +#include + +/* Set structure elements aligment on bytes + * http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html */ +#if defined(__APPLE__) | defined(sun) +#pragma pack(1) +#else +#pragma pack(push, 1) +#endif + +/** the structure must be 6-bytes long */ +typedef struct +{ + uint8_t tag; + uint8_t length; + uint32_t value; /**< This value is always in BIG ENDIAN format as documented in PCSC v2 part 10 ch 2.2 page 2. You can use ntohl() for example */ +} PCSC_TLV_STRUCTURE; + +/** Since CCID 1.4.1 (revision 5252) the byte order is no more important + * These macros are now deprecated and should be removed in the future */ +#define HOST_TO_CCID_16(x) (x) +#define HOST_TO_CCID_32(x) (x) + +/** structure used with \ref FEATURE_VERIFY_PIN_DIRECT */ +typedef struct +{ + uint8_t bTimerOut; /**< timeout is seconds (00 means use default timeout) */ + uint8_t bTimerOut2; /**< timeout in seconds after first key stroke */ + uint8_t bmFormatString; /**< formatting options */ + uint8_t bmPINBlockString; /**< bits 7-4 bit size of PIN length in APDU, + * bits 3-0 PIN block size in bytes after + * justification and formatting */ + uint8_t bmPINLengthFormat; /**< bits 7-5 RFU, + * bit 4 set if system units are bytes, clear if + * system units are bits, + * bits 3-0 PIN length position in system units */ + uint16_t wPINMaxExtraDigit; /**< 0xXXYY where XX is minimum PIN size in digits, + and YY is maximum PIN size in digits */ + uint8_t bEntryValidationCondition; /**< Conditions under which PIN entry should + * be considered complete */ + uint8_t bNumberMessage; /**< Number of messages to display for PIN verification */ + uint16_t wLangId; /**< Language for messages */ + uint8_t bMsgIndex; /**< Message index (should be 00) */ + uint8_t bTeoPrologue[3]; /**< T=1 block prologue field to use (fill with 00) */ + uint32_t ulDataLength; /**< length of Data to be sent to the ICC */ + uint8_t abData +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) + [] /* valid C99 code */ +#else + [0] /* non-standard, but usually working code */ +#endif + ; /**< Data to send to the ICC */ +} PIN_VERIFY_STRUCTURE; + +/** structure used with \ref FEATURE_MODIFY_PIN_DIRECT */ +typedef struct +{ + uint8_t bTimerOut; /**< timeout is seconds (00 means use default timeout) */ + uint8_t bTimerOut2; /**< timeout in seconds after first key stroke */ + uint8_t bmFormatString; /**< formatting options */ + uint8_t bmPINBlockString; /**< bits 7-4 bit size of PIN length in APDU, + * bits 3-0 PIN block size in bytes after + * justification and formatting */ + uint8_t bmPINLengthFormat; /**< bits 7-5 RFU, + * bit 4 set if system units are bytes, clear if + * system units are bits, + * bits 3-0 PIN length position in system units */ + uint8_t bInsertionOffsetOld; /**< Insertion position offset in bytes for + the current PIN */ + uint8_t bInsertionOffsetNew; /**< Insertion position offset in bytes for + the new PIN */ + uint16_t wPINMaxExtraDigit; + /**< 0xXXYY where XX is minimum PIN size in digits, + and YY is maximum PIN size in digits */ + uint8_t bConfirmPIN; /**< Flags governing need for confirmation of new PIN */ + uint8_t bEntryValidationCondition; /**< Conditions under which PIN entry should + * be considered complete */ + uint8_t bNumberMessage; /**< Number of messages to display for PIN verification*/ + uint16_t wLangId; /**< Language for messages */ + uint8_t bMsgIndex1; /**< index of 1st prompting message */ + uint8_t bMsgIndex2; /**< index of 2d prompting message */ + uint8_t bMsgIndex3; /**< index of 3d prompting message */ + uint8_t bTeoPrologue[3]; /**< T=1 block prologue field to use (fill with 00) */ + uint32_t ulDataLength; /**< length of Data to be sent to the ICC */ + uint8_t abData +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) + [] /* valid C99 code */ +#else + [0] /* non-standard, but usually working code */ +#endif + ; /**< Data to send to the ICC */ +} PIN_MODIFY_STRUCTURE; + +/** structure used with \ref FEATURE_IFD_PIN_PROPERTIES */ +typedef struct { + uint16_t wLcdLayout; /**< display characteristics */ + uint8_t bEntryValidationCondition; + uint8_t bTimeOut2; +} PIN_PROPERTIES_STRUCTURE; + +/* restore default structure elements alignment */ +#if defined(__APPLE__) | defined(sun) +#pragma pack() +#else +#pragma pack(pop) +#endif + +/* properties returned by FEATURE_GET_TLV_PROPERTIES */ +#define PCSCv2_PART10_PROPERTY_wLcdLayout 1 +#define PCSCv2_PART10_PROPERTY_bEntryValidationCondition 2 +#define PCSCv2_PART10_PROPERTY_bTimeOut2 3 +#define PCSCv2_PART10_PROPERTY_wLcdMaxCharacters 4 +#define PCSCv2_PART10_PROPERTY_wLcdMaxLines 5 +#define PCSCv2_PART10_PROPERTY_bMinPINSize 6 +#define PCSCv2_PART10_PROPERTY_bMaxPINSize 7 +#define PCSCv2_PART10_PROPERTY_sFirmwareID 8 +#define PCSCv2_PART10_PROPERTY_bPPDUSupport 9 +#define PCSCv2_PART10_PROPERTY_dwMaxAPDUDataSize 10 +#define PCSCv2_PART10_PROPERTY_wIdVendor 11 +#define PCSCv2_PART10_PROPERTY_wIdProduct 12 + +#endif + diff --git a/MacOSX/winscard.h b/MacOSX/winscard.h new file mode 100644 index 0000000..18dea51 --- /dev/null +++ b/MacOSX/winscard.h @@ -0,0 +1,2 @@ +#include +#include diff --git a/MacOSX/wintypes.h b/MacOSX/wintypes.h new file mode 100644 index 0000000..a9736e8 --- /dev/null +++ b/MacOSX/wintypes.h @@ -0,0 +1 @@ +#include diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..69f7534 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,27 @@ +ACLOCAL_AMFLAGS = -I m4 + +SUBDIRS = readers examples contrib src + +EXTRA_DIST = bootstrap ChangeLog SCARDGETATTRIB.txt \ + $(AUX_DIST) \ + m4/ax_pthread.m4 \ + MacOSX/configure \ + MacOSX/convert_reader_h.pl \ + MacOSX/debuglog.h \ + MacOSX/ifdhandler.h \ + MacOSX/pcsclite.h \ + MacOSX/reader.h \ + MacOSX/winscard.h \ + MacOSX/wintypes.h + +MAINTAINERCLEANFILES = $(AUX_DIST) +DISTCLEANFILES = ChangeLog + +# Automatically update the libtool script if it becomes out-of-date. +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +libtool: $(LIBTOOL_DEPS) + $(SHELL) ./config.status --recheck + +ChangeLog: + git log --stat --decorate=short > $@ + diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..a353cdb --- /dev/null +++ b/Makefile.in @@ -0,0 +1,862 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \ + $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(am__DIST_COMMON) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in AUTHORS \ + COPYING ChangeLog INSTALL NEWS README ar-lib compile \ + config.guess config.sub depcomp install-sh ltmain.sh missing \ + ylwrap +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +GZIP_ENV = --best +DIST_ARCHIVES = $(distdir).tar.bz2 +DIST_TARGETS = dist-bzip2 +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUNDLE_HOST = @BUNDLE_HOST@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DYN_LIB_EXT = @DYN_LIB_EXT@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ + +# Automatically update the libtool script if it becomes out-of-date. +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIBUSB_CFLAGS = @LIBUSB_CFLAGS@ +LIBUSB_LIBS = @LIBUSB_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOCLASS = @NOCLASS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCSC_CFLAGS = @PCSC_CFLAGS@ +PCSC_LIBS = @PCSC_LIBS@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +SYMBOL_VISIBILITY = @SYMBOL_VISIBILITY@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_aux_dir = @ac_aux_dir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_pthread_config = @ax_pthread_config@ +bindir = @bindir@ +bindir_exp = @bindir_exp@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +bundle = @bundle@ +ccidtwindir = @ccidtwindir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +serialconfdir = @serialconfdir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +sysconfdir_exp = @sysconfdir_exp@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usbdropdir = @usbdropdir@ +ACLOCAL_AMFLAGS = -I m4 +SUBDIRS = readers examples contrib src +EXTRA_DIST = bootstrap ChangeLog SCARDGETATTRIB.txt \ + $(AUX_DIST) \ + m4/ax_pthread.m4 \ + MacOSX/configure \ + MacOSX/convert_reader_h.pl \ + MacOSX/debuglog.h \ + MacOSX/ifdhandler.h \ + MacOSX/pcsclite.h \ + MacOSX/reader.h \ + MacOSX/winscard.h \ + MacOSX/wintypes.h + +MAINTAINERCLEANFILES = $(AUX_DIST) +DISTCLEANFILES = ChangeLog +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__post_remove_distdir) +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=../.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile config.h +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) all install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-am clean clean-cscope clean-generic \ + clean-libtool cscope cscopelist-am ctags ctags-am dist \ + dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ + dist-xz dist-zip distcheck distclean distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am html html-am info \ + info-am install install-am install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am + +.PRECIOUS: Makefile + +libtool: $(LIBTOOL_DEPS) + $(SHELL) ./config.status --recheck + +ChangeLog: + git log --stat --decorate=short > $@ + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..35ec92f --- /dev/null +++ b/NEWS @@ -0,0 +1 @@ +Read the README file for news. diff --git a/README b/README new file mode 100644 index 0000000..fa48bb8 --- /dev/null +++ b/README @@ -0,0 +1,1287 @@ +USB CCID IFD Handler +==================== + +This package provides the source code for a generic USB CCID (Chip/Smart +Card Interface Devices) and ICCD (Integrated Circuit(s) Card Devices) +driver. See the USB CCID [1] and ICCD [2] specifications from the USB +working group. + +[1] http://www.usb.org/developers/docs/devclass_docs/DWG_Smart-Card_CCID_Rev110.pdf +[2] http://www.usb.org/developers/docs/devclass_docs/DWG_Smart-Card_USB-ICC_ICCD_rev10.pdf + +Authors: +======== + +- Ludovic Rousseau +- Carlos Prados for the PPS and ATR parsing code (taken from his + towitoto driver) in towitoko/ directory. +- Olaf Kirch for the T=1 TPDU code (from the OpenCT package) in openct/ + directory. I (Ludovic Rousseau) greatly improved this code. + + +CCID and ICCD readers: +====================== + +A reader can be in one of these list: +- supported + See http://pcsclite.alioth.debian.org/ccid/supported.html +- should working + See http://pcsclite.alioth.debian.org/ccid/shouldwork.html +- unsupported + See http://pcsclite.alioth.debian.org/ccid/unsupported.html +- disabled + See http://pcsclite.alioth.debian.org/ccid/disabled.html + + +Supported operating systems: +============================ + +- GNU/Linux (libusb 1.0) +- MacOS X/Darwin (libusb 1.0) + +See also http://pcsclite.alioth.debian.org/ccid.html for more +information. + + +Debug informations: +=================== + +The driver uses the debug function provided by pcscd. So if pcscd sends +its debug to stdout (pcscd --foreground) then the CCID driver will also +send its debug to stdout. If pcscd sends its debug to syslog (by +default) then the CCID driver will also send its debug to syslog. + +You can change the debug level using the Info.plist configuration file. +The Info.plist is installed, by default, in +/usr/local/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist +or set the environment variable LIBCCID_ifdLogLevel. + +The debug level is set in the ifdLogLevel field. It is a binary OR +combination of 4 different levels. +- 1: critical: important error messages +- 2: info: informative messages like what reader was detected +- 4: comm: a dump of all the bytes exchanged between the host and the + reader +- 8: periodic: periodic info when pcscd test if a card is present (every + 1/10 of a second) + +By default the debug level is set to 3 (1 + 2) and correspond to the +critical and info levels. + +You have to restart the driver so it read the configuration file again +and use the new debug level value. To restart the driver you just need +to unplug all your CCID readers so the driver is unloaded and then replug +your readers. You can also restart pcscd. + + +Voltage selection +================= + +You can change the voltage level using the Info.plist configuration +file. The Info.plist is installed, by default, in +/usr/local/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist + +The voltage level is set in the ifdDriverOptions field. It is a binary OR +combination of 4 different levels. + +- 0: power on the card at 5V (default value) +- 16: power on the card at 3V and, if 3V fails then use 5V +- 32: power on the card at 1.8V, then 3V and then 5V +- 48: let the reader decide + +By default the voltage level is set to 0 and correspond to 5V. + +You have to restart the driver so it read the configuration file again +and use the new debug level value. To restart the driver you just need +to unplug all your CCID readers so the driver is unloaded and then replug +your readers. You can also restart pcscd. + + +Licence: +======== + + This library is free software; you can redistribute it and/or modify it +under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or (at +your option) any later version. + + This library is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser +General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License +along with this library; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +History: +======== + +1.4.29 - 21 February 2018, Ludovic Rousseau + - Add support of + . Access IS NFC Smart Module (With idProduct 0x0164) + . Bit4id Digital-DNA Key + . Bit4id Digital-DNA Key BT + . Bluink Ltd. Bluink CCID + . Chicony HP Skylab USB Smartcard Keyboard + . HID Global OMNIKEY 5023 Smart Card Reader + . HID Global OMNIKEY 5027CK CCID CONFIG IF + . KeyXentic Inc. KX906 Smart Card Reader + . Spyrus Inc Rosetta USB + . Spyrus Inc WorkSafe Pro + . Watchdata USB Key (idProduct: 0x0418) + - The C3PO LTC31 v2 wrongly declares PIN support + - Remove extra EGT patch because if has bad side effects + + +1.4.28 - 11 October 2017, Ludovic Rousseau + - Add support of + . Athena IDProtect Flash + . Elatec TWN4/B1.06/CPF3.05/S1SC1.32/P (Beta 3) + . HID Global OMNIKEY 5122 Dual + . HID Global OMNIKEY 5122 Smartcard Reader + . IIT E.Key Crystal-1 + . KRONEGGER Micro Core Platform + . KRONEGGER NFC blue Reader Platform + . Ledger Nano S + . REINER SCT cyberJack RFID standard + . REINER SCT cyberJack one + . SAFETRUST SABRE SCR + . SafeNet eToken 5300 + . Unicept GmbH AirID USB Dongle + . Watchdata USB Key + . mCore SCard-Reader + - Disabled readers + . Jinmuyu Electronics Co., Ltd. MR800 + - Fix non-pinpad HID global devices + - udev rules: + . allow rule overwrite + . Disable USB autosuspend on C3PO LTC31 v1 reader + - Some minor improvements + + +1.4.27 - 21 May 2017, Ludovic Rousseau + - Add support of + . ACS ACR1255U-J1 + . ACS CryptoMate (T2) + . ANCUD CCID USB Reader & RNG + . DUALi DE-620 Combi + . FT CCID + . FT CCID KB + . FT U2F CCID KB + . FT U2F CCID KBOARD + . HID Global OMNIKEY 5422 Smartcard Reader + . InfoThink IT-102MU Reader + . Kapsch TrafficCom USB SAM reader + . MK Technology KeyPass S1 + . Mulann PVT + . Regula RFID Reader + . Spyrus Inc PocketVault P-3X + . Unicept GmbH AirID USB + - Add Microchip SEC1210 UART support (when connected on a serial port) + - Add Zero Length Packet (ZLP) support for Gemalto IDBridge CT30 and K30 + enable the patch using ./configure --enable-zlp + - Add support of HID Omnikey 5422 as multi slot reader (for macOS) + - Escape command: signals buffer overflow instead of silently + truncating the buffer + - Fix a bug with multi readers and pcscd uses hotplug_libusb (not the + recommended configuration) + - Some minor improvements + + +1.4.26 - 7 January 2017, Ludovic Rousseau + - Add support of + . Bit4id Digital DNA Key + . Bit4id tokenME FIPS v3 + . INGENICO Leo + . appidkey GmbH ID60-USB + - PowerOn: the default algorithm is now 5V then 1.8V then 3V then fail. + It is still possible to change the initial voltage in the + Info.plist file. Now, in any case, all the values are tried + before failing. + - Negotiate maximum baud rate when bNumDataRatesSupported = 0 + - Some minor improvements + + +1.4.25 - 30 September 2016, Ludovic Rousseau + - Add support of + . Aladdin R.D. JaCarta (idProduct: 0x0402) + . Broadcom Corp 5880 (idProduct: 0x5832) + . Broadcom Corp 5880 (idProduct: 0x5833) + . Broadcom Corp 5880 (idProduct: 0x5834) + . ESMART Token GOST X2 ET1020-A + . Feitian VR504 VHBR Contactless & Contact Card Reader + . Feitian bR500 + . Gemalto K50 + . appidkey GmbH ID100-USB SC Reader + . appidkey GmbH ID50 -USB + - Remove suport of + . Broadcom Corp 5880 (idProduct: 0x5800) + . Broadcom Corp 5880 (idProduct: 0x5805) + . KEBTechnology KONA USB SmartCard + - macOS: Fix composite device enumeration + - Fix crash with GemCore Pos Pro and GemCore Sim Pro + - Some minor improvements + + +1.4.24 - 22 May 2016, Ludovic Rousseau + - Add support of + . Generic USB Smart Card Reader + . Giesecke & Devrient GmbH StarSign CUT S + . HID AVIATOR Generic + - better support of Elatec TWN4 SmartCard NFC + - better support of SCM SCL011 + - betetr support of HID Aviator generic + - fix SCARD_ATTR_VENDOR_IFD_SERIAL_NO attribute size + - fix a race condition on card events with multiple readers + - Some minor improvements + + +1.4.23 - 20 April 2016, Ludovic Rousseau + - Add support of + . ACS ACR3901U ICC Reader + . Alcor Micro AU9560 + . Cherry SmartTerminal XX44 + . HID Global OMNIKEY 3x21 Smart Card Reader + . HID Global OMNIKEY 5022 Smart Card Reader + . HID Global OMNIKEY 6121 Smart Card Reader + . IonIDe Smartcard Reader reader + . KACST HSID Reader + . KACST HSID Reader Dual Storage + . KACST HSID Reader Single Storage + - Remove support of + . VMware Virtual USB CCID + - Do NOT add support of + . DUALi DE-ABCM6 + - Fix a busy loop consuming 100% of CPU for some composite USB devices + impacted readers: Yubico Yubikey NEO U2F+CCID and Broadcom BCM5880 + - Remove support of (unused) option DRIVER_OPTION_RESET_ON_CLOSE + - log libusb error name instead of decimal value + - Some minor improvements + + +1.4.22 - 10 January 2016, Ludovic Rousseau + - Add support of + . Aktiv Rutoken PINPad 2 + . Aladdin R.D. JC-WebPass (JC600) + . Aladdin R.D. JCR-770 + . Aladdin R.D. JaCarta + . Aladdin R.D. JaCarta Flash + . Aladdin R.D. JaCarta LT + . Aladdin R.D. JaCarta U2F (JC602) + . Athena ASEDrive IIIe Combo Bio PIV + . Athena ASEDrive IIIe KB Bio PIV + . GEMALTO CT1100 + . GEMALTO K1100 + . Hitachi, Ltd. Hitachi Biometric Reader + . Hitachi, Ltd. Hitachi Portable Biometric Reader + . Nitrokey Nitrokey Storage + . THURSBY SOFTWARE TSS-PK1 + . Thursby Software Systems, Inc. TSS-PK7 + . Thursby Software Systems, Inc. TSS-PK8 + - Patch for Microchip SEC1110 reader on Mac OS X (card events notification) + - Patch for Cherry KC 1000 SC (problem was with a T=1 card and case 2 APDU) + - Fix support of FEATURE_MCT_READER_DIRECT for the Kobil mIDentity + visual reader + - Set timeout to 90 sec for PPDU (Pseudo APDU) commands. This change + allows the use of a Secure Verify command sent as a PPDU through + SCardTransmit(). + - Fix a crash when reader reader initialization failed + - Fix initialization bug with Gemalto Pinpad reader on Mac OS X + - Some minor bugs fixed + + +1.4.21 - 21 October 2015, Ludovic Rousseau + - Add support of + . ACS ACR1252 Dual Reader + . Chicony HP USB Smartcard CCID Keyboard JP + . Chicony HP USB Smartcard CCID Keyboard KR + . FT ePass2003Auto + . Feitian bR301 BLE + . Feitian iR301 (ProductID 0x0619) + . Feitian iR301 (ProductID 0x061C) + . Identiv @MAXX ID-1 Smart Card Reader + . Identiv @MAXX Light2 token + . Identiv CLOUD 2980 F Smart Card Reader + . Identiv Identiv uTrust 4701 F Dual Interface Reader + . Identiv SCR3500 A Contact Reader + . Identiv SCR3500 B Contact Reader + . Identiv SCR35xx USB Smart Card Reader + . Identiv uTrust 2900 R Smart Card Reader + . Identiv uTrust 2910 R Smart Card Reader + . Identiv uTrust 2910 R Taglio SC Reader + . Identiv uTrust 3512 SAM slot Token + . Identiv uTrust 3522 embd SE RFID Token + . Identiv uTrust 3700 F CL Reader + . Identiv uTrust 3701 F CL Reader + . Identive Identive CLOUD 4000 F DTC + . Liteon HP SC Keyboard - Apollo (Liteon) + . Liteon HP SC Keyboard - Apollo JP (Liteon) + . Liteon HP SC Keyboard - Apollo KR (Liteon) + . Nitrokey Nitrokey HSM + . Nitrokey Nitrokey Pro + . Nitrokey Nitrokey Start + . Rocketek RT-SCR1 + . VASCO DIGIPASS 875 + . WatchCNPC USB CCID Key + - Remove support of + . Crypto Stick Crypto Stick v1.4 is an old version of Nitrokey Nitrokey Pro + . Free Software Initiative of Japan Gnuk Token is an old version + of Nitrokey Nitrokey Start + - Add Feitain R502 dual interface (composite) reader on Mac OS X + - display a human readable version of the error code returned by + libusb + - Mac OS X: wait until libusb/the reader is ready + - some minor bugs fixed + + +1.4.20 - 5 August 2015, Ludovic Rousseau + - Add support of + . ACS ACR1251 Dual Reader + . Access IS NFC Smart Module + . BIFIT iToken + . BLUTRONICS BLUDRIVE II CCID (idProduct: 0x1079) + . Generic MultiCard Device + . NXP Pegoda 2 N + . SafeNet eToken 5100 + . SafeNet eToken 7300 + . Yubico Yubikey 4 CCID + . Yubico Yubikey 4 OTP+CCID + . Yubico Yubikey 4 OTP+U2F+CCID + . Yubico Yubikey 4 U2F+CCID + - Depends on libusb version 1.0.9 instead of 1.0.8 + - The O2 Micro Oz776 reader only supports 9600 bps + - Change installation directory for Mac OS X El Capitan 10.11 + + +1.4.19 - 13 May 2014, Ludovic Rousseau + - Add support of + . AK910 CKey (idProduct 0x0001) + . AK910 CKey (idProduct 0x0011) + . AK910 IDONE + . Broadcom Corp 5880 (idProduct: 0x5804) + . CASTLES EZCCID Smart Card Reader + . Cherry KC 1000 SC + . Cherry KC 1000 SC Z + . Cherry KC 1000 SC/DI + . Cherry KC 1000 SC/DI Z + . Cherry TC 1300 + . Chicony USB Smart Card Keyboard + . Elatec TWN4 SmartCard NFC + . Feitian 502-CL + . Feitian eJAVA Token + . FujitsuTechnologySolutions GmbH Keyboard KB100 SCR + . FujitsuTechnologySolutions GmbH Keyboard KB100 SCR eSIG + . Hewlett-Packard HP lt4112 Gobi 4G Module + . Identive SCT3522CC token + . OMNIKEY AG 6121 USB mobile + . PIVKey T800 + . REINER SCT tanJack Bluetooth + . Watchdata USB Key + - Add syslog(3) debug for Mac OS X Yosemite. + Use: sudo syslog -c "com.apple.ifdreader PID" -d to change the logging level. + See also "Change syslog logging level on Yosemite" + http://ludovicrousseau.blogspot.com/2015/03/change-syslog-logging-level-on-yosemite.html + - Remove ZLP patch for Gemalto IDBridge CT30 and K30. The patch was + causing problems with the K50. A new reader firmware (version F) + solved the problem so the patch is no more needed. + - Fix a memory leak in an error path + - some minor bugs removed + + +1.4.18 - 13 September 2014, Ludovic Rousseau + - Add support of + . Cherry Cherry TC 1100 + . Cherry Smart Card Reader USB + . Cherry Smartcard Keyboard G87-1xx44 + . FujitsuTechnologySolutions GmbH Keyboard KB SCR2 + . Lenovo Lenovo USB Smartcard Keyboard + . Yubico Yubikey NEO OTP+U2F+CCID + . Yubico Yubikey NEO U2F+CCID + . eID_R6 001 X8 + - fix support of Omnikey CardMan 3121 + - reduce memory consumed when configured with --enable-embedded + - prepare the port to UEFI + + +1.4.17 - 11 June 2014, Ludovic Rousseau + - Add support of + . Feitian R502 + . Free Software Initiative of Japan Gnuk Token + . German Privacy Foundation Crypto Stick v2.0 + . HID Global veriCLASS Reader + . HID OMNIKEY 5025-CL + . Identive Technologies Multi-ISO HF Reader - USB + . OMNIKEY 5421 + . OMNIKEY AG 3121 USB + . udea MILKO V1. + - Fix support of O2 Micro Oz776. The reader is limited to 9600 bps + - some minor bugs removed + + +1.4.16 - 23 March 2014, Ludovic Rousseau + - Add support of + . Crypto Stick Crypto Stick v1.4 + . Hewlett Packard USB Smartcard CCID Keyboard + . IID AT90S064 CCID READER + . INSIDE Secure VaultIC 405 Smart Object + . INSIDE Secure VaultIC 441 Smart Object + . Microchip SEC1110 + . Microchip SEC1210 + . Watchdata W5181 + - Add support of DRIVER_OPTION_DISABLE_PIN_RETRIES + The Gemalto pinpad reader sends a VERIFY command with no PIN value + in order to retreive the remaining retries from the card. Some + cards (like the OpenPGP card) do not support this. + It is now possible to disable this behavior from the Gemalto + Pinpad and Covadis Véga Alpha. + - add support of WTX received before SW during Secure Pin Entry Verify + The Swiss health care card sends a WTX request before returning + the SW code. If the reader is in TPDU and the card is in T=1 the + driver must manage the request itself. + + +1.4.15 - 14 February 2014, Ludovic Rousseau + - Add support of + . DUALi DRAGON NFC READER + . Feitian bR301 + . Gemalto CR30 reader in serial communication + . Gemalto Ezio Shield Pro SC + . IIT E.Key Almaz-1C + - PIN_MODIFY_STRUCTURE & PIN_VERIFY_STRUCTURE: Fix calculation of + the command length after pcsc-lite 1.8.9 (October 2013) changed + the PCSC/reader.h header + - Add specific PIN min (0) & max (25) sizes for SmartTerminal + ST-2xxx + - Do not get the data rates if bNumDataRatesSupported = 0 + - Support Gemalto features for pinpad readers MinimumPINSize, + MaximumPINSize and bEntryValidationCondition are fetched from the + reader firmware + - disable (broken) pinpad for Fujitsu SmartCase KB SCR eSIG + - examples/scardcontrol.c: + . Parse codes returned by a pinpad (as SW1/SW2) + Known codes for now are: + 0x9000: Success + 0x6400: Timeout + 0x6401: Cancelled by user + 0x6402: PIN mismatch + 0x6403: Too short or too long PIN + . Retrieve min and max PIN sizes from the driver + . Retrieve bEntryValidationCondition from the driver + - be more strict for bInterfaceClass = 255 by also checking extra_length + - some minor bugs removed + + +1.4.14 - 25 November 2013, Ludovic Rousseau + - Add support of + . Gemalto GemCore SIM Pro firmware 2.0 (using USB) + - report FEATURE_IFD_PIN_PROPERTIES only for pinpad readers + - Generalize the management of (old) readers with bDeviceClass = 0xFF + - some minor bugs removed + + +1.4.13 - 9 October 2013, Ludovic Rousseau + - Add support of + . Access IS ePassport Reader + . Planeta RC700-NFC CCID + - Add support of Windows value for CM_IOCTL_GET_FEATURE_REQUEST + Windows uses 0x313520 for SCARD_CTL_CODE(3400) pcsc-lite uses + 0x42000D48 for SCARD_CTL_CODE(3400) + RDP aplications (like rdesktop) will convert SCardControl() + commands from a Windows application (so using 0x313520) to + pcsc-lite. + - fix multi-slot support for card movement notification (introduced + in 1.4.12) + - Mac OS X: differentiate each libccid library by the dynamic linker + using --prefix=/fake/$BUNDLE_ID + - some minor bugs removed + + +1.4.12 - 12 August 2013, Ludovic Rousseau + - Add support of + . HID OMNIKEY 5127 CK + . HID OMNIKEY 5326 DFR + . HID OMNIKEY 5427 CK + . Ingenico WITEO USB Smart Card Reader (Base and Badge) + . SecuTech SecuTech Token + - Add support of card movement notifications for multi-slot readers + - Check libusb is at least at version 1.0.8 + - Get the serialconfdir value from pcsc-lite pkg config instead of + using $(DESTDIR)/$(sysconfdir)/reader.conf.d/ + - Disable class driver on Mac OS X + - Update the bundle name template to include the vendor name + - some minor bugs removed + + +1.4.11 - 12 June 2013, Ludovic Rousseau + - Add support of + . Gemalto IDBridge CT30 + . Gemalto IDBridge K30 + . SCM Microsystems Inc. SCL010 Contactless Reader + . SCM Microsystems Inc. SDI011 Contactless Reader + . THRC reader + - Better management of time extension requests + - parse: better support of devices with bInterfaceClass = 0xFF + - udev rule file: Remove setting group to pcscd, remove support of + Linux kernel < 2.6.35 for auto power up management + - some minor bugs removed + + +1.4.10 - 16 April 2013, Ludovic Rousseau + - Add support of + . ACS APG8201 USB Reader with PID 0x8202 + . GIS Ltd SmartMouse USB + . Gemalto IDBridge K3000 + . Identive CLOUD 2700 F Smart Card Reader + . Identive CLOUD 2700 R Smart Card Reader + . Identive CLOUD 4500 F Dual Interface Reader + . Identive CLOUD 4510 F Contactless + SAM Reader + . Identive CLOUD 4700 F Dual Interface Reader + . Identive CLOUD 4710 F Contactless + SAM Reader + . Inside Secure AT90SCR050 + . Inside Secure AT90SCR100 + . Inside Secure AT90SCR200 + . SCR3310-NTTCom USB SmartCard Reader + . SafeTech SafeTouch + . SpringCard H512 Series + . SpringCard H663 Series + . SpringCard NFC'Roll + . Yubico Yubikey NEO CCID + . Yubico Yubikey NEO OTP+CCID + - Add support of time extension for Escape commands + + +1.4.9 - 16 January 2013, Ludovic Rousseau + - Add support of + . Aktiv Rutoken PINPad In + . Aktiv Rutoken PINPad Ex + . REINER SCT cyberJack go + - Info.plist: Correctly handle reader names containing & + + +1.4.8 - 22 June 2012, Ludovic Rousseau + - Add support of + . SCR3310-NTTCom USB (was removed in version 1.4.6) + . Inside Secure VaultIC 420 Smart Object + . Inside Secure VaultIC 440 Smart Object + - Wait up to 3 seconds for reader start up + - Add support of new PC/SC V2 part 10 properties: + . dwMaxAPDUDataSize + . wIdVendor + . wIdProduct + - Use helper functions from libPCSCv2part10 to parse the PC/SC v2 + part 10 features + + +1.4.7 - 22 June 2012, Ludovic Rousseau + - Add support of + . ACS ACR101 ICC Reader + . ACS CryptoMate64 + . Alcor Micro AU9522 + . Bit4id CKey4 + . Bit4id cryptokey + . Bit4id iAM + . Bit4id miniLector + . Bit4id miniLector-s + . CCB eSafeLD + . Gemalto Ezio Shield Branch + . KOBIL Systems IDToken + . NXP PR533 + - KOBIL Systems IDToken special cases: + . Give more time (3 seconds instead of 2) to the reader to answer + . Hack for the Kobil IDToken and Geman eID card. The German eID + card is bogus and need to be powered off before a power on + . Add Reader-Info-Commands special APDU/command + - Manufacturer command + - Product name command + - Firmware version command + - Driver version command + - Use auto suspend for CCID devices only (Closes Alioth bug + [#313445] "Do not activate USB suspend for composite devices: + keyboard") + - Fix some error management in the T=1 TPDU state machine + - some minor bugs removed + - some minor improvements added + + +1.4.6 - 6 April 2012, Ludovic Rousseau + - Add support of + . Avtor SC Reader 371 + . Avtor SecureToken + . DIGIPASS KEY 202 + . Fujitsu SmartCase KB SCR eSIG + . Giesecke & Devrient StarSign CUT + . Inside Secure VaultIC 460 Smart Object + . Macally NFC CCID eNetPad reader + . OmniKey 6321 USB + . SCM SDI 011 + . Teridian TSC12xxF + . Vasco DIGIPASS KEY 101 + - Remove support of readers without a USB CCID descriptor file + . 0x08E6:0x34C1:Gemalto Ezio Shield Secure Channel + . 0x08E6:0x34C4:Gemalto Ezio Generic + . 0x04E6:0x511A:SCM SCR 3310 NTTCom + . 0x0783:0x0008:C3PO LTC32 USBv2 with keyboard support + . 0x0783:0x9002:C3PO TLTC2USB + . 0x047B:0x020B:Silitek SK-3105 + - Disable SPE for HP USB CCID Smartcard Keyboard. The reader is + bogus and unsafe. + - Convert "&" in a reader name into "&" to fix a problem on Mac + OS X + - Fix a problem with ICCD type A devices. We now wait for device ready + - Secure PIN Verify and PIN Modify: set the minimum timeout to 90 + seconds + - Add support of wIdVendor and wIdProduct properties + - Add support of dwMaxAPDUDataSize + - Add support of Gemalto firmware features + - some minor bugs removed + + +1.4.5 - 11 October 2011, Ludovic Rousseau + - Add support of + . Alcor Micro AU9540 + . BIFIT USB-Token iBank2key + . BIFIT iBank2Key + . Gemalto Ezio Shield PinPad reader + . Gemalto SA .NET Dual + . Precise Sense MC reader (with fingerprint) + . SDS DOMINO-Key TWIN Pro + . Ubisys 13.56MHz RFID (CCID) + - Add support of bPPDUSupport and FEATURE_CCID_ESC_COMMAND + - SCARD_ATTR_VENDOR_NAME and SCARD_ATTR_VENDOR_IFD_VERSION are not + the vendor name and version of the driver but of the IFD: + InterFace Device i.e. the smart card reader. We then return the + USB iManufacturer string as SCARD_ATTR_VENDOR_NAME and USB + bcdDevice as SCARD_ATTR_VENDOR_IFD_VERSION + - reduce binary size bu removing unused features from simclist + - Fix some warnings reported bu Coverity + + +1.4.4 - 13 May 2011, Ludovic Rousseau + - Add support of + . Gemalto Ezio CB+ + . Gemalto Ezio Generic + . Gemalto Ezio Shield + . Gemalto Ezio Shield PinPad + . Gemalto Ezio Shield Secure Channel + - Activate USB automatic power suspend. The Linux kernel should + power off the reader automatically if it is not used (pcscd is not + running). + - Add support of TLV Properties wLcdMaxCharacters and wLcdMaxLines. + They just duplicate wLcdLayout + - some minor bugs removed + + +1.4.3 - 2 April 2011, Ludovic Rousseau + - Add support of + . Feitian ePass2003 readers + . Neowave Weneo + . SCM SCL011 + . Vasco DIGIPASS 920 + - use :libudev: instead of :libhal: naming scheme. + - Do not install RSA_SecurID_getpasswd and Kobil_mIDentity_switch + and the associated documentation. + - the Secure Pin Entry of the HP USB Smart Card Keyboard is bogus so + disable it + - some minor bugs removed + + +1.4.2 - 22 February 2011, Ludovic Rousseau + - Add support of + . ACS APG8201 PINhandy 1 + . Aktiv Rutoken lite readers + . Feitian SCR310 reader (also known as 301v2) + . Oberthur ID-ONE TOKEN SLIM v2 + . Vasco DIGIPASS KEY 200 + . Vasco DIGIPASS KEY 860 + . Xiring Leo v2 + . Xiring MyLeo + . new Neowave Weneo token + - Add back support of "bogus" Oz776, REINER SCT and BLUDRIVE II + - Ease detection of OpenCT by pcsc-lite + - disable use of interrupt card events for multi slots readers (the + algorithm is bogus and can't be used) + - fix minor problems detected by the clang tool + - some minor bugs removed + + +1.4.1 - 3 December 2010, Ludovic Rousseau + - Add support of + . Akasa AK-CR-03, BZH uKeyCI800-K18 + . Free Software Initiative of Japan Gnuk token readers + . Gemalto Smart Guardian (SG CCID) + . ReinerSCT cyberJack RFID basis + - Remove O2 Micro Oz776 and Blutronics Bludrive II CCID since they + are no more supported since version 1.4.0 + - SecurePINVerify() & SecurePINModify(): Accept big and little + endian byte orders for multibytes fields. The application + should not use HOST_TO_CCID_16() and HOST_TO_CCID_32() any more + and just use the normal byte order of the architecture. + - Need pcsc-lite 1.6.5 for TAG_IFD_POLLING_THREAD_WITH_TIMEOUT + - Add --enable-embedded (default is no) to build libccid for an + embedded system. This will activate the NO_LOG option to disable + logging and limit RAM and disk consumption. + - Remove --enable-udev option since it is not used anymore with + libhal. The udev rules file is now used to change the access + rights of the device and not send a hotplug signal to pcscd. + See http://ludovicrousseau.blogspot.com/2010/09/pcscd-auto-start.html + - some minor bugs removed + + +1.4.0 - 4 August 2010, Ludovic Rousseau + - add support of + . ACS AET65 + . Broadcom 5880 + . C3PO LTC36 + . Dectel CI692 + . Gemalto Hybrid Smartcard Reader + . Kingtrust Multi-Reader + . Tianyu Smart Card Reader + . Todos CX00 + - Add support of the SCM SDI 010 again. At least the contact + interface can be used. + - Use libusb-1.0 instead of libusb-0.1 + - add support of TAG_IFD_STOP_POLLING_THREAD and use of the + asynchronous libusb API to be able to stop a transfer. + - Request pcsc-lite 1.6.2 minimum (instead of 1.6.0) to have + TAG_IFD_STOP_POLLING_THREAD defined + - The O2MICRO OZ776 patch (for OZ776, OZ776_7772, REINER_SCT and + BLUDRIVEII_CCID) is no more supported with libusb-1.0 + - correctly get the IFSC from the ATR (ATR parsing was not always + correct) + - some minor bugs removed + + +1.3.13 - 4 June 2010, Ludovic Rousseau + - much faster warm start (up to 3.8 second gained) + - Add support of SCARD_ATTR_VENDOR_IFD_SERIAL_NO to get the serial + number of the USB device + - some minor bugs removed + + +1.3.12 - 8 May 2010, Ludovic Rousseau + - add support of + . Ask CPL108 + . Atmel AT90SCR050 + . Atmel AT90SCR100 + . Atmel VaultIC420 + . Atmel VaultIC440 + . Atmel VaultIC460 + . Cherry SmartTerminal XX7X + . Covadis Auriga + . German Privacy Foundation Crypto Stick v1.2 + . GoldKey PIV Token + . KOBIL Smart Token + . KOBIL mIDentity 4smart + . KOBIL mIDentity 4smart AES + . KOBIL mIDentity 4smart fullsize AES + . KOBIL mIDentity fullsize + . KOBIL mIDentity visual + . SCM SCR3500 + . Smart SBV280 + . Todos AGM2 CCID + . Vasco DIGIPASS KEY 200 + . Vasco DIGIPASS KEY 860 + . Vasco DP855 + . Vasco DP865 + . id3 CL1356T5 + - remove support of Smart SBV280 on manufacturer request. They use + libusb directly. + - remove support of SCM SDI 010 on manufacturer request since not + supported by my driver + - Enable the Broadcom 5880 reader. It should work after a firmware + upgrade. + - better support of Dell keyboard + - better support of multislot readers (like the GemCore SIM Pro) + - better support of SCM SCR3310 + - better support of ICCD version A devices + - The Covadis Véga-Alpha reader is a GemPC pinpad inside. So we use + the same code to: + . load the strings for the display + . avoid limitation of the reader + - IFDHControl(): the (proprietary) get firmware version escape + command is allowed with a Gemalto reader + . the (proprietary) switch interface escape command is allowed on + the Gemalto GemProx DU + . return IFD_ERROR_NOT_SUPPORTED instead of + IFD_COMMUNICATION_ERROR if the dwControlCode value is not + supported + . return IFD_ERROR_INSUFFICIENT_BUFFER when appropriate + - IFDHGetCapabilities(): add support of SCARD_ATTR_ICC_PRESENCE and + SCARD_ATTR_ICC_INTERFACE_STATUS + - support FEATURE_GET_TLV_PROPERTIES + - add support of IOCTL_FEATURE_GET_TLV_PROPERTIES bMinPINSize & + bMaxPINSize for Gemalto Pinpad V1 & Covadis Véga-Alpha + - support extended APDU of up to 64kB with APDU readers. + - get the language selected during Mac OS X installation as language + to use for Covadis Véga-Alpha and Gemalto GemPC PinPad pinpad + readers + - FEATURE_MCT_READER_DIRECT is also supported by the Kobil mIDentity + visual + - better support of Sun Studio CC + - some minor bugs removed + + +1.3.11 - 28 July 2009, Ludovic Rousseau + - add support of + . Raritan D2CIM-DVUSB VM/CCID + . Feitian SCR301 + . Softforum XecureHSM + . 2 Neowave Weneo tokens + . Synnix STD200 + . Aktiv Rutoken ECP + . Alcor Micro SCR001 + . ATMEL AT91SC192192CT-USB + . Panasonic USB Smart Card Reader 7A-Smart + . Gemalto GemProx DU and SU + - remove support of Reiner-SCT cyberJack pinpad(a) on request of + Reiner-SCT. You should user the Reiner-SCT driver instead + - define CFBundleName to CCIDCLASSDRIVER so that non class drivers + have a higher priority. Used by pcsc-lite 1.5.5 and up. + Add a --disable-class configure option so that the Info.plist does + not define a Class driver. Default is class driver. + - do not power up a card with a voltage not supported by the reader + - add support of PIN_PROPERTIES_STRUCTURE structure and + FEATURE_IFD_PIN_PROPERTIES + - adds support of FEATURE_MCT_READERDIRECT. Only the Kobil TriB@nk + reader supports this feature for now. This is used for the Secoder + functionality in connected mode. + - add support of a composite device. No change needed with libhal. + use --enable-composite-as-multislot on Mac OS X since libhal is + not available on Mac OS X or with libusb on Linux + - some minor bugs removed + + +1.3.10 - 7 March 2009, Ludovic Rousseau + - add support for + . Aktiv Rutoken Magistra + . Atmel AT98SC032CT + . MSI StarReader SMART + . Noname reader (from Omnikey) + . Precise Biometrics 200 MC and 250 MC + . Realtek 43 in 1 + Sim + Smart Card Reader + . TianYu CCID SmartKey + . Xiring Xi Sign PKI + - add a patch to support the bogus OpenPGP card (on board key + generation sometimes timed out) + - disable support of the contactless part of SDI010 and SCR331DI + (this code was reverse engineered and hard to maintain) + - some minor bugs removed + + +1.3.9 - 18 November 2008, Ludovic Rousseau + - add support for + . ACS ACR122U PICC + . Aladdin eToken PRO USB 72K Java + . Atmel AT91SO + . CSB6 Basic + . CSB6 Secure + . CSB6 Ultimate + . Cherry SmartTerminal ST-1200USB + . CrazyWriter + . EasyFinger Standard + . EasyFinger Ultimate + . Gemalto PDT + . HP MFP Smart Card Reader + . KONA USB SmartCard + . SpringCard Prox'N'Roll + . VMware Virtual USB CCID + - MacOSX/configure: do not overwrite PCSC_CFLAGS, PCSC_LIBS, + LIBUSB_CFLAGS and LIBUSB_LIBS if already defined by the user + - by default, link statically against libusb on Mac OS X + - IFDHPowerICC(): use a very long timeout for PowerUp since the card + can be very slow to send the full ATR (up to 30 seconds at 4 MHz) + - SecurePINVerify(): correct a bug when using a Case 1 APDU and a + SCM SPR532 reader + - log the reader name instead of just the pcscd Lun + - some minor bugs removed + + +1.3.8 - 27 June 2008, Ludovic Rousseau + - add support for + . Oberthur ID-One Cosmo Card + - do not include the release number in the Info.plist to avoid a + diff of a configuration file when upgrading the package. + - do not fail compilation if libusb is not available + - do not crash if the reader firmware is bogus and does not support + chaining for extended APDU. This is the case for Kobil readers + - some minor bugs removed + + +1.3.7 - 8 June 2008, Ludovic Rousseau + - add support for + . ActivCard Activkey Sim + . Pro-Active CSB6 Ultimate + . id3 Semiconductors CL1356A HID + - src/parse: do not try to parse devices with bInterfaceClass=0xFF + by default (use command line argument -p for proprietary class) + - configure.in: check if libusb-0.1 is emulated by libusb-compat + + libusb-1.0 to use or not the USB interrupt feature + - correct a bug in the serial communication (GemPC twin serial + reader) + - correct a pthread problem under Solaris + - some minor bugs removed + + +1.3.6 - 30 April 2008, Ludovic Rousseau + - add support for + . Covadis Alya + . Covadis Véga + . Precise Biometrics 250 MC + . Validy TokenA sl vt + . Vasco DP905 + - better support for the O2Micro OZ776, GemCore SIM Pro + - the environment variable LIBCCID_ifdLogLevel overwrite the value + of ifdLogLevel read from the Info.plist file + - add support for DragonFly BSD + - some minor bugs removed + + +1.3.5 - 22 February 2008, Ludovic Rousseau + - add support for Gemplus Gem e-Seal Pro, Cherry SmartBoard, + G83-6610 + - use usb_interrupt_read() only if libusb > 0.1.12 or + --enable-usb-interrupt is used. libusb <= 0.1.12 is bogus and will + consume more CPU than needed. + - contrib/Kobil_mIDentity_switch/Kobil_mIDentity_switch was broken + on Linux since release 1.3.1 + - some minor bugs removed + + +1.3.4 - 8 February 2008, Ludovic Rousseau + - the serial driver could not be loaded because of the missing + symbol InterruptRead + - remove WAIT_FOR_SYSFS="bInterfaceProtocol" to do not delay udev + + +1.3.3 - 6 February 2008, Ludovic Rousseau + - add support for Lexar Smart Enterprise Guardian and Blutronics + Bludrive II CCID + - add support of TAG_IFD_POLLING_THREAD using IFDHPolling() to + detect asynchronous card movements. With this feature pcscd will + not poll the reader every 0.4 second for a card movement but will + wait until the reader sends a USB interrupt signal + - correct a bug with an ICCD-B device and a receive buffer smaller + than 4 bytes + - remove the sleep in the udev rule. It slows down the detection of + any USB device + - some minor bugs removed + + +1.3.2 - 22 January 2008, Ludovic Rousseau + - add support of Apple Mac OS X Leopard (10.5.1) + - solve a hotplug problem on Ubuntu 7.10 (reader was not detected) + - create a symlink from libccidtwin.so to libccidtwin.so.VERSION so + that the /etc/reader.conf configuration file do not need to edited + for each new driver version + - make driver for the GemPC Serial compile again + - some minor bugs removed + + +1.3.1 - 16 November 2007, Ludovic Rousseau + - add support for "Philips Semiconductors JCOP41V221" ICCD card, + O2Micro oz776 (ProductID 0x7772), CardMan5321, Giesecke & Devrient + StarSign Card Token 350 and 550, SafeNet IKey4000, Eutron + CryptoIdentity, Eutron Smart Pocket, Eutron Digipass 860, Lenovo + Integrated Smart Card Reader, "Kobil EMV CAP - SecOVID Reader III, + Charismathics token, Reiner-SCT cyberJack pinpad(a) + - improve support of Mac OS X and *BSD + - some minor bugs removed + + +1.3.0 - 10 May 2007, Ludovic Rousseau + - add support of ICCD version A and B + - add support for (new) KOBIL mIDentity, SchlumbergerSema Cyberflex + Access e-gate ICCD, Fujitsu Siemens Computers SmartCard USB 2A and + SmartCard Keyboard USB 2A readers, OmniKey CardMan 4321 + - contrib/RSA_SecurID/RSA_SecurID_getpasswd: tool to get the on time + password also displayed on the token screen + - contrib/Kobil_mIDentity_switch: tool to activate the CCID reader + of the Kobil mIDentity. The tool should be started automatically + by the udev rule on Linux + - GemPC pinpad: localisation of the string "PIN blocked", add + Portuguese(pt), Dutch(nl) and Turkish(tr) localisations + - some minor bugs removed + +1.2.1 - 27 January 2007, Ludovic Rousseau + - pcscd_ccid.rules: add non CCID generic (InterfaceClass: 0xFF) + readers + - INSTALL: document how to use --enable-udev on FreeBSD + - move the O2Micro Oz7762 from the unsupported to the supported list + since patches to support it are applied by default + (O2MICRO_OZ776_PATCH) + + +1.2.0 - 19 January 2007, Ludovic Rousseau + - add support for SCARD_ATTR_VENDOR_IFD_VERSION, + SCARD_ATTR_VENDOR_NAME and SCARD_ATTR_MAXINPUT tags used by + SCardGetAttrib(). Read SCARDGETATTRIB.txt for more documentation + - add support for OmniKey CardMan 5125, CardMan 1021, C3PO LTC32, + Teo by Xiring, HP USB Smartcard Reader + - use --enable-twinserial to build the serial reader driver + - use --enable-udev to configure for a use with Linux udev hotplug + mechanism. This will allow pcscd to avoid polling the USB bus + every 1 second + - some minor bugs removed + + +1.1.0 - 11 August 2006, Ludovic Rousseau + - support Extended APDU (up to 64KB) for readers in TPDU mode (many + readers) or Extended APDU mode (very rare). This only works for + T=1 cards. + - add support for C3PO LTC31 (new version), OmniKey CardMan 3021, HP + USB Smart Card Keyboard, Actividentity (ActiveCard) Activkey Sim, + id3 Semiconductors CL1356D and CL1356T, Alcor Micro AU9520 + - support the contactless interface of the SCR331-DI-NTTCOM + - add support of FreeBSD + - increase the USB timeout used for PIN verify/modify to not timeout + before the reader + - the 4-bytes value returned by CM_IOCTL_GET_FEATURE_REQUEST shall + be encoded in big endian as documented in PCSC v2 part 10 ch 2.2 + page 2. The applications using this feature shall be updated (to + respect the PCSC specification). + - use ./configure --enable-twinserial to compile and install the the + driver for the GemPC Twin serial + - some minor bugs removed + + +1.0.1 - 22 April 2006, Ludovic Rousseau + - add support for Axalto Reflex USB v3, SCM Micro SDI 010, Winbond + Electronics W81E381 chipset, Gemplus GemPC Card, Athena ASE IIIe + KB USB, OmniKey CardMan 3621 + - support Solaris (Solaris uses a different libusb) + - better documentation for ./configure arguments + - improve support of Cherry XX44 keyboard for PIN verify and change + (circumvent firmware bugs) + - do not use LTPBundleFindValueWithKey() from pcscd since this + function has been removed from pcscd API + - use -fvisibility=hidden is available to limit the number of + exported symbols + + +1.0.0 - 3 March 2006, Ludovic Rousseau + - add support for ActivCard USB Reader 3.0, Athena ASE IIIe USB V2, + SCM Micro SCR 355, SCR 3311, SCR 3320, SCR 3340 ExpressCard54, + Gemplus GemCore SIM Pro, GemCore POS Pro (serial and USB), GemPC + Express (ExpressCard/54 interface), SmartEpad (v 2.0), OmniKey + CardMan 5121 + - greatly improve support of PIN PAD readers. We now support TPDU + readers with T=1 cards + - use l10n strings for the Gemplus GemPC PIN PAD (it has a screen). + Supported languages are: de, en, es, fr, it + - rename ACS ACR 38 in ACR 38U-CCID since the ACR 38 is a different + reader and is not CCID compatible + - allow to select the Power On voltage using Info.plist instead of + recompiling the source code + - correct bugs in the support of multi-slots readers + - if the card is faster than the reader (TA1=97 for example) we try + to use a not-so-bad speed (corresponding to TA1=96, 95 or 94) + instead of the default speed of TA1=11 + - the src/parse tool do not use the driver anymore. No need to + update the Info.plist file first. + - some minor bugs removed + + +0.9.4 - 27 November 2005, Ludovic Rousseau + - add support for Eutron SIM Pocket Combo, Eutron CryptoIdentity, + Verisign Secure Token and VeriSign Secure Storage Token, GemPC + Card (PCMCIA), SCM SCR331-DI NTTCom, SCM Micro SCR 3310-NTTCom, + Cherry ST-1044U, Cherry SmartTerminal ST-2XXX + - add support of PC/SC v2 part 10 CM_IOCTL_GET_FEATURE_REQUEST add + support of FEATURE_VERIFY_PIN_DIRECT and FEATURE_MODIFY_PIN_DIRECT + remove support of IOCTL_SMARTCARD_VENDOR_VERIFY_PIN (now + obsoleted). A sample code is available in examples/scardcontrol.c + - we need pcsc-lite 1.2.9-beta9 since some structures used for PIN + pad readers are defined by pcsc-lite + - some (bogus) cards require an extra EGT but the ATR does not say + so. We try to detect the bogus cards and set TC1=2 + - IFDHSetProtocolParameters(): only use a data rate supported by the + reader in the PPS negociation, otherwise we stay at the default + speed. + - calculate and store the read timeout according to the card ATR + instead of using a fixed value of 60 seconds + - increase the read timeout if the card sends and WTX request + - improve support of GemPC Twin and GemPC Card (serial protocol) + - reset the device on close only if DRIVER_OPTION_RESET_ON_CLOSE is + set. The problem was that a device reset also disconnects the + keyboard on a keyboard + reader device. + - use color logs + - some minor bugs removed + + +0.9.3 - 14 March 2005, Ludovic Rousseau + - change the licence from GNU GPL to GNU Lesser GPL (LGPL) + - add support for ACS ACR 38, Kobil KAAN Base, Kobil KAAN Advanced, + Kobil KAAN SIM III, Kobil KAAN mIDentity, SCM Micro SCR 331, + SCM Micro SCR 331-DI, SCM Micro SCR 335, SCM Micro SCR 3310, + SCM Micro SCR 532, Cherry XX44 readers + - improve communication speed with readers featuring "Automatic PPS + made by the CCID" + - switch the Cherry xx33 reader in ISO mode if power up in EMV mode + fails. + - add support of character level readers. Thanks to O2Micro for the + patch + - add support for the O2Micro OZ776S reader but the reader firmware + is still bogus + - check firmware version to avoid firmwares with bugs. You can still + use a bogus firmware by setting DRIVER_OPTION_USE_BOGUS_FIRMWARE + in Info.plist + - some minor bugs removed + +0.9.2 - 15 August 2004, Ludovic Rousseau + - T=1 TPDU code: + . the work on T=1 TPDU code was possible thanks to Gemplus + validation team who helped me test, debug and bring the code to + an EMV validation level. Thanks to Jérôme, Jean-Yves, Xavier and + the Gemplus readers department + . error code was not checked correctly + . avoid a (nearly) infinite loop when resynch are needed. + . correctly initialise an internal value to allow more than one + reader to work + - multi-slots readers + . add support for multi-slots readers. The only one I have is a + SCM Micro SCR 331-DI with a contact and a contactless interface. + The contactless interface may or may not work for you since the + reader uses proprietary (undocumented) commands. + - GemPC Twin serial reader + . perform a command (get the reader firmware) to be sure a GemPC + Twin (serial or pcmcia) reader is connected + . use a dynamic timeout when reading the serial port. + The first timeout used when detecting the reader is 2 seconds to + not wait too long if no reader is connected. Later timeouts are + set to 1 minute to allow long time APDU. + - use `pkg-config libpcsclite --cflags` to locate the pcsc-lite + header files + - use `pkg-config --print-errors --atleast-version=1.2.9-beta5 libpcsclite` + to test the pcsc-lite version + - code improvements thanks to the splint tool (http://www.splint.org/) + +0.9.1 - 1 July 2004, Ludovic Rousseau + - I forgot to define IFD_PARITY_ERROR in a .h file + +0.9.0 - 1 July 2004, Ludovic Rousseau + - The T=1 TPDU automata from Carlos Prados' Towitoko driver is very + limited and do not support error management mechanisms. + I then used the T=1 TPDU automata from OpenCT (OpenSC project). + This automata is much more powerful but still lacks a lot of error + management code. + I then added all the needed code to reach the quality level + requested by the EMV standard. + - add support for new readers: + . Advanced Card Systems ACR 38 + . Cherry XX33 + . Dell keyboard SK-3106 + . Dell smart card reader keyboard + . SCR 333 + - add support of multi procotol cards (T=0 and T=1) + - the debug level is now dynamic and set in the Info.plist file (no + need to recompile the driver any more) + - add support for the libusb naming scheme: usb:%04x/%04x:libusb:%s + - INSTALL: add a "configuring the driver for the serial reader + (GemPC Twin)" part + - use `pkg-config libpcsclite --variable=usbdropdir` so you do not + have to use --enable-usbdropdir=DIR or --enable-ccidtwindir=DIR + even if pcscd does not use the default /usr/local/pcsc/drivers + - add support of IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE and + IOCTL_SMARTCARD_VENDOR_VERIFY_PIN in IFDHControl() + - read ifdDriverOptions from Info.plist to limit the use of + IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE (idea from Peter Williams) + - provide an example of use of SCardControl() + IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE and + IOCTL_SMARTCARD_VENDOR_VERIFY_PIN in example/ + - add a --enable-pcsclite option (default to yes) so that the driver + can be compiled for a different framework (one needing + tokenparser.l like Solaris) + - Reset action is power off and power on, not just power on + - use the include files from pcsc-lite + - add a mechanism to allow power on at 1.8V, 3V and then 5V as + specified by ISO 7816. We still use 5V for now to avoid problems + with non ISO compliant cards + +0.4.1 - 14 February 2004, Ludovic Rousseau + - distribute missing files readers/supported_readers.txt and + src/create_Info_plist.pl + 'make install' failed because of this. + +0.4.0 - 13 February 2004, Ludovic Rousseau + - support of T=1 with TPDU readers. A lot of the T=1 code comes from + Carlos Prados towitoko driver. + My code is GNU GPL, his code is GNU LGPL so the global driver is + GNU GPL + - PPS negotiation if the reader does not do it automatically + - add support for the Silitek SK-3105 keyboard. It's a USB device + with multiple interfaces + - use the create_Info_plist.pl script to generate the installed + Info.plist from an Info.plist template and a list of supported + readers. The Info.plist was too "complex" to maintain by hand + since it now contains 11 entries + - add support of IFDHCreateChannelByName to avoid wrong reader + enumeration. This is not complete if you have multiple _identical_ + readers. You need to use a > 1.2.0 pcsc-lite version (not yet + released at that time) + - build but do not install the serial ccidtwin driver by default + since it is useless on computers without a serial port or without + this reader for example. + - read and write timeouts are not symmetric. write timout can be + shorter since the reader and card is not supposed to do anything + before receiving (write) a command + - do not try to find usb.h and other libusb files if + --disable-libusb is used. Needed if you only want to build the + serial driver. Thanks to Niki Waibel for the patch + - add a --enable-ccidtwindir argument to ./configure to specify the + serial GemPC Twin installation directory + - debug and code improvements and simplifications + +0.3.2 - 4 November 2003, Ludovic Rousseau + - src/commands.c: correct a stupid bug that occurs with an APDU with + 2 bytes response. + - Info.plist: add SPR 532 in list of supported readers + - parse.c: do not exit if the InterfaceClass is 0xFF (proprietary). + It is the case with old readers manufactured before the final + release of the CCID specs. + - move LTC31 reader from unsupported to supported reader list. It + was my f ault since in used odd INS byte in my test applet and odd + INS bytes are forbidden by ISO 7816-4 ch. 5.4.2 Instruction byte. + Thanks to Josep Moné s Teixidor for pointing the problem. + - src/commands.c: comment out the automatic GET RESPONSE part. I + don't think it should be in the driver. Maybe in pcscd instead? + +0.3.1 - 23 September 2003, Ludovic Rouseau + - add --enable-multi-thread (enabled by default) for thread safe + support an APDU multiplexing. You will need pcsc-lite-1.2.0-rc3 or + above to use this feature. + - add --enable-libusb=PATH option is your libusb is not installed in + /usr or /usr/local + - honor DESTDIR in install rules (closes [ #300110 ]). Thanks to + Ville Skyttä for the patch. + - src/ccid.c: do not switch the GemPC Key and GemPC Twin in APDU + mode since it also swicth in EMV mode and may not work with non + EMV cards + - src/ccid_serial.c: complete reimplementation of the Twin serial + protocol using a finite state automata (code much simpler) + +0.3.0 - 10 September 2003, Ludovic Rousseau + - support of GemPC Twin connected to a serial port. Thanks to Niki + W. Waibel for a working prototype. + - support of auto voltage at power up if the reader support it + instead of forcing a 5V in all cases. + - support of APDU mode instead of just TPDU if the reader support + it. Thanks to Jean-Luc Giraud for the idea and inspiration I got + from his "concurrent" driver. + - support of "time request" from the card. + - parse: new indentation for more readability of supported features. + - switch the GemPC Key and GemPC Twin in APDU mode since they + support it but do not announce it in the dwFeatures. + - new build process using autoconf/automake. + +0.2.0 - 26 August 2003, Ludovic Rousseau + - Works under MacOS X + - Info.plist: use an for the alias enumeration + - Makefile rework for *BSD and MacOS X + +0.1.0 - 13 August 2003, Ludovic Rousseau + - First public release + + + vim:ts=20 diff --git a/SCARDGETATTRIB.txt b/SCARDGETATTRIB.txt new file mode 100644 index 0000000..e6c697a --- /dev/null +++ b/SCARDGETATTRIB.txt @@ -0,0 +1,95 @@ +List of SCardGetAttrib() commands supported by the CCID driver +============================================================== + +PC/SC provides the SCardGetAttrib() function to request some attributes from +the driver. + + +PC/SC function prototype +""""""""""""""""""""""""" + +LONG SCardGetAttrib(SCARDHANDLE hCard, + DWORD dwAttrId, + LPBYTE pbAttr, + LPDWORD pcbAttrLen); + +Parameters: + +hCard IN Connection made from SCardConnect +dwAttrId IN Identifier for the attribute to get +pbAttr OUT Pointer to a buffer that receives the attribute +pcbAttrLen IN/OUT Length of the pbAttr buffer in bytes + +If the attribute is not supported the applications receive the error +SCARD_E_UNSUPPORTED_FEATURE (or SCARD_E_NOT_TRANSACTED for pcsc-lite +version < 1.3.3) + + +supported attributes +"""""""""""""""""""" + +SCARD_ATTR_ATR_STRING + ATR of the card + +SCARD_ATTR_ICC_INTERFACE_STATUS + Single byte. Zero if smart card electrical contact is not active; + nonzero if contact is active. + +SCARD_ATTR_ICC_PRESENCE + Single byte indicating smart card presence: + 0 = not present + 1 = card present but not swallowed (applies only if reader supports + smart card swallowing) + 2 = card present (and swallowed if reader supports smart card swallowing) + 4 = card confiscated. + +SCARD_ATTR_VENDOR_IFD_VERSION + Vendor-supplied interface device version + DWORD in the form 0xMMmmbbbb where + MM = major version, + mm = minor version, + and bbbb = build number + It is the bcdDevice USB field. + +SCARD_ATTR_VENDOR_NAME + name of the IFD (reader) vendor. It is the iManufacturer USB field + (if any). + +SCARD_ATTR_MAXINPUT + maximum size of an APDU supported by the reader. + format is unsigned 32-bit unsing the byte order of the platform. + Correct readers should support up to 261 bytes (CLA + INS + P1 + P2 + + Lc + 255 bytes of data) but some readers support less (253 bytes only + for example). It is a problem for T=1 cards when the reader works in + APDU mode instead of TPDU and for T=0 cards. + +SCARD_ATTR_VENDOR_IFD_SERIAL_NO + reader serial number (if available). + + +Sample code +=========== + +#include + +{ + [...] + + unsigned char pbAtr[MAX_ATR_SIZE]; + DWORD dwAtrLen; + + /* use a NULL buffer to just get the needed length */ + rv = SCardGetAttrib(hCard, SCARD_ATTR_ATR_STRING, NULL, &dwAtrLen); + if (rv == SCARD_S_SUCCESS) + printf("ATR length: %ld\n", dwAtrLen); + + dwAtrLen = sizeof(pbAtr); + rv = SCardGetAttrib(hCard, SCARD_ATTR_ATR_STRING, pbAtr, &dwAtrLen); + if (rv == SCARD_S_SUCCESS) + { + for (i = 0; i < dwAtrLen; i++) + printf("%02X ", pbAtr[i]); + printf("\n"); + } +} + diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..9ccdd46 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,1549 @@ +# generated automatically by aclocal 1.15 -*- Autoconf -*- + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +dnl serial 11 (pkg-config-0.29) +dnl +dnl Copyright © 2004 Scott James Remnant . +dnl Copyright © 2012-2015 Dan Nicholson +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +dnl 02111-1307, USA. +dnl +dnl As a special exception to the GNU General Public License, if you +dnl distribute this file as part of a program that contains a +dnl configuration script generated by Autoconf, you may include it under +dnl the same distribution terms that you use for the rest of that +dnl program. + +dnl PKG_PREREQ(MIN-VERSION) +dnl ----------------------- +dnl Since: 0.29 +dnl +dnl Verify that the version of the pkg-config macros are at least +dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's +dnl installed version of pkg-config, this checks the developer's version +dnl of pkg.m4 when generating configure. +dnl +dnl To ensure that this macro is defined, also add: +dnl m4_ifndef([PKG_PREREQ], +dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) +dnl +dnl See the "Since" comment for each macro you use to see what version +dnl of the macros you require. +m4_defun([PKG_PREREQ], +[m4_define([PKG_MACROS_VERSION], [0.29]) +m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, + [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) +])dnl PKG_PREREQ + +dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) +dnl ---------------------------------- +dnl Since: 0.16 +dnl +dnl Search for the pkg-config tool and set the PKG_CONFIG variable to +dnl first found in the path. Checks that the version of pkg-config found +dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is +dnl used since that's the first version where most current features of +dnl pkg-config existed. +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) +m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])dnl PKG_PROG_PKG_CONFIG + +dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------------------------------- +dnl Since: 0.18 +dnl +dnl Check to see whether a particular set of modules exists. Similar to +dnl PKG_CHECK_MODULES(), but does not set variables or print errors. +dnl +dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +dnl only at the first occurence in configure.ac, so if the first place +dnl it's called might be skipped (such as if it is within an "if", you +dnl have to call PKG_CHECK_EXISTS manually +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +dnl --------------------------------------------- +dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting +dnl pkg_failed based on the result. +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes ], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])dnl _PKG_CONFIG + +dnl _PKG_SHORT_ERRORS_SUPPORTED +dnl --------------------------- +dnl Internal check to see if pkg-config supports short errors. +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])dnl _PKG_SHORT_ERRORS_SUPPORTED + + +dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl -------------------------------------------------------------- +dnl Since: 0.4.0 +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES might not happen, you should be sure to include an +dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT])[]dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])[]dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])dnl PKG_CHECK_MODULES + + +dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl --------------------------------------------------------------------- +dnl Since: 0.29 +dnl +dnl Checks for existence of MODULES and gathers its build flags with +dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags +dnl and VARIABLE-PREFIX_LIBS from --libs. +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to +dnl include an explicit call to PKG_PROG_PKG_CONFIG in your +dnl configure.ac. +AC_DEFUN([PKG_CHECK_MODULES_STATIC], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +_save_PKG_CONFIG=$PKG_CONFIG +PKG_CONFIG="$PKG_CONFIG --static" +PKG_CHECK_MODULES($@) +PKG_CONFIG=$_save_PKG_CONFIG[]dnl +])dnl PKG_CHECK_MODULES_STATIC + + +dnl PKG_INSTALLDIR([DIRECTORY]) +dnl ------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable pkgconfigdir as the location where a module +dnl should install pkg-config .pc files. By default the directory is +dnl $libdir/pkgconfig, but the default can be changed by passing +dnl DIRECTORY. The user can override through the --with-pkgconfigdir +dnl parameter. +AC_DEFUN([PKG_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([pkgconfigdir], + [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, + [with_pkgconfigdir=]pkg_default) +AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_INSTALLDIR + + +dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) +dnl -------------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable noarch_pkgconfigdir as the location where a +dnl module should install arch-independent pkg-config .pc files. By +dnl default the directory is $datadir/pkgconfig, but the default can be +dnl changed by passing DIRECTORY. The user can override through the +dnl --with-noarch-pkgconfigdir parameter. +AC_DEFUN([PKG_NOARCH_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([noarch-pkgconfigdir], + [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, + [with_noarch_pkgconfigdir=]pkg_default) +AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_NOARCH_INSTALLDIR + + +dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------- +dnl Since: 0.28 +dnl +dnl Retrieves the value of the pkg-config variable for the given module. +AC_DEFUN([PKG_CHECK_VAR], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl + +_PKG_CONFIG([$1], [variable="][$3]["], [$2]) +AS_VAR_COPY([$1], [pkg_cv_][$1]) + +AS_VAR_IF([$1], [""], [$5], [$4])dnl +])dnl PKG_CHECK_VAR + +# Copyright (C) 2002-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.15' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.15], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.15])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# Copyright (C) 2011-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_AR([ACT-IF-FAIL]) +# ------------------------- +# Try to determine the archiver interface, and trigger the ar-lib wrapper +# if it is needed. If the detection of archiver interface fails, run +# ACT-IF-FAIL (default is to abort configure with a proper error message). +AC_DEFUN([AM_PROG_AR], +[AC_BEFORE([$0], [LT_INIT])dnl +AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([ar-lib])dnl +AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) +: ${AR=ar} + +AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], + [AC_LANG_PUSH([C]) + am_cv_ar_interface=ar + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], + [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([am_ar_try]) + if test "$ac_status" -eq 0; then + am_cv_ar_interface=ar + else + am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([am_ar_try]) + if test "$ac_status" -eq 0; then + am_cv_ar_interface=lib + else + am_cv_ar_interface=unknown + fi + fi + rm -f conftest.lib libconftest.a + ]) + AC_LANG_POP([C])]) + +case $am_cv_ar_interface in +ar) + ;; +lib) + # Microsoft lib, so override with the ar-lib wrapper script. + # FIXME: It is wrong to rewrite AR. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__AR in this case, + # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something + # similar. + AR="$am_aux_dir/ar-lib $AR" + ;; +unknown) + m4_default([$1], + [AC_MSG_ERROR([could not determine $AR interface])]) + ;; +esac +AC_SUBST([AR])dnl +]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Copyright (C) 1998-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_LEX +# ----------- +# Autoconf leaves LEX=: if lex or flex can't be found. Change that to a +# "missing" invocation, for better error output. +AC_DEFUN([AM_PROG_LEX], +[AC_PREREQ([2.50])dnl +AC_REQUIRE([AM_MISSING_HAS_RUN])dnl +AC_REQUIRE([AC_PROG_LEX])dnl +if test "$LEX" = :; then + LEX=${am_missing_run}flex +fi]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless 'enable' is passed literally. +# For symmetry, 'disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], + [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], + am_maintainer_other[ make rules and dependencies not useful + (and sometimes confusing) to the casual installer])], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/as-ac-expand.m4]) +m4_include([m4/ax_pthread.m4]) +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) diff --git a/ar-lib b/ar-lib new file mode 100755 index 0000000..463b9ec --- /dev/null +++ b/ar-lib @@ -0,0 +1,270 @@ +#! /bin/sh +# Wrapper for Microsoft lib.exe + +me=ar-lib +scriptversion=2012-03-01.08; # UTC + +# Copyright (C) 2010-2014 Free Software Foundation, Inc. +# Written by Peter Rosin . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + + +# func_error message +func_error () +{ + echo "$me: $1" 1>&2 + exit 1 +} + +file_conv= + +# func_file_conv build_file +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv in + mingw) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_at_file at_file operation archive +# Iterate over all members in AT_FILE performing OPERATION on ARCHIVE +# for each of them. +# When interpreting the content of the @FILE, do NOT use func_file_conv, +# since the user would need to supply preconverted file names to +# binutils ar, at least for MinGW. +func_at_file () +{ + operation=$2 + archive=$3 + at_file_contents=`cat "$1"` + eval set x "$at_file_contents" + shift + + for member + do + $AR -NOLOGO $operation:"$member" "$archive" || exit $? + done +} + +case $1 in + '') + func_error "no command. Try '$0 --help' for more information." + ;; + -h | --h*) + cat < Caveats +# In order to prevent conflicts with Apple's own libtool we have prepended a "g" +# so, you have instead: glibtool and glibtoolize. +which glibtoolize && LIBTOOLIZE=glibtoolize + +aclocal -I m4 +$LIBTOOLIZE --copy --force --automake +autoheader --force +autoconf --force +automake --add-missing --copy --force --foreign diff --git a/compile b/compile new file mode 100755 index 0000000..a85b723 --- /dev/null +++ b/compile @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..2e9ad7f --- /dev/null +++ b/config.guess @@ -0,0 +1,1462 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2016 Free Software Foundation, Inc. + +timestamp='2016-10-02' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# +# Please send patches to . + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2016 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || \ + echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently (or will in the future) and ABI. + case "${UNAME_MACHINE_ARCH}" in + earm*) + os=netbsdelf + ;; + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # Determine ABI tags. + case "${UNAME_MACHINE_ARCH}" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}${abi}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:Sortix:*:*) + echo ${UNAME_MACHINE}-unknown-sortix + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE=alpha ;; + "EV4.5 (21064)") + UNAME_MACHINE=alpha ;; + "LCA4 (21066/21068)") + UNAME_MACHINE=alpha ;; + "EV5 (21164)") + UNAME_MACHINE=alphaev5 ;; + "EV5.6 (21164A)") + UNAME_MACHINE=alphaev56 ;; + "EV5.6 (21164PC)") + UNAME_MACHINE=alphapca56 ;; + "EV5.7 (21164PC)") + UNAME_MACHINE=alphapca57 ;; + "EV6 (21264)") + UNAME_MACHINE=alphaev6 ;; + "EV6.7 (21264A)") + UNAME_MACHINE=alphaev67 ;; + "EV6.8CB (21264C)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8AL (21264B)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8CX (21264D)") + UNAME_MACHINE=alphaev68 ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE=alphaev69 ;; + "EV7 (21364)") + UNAME_MACHINE=alphaev7 ;; + "EV7.9 (21364A)") + UNAME_MACHINE=alphaev79 ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH=i386 + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH=x86_64 + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = hppa2.0w ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH=hppa2.0w + else + HP_ARCH=hppa64 + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + *:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + else + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + e2k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + k1om:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + mips64el:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-${LIBC} + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} + exit ;; + riscv32:Linux:*:* | riscv64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configure will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = x86; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = 386; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; +esac + +cat >&2 </dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..1499420 --- /dev/null +++ b/config.h.in @@ -0,0 +1,144 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* bundle directory name */ +#undef BUNDLE + +/* Enable Zero Length Packet patch */ +#undef ENABLE_ZLP + +/* Define to 1 if you have the header file. */ +#undef HAVE_ARPA_INET_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_ERRNO_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIBUSB_H + +/* Define to 1 if you have the `memcpy' function. */ +#undef HAVE_MEMCPY + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define if you have POSIX threads libraries and header files. */ +#undef HAVE_PTHREAD + +/* Have PTHREAD_PRIO_INHERIT. */ +#undef HAVE_PTHREAD_PRIO_INHERIT + +/* Define to 1 if you have the `select' function. */ +#undef HAVE_SELECT + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDARG_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDIO_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strerror' function. */ +#undef HAVE_STRERROR + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strlcat' function. */ +#undef HAVE_STRLCAT + +/* Define to 1 if you have the `strlcpy' function. */ +#undef HAVE_STRLCPY + +/* Define to 1 if you have the `strncpy' function. */ +#undef HAVE_STRNCPY + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_TERMIOS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#undef LT_OBJDIR + +/* Disable logging support */ +#undef NO_LOG + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* directory containing USB drivers */ +#undef PCSCLITE_HP_DROPDIR + +/* Define to necessary symbol if this constant uses a non-standard name on + your system. */ +#undef PTHREAD_CREATE_JOINABLE + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 if you can safely include both and . */ +#undef TIME_WITH_SYS_TIME + +/* composite device are seen as multi-slots */ +#undef USE_COMPOSITE_AS_MULTISLOT + +/* Use syslog(3) for debug */ +#undef USE_SYSLOG + +/* Version number of package */ +#undef VERSION + +/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a + `char[]'. */ +#undef YYTEXT_POINTER + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Define to `unsigned int' if does not define. */ +#undef size_t diff --git a/config.sub b/config.sub new file mode 100755 index 0000000..dd2ca93 --- /dev/null +++ b/config.sub @@ -0,0 +1,1825 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2016 Free Software Foundation, Inc. + +timestamp='2016-11-04' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches to . +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2016 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ + kopensolaris*-gnu* | cloudabi*-eabi* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | ba \ + | be32 | be64 \ + | bfin \ + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 | nios2eb | nios2el \ + | ns16k | ns32k \ + | open8 | or1k | or1knd | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pru \ + | pyramid \ + | riscv32 | riscv64 \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | ba-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | e2k-* | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | k1om-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | or1k*-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pru-* \ + | pyramid-* \ + | riscv32-* | riscv64-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | visium-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + asmjs) + basic_machine=asmjs-unknown + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + e500v[12]) + basic_machine=powerpc-unknown + os=$os"spe" + ;; + e500v[12]-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + os=$os"spe" + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i686-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* | -plan9* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* | -cloudabi* | -sortix* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ + | -onefs* | -tirtos* | -phoenix* | -fuchsia*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -ios) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/configure b/configure new file mode 100755 index 0000000..21bb336 --- /dev/null +++ b/configure @@ -0,0 +1,16470 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for ccid 1.4.29. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='ccid' +PACKAGE_TARNAME='ccid' +PACKAGE_VERSION='1.4.29' +PACKAGE_STRING='ccid 1.4.29' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +ac_unique_file="src/ifdhandler.c" +ac_default_prefix=/usr/local +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +sysconfdir_exp +bindir_exp +serialconfdir +ccidtwindir +usbdropdir +bundle +ac_aux_dir +NOCLASS +WITHOUT_PCSC_FALSE +WITHOUT_PCSC_TRUE +WITH_TWIN_SERIAL_FALSE +WITH_TWIN_SERIAL_TRUE +PTHREAD_CFLAGS +PTHREAD_LIBS +PTHREAD_CC +ax_pthread_config +SYMBOL_VISIBILITY +WITH_LIBUSB_FALSE +WITH_LIBUSB_TRUE +LIBUSB_LIBS +LIBUSB_CFLAGS +DYN_LIB_EXT +BUNDLE_HOST +LIBTOOL_DEPS +LT_SYS_LIBRARY_PATH +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +DLLTOOL +OBJDUMP +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +SED +LIBTOOL +EGREP +GREP +PCSC_LIBS +PCSC_CFLAGS +PKG_CONFIG_LIBDIR +PKG_CONFIG_PATH +PKG_CONFIG +ac_ct_AR +AR +LEXLIB +LEX_OUTPUT_ROOT +LEX +LN_S +CPP +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +runstatedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_maintainer_mode +enable_dependency_tracking +enable_static +enable_shared +with_pic +enable_fast_install +with_aix_soname +with_gnu_ld +with_sysroot +enable_libtool_lock +enable_libusb +enable_composite_as_multislot +enable_multi_thread +enable_bundle +enable_usbdropdir +enable_twinserial +enable_ccidtwindir +enable_serialconfdir +enable_pcsclite +enable_syslog +enable_class +enable_embedded +enable_zlp +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +PKG_CONFIG +PKG_CONFIG_PATH +PKG_CONFIG_LIBDIR +PCSC_CFLAGS +PCSC_LIBS +LT_SYS_LIBRARY_PATH +LIBUSB_CFLAGS +LIBUSB_LIBS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir runstatedir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures ccid 1.4.29 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/ccid] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of ccid 1.4.29:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-maintainer-mode + enable make rules and dependencies not useful (and + sometimes confusing) to the casual installer + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --enable-static[=PKGS] build static libraries [default=no] + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-libusb do not use libusb + --enable-composite-as-multislot + composite device are seen as multi-slots + --disable-multi-thread disable multi threading + --enable-bundle=NAME bundle directory name (default ifd-ccid.bundle) + --enable-usbdropdir=DIR directory containing USB drivers (default to pcscd + config or $(prefix)/pcsc/drivers) + --enable-twinserial also compile and install the serial Twin driver + --enable-ccidtwindir=DIR + directory to install the serial Twin driver (default + to pcscd config or $(prefix)/pcsc/drivers/serial) + --enable-serialconfdir=dir + directory containing serial drivers (default to + pcscd config) + --disable-pcsclite do not use pcsc-lite debug support + --enable-syslog use syslog instead of printf for debug (Yosemite) + --disable-class remove the CCIDCLASSDRIVER from Info.plist + --enable-embedded limit RAM and CPU ressources by disabling features + (log) + --enable-zlp enable the Zero Length Packet patch for some Gemalto + readers + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-aix-soname=aix|svr4|both + shared library versioning (aka "SONAME") variant to + provide on AIX, [default=aix]. + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot[=DIR] Search for dependent libraries within DIR (or the + compiler's sysroot if not specified). + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + PKG_CONFIG path to pkg-config utility + PKG_CONFIG_PATH + directories to add to pkg-config's search path + PKG_CONFIG_LIBDIR + path overriding pkg-config's built-in search path + PCSC_CFLAGS C compiler flags for PCSC, overriding pkg-config + PCSC_LIBS linker flags for PCSC, overriding pkg-config + LT_SYS_LIBRARY_PATH + User-defined run-time library search path. + LIBUSB_CFLAGS + C compiler flags for LIBUSB, overriding pkg-config + LIBUSB_LIBS linker flags for LIBUSB, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +ccid configure 1.4.29 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by ccid $as_me 1.4.29, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_aux_dir= +for ac_dir in . "$srcdir"/.; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in . \"$srcdir\"/." "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +am__api_version='1.15' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_STRIP="${ac_tool_prefix}strip" + $as_echo "$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 +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_STRIP="strip" + $as_echo "$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_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_AWK="$ac_prog" + $as_echo "$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 +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='ccid' + VERSION='1.4.29' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + + + +# silent build by default +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=0;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + + +# Default install dir + + +# Automake boilerplate. +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + +# create a config.h file (Automake will add -DHAVE_CONFIG_H) +ac_config_headers="$ac_config_headers config.h" + + +# Options + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + +# Checks for programs. +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_CC="${ac_tool_prefix}gcc" + $as_echo "$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 +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_CC="gcc" + $as_echo "$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_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_CC="${ac_tool_prefix}cc" + $as_echo "$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 +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_CC="$ac_tool_prefix$ac_prog" + $as_echo "$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 +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_CC="$ac_prog" + $as_echo "$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_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + + +for ac_prog in flex lex +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LEX"; then + ac_cv_prog_LEX="$LEX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_LEX="$ac_prog" + $as_echo "$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 +LEX=$ac_cv_prog_LEX +if test -n "$LEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5 +$as_echo "$LEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$LEX" && break +done +test -n "$LEX" || LEX=":" + +if test "x$LEX" != "x:"; then + cat >conftest.l <<_ACEOF +%% +a { ECHO; } +b { REJECT; } +c { yymore (); } +d { yyless (1); } +e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */ + yyless ((input () != 0)); } +f { unput (yytext[0]); } +. { BEGIN INITIAL; } +%% +#ifdef YYTEXT_POINTER +extern char *yytext; +#endif +int +main (void) +{ + return ! yylex () + ! yywrap (); +} +_ACEOF +{ { ac_try="$LEX conftest.l" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$LEX conftest.l") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5 +$as_echo_n "checking lex output file root... " >&6; } +if ${ac_cv_prog_lex_root+:} false; then : + $as_echo_n "(cached) " >&6 +else + +if test -f lex.yy.c; then + ac_cv_prog_lex_root=lex.yy +elif test -f lexyy.c; then + ac_cv_prog_lex_root=lexyy +else + as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5 +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5 +$as_echo "$ac_cv_prog_lex_root" >&6; } +LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root + +if test -z "${LEXLIB+set}"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5 +$as_echo_n "checking lex library... " >&6; } +if ${ac_cv_lib_lex+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ac_save_LIBS=$LIBS + ac_cv_lib_lex='none needed' + for ac_lib in '' -lfl -ll; do + LIBS="$ac_lib $ac_save_LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +`cat $LEX_OUTPUT_ROOT.c` +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_lex=$ac_lib +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + test "$ac_cv_lib_lex" != 'none needed' && break + done + LIBS=$ac_save_LIBS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5 +$as_echo "$ac_cv_lib_lex" >&6; } + test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5 +$as_echo_n "checking whether yytext is a pointer... " >&6; } +if ${ac_cv_prog_lex_yytext_pointer+:} false; then : + $as_echo_n "(cached) " >&6 +else + # POSIX says lex can declare yytext either as a pointer or an array; the +# default is implementation-dependent. Figure out which it is, since +# not all implementations provide the %pointer and %array declarations. +ac_cv_prog_lex_yytext_pointer=no +ac_save_LIBS=$LIBS +LIBS="$LEXLIB $ac_save_LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #define YYTEXT_POINTER 1 +`cat $LEX_OUTPUT_ROOT.c` +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_prog_lex_yytext_pointer=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_save_LIBS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5 +$as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; } +if test $ac_cv_prog_lex_yytext_pointer = yes; then + +$as_echo "#define YYTEXT_POINTER 1" >>confdefs.h + +fi +rm -f conftest.l $LEX_OUTPUT_ROOT.c + +fi +if test "$LEX" = :; then + LEX=${am_missing_run}flex +fi +if test -n "$ac_tool_prefix"; then + for ac_prog in ar lib "link -lib" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_AR="$ac_tool_prefix$ac_prog" + $as_echo "$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 +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar lib "link -lib" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_AR="$ac_prog" + $as_echo "$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_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 +$as_echo_n "checking the archiver ($AR) interface... " >&6; } +if ${am_cv_ar_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + am_cv_ar_interface=ar + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int some_variable = 0; +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 + (eval $am_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + am_cv_ar_interface=ar + else + am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 + (eval $am_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + am_cv_ar_interface=lib + else + am_cv_ar_interface=unknown + fi + fi + rm -f conftest.lib libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 +$as_echo "$am_cv_ar_interface" >&6; } + +case $am_cv_ar_interface in +ar) + ;; +lib) + # Microsoft lib, so override with the ar-lib wrapper script. + # FIXME: It is wrong to rewrite AR. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__AR in this case, + # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something + # similar. + AR="$am_aux_dir/ar-lib $AR" + ;; +unknown) + as_fn_error $? "could not determine $AR interface" "$LINENO" 5 + ;; +esac + + + + + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi +fi + +# check pcsc-lite version +PCSC_NEEDED_VERSION="1.8.3" +if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpcsclite\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libpcsclite") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PCSC" >&5 +$as_echo_n "checking for PCSC... " >&6; } + +if test -n "$PCSC_CFLAGS"; then + pkg_cv_PCSC_CFLAGS="$PCSC_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpcsclite >= \$PCSC_NEEDED_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libpcsclite >= $PCSC_NEEDED_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PCSC_CFLAGS=`$PKG_CONFIG --cflags "libpcsclite >= $PCSC_NEEDED_VERSION" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$PCSC_LIBS"; then + pkg_cv_PCSC_LIBS="$PCSC_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpcsclite >= \$PCSC_NEEDED_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libpcsclite >= $PCSC_NEEDED_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_PCSC_LIBS=`$PKG_CONFIG --libs "libpcsclite >= $PCSC_NEEDED_VERSION" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + PCSC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libpcsclite >= $PCSC_NEEDED_VERSION" 2>&1` + else + PCSC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libpcsclite >= $PCSC_NEEDED_VERSION" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$PCSC_PKG_ERRORS" >&5 + + + if test -f /usr/local/lib/pkgconfig/libpcsclite.pc -a "x$PKG_CONFIG" != x ; then + as_fn_error $? "use PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: install pcsc-lite $PCSC_NEEDED_VERSION or later" >&5 +$as_echo "$as_me: WARNING: install pcsc-lite $PCSC_NEEDED_VERSION or later" >&2;} + fi + +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + if test -f /usr/local/lib/pkgconfig/libpcsclite.pc -a "x$PKG_CONFIG" != x ; then + as_fn_error $? "use PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: install pcsc-lite $PCSC_NEEDED_VERSION or later" >&5 +$as_echo "$as_me: WARNING: install pcsc-lite $PCSC_NEEDED_VERSION or later" >&2;} + fi + +else + PCSC_CFLAGS=$pkg_cv_PCSC_CFLAGS + PCSC_LIBS=$pkg_cv_PCSC_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libpcsclite not found by pkg-config" >&5 +$as_echo "$as_me: WARNING: libpcsclite not found by pkg-config" >&2;} + +fi + +saved_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $PCSC_CFLAGS" +PCSC_ERROR_MSG="install pcsc-lite $PCSC_NEEDED_VERSION or later, or use ./configure PCSC_CFLAGS=..." + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +ac_fn_c_check_header_mongrel "$LINENO" "ifdhandler.h" "ac_cv_header_ifdhandler_h" "$ac_includes_default" +if test "x$ac_cv_header_ifdhandler_h" = xyes; then : + +else + as_fn_error $? "$PCSC_ERROR_MSG" "$LINENO" 5 +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "reader.h" "ac_cv_header_reader_h" "$ac_includes_default" +if test "x$ac_cv_header_reader_h" = xyes; then : + +else + as_fn_error $? "$PCSC_ERROR_MSG" "$LINENO" 5 +fi + + +CPPFLAGS="$saved_CPPFLAGS" + +# Add libtool support. +# Static lib is disabled by default. Use --enable-static if needed +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.6' +macro_revision='2.4.6' + + + + + + + + + + + + + +ltmain=$ac_aux_dir/ltmain.sh + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case $ECHO in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + 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 + *$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 + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$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 +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_DUMPBIN="$ac_prog" + $as_echo "$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_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | 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` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + 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/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n "$lt_cv_sys_max_cmd_len"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$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 +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_OBJDUMP="objdump" + $as_echo "$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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +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_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + 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_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + 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' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +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_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$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 +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_DLLTOOL="dlltool" + $as_echo "$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_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_AR="$ac_tool_prefix$ac_prog" + $as_echo "$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 +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_AR="$ac_prog" + $as_echo "$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_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_STRIP="${ac_tool_prefix}strip" + $as_echo "$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 +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_STRIP="strip" + $as_echo "$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_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$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 +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_RANLIB="ranlib" + $as_echo "$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_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +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'" + # 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'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +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_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_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_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + 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++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" 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'" + fi + 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 + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +$as_echo "$with_sysroot" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +$as_echo_n "checking for a working dd... " >&6; } +if ${ac_cv_path_lt_DD+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +if test -z "$lt_DD"; then + ac_path_lt_DD_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in dd; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_lt_DD" || continue +if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi + $ac_path_lt_DD_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_lt_DD"; then + : + fi +else + ac_cv_path_lt_DD=$lt_DD +fi + +rm -f conftest.i conftest2.i conftest.out +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +$as_echo "$ac_cv_path_lt_DD" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +$as_echo_n "checking how to truncate binary pipes... " >&6; } +if ${lt_cv_truncate_bin+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +$as_echo "$lt_cv_truncate_bin" >&6; } + + + + + + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$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 + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file 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 + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$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 +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_MANIFEST_TOOL="mt" + $as_echo "$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_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$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 +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_DSYMUTIL="dsymutil" + $as_echo "$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_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$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 +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_NMEDIT="nmedit" + $as_echo "$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_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_LIPO="${ac_tool_prefix}lipo" + $as_echo "$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 +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_LIPO="lipo" + $as_echo "$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_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_OTOOL="${ac_tool_prefix}otool" + $as_echo "$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 +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_OTOOL="otool" + $as_echo "$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_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$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 +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_OTOOL64="otool64" + $as_echo "$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_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +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 cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _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[91]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[012][,.]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + + +# Set options +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_static=no +fi + + + + + + + + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + pic_mode=default +fi + + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[5-9]*,yes) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } + +# Check whether --with-aix-soname was given. +if test "${with_aix_soname+set}" = set; then : + withval=$with_aix_soname; case $withval in + aix|svr4|both) + ;; + *) + as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname +else + if ${lt_cv_with_aix_soname+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_with_aix_soname=aix +fi + + with_aix_soname=$lt_cv_with_aix_soname +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +$as_echo "$with_aix_soname" >&6; } + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/${ac_tool_prefix}file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC=$CC +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test yes = "$GCC"; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + lt_prog_compiler_pic='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + 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' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_pic_works"; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_static_works"; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test no = "$hard_links"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + export_dynamic_flag_spec='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + 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 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='$wl--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + 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 + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 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' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + ;; + esac + 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 + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$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~ + 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*) + export_dynamic_flag_spec='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + 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~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test no = "$ld_shlibs"; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + 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' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct=no + hardcode_direct_absolute=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + export_dynamic_flag_spec='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' $wl-bernotok' + allow_undefined_flag=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + 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" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test yes = "$GCC"; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test yes = "$lt_cv_prog_compiler__b"; then + archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test yes = "$lt_cv_irix_exported_symbol"; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + link_all_deplibs=no + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + ld_shlibs=yes + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + else + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + 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 + ;; + + osf3*) + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='$wl-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='$wl-z,text' + allow_undefined_flag='$wl-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='$wl-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test no = "$ld_shlibs" && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([A-Za-z]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + + + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + 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' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + 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' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + 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|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test yes = "$hardcode_automatic"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && + test no != "$hardcode_minus_L"; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test relink = "$hardcode_action" || + test yes = "$inherit_rpath"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen=shl_load +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen=dlopen +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "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" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "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 + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report what library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC=$lt_save_CC + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + + +# Automatically update the libtool script if it becomes out-of-date. + + +# Checks for header files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +for ac_header in errno.h fcntl.h stdlib.h unistd.h termios.h string.h sys/time.h sys/types.h stdarg.h arpa/inet.h stdio.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +else + as_fn_error $? "some header files not found" "$LINENO" 5 +fi + +done + + +# Checks for typedefs, structures, and compiler characteristics. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if ${ac_cv_c_const+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + +#ifndef __cplusplus + /* Ultrix mips cc rejects this sort of thing. */ + typedef int charset[2]; + const charset cs = { 0, 0 }; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this sort of thing. */ + char tx; + char *t = &tx; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; } bx; + struct s *b = &bx; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_const=yes +else + ac_cv_c_const=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +$as_echo "#define const /**/" >>confdefs.h + +fi + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 +$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } +if ${ac_cv_header_time+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include + +int +main () +{ +if ((struct tm *) 0) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_time=yes +else + ac_cv_header_time=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 +$as_echo "$ac_cv_header_time" >&6; } +if test $ac_cv_header_time = yes; then + +$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h + +fi + + +# Checks for library functions. +for ac_func in select strerror strncpy memcpy strlcpy strlcat +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +# Select OS specific versions of source files. + + +BUNDLE_HOST=`uname | sed -e s,/,_,` +DYN_LIB_EXT="so" +case "$BUNDLE_HOST" in +Darwin) + BUNDLE_HOST=MacOS + DYN_LIB_EXT="dylib" + ;; +SunOS) + BUNDLE_HOST=Solaris + ;; + esac + +# --disable-libusb +# Check whether --enable-libusb was given. +if test "${enable_libusb+set}" = set; then : + enableval=$enable_libusb; use_libusb="${enableval}" +else + use_libusb=yes +fi + + +# check if libusb is used +LIBUSB_NEEDED_VERSION="1.0.9" +if test "x$use_libusb" != xno ; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libusb-1.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libusb-1.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBUSB" >&5 +$as_echo_n "checking for LIBUSB... " >&6; } + +if test -n "$LIBUSB_CFLAGS"; then + pkg_cv_LIBUSB_CFLAGS="$LIBUSB_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libusb-1.0 >= \$LIBUSB_NEEDED_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libusb-1.0 >= $LIBUSB_NEEDED_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBUSB_CFLAGS=`$PKG_CONFIG --cflags "libusb-1.0 >= $LIBUSB_NEEDED_VERSION" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LIBUSB_LIBS"; then + pkg_cv_LIBUSB_LIBS="$LIBUSB_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libusb-1.0 >= \$LIBUSB_NEEDED_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libusb-1.0 >= $LIBUSB_NEEDED_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBUSB_LIBS=`$PKG_CONFIG --libs "libusb-1.0 >= $LIBUSB_NEEDED_VERSION" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBUSB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libusb-1.0 >= $LIBUSB_NEEDED_VERSION" 2>&1` + else + LIBUSB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libusb-1.0 >= $LIBUSB_NEEDED_VERSION" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBUSB_PKG_ERRORS" >&5 + + + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: install libusb $LIBUSB_NEEDED_VERSION or later" >&5 +$as_echo "$as_me: WARNING: install libusb $LIBUSB_NEEDED_VERSION or later" >&2;} + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBUSB" >&5 +$as_echo_n "checking for LIBUSB... " >&6; } + +if test -n "$LIBUSB_CFLAGS"; then + pkg_cv_LIBUSB_CFLAGS="$LIBUSB_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libusb-1.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libusb-1.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBUSB_CFLAGS=`$PKG_CONFIG --cflags "libusb-1.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LIBUSB_LIBS"; then + pkg_cv_LIBUSB_LIBS="$LIBUSB_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libusb-1.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libusb-1.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBUSB_LIBS=`$PKG_CONFIG --libs "libusb-1.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBUSB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libusb-1.0" 2>&1` + else + LIBUSB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libusb-1.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBUSB_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (libusb-1.0) were not met: + +$LIBUSB_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables LIBUSB_CFLAGS +and LIBUSB_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables LIBUSB_CFLAGS +and LIBUSB_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } +else + LIBUSB_CFLAGS=$pkg_cv_LIBUSB_CFLAGS + LIBUSB_LIBS=$pkg_cv_LIBUSB_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: install libusb $LIBUSB_NEEDED_VERSION or later" >&5 +$as_echo "$as_me: WARNING: install libusb $LIBUSB_NEEDED_VERSION or later" >&2;} + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBUSB" >&5 +$as_echo_n "checking for LIBUSB... " >&6; } + +if test -n "$LIBUSB_CFLAGS"; then + pkg_cv_LIBUSB_CFLAGS="$LIBUSB_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libusb-1.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libusb-1.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBUSB_CFLAGS=`$PKG_CONFIG --cflags "libusb-1.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LIBUSB_LIBS"; then + pkg_cv_LIBUSB_LIBS="$LIBUSB_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libusb-1.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libusb-1.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBUSB_LIBS=`$PKG_CONFIG --libs "libusb-1.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBUSB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libusb-1.0" 2>&1` + else + LIBUSB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libusb-1.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBUSB_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (libusb-1.0) were not met: + +$LIBUSB_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables LIBUSB_CFLAGS +and LIBUSB_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables LIBUSB_CFLAGS +and LIBUSB_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } +else + LIBUSB_CFLAGS=$pkg_cv_LIBUSB_CFLAGS + LIBUSB_LIBS=$pkg_cv_LIBUSB_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + +else + LIBUSB_CFLAGS=$pkg_cv_LIBUSB_CFLAGS + LIBUSB_LIBS=$pkg_cv_LIBUSB_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi + +fi + + saved_CPPFLAGS="$CPPFLAGS" + saved_LIBS="$LIBS" + + CPPFLAGS="$CPPFLAGS $LIBUSB_CFLAGS" + LIBS="$LDFLAGS $LIBUSB_LIBS" + + for ac_header in libusb.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "libusb.h" "ac_cv_header_libusb_h" "$ac_includes_default" +if test "x$ac_cv_header_libusb_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBUSB_H 1 +_ACEOF + +else + as_fn_error $? "libusb.h not found, install libusb or use ./configure LIBUSB_CFLAGS=..." "$LINENO" 5 +fi + +done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libusb_init" >&5 +$as_echo_n "checking for libusb_init... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char libusb_init (); +int +main () +{ +return libusb_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + as_fn_error $? "libusb not found, use ./configure LIBUSB_LIBS=..." "$LINENO" 5 +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + CPPFLAGS="$saved_CPPFLAGS" + LIBS="$saved_LIBS" + + use_libusb=yes +fi + + + if test "${use_libusb}" != "no"; then + WITH_LIBUSB_TRUE= + WITH_LIBUSB_FALSE='#' +else + WITH_LIBUSB_TRUE='#' + WITH_LIBUSB_FALSE= +fi + + +# --enable-composite-as-multislot +use_composite_as_multislot=no +# Check whether --enable-composite-as-multislot was given. +if test "${enable_composite_as_multislot+set}" = set; then : + enableval=$enable_composite_as_multislot; use_composite_as_multislot="${enableval}" +fi + + +if test "x$use_composite_as_multislot" = xyes; then + +$as_echo "#define USE_COMPOSITE_AS_MULTISLOT 1" >>confdefs.h + +fi + +# check if the compiler support -fvisibility=hidden (GCC >= 4) +saved_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -fvisibility=hidden" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fvisibility=hidden" >&5 +$as_echo_n "checking for -fvisibility=hidden... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +char foo; +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SYMBOL_VISIBILITY="-fvisibility=hidden" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CFLAGS="$saved_CFLAGS" + + +# --disable-multi-thread +# Check whether --enable-multi-thread was given. +if test "${enable_multi_thread+set}" = set; then : + enableval=$enable_multi_thread; multithread="${enableval}" +else + multithread=yes +fi + + +if test "${multithread}" != no ; then + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ax_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on True64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 +$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_join (); +int +main () +{ +return pthread_join (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ax_pthread_ok=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 +$as_echo "$ax_pthread_ok" >&6; } + if test x"$ax_pthread_ok" = xno; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. + +ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) +# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) +# -pthreads: Solaris/gcc +# -mthreads: Mingw32/gcc, Lynx/gcc +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads too; +# also defines -D_REENTRANT) +# ... -mt is also the pthreads flag for HP/aCC +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case ${host_os} in + solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (We need to link with -pthreads/-mt/ + # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather + # a function called by this macro, so we could check for that, but + # who knows whether they'll stub that too in a future libc.) So, + # we'll just look for -pthreads and -lpthread first: + + ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" + ;; + + darwin*) + ax_pthread_flags="-pthread $ax_pthread_flags" + ;; +esac + +if test x"$ax_pthread_ok" = xno; then +for flag in $ax_pthread_flags; do + + case $flag in + none) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 +$as_echo_n "checking whether pthreads work without any flags... " >&6; } + ;; + + -*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 +$as_echo_n "checking whether pthreads work with $flag... " >&6; } + PTHREAD_CFLAGS="$flag" + ;; + + pthread-config) + # Extract the first word of "pthread-config", so it can be a program name with args. +set dummy pthread-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ax_pthread_config+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ax_pthread_config"; then + ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_ax_pthread_config="yes" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no" +fi +fi +ax_pthread_config=$ac_cv_prog_ax_pthread_config +if test -n "$ax_pthread_config"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 +$as_echo "$ax_pthread_config" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test x"$ax_pthread_config" = xno; then continue; fi + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 +$as_echo_n "checking for the pthreads library -l$flag... " >&6; } + PTHREAD_LIBS="-l$flag" + ;; + esac + + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + static void routine(void *a) { a = 0; } + static void *start_routine(void *a) { return a; } +int +main () +{ +pthread_t th; pthread_attr_t attr; + pthread_create(&th, 0, start_routine, 0); + pthread_join(th, 0); + pthread_attr_init(&attr); + pthread_cleanup_push(routine, 0); + pthread_cleanup_pop(0) /* ; */ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ax_pthread_ok=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 +$as_echo "$ax_pthread_ok" >&6; } + if test "x$ax_pthread_ok" = xyes; then + break; + fi + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$ax_pthread_ok" = xyes; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 +$as_echo_n "checking for joinable pthread attribute... " >&6; } + attr_name=unknown + for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +int attr = $attr; return attr /* ; */ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + attr_name=$attr; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 +$as_echo "$attr_name" >&6; } + if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then + +cat >>confdefs.h <<_ACEOF +#define PTHREAD_CREATE_JOINABLE $attr_name +_ACEOF + + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 +$as_echo_n "checking if more special flags are required for pthreads... " >&6; } + flag=no + case ${host_os} in + aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; + osf* | hpux*) flag="-D_REENTRANT";; + solaris*) + if test "$GCC" = "yes"; then + flag="-D_REENTRANT" + else + flag="-mt -D_REENTRANT" + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5 +$as_echo "${flag}" >&6; } + if test "x$flag" != xno; then + PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 +$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; } +if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include +int +main () +{ +int i = PTHREAD_PRIO_INHERIT; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ax_cv_PTHREAD_PRIO_INHERIT=yes +else + ax_cv_PTHREAD_PRIO_INHERIT=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 +$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } + if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"; then : + +$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h + +fi + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + # More AIX lossage: must compile with xlc_r or cc_r + if test x"$GCC" != xyes; then + for ac_prog in xlc_r cc_r +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_PTHREAD_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PTHREAD_CC"; then + ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + 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_PTHREAD_CC="$ac_prog" + $as_echo "$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 +PTHREAD_CC=$ac_cv_prog_PTHREAD_CC +if test -n "$PTHREAD_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 +$as_echo "$PTHREAD_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PTHREAD_CC" && break +done +test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}" + + else + PTHREAD_CC=$CC + fi +else + PTHREAD_CC="$CC" +fi + + + + + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$ax_pthread_ok" = xyes; then + +$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h + + + : +else + ax_pthread_ok=no + as_fn_error $? "POSIX thread support required" "$LINENO" 5 +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + multithread=yes +fi + +# --enable-bundle=NAME +# Check whether --enable-bundle was given. +if test "${enable_bundle+set}" = set; then : + enableval=$enable_bundle; bundle="${enableval}" +else + bundle=false +fi + +if test "${bundle}" = false ; then + bundle="ifd-ccid.bundle" +fi + +cat >>confdefs.h <<_ACEOF +#define BUNDLE "$bundle" +_ACEOF + + +# --enable-usbdropdir=DIR +# Check whether --enable-usbdropdir was given. +if test "${enable_usbdropdir+set}" = set; then : + enableval=$enable_usbdropdir; usbdropdir="${enableval}" +else + usbdropdir=false +fi + +if test "${usbdropdir}" = false ; then + usbdropdir=`$PKG_CONFIG libpcsclite --variable=usbdropdir` +fi + +cat >>confdefs.h <<_ACEOF +#define PCSCLITE_HP_DROPDIR "$usbdropdir" +_ACEOF + +if test "${usbdropdir}" = "" ; then + as_fn_error $? "use --enable-usbdropdir=DIR" "$LINENO" 5 +fi + +# --enable-twinserial +# Check whether --enable-twinserial was given. +if test "${enable_twinserial+set}" = set; then : + enableval=$enable_twinserial; twinserial="${enableval}" +else + twinserial=no +fi + + if test "${twinserial}" != "no"; then + WITH_TWIN_SERIAL_TRUE= + WITH_TWIN_SERIAL_FALSE='#' +else + WITH_TWIN_SERIAL_TRUE='#' + WITH_TWIN_SERIAL_FALSE= +fi + + +# --enable-ccidtwindir=DIR +# Check whether --enable-ccidtwindir was given. +if test "${enable_ccidtwindir+set}" = set; then : + enableval=$enable_ccidtwindir; ccidtwindir="${enableval}" +else + ccidtwindir=false +fi + +if test "${ccidtwindir}" = false ; then + ccidtwindir=$usbdropdir/serial +fi + +# --enable-serialconfdir=DIR +# Check whether --enable-serialconfdir was given. +if test "${enable_serialconfdir+set}" = set; then : + enableval=$enable_serialconfdir; serialconfdir="${enableval}" +else + serialconfdir=false +fi + +if test "${serialconfdir}" = false ; then + serialconfdir=`$PKG_CONFIG libpcsclite --variable=serialconfdir` +fi + +# --disable-pcsclite +# Check whether --enable-pcsclite was given. +if test "${enable_pcsclite+set}" = set; then : + enableval=$enable_pcsclite; pcsclite="${enableval}" +else + pcsclite=yes +fi + + +if test "${pcsclite}" != no ; then + # check that pcsc-lite is installed + OLD_LIBS="$LIBS" + OLD_CFLAGS="$CFLAGS" + LIBS="$LIBS $PCSC_LIBS" + CFLAGS="$CFLAGS $PCSC_CFLAGS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SCardEstablishContext" >&5 +$as_echo_n "checking for SCardEstablishContext... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char SCardEstablishContext (); +int +main () +{ +return SCardEstablishContext (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + as_fn_error $? "SCardEstablishContext() not found, install pcsc-lite, or use PCSC_LIBS=... ./configure" "$LINENO" 5 +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$OLD_LIBS" + CFLAGS="$OLD_CFLAGS" + + pcsclite=yes +fi + if test "${pcsclite}" != "yes"; then + WITHOUT_PCSC_TRUE= + WITHOUT_PCSC_FALSE='#' +else + WITHOUT_PCSC_TRUE='#' + WITHOUT_PCSC_FALSE= +fi + + + + +# --enable-syslog +# Check whether --enable-syslog was given. +if test "${enable_syslog+set}" = set; then : + enableval=$enable_syslog; use_syslog="${enableval}" +else + use_syslog=no +fi + + +if test x$use_syslog = xyes; then + +$as_echo "#define USE_SYSLOG 1" >>confdefs.h + +fi + + +# --disable-class +# Check whether --enable-class was given. +if test "${enable_class+set}" = set; then : + enableval=$enable_class; class="${enableval}" +else + class=yes +fi + +if test "${class}" != yes ; then + NOCLASS="--no-class" +fi + + +# --enable-embedded +# Check whether --enable-embedded was given. +if test "${enable_embedded+set}" = set; then : + enableval=$enable_embedded; use_embedded="${enableval}" +fi + + +if test x$use_embedded = xyes; then + +$as_echo "#define NO_LOG 1" >>confdefs.h + +fi + +# --enable-zlp +# Check whether --enable-zlp was given. +if test "${enable_zlp+set}" = set; then : + enableval=$enable_zlp; use_zlp="${enableval}" +fi + + +if test x$use_zlp = xyes; then + +$as_echo "#define ENABLE_ZLP 1" >>confdefs.h + +fi + +# Setup dist stuff + + + + + + + EXP_VAR=bindir_exp + FROM_VAR=$bindir + + prefix_save=$prefix + exec_prefix_save=$exec_prefix + + if test "x$prefix" = "xNONE"; then + prefix="$ac_default_prefix" + fi + if test "x$exec_prefix" = "xNONE"; then + exec_prefix=$prefix + fi + + full_var="$FROM_VAR" + while true; do + new_full_var="`eval echo $full_var`" + if test "x$new_full_var" = "x$full_var"; then break; fi + full_var=$new_full_var + done + + full_var=$new_full_var + bindir_exp="$full_var" + + + prefix=$prefix_save + exec_prefix=$exec_prefix_save + + + EXP_VAR=sysconfdir_exp + FROM_VAR=$sysconfdir + + prefix_save=$prefix + exec_prefix_save=$exec_prefix + + if test "x$prefix" = "xNONE"; then + prefix="$ac_default_prefix" + fi + if test "x$exec_prefix" = "xNONE"; then + exec_prefix=$prefix + fi + + full_var="$FROM_VAR" + while true; do + new_full_var="`eval echo $full_var`" + if test "x$new_full_var" = "x$full_var"; then break; fi + full_var=$new_full_var + done + + full_var=$new_full_var + sysconfdir_exp="$full_var" + + + prefix=$prefix_save + exec_prefix=$exec_prefix_save + + +cat << EOF + +libccid has been configured with following options: + +Version: ${PACKAGE_VERSION} +User binaries: $(eval eval eval echo "${bindir_exp}") +Configuration files: $(eval eval eval echo "${sysconfdir_exp}") + + +Host: ${host} +Compiler: ${CC} +Preprocessor flags: ${CPPFLAGS} +Compiler flags: ${CFLAGS} +Preprocessor flags: ${CPPFLAGS} +Linker flags: ${LDFLAGS} +Libraries: ${LIBS} + +PCSC_CFLAGS: ${PCSC_CFLAGS} +PCSC_LIBS: ${PCSC_LIBS} +PTHREAD_CFLAGS: ${PTHREAD_CFLAGS} +PTHREAD_LIBS: ${PTHREAD_LIBS} +BUNDLE_HOST: ${BUNDLE_HOST} +DYN_LIB_EXT: ${DYN_LIB_EXT} +LIBUSB_CFLAGS: ${LIBUSB_CFLAGS} +LIBUSB_LIBS: ${LIBUSB_LIBS} +SYMBOL_VISIBILITY: ${SYMBOL_VISIBILITY} +NOCLASS: ${NOCLASS} + +libusb support: ${use_libusb} +composite as multislot: ${use_composite_as_multislot} +multi threading: ${multithread} +bundle directory name: ${bundle} +USB drop directory: ${usbdropdir} +serial Twin support: ${twinserial} +serial twin install dir: ${ccidtwindir} +serial config directory: ${serialconfdir} +compiled for pcsc-lite: ${pcsclite} +syslog debug: ${use_syslog} +class driver: ${class} + +EOF + +# Write Makefiles. +ac_config_files="$ac_config_files Makefile src/Makefile readers/Makefile contrib/Makefile contrib/Kobil_mIDentity_switch/Makefile contrib/RSA_SecurID/Makefile examples/Makefile" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${WITH_LIBUSB_TRUE}" && test -z "${WITH_LIBUSB_FALSE}"; then + as_fn_error $? "conditional \"WITH_LIBUSB\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${WITH_TWIN_SERIAL_TRUE}" && test -z "${WITH_TWIN_SERIAL_FALSE}"; then + as_fn_error $? "conditional \"WITH_TWIN_SERIAL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${WITHOUT_PCSC_TRUE}" && test -z "${WITHOUT_PCSC_FALSE}"; then + as_fn_error $? "conditional \"WITHOUT_PCSC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by ccid $as_me 1.4.29, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +ccid config.status 1.4.29 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +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"`' +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"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +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"`' +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"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' +configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_import \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +lt_cv_nm_interface \ +nm_file_list_spec \ +lt_cv_truncate_bin \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +configure_time_dlsearch_path \ +configure_time_lt_sys_library_path; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' + +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile' + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "readers/Makefile") CONFIG_FILES="$CONFIG_FILES readers/Makefile" ;; + "contrib/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/Makefile" ;; + "contrib/Kobil_mIDentity_switch/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/Kobil_mIDentity_switch/Makefile" ;; + "contrib/RSA_SecurID/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/RSA_SecurID/Makefile" ;; + "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# The names of the tagged configurations supported by this script. +available_tags='' + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shared archive member basename,for filename based shared library versioning on AIX. +shared_archive_member_spec=$shared_archive_member_spec + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +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 + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm into a list of symbols to manually relocate. +global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name lister interface. +nm_interface=$lt_lt_cv_nm_interface + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and where our libraries should be installed. +lt_sysroot=$lt_sysroot + +# Command to truncate a binary pipe. +lt_truncate_bin=$lt_lt_cv_truncate_bin + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain=$ac_aux_dir/ltmain.sh + + + # We use sed instead of cat because bash on DJGPP gets confused if + # 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" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..695e1fd --- /dev/null +++ b/configure.ac @@ -0,0 +1,338 @@ +# Process this file with autoconf to produce a configure script. +# You may need to use autoconf 2.56 or newer + +# Require autoconf 2.61 +AC_PREREQ([2.69]) + +AC_INIT([ccid],[1.4.29]) +AC_CONFIG_SRCDIR(src/ifdhandler.c) +AC_CONFIG_AUX_DIR([.]) +AM_INIT_AUTOMAKE(1.8 dist-bzip2 no-dist-gzip subdir-objects) +AC_CONFIG_MACRO_DIR([m4]) + +# silent build by default +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) + +# Default install dir +AC_PREFIX_DEFAULT(/usr/local) + +# Automake boilerplate. +AC_CANONICAL_HOST + +# create a config.h file (Automake will add -DHAVE_CONFIG_H) +AC_CONFIG_HEADERS([config.h]) + +# Options +AM_MAINTAINER_MODE + +# Checks for programs. +AC_PROG_CC +AM_PROG_CC_C_O +AC_PROG_CPP +AC_PROG_INSTALL +AC_PROG_MAKE_SET +AC_PROG_LN_S +AM_PROG_LEX +AM_PROG_AR +PKG_PROG_PKG_CONFIG + +# check pcsc-lite version +PCSC_NEEDED_VERSION="1.8.3" +PKG_CHECK_EXISTS([libpcsclite], + [PKG_CHECK_MODULES(PCSC, libpcsclite >= $PCSC_NEEDED_VERSION, [], + [ + if test -f /usr/local/lib/pkgconfig/libpcsclite.pc -a "x$PKG_CONFIG" != x ; then + AC_MSG_ERROR([use PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure]) + else + AC_MSG_WARN([install pcsc-lite $PCSC_NEEDED_VERSION or later]) + fi + ])], + [AC_MSG_WARN([libpcsclite not found by pkg-config])] +) + +saved_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $PCSC_CFLAGS" +PCSC_ERROR_MSG="install pcsc-lite $PCSC_NEEDED_VERSION or later, or use ./configure PCSC_CFLAGS=..." +AC_CHECK_HEADER(ifdhandler.h,, [AC_MSG_ERROR([$PCSC_ERROR_MSG])]) +AC_CHECK_HEADER(reader.h,, [AC_MSG_ERROR([$PCSC_ERROR_MSG])]) +CPPFLAGS="$saved_CPPFLAGS" + +# Add libtool support. +# Static lib is disabled by default. Use --enable-static if needed +LT_INIT(disable-static) +LT_INIT + +# Automatically update the libtool script if it becomes out-of-date. +AC_SUBST(LIBTOOL_DEPS) + +# Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS(errno.h fcntl.h stdlib.h unistd.h termios.h string.h sys/time.h sys/types.h stdarg.h arpa/inet.h stdio.h,, + [AC_MSG_ERROR([some header files not found])]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_TYPE_SIZE_T +AC_HEADER_TIME + +# Checks for library functions. +AC_CHECK_FUNCS(select strerror strncpy memcpy strlcpy strlcat) + +# Select OS specific versions of source files. +AC_SUBST(BUNDLE_HOST) +AC_SUBST(DYN_LIB_EXT) +BUNDLE_HOST=`uname | sed -e s,/,_,` +DYN_LIB_EXT="so" +case "$BUNDLE_HOST" in +Darwin) + BUNDLE_HOST=MacOS + DYN_LIB_EXT="dylib" + ;; +SunOS) + BUNDLE_HOST=Solaris + ;; + esac + +# --disable-libusb +AC_ARG_ENABLE(libusb, + AS_HELP_STRING([--disable-libusb],[do not use libusb]), + [ use_libusb="${enableval}" ], [ use_libusb=yes ] ) + +# check if libusb is used +LIBUSB_NEEDED_VERSION="1.0.9" +if test "x$use_libusb" != xno ; then + PKG_CHECK_EXISTS([libusb-1.0], [ + PKG_CHECK_MODULES(LIBUSB, libusb-1.0 >= $LIBUSB_NEEDED_VERSION, [], + [ + AC_MSG_WARN([install libusb $LIBUSB_NEEDED_VERSION or later]) + PKG_CHECK_MODULES(LIBUSB, libusb-1.0) + ]) + ]) + + saved_CPPFLAGS="$CPPFLAGS" + saved_LIBS="$LIBS" + + CPPFLAGS="$CPPFLAGS $LIBUSB_CFLAGS" + LIBS="$LDFLAGS $LIBUSB_LIBS" + + AC_CHECK_HEADERS(libusb.h, [], + [ AC_MSG_ERROR([libusb.h not found, install libusb or use ./configure LIBUSB_CFLAGS=...]) ]) + + AC_MSG_CHECKING([for libusb_init]) + AC_TRY_LINK_FUNC(libusb_init, [ AC_MSG_RESULT([yes]) ], + [ AC_MSG_ERROR([libusb not found, use ./configure LIBUSB_LIBS=...]) ]) + + CPPFLAGS="$saved_CPPFLAGS" + LIBS="$saved_LIBS" + + use_libusb=yes +fi +AC_SUBST(LIBUSB_CFLAGS) +AC_SUBST(LIBUSB_LIBS) +AM_CONDITIONAL(WITH_LIBUSB, test "${use_libusb}" != "no") + +# --enable-composite-as-multislot +use_composite_as_multislot=no +AC_ARG_ENABLE(composite-as-multislot, + AS_HELP_STRING([--enable-composite-as-multislot],[composite device are seen as multi-slots]), + [ use_composite_as_multislot="${enableval}" ] ) + +if test "x$use_composite_as_multislot" = xyes; then + AC_DEFINE(USE_COMPOSITE_AS_MULTISLOT, 1, [composite device are seen as multi-slots]) +fi + +# check if the compiler support -fvisibility=hidden (GCC >= 4) +saved_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -fvisibility=hidden" +AC_MSG_CHECKING([for -fvisibility=hidden]) +AC_COMPILE_IFELSE([AC_LANG_SOURCE([char foo;])], + [ AC_MSG_RESULT([yes]) + SYMBOL_VISIBILITY="-fvisibility=hidden" ], + AC_MSG_RESULT([no])) +CFLAGS="$saved_CFLAGS" +AC_SUBST(SYMBOL_VISIBILITY) + +# --disable-multi-thread +AC_ARG_ENABLE(multi-thread, + AS_HELP_STRING([--disable-multi-thread],[disable multi threading]), + [ multithread="${enableval}" ], [ multithread=yes ] ) + +if test "${multithread}" != no ; then + AX_PTHREAD( + [ AC_DEFINE(HAVE_PTHREAD, 1, + [Define if you have POSIX threads libraries and header files.]) + ], [ AC_MSG_ERROR([POSIX thread support required]) ]) + + multithread=yes +fi + +# --enable-bundle=NAME +AC_ARG_ENABLE(bundle, + AS_HELP_STRING([--enable-bundle=NAME],[bundle directory name + (default ifd-ccid.bundle)]), + [bundle="${enableval}"], [bundle=false]) +if test "${bundle}" = false ; then + bundle="ifd-ccid.bundle" +fi +AC_DEFINE_UNQUOTED(BUNDLE, "$bundle", [bundle directory name]) + +# --enable-usbdropdir=DIR +AC_ARG_ENABLE(usbdropdir, + AS_HELP_STRING([--enable-usbdropdir=DIR],[directory containing USB + drivers (default to pcscd config or $(prefix)/pcsc/drivers)]), + [usbdropdir="${enableval}"], [usbdropdir=false]) +if test "${usbdropdir}" = false ; then + usbdropdir=`$PKG_CONFIG libpcsclite --variable=usbdropdir` +fi +AC_DEFINE_UNQUOTED(PCSCLITE_HP_DROPDIR, "$usbdropdir", [directory containing USB drivers]) +if test "${usbdropdir}" = "" ; then + AC_MSG_ERROR([use --enable-usbdropdir=DIR]) +fi + +# --enable-twinserial +AC_ARG_ENABLE(twinserial, + AS_HELP_STRING([--enable-twinserial],[also compile and install the serial Twin driver]), + [twinserial="${enableval}"], [twinserial=no]) +AM_CONDITIONAL(WITH_TWIN_SERIAL, test "${twinserial}" != "no") + +# --enable-ccidtwindir=DIR +AC_ARG_ENABLE(ccidtwindir, + AS_HELP_STRING([--enable-ccidtwindir=DIR],[directory to install the + serial Twin driver (default to pcscd config or $(prefix)/pcsc/drivers/serial)]), + [ccidtwindir="${enableval}"], [ccidtwindir=false]) +if test "${ccidtwindir}" = false ; then + ccidtwindir=$usbdropdir/serial +fi + +# --enable-serialconfdir=DIR +AC_ARG_ENABLE(serialconfdir, + AS_HELP_STRING([--enable-serialconfdir=dir],[directory containing + serial drivers (default to pcscd config)]), + [serialconfdir="${enableval}"], [serialconfdir=false]) +if test "${serialconfdir}" = false ; then + serialconfdir=`$PKG_CONFIG libpcsclite --variable=serialconfdir` +fi + +# --disable-pcsclite +AC_ARG_ENABLE(pcsclite, + AS_HELP_STRING([--disable-pcsclite],[do not use pcsc-lite debug support]), + [ pcsclite="${enableval}" ], [ pcsclite=yes ] ) + +if test "${pcsclite}" != no ; then + # check that pcsc-lite is installed + OLD_LIBS="$LIBS" + OLD_CFLAGS="$CFLAGS" + LIBS="$LIBS $PCSC_LIBS" + CFLAGS="$CFLAGS $PCSC_CFLAGS" + AC_MSG_CHECKING([for SCardEstablishContext]) + AC_TRY_LINK_FUNC(SCardEstablishContext, + [ AC_MSG_RESULT([yes]) ], + [ AC_MSG_ERROR([SCardEstablishContext() not found, install pcsc-lite, or use PCSC_LIBS=... ./configure]) ]) + LIBS="$OLD_LIBS" + CFLAGS="$OLD_CFLAGS" + + pcsclite=yes +fi +AM_CONDITIONAL(WITHOUT_PCSC, test "${pcsclite}" != "yes") + + + +# --enable-syslog +AC_ARG_ENABLE(syslog, + AS_HELP_STRING([--enable-syslog],[use syslog instead of printf for debug (Yosemite)]), + [ use_syslog="${enableval}" ], [ use_syslog=no ] ) + +if test x$use_syslog = xyes; then + AC_DEFINE(USE_SYSLOG, 1, [Use syslog(3) for debug]) +fi + + +# --disable-class +AC_ARG_ENABLE(class, + AS_HELP_STRING([--disable-class],[remove the CCIDCLASSDRIVER from Info.plist]), + [class="${enableval}"], [class=yes]) +if test "${class}" != yes ; then + NOCLASS="--no-class" +fi +AC_SUBST(NOCLASS) + +# --enable-embedded +AC_ARG_ENABLE(embedded, + AS_HELP_STRING([--enable-embedded],[limit RAM and CPU ressources by disabling features (log)]), + [ use_embedded="${enableval}" ]) + +if test x$use_embedded = xyes; then + AC_DEFINE(NO_LOG, 1, [Disable logging support]) +fi + +# --enable-zlp +AC_ARG_ENABLE(zlp, + AS_HELP_STRING([--enable-zlp],[enable the Zero Length Packet patch for some Gemalto readers]), + [ use_zlp="${enableval}" ]) + +if test x$use_zlp = xyes; then + AC_DEFINE(ENABLE_ZLP, 1, [Enable Zero Length Packet patch]) +fi + +# Setup dist stuff +AC_SUBST(ac_aux_dir) +AC_SUBST(bundle) +AC_SUBST(usbdropdir) +AC_SUBST(ccidtwindir) +AC_SUBST(serialconfdir) +AS_AC_EXPAND(bindir_exp,$bindir) +AS_AC_EXPAND(sysconfdir_exp,$sysconfdir) + +cat << EOF + +libccid has been configured with following options: + +Version: ${PACKAGE_VERSION} +User binaries: $(eval eval eval echo "${bindir_exp}") +Configuration files: $(eval eval eval echo "${sysconfdir_exp}") + + +Host: ${host} +Compiler: ${CC} +Preprocessor flags: ${CPPFLAGS} +Compiler flags: ${CFLAGS} +Preprocessor flags: ${CPPFLAGS} +Linker flags: ${LDFLAGS} +Libraries: ${LIBS} + +PCSC_CFLAGS: ${PCSC_CFLAGS} +PCSC_LIBS: ${PCSC_LIBS} +PTHREAD_CFLAGS: ${PTHREAD_CFLAGS} +PTHREAD_LIBS: ${PTHREAD_LIBS} +BUNDLE_HOST: ${BUNDLE_HOST} +DYN_LIB_EXT: ${DYN_LIB_EXT} +LIBUSB_CFLAGS: ${LIBUSB_CFLAGS} +LIBUSB_LIBS: ${LIBUSB_LIBS} +SYMBOL_VISIBILITY: ${SYMBOL_VISIBILITY} +NOCLASS: ${NOCLASS} + +libusb support: ${use_libusb} +composite as multislot: ${use_composite_as_multislot} +multi threading: ${multithread} +bundle directory name: ${bundle} +USB drop directory: ${usbdropdir} +serial Twin support: ${twinserial} +serial twin install dir: ${ccidtwindir} +serial config directory: ${serialconfdir} +compiled for pcsc-lite: ${pcsclite} +syslog debug: ${use_syslog} +class driver: ${class} + +EOF + +# Write Makefiles. +AC_CONFIG_FILES(Makefile + src/Makefile + readers/Makefile + contrib/Makefile + contrib/Kobil_mIDentity_switch/Makefile + contrib/RSA_SecurID/Makefile + examples/Makefile) + +AC_OUTPUT + diff --git a/contrib/Kobil_mIDentity_switch/Kobil_mIDentity_switch.8 b/contrib/Kobil_mIDentity_switch/Kobil_mIDentity_switch.8 new file mode 100644 index 0000000..3b3f362 --- /dev/null +++ b/contrib/Kobil_mIDentity_switch/Kobil_mIDentity_switch.8 @@ -0,0 +1,19 @@ +.TH Kobil_mIDentity_switch 8 "February 2008" +.SH NAME +Kobil_mIDentity_switch \- activate mIDentity CCID reader +. +.SH SYNOPSIS +.B Kobil_mIDentity_switch +. +.SH DESCRIPTION +Kobil_mIDentity_switch is used to activate the CCID reader of the Kobil +mIDentity device. +.PP +The USB device is by default: + ID 0d46:4081 Kobil Systems GmbH mIDentity Basic/Classic (installationless) +and will be switched to: + ID 0d46:4001 Kobil Systems GmbH mIDentity Basic/Classic (composite device) +. +.SH AUTHORS +Norbert Federa wrote the tool. +Ludovic Rousseau wrote this manpage. diff --git a/contrib/Kobil_mIDentity_switch/Kobil_mIDentity_switch.c b/contrib/Kobil_mIDentity_switch/Kobil_mIDentity_switch.c new file mode 100644 index 0000000..874abe0 --- /dev/null +++ b/contrib/Kobil_mIDentity_switch/Kobil_mIDentity_switch.c @@ -0,0 +1,225 @@ +/* + Activate the smartcard interface on the kobil midentity usb device + Copyright (C) 2006 Norbert Federa + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Author: Norbert Federa +Date: 2006-04-06 + + +Description: + +This tool is needed to activate the smartcard interface on the kobil midentity +usb device (vendor 0x04D6 id 0x4081) + +Kobil's own implementation was a kernel usb driver which did just send a +libusb_control_transfer in the probe routine. + +We do the same via libusb and call this program from our /sbin/hotblug script +if the mIDentity gets added. + +The kobil switcher driver was found inside this zip ... +http://www.kobil.com/download/partner/KOBIL_mIDentity_SDK_Build_20060320_RELEASE.zip +... under Interfaces/Linux/module_with_binary_final.tar.gz. + +Here the interesting part of the kernel driver inside the probe function: + + if (dev->descriptor.idVendor == KOBIL_VENDOR_ID){ + printk("!!!!! DEVICE FOUND !!! !\n"); + ret = libusb_control_transfer(dev, + send_pipe, + 0x09, + 0x22, + 0x0200, + 0x0001, + switchCmd, + sizeof(switchCmd), + 5000); + } + +Initally the it did not work with libusb because the ioctl gets ignored with +the used RequestType of 0x22 in combination with index 0x0001, but index 0x0002 +worked. See usb/devio.c functions proc_control() -> check_ctrlrecip() -> +findintfep() in order to understand why. +*/ + +#include +#include +#include +#include +#include +#include + +#include "config.h" + +#define KOBIL_VENDOR_ID 0x0D46 +#define MID_DEVICE_ID 0x4081 +#define KOBIL_TIMEOUT 5000 +#define VAL_STARTUP_4080 1 +#define VAL_STARTUP_4000 2 +#define VAL_STARTUP_4020 3 +#define VAL_STARTUP_40A0 4 +#define HIDCMD_SWITCH_DEVICE 0x0004 + +#define bmRequestType 0x22 +#define bRequest 0x09 +#define wValue 0x0200 +#define wIndex 0x0002 /* this was originally 0x0001 */ + + +static int kobil_midentity_control_msg(libusb_device_handle *usb) +{ + int ret; + + unsigned char switchCmd[10]; + + unsigned char Sleep = 1; + unsigned char hardDisk = 1; + + unsigned char param = ((hardDisk) << 4) | (Sleep); + + memset(switchCmd, 0x0, sizeof(switchCmd)); + switchCmd[0] = HIDCMD_SWITCH_DEVICE >> 8; + switchCmd[1] = HIDCMD_SWITCH_DEVICE; + switchCmd[5] = VAL_STARTUP_4000; + switchCmd[9] = param; + + ret = libusb_control_transfer(usb, bmRequestType, bRequest, wValue, wIndex, + switchCmd, sizeof(switchCmd), KOBIL_TIMEOUT); + + return(!(ret==sizeof(switchCmd))); +} + + +static int kobil_midentity_claim_interface(libusb_device_handle *usb, int ifnum) +{ + int rv; + + printf("claiming interface #%d ... ", ifnum); + rv = libusb_claim_interface(usb, ifnum); + if (rv == 0) + { + printf("success\n"); + return rv; + } + else + printf("failed\n"); + + printf("failed with error %d, trying to detach kernel driver ....\n", rv); + rv = libusb_detach_kernel_driver(usb, ifnum); + if (rv == 0) + { + printf("success, claiming interface again ..."); + rv = libusb_claim_interface(usb, ifnum); + if (rv == 0) + { + printf("success\n"); + return rv; + } + else + printf("failed\n"); + } + + printf("failed with error %d, giving up.\n", rv); + return rv; +} + + +int main(int argc, char *argv[]) +{ + libusb_device **devs, *dev; + libusb_device *found_dev = NULL; + struct libusb_device_handle *usb = NULL; + int rv, i; + ssize_t cnt; + + (void)argc; + (void)argv; + + rv = libusb_init(NULL); + if (rv < 0) + { + (void)printf("libusb_init() failed\n"); + return rv; + } + + cnt = libusb_get_device_list(NULL, &devs); + if (cnt < 0) + { + (void)printf("libusb_get_device_list() failed\n"); + return (int)cnt; + } + + /* for every device */ + i = 0; + while ((dev = devs[i++]) != NULL) + { + struct libusb_device_descriptor desc; + + rv = libusb_get_device_descriptor(dev, &desc); + if (rv < 0) { + (void)printf("failed to get device descriptor\n"); + continue; + } + + printf("vendor/product: %04X %04X\n", desc.idVendor, desc.idProduct); + if (desc.idVendor == KOBIL_VENDOR_ID && desc.idProduct == MID_DEVICE_ID) + found_dev = dev; + } + + if (found_dev == NULL) + { + printf("device not found. aborting.\n"); + if (0 != geteuid()) + printf("Try to rerun this program as root.\n"); + exit(1); + } + + printf("Device found, opening ... "); + rv = libusb_open(found_dev, &usb); + if (rv < 0) + { + printf("failed, aborting.\n"); + exit(2); + } + printf("success\n"); + + rv = kobil_midentity_claim_interface(usb, 0); + if (rv < 0) + { + libusb_close(usb); + exit(3); + } + + rv = kobil_midentity_claim_interface(usb, 1); + if (rv < 0) + { + libusb_close(usb); + exit(3); + } + + printf("Activating the CCID configuration .... "); + rv = kobil_midentity_control_msg(usb); + if (rv == 0) + printf("success\n"); + else + printf("failed with error %d, giving up.\n", rv); + + libusb_close(usb); + + return 0; +} + diff --git a/contrib/Kobil_mIDentity_switch/Makefile.am b/contrib/Kobil_mIDentity_switch/Makefile.am new file mode 100644 index 0000000..dc6a66b --- /dev/null +++ b/contrib/Kobil_mIDentity_switch/Makefile.am @@ -0,0 +1,10 @@ +noinst_PROGRAMS = Kobil_mIDentity_switch +Kobil_mIDentity_switch_SOURCES = Kobil_mIDentity_switch.c +Kobil_mIDentity_switch_CFLAGS = $(LIBUSB_CFLAGS) +Kobil_mIDentity_switch_LDADD = $(LIBUSB_LIBS) + +noinst_DATA = README_Kobil_mIDentity_switch.txt + +noinst_MANS = Kobil_mIDentity_switch.8 + +EXTRA_DIST = $(noinst_DATA) $(noinst_MANS) diff --git a/contrib/Kobil_mIDentity_switch/Makefile.in b/contrib/Kobil_mIDentity_switch/Makefile.in new file mode 100644 index 0000000..98eede1 --- /dev/null +++ b/contrib/Kobil_mIDentity_switch/Makefile.in @@ -0,0 +1,640 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +noinst_PROGRAMS = Kobil_mIDentity_switch$(EXEEXT) +subdir = contrib/Kobil_mIDentity_switch +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \ + $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +PROGRAMS = $(noinst_PROGRAMS) +am_Kobil_mIDentity_switch_OBJECTS = \ + Kobil_mIDentity_switch-Kobil_mIDentity_switch.$(OBJEXT) +Kobil_mIDentity_switch_OBJECTS = $(am_Kobil_mIDentity_switch_OBJECTS) +am__DEPENDENCIES_1 = +Kobil_mIDentity_switch_DEPENDENCIES = $(am__DEPENDENCIES_1) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +Kobil_mIDentity_switch_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(Kobil_mIDentity_switch_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(Kobil_mIDentity_switch_SOURCES) +DIST_SOURCES = $(Kobil_mIDentity_switch_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +DATA = $(noinst_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUNDLE_HOST = @BUNDLE_HOST@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DYN_LIB_EXT = @DYN_LIB_EXT@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIBUSB_CFLAGS = @LIBUSB_CFLAGS@ +LIBUSB_LIBS = @LIBUSB_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOCLASS = @NOCLASS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCSC_CFLAGS = @PCSC_CFLAGS@ +PCSC_LIBS = @PCSC_LIBS@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +SYMBOL_VISIBILITY = @SYMBOL_VISIBILITY@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_aux_dir = @ac_aux_dir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_pthread_config = @ax_pthread_config@ +bindir = @bindir@ +bindir_exp = @bindir_exp@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +bundle = @bundle@ +ccidtwindir = @ccidtwindir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +serialconfdir = @serialconfdir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +sysconfdir_exp = @sysconfdir_exp@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usbdropdir = @usbdropdir@ +Kobil_mIDentity_switch_SOURCES = Kobil_mIDentity_switch.c +Kobil_mIDentity_switch_CFLAGS = $(LIBUSB_CFLAGS) +Kobil_mIDentity_switch_LDADD = $(LIBUSB_LIBS) +noinst_DATA = README_Kobil_mIDentity_switch.txt +noinst_MANS = Kobil_mIDentity_switch.8 +EXTRA_DIST = $(noinst_DATA) $(noinst_MANS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign contrib/Kobil_mIDentity_switch/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign contrib/Kobil_mIDentity_switch/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +Kobil_mIDentity_switch$(EXEEXT): $(Kobil_mIDentity_switch_OBJECTS) $(Kobil_mIDentity_switch_DEPENDENCIES) $(EXTRA_Kobil_mIDentity_switch_DEPENDENCIES) + @rm -f Kobil_mIDentity_switch$(EXEEXT) + $(AM_V_CCLD)$(Kobil_mIDentity_switch_LINK) $(Kobil_mIDentity_switch_OBJECTS) $(Kobil_mIDentity_switch_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Kobil_mIDentity_switch-Kobil_mIDentity_switch.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +Kobil_mIDentity_switch-Kobil_mIDentity_switch.o: Kobil_mIDentity_switch.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Kobil_mIDentity_switch_CFLAGS) $(CFLAGS) -MT Kobil_mIDentity_switch-Kobil_mIDentity_switch.o -MD -MP -MF $(DEPDIR)/Kobil_mIDentity_switch-Kobil_mIDentity_switch.Tpo -c -o Kobil_mIDentity_switch-Kobil_mIDentity_switch.o `test -f 'Kobil_mIDentity_switch.c' || echo '$(srcdir)/'`Kobil_mIDentity_switch.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/Kobil_mIDentity_switch-Kobil_mIDentity_switch.Tpo $(DEPDIR)/Kobil_mIDentity_switch-Kobil_mIDentity_switch.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='Kobil_mIDentity_switch.c' object='Kobil_mIDentity_switch-Kobil_mIDentity_switch.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Kobil_mIDentity_switch_CFLAGS) $(CFLAGS) -c -o Kobil_mIDentity_switch-Kobil_mIDentity_switch.o `test -f 'Kobil_mIDentity_switch.c' || echo '$(srcdir)/'`Kobil_mIDentity_switch.c + +Kobil_mIDentity_switch-Kobil_mIDentity_switch.obj: Kobil_mIDentity_switch.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Kobil_mIDentity_switch_CFLAGS) $(CFLAGS) -MT Kobil_mIDentity_switch-Kobil_mIDentity_switch.obj -MD -MP -MF $(DEPDIR)/Kobil_mIDentity_switch-Kobil_mIDentity_switch.Tpo -c -o Kobil_mIDentity_switch-Kobil_mIDentity_switch.obj `if test -f 'Kobil_mIDentity_switch.c'; then $(CYGPATH_W) 'Kobil_mIDentity_switch.c'; else $(CYGPATH_W) '$(srcdir)/Kobil_mIDentity_switch.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/Kobil_mIDentity_switch-Kobil_mIDentity_switch.Tpo $(DEPDIR)/Kobil_mIDentity_switch-Kobil_mIDentity_switch.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='Kobil_mIDentity_switch.c' object='Kobil_mIDentity_switch-Kobil_mIDentity_switch.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(Kobil_mIDentity_switch_CFLAGS) $(CFLAGS) -c -o Kobil_mIDentity_switch-Kobil_mIDentity_switch.obj `if test -f 'Kobil_mIDentity_switch.c'; then $(CYGPATH_W) 'Kobil_mIDentity_switch.c'; else $(CYGPATH_W) '$(srcdir)/Kobil_mIDentity_switch.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) $(DATA) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/Kobil_mIDentity_switch/README_Kobil_mIDentity_switch.txt b/contrib/Kobil_mIDentity_switch/README_Kobil_mIDentity_switch.txt new file mode 100644 index 0000000..8d343e0 --- /dev/null +++ b/contrib/Kobil_mIDentity_switch/README_Kobil_mIDentity_switch.txt @@ -0,0 +1,250 @@ +The Kobil_mIDentity_switch program is used to activate the Kobil mIDenty +smart card CCID reader. + +The USB device is by default: + ID 0d46:4081 Kobil Systems GmbH mIDentity Basic/Classic (installationless) +and will be switched to: + ID 0d46:4001 Kobil Systems GmbH mIDentity Basic/Classic (composite device) + + +Bus 005 Device 016: ID 0d46:4081 Kobil Systems GmbH mIDentity Basic/Classic (installationless) +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 2.00 + bDeviceClass 0 (Defined at Interface level) + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 64 + idVendor 0x0d46 Kobil Systems GmbH + idProduct 0x4081 mIDentity Basic/Classic (installationless) + bcdDevice 0.00 + iManufacturer 1 KOBIL Systems + iProduct 2 mIDentity M + iSerial 3 SN_K_05C901085 + bNumConfigurations 1 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 57 + bNumInterfaces 2 + bConfigurationValue 1 + iConfiguration 0 + bmAttributes 0x80 + (Bus Powered) + MaxPower 400mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 2 + bInterfaceClass 8 Mass Storage + bInterfaceSubClass 6 SCSI + bInterfaceProtocol 80 Bulk (Zip) + iInterface 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x02 EP 2 OUT + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0200 1x 512 bytes + bInterval 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x86 EP 6 IN + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0200 1x 512 bytes + bInterval 0 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 1 + bAlternateSetting 0 + bNumEndpoints 1 + bInterfaceClass 3 Human Interface Devices + bInterfaceSubClass 1 Boot Interface Subclass + bInterfaceProtocol 0 None + iInterface 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x81 EP 1 IN + bmAttributes 3 + Transfer Type Interrupt + Synch Type None + Usage Type Data + wMaxPacketSize 0x0040 1x 64 bytes + bInterval 8 + UNRECOGNIZED: 09 21 00 01 00 01 22 22 00 +Device Qualifier (for other device speed): + bLength 10 + bDescriptorType 6 + bcdUSB 2.00 + bDeviceClass 0 (Defined at Interface level) + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 64 + bNumConfigurations 1 +Device Status: 0x0002 + (Bus Powered) + Remote Wakeup Enabled + + +Bus 005 Device 015: ID 0d46:4001 Kobil Systems GmbH mIDentity Basic/Classic (composite device) +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 2.00 + bDeviceClass 0 (Defined at Interface level) + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 64 + idVendor 0x0d46 Kobil Systems GmbH + idProduct 0x4001 mIDentity Basic/Classic (composite device) + bcdDevice 0.00 + iManufacturer 1 KOBIL Systems + iProduct 2 mIDentity M + iSerial 3 SN_K_05C901085 + bNumConfigurations 1 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 134 + bNumInterfaces 3 + bConfigurationValue 1 + iConfiguration 0 + bmAttributes 0x80 + (Bus Powered) + MaxPower 400mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 2 + bInterfaceClass 8 Mass Storage + bInterfaceSubClass 6 SCSI + bInterfaceProtocol 80 Bulk (Zip) + iInterface 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x02 EP 2 OUT + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0200 1x 512 bytes + bInterval 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x86 EP 6 IN + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0200 1x 512 bytes + bInterval 0 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 1 + bAlternateSetting 0 + bNumEndpoints 2 + bInterfaceClass 11 Chip/SmartCard + bInterfaceSubClass 0 + bInterfaceProtocol 0 + iInterface 0 + ChipCard Interface Descriptor: + bLength 54 + bDescriptorType 33 + bcdCCID 1.00 + nMaxSlotIndex 0 + bVoltageSupport 7 5.0V 3.0V 1.8V + dwProtocols 3 T=0 T=1 + dwDefaultClock 4000 + dwMaxiumumClock 4000 + bNumClockSupported 0 + dwDataRate 10752 bps + dwMaxDataRate 250000 bps + bNumDataRatesSupp. 0 + dwMaxIFSD 254 + dwSyncProtocols 00000000 + dwMechanical 00000000 + dwFeatures 000206BA + Auto configuration based on ATR + Auto voltage selection + Auto clock change + Auto baud rate change + Auto PPS made by CCID + NAD value other than 0x00 accpeted + Auto IFSD exchange + Short APDU level exchange + dwMaxCCIDMsgLen 271 + bClassGetResponse echo + bClassEnvelope echo + wlcdLayout none + bPINSupport 0 + bMaxCCIDBusySlots 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x04 EP 4 OUT + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0200 1x 512 bytes + bInterval 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x88 EP 8 IN + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0200 1x 512 bytes + bInterval 0 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 2 + bAlternateSetting 0 + bNumEndpoints 1 + bInterfaceClass 3 Human Interface Devices + bInterfaceSubClass 1 Boot Interface Subclass + bInterfaceProtocol 0 None + iInterface 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x81 EP 1 IN + bmAttributes 3 + Transfer Type Interrupt + Synch Type None + Usage Type Data + wMaxPacketSize 0x0040 1x 64 bytes + bInterval 10 + UNRECOGNIZED: 09 21 00 01 00 01 22 22 00 +Device Qualifier (for other device speed): + bLength 10 + bDescriptorType 6 + bcdUSB 2.00 + bDeviceClass 0 (Defined at Interface level) + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 64 + bNumConfigurations 1 +Device Status: 0x0002 + (Bus Powered) + Remote Wakeup Enabled diff --git a/contrib/Makefile.am b/contrib/Makefile.am new file mode 100644 index 0000000..eac542e --- /dev/null +++ b/contrib/Makefile.am @@ -0,0 +1,5 @@ +if WITH_LIBUSB +SUBDIRS = Kobil_mIDentity_switch RSA_SecurID +else +SUBDIRS = RSA_SecurID +endif diff --git a/contrib/Makefile.in b/contrib/Makefile.in new file mode 100644 index 0000000..0921ba9 --- /dev/null +++ b/contrib/Makefile.in @@ -0,0 +1,645 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = contrib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \ + $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = RSA_SecurID Kobil_mIDentity_switch +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUNDLE_HOST = @BUNDLE_HOST@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DYN_LIB_EXT = @DYN_LIB_EXT@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIBUSB_CFLAGS = @LIBUSB_CFLAGS@ +LIBUSB_LIBS = @LIBUSB_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOCLASS = @NOCLASS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCSC_CFLAGS = @PCSC_CFLAGS@ +PCSC_LIBS = @PCSC_LIBS@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +SYMBOL_VISIBILITY = @SYMBOL_VISIBILITY@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_aux_dir = @ac_aux_dir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_pthread_config = @ax_pthread_config@ +bindir = @bindir@ +bindir_exp = @bindir_exp@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +bundle = @bundle@ +ccidtwindir = @ccidtwindir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +serialconfdir = @serialconfdir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +sysconfdir_exp = @sysconfdir_exp@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usbdropdir = @usbdropdir@ +@WITH_LIBUSB_FALSE@SUBDIRS = RSA_SecurID +@WITH_LIBUSB_TRUE@SUBDIRS = Kobil_mIDentity_switch RSA_SecurID +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign contrib/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign contrib/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/RSA_SecurID/Makefile.am b/contrib/RSA_SecurID/Makefile.am new file mode 100644 index 0000000..0ed51e7 --- /dev/null +++ b/contrib/RSA_SecurID/Makefile.am @@ -0,0 +1,9 @@ +noinst_PROGRAMS = RSA_SecurID_getpasswd +RSA_SecurID_getpasswd_SOURCES = RSA_SecurID_getpasswd.c + +RSA_SecurID_getpasswd_CFLAGS = $(PCSC_CFLAGS) +RSA_SecurID_getpasswd_LDADD = $(PCSC_LIBS) + +noinst_MANS = RSA_SecurID_getpasswd.1 + +EXTRA_DIST = $(noinst_MANS) diff --git a/contrib/RSA_SecurID/Makefile.in b/contrib/RSA_SecurID/Makefile.in new file mode 100644 index 0000000..b2ac830 --- /dev/null +++ b/contrib/RSA_SecurID/Makefile.in @@ -0,0 +1,637 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +noinst_PROGRAMS = RSA_SecurID_getpasswd$(EXEEXT) +subdir = contrib/RSA_SecurID +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \ + $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +PROGRAMS = $(noinst_PROGRAMS) +am_RSA_SecurID_getpasswd_OBJECTS = \ + RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.$(OBJEXT) +RSA_SecurID_getpasswd_OBJECTS = $(am_RSA_SecurID_getpasswd_OBJECTS) +am__DEPENDENCIES_1 = +RSA_SecurID_getpasswd_DEPENDENCIES = $(am__DEPENDENCIES_1) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +RSA_SecurID_getpasswd_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(RSA_SecurID_getpasswd_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(RSA_SecurID_getpasswd_SOURCES) +DIST_SOURCES = $(RSA_SecurID_getpasswd_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUNDLE_HOST = @BUNDLE_HOST@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DYN_LIB_EXT = @DYN_LIB_EXT@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIBUSB_CFLAGS = @LIBUSB_CFLAGS@ +LIBUSB_LIBS = @LIBUSB_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOCLASS = @NOCLASS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCSC_CFLAGS = @PCSC_CFLAGS@ +PCSC_LIBS = @PCSC_LIBS@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +SYMBOL_VISIBILITY = @SYMBOL_VISIBILITY@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_aux_dir = @ac_aux_dir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_pthread_config = @ax_pthread_config@ +bindir = @bindir@ +bindir_exp = @bindir_exp@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +bundle = @bundle@ +ccidtwindir = @ccidtwindir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +serialconfdir = @serialconfdir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +sysconfdir_exp = @sysconfdir_exp@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usbdropdir = @usbdropdir@ +RSA_SecurID_getpasswd_SOURCES = RSA_SecurID_getpasswd.c +RSA_SecurID_getpasswd_CFLAGS = $(PCSC_CFLAGS) +RSA_SecurID_getpasswd_LDADD = $(PCSC_LIBS) +noinst_MANS = RSA_SecurID_getpasswd.1 +EXTRA_DIST = $(noinst_MANS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign contrib/RSA_SecurID/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign contrib/RSA_SecurID/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +RSA_SecurID_getpasswd$(EXEEXT): $(RSA_SecurID_getpasswd_OBJECTS) $(RSA_SecurID_getpasswd_DEPENDENCIES) $(EXTRA_RSA_SecurID_getpasswd_DEPENDENCIES) + @rm -f RSA_SecurID_getpasswd$(EXEEXT) + $(AM_V_CCLD)$(RSA_SecurID_getpasswd_LINK) $(RSA_SecurID_getpasswd_OBJECTS) $(RSA_SecurID_getpasswd_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.o: RSA_SecurID_getpasswd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(RSA_SecurID_getpasswd_CFLAGS) $(CFLAGS) -MT RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.o -MD -MP -MF $(DEPDIR)/RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.Tpo -c -o RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.o `test -f 'RSA_SecurID_getpasswd.c' || echo '$(srcdir)/'`RSA_SecurID_getpasswd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.Tpo $(DEPDIR)/RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='RSA_SecurID_getpasswd.c' object='RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(RSA_SecurID_getpasswd_CFLAGS) $(CFLAGS) -c -o RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.o `test -f 'RSA_SecurID_getpasswd.c' || echo '$(srcdir)/'`RSA_SecurID_getpasswd.c + +RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.obj: RSA_SecurID_getpasswd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(RSA_SecurID_getpasswd_CFLAGS) $(CFLAGS) -MT RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.obj -MD -MP -MF $(DEPDIR)/RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.Tpo -c -o RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.obj `if test -f 'RSA_SecurID_getpasswd.c'; then $(CYGPATH_W) 'RSA_SecurID_getpasswd.c'; else $(CYGPATH_W) '$(srcdir)/RSA_SecurID_getpasswd.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.Tpo $(DEPDIR)/RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='RSA_SecurID_getpasswd.c' object='RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(RSA_SecurID_getpasswd_CFLAGS) $(CFLAGS) -c -o RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.obj `if test -f 'RSA_SecurID_getpasswd.c'; then $(CYGPATH_W) 'RSA_SecurID_getpasswd.c'; else $(CYGPATH_W) '$(srcdir)/RSA_SecurID_getpasswd.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/contrib/RSA_SecurID/RSA_SecurID_getpasswd.1 b/contrib/RSA_SecurID/RSA_SecurID_getpasswd.1 new file mode 100644 index 0000000..758beb9 --- /dev/null +++ b/contrib/RSA_SecurID/RSA_SecurID_getpasswd.1 @@ -0,0 +1,14 @@ +.TH RSA_SecurID_getpasswd 1 "February 2008" +.SH NAME +RSA_SecurID_getpasswd \- get the one-use password from a RSA sid-800 +token +. +.SH SYNOPSIS +.B RSA_SecurID_getpasswd +. +.SH DESCRIPTION +RSA_SecurID_getpasswd sends to stdout the one-use password also +displayed on the screen of a RSA sid-800 USB token. +. +.SH AUTHOR +Ludovic Rousseau diff --git a/contrib/RSA_SecurID/RSA_SecurID_getpasswd.c b/contrib/RSA_SecurID/RSA_SecurID_getpasswd.c new file mode 100644 index 0000000..f23e463 --- /dev/null +++ b/contrib/RSA_SecurID/RSA_SecurID_getpasswd.c @@ -0,0 +1,172 @@ +/* + RSA_SecurID_getpasswd.c: get the one-use password from a RSA sid-800 token + Copyright (C) 2006 Ludovic Rousseau + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., 51 + Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include +#include +#include + +/* DWORD printf(3) format */ +#ifdef __APPLE__ +/* Apple defines DWORD as uint32_t so %d is correct */ +#define LF +#else +/* pcsc-lite defines DWORD as unsigned long so %ld is correct */ +#define LF "l" +#endif + +/* PCSC error message pretty print */ +#define PCSC_ERROR_EXIT(rv, text) \ +if (rv != SCARD_S_SUCCESS) \ +{ \ + printf(text ": %s (0x%"LF"X)\n", pcsc_stringify_error(rv), rv); \ + goto end; \ +} + +int main(void) +{ + unsigned char cmd1[] = { 0x00, 0xa4, 0x04, 0x00, 0x0a, 0xa0, 0x00, 0x00, 0x00, 0x63, 0x86, 0x53, 0x49, 0x44, 0x01}; + unsigned char cmd2[] = { 0x80, 0x56, 0x00, 0x00, 0x04 }; + unsigned char cmd3[] = { 0x80, 0x48, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff }; + unsigned char cmd4[] = { 0x80, 0x44, 0x00, 0x00, 0x05}; + LONG rv; + SCARDCONTEXT hContext; + DWORD dwReaders; + LPSTR mszReaders = NULL; + char **readers = NULL; + SCARDHANDLE hCard; + DWORD dwActiveProtocol; + unsigned char bRecvBuffer[MAX_BUFFER_SIZE]; + DWORD length; + SCARD_IO_REQUEST pioRecvPci; + SCARD_IO_REQUEST pioSendPci; + + rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext); + if (rv != SCARD_S_SUCCESS) + { + printf("SCardEstablishContext: Cannot Connect to Resource Manager %"LF"X\n", rv); + return 1; + } + + /* Retrieve the available readers list */ + rv = SCardListReaders(hContext, NULL, NULL, &dwReaders); + PCSC_ERROR_EXIT(rv, "SCardListReader"); + + if (dwReaders < 4) + { + printf("No reader found!\n"); + return -1; + } + + mszReaders = malloc(sizeof(char)*dwReaders); + if (mszReaders == NULL) + { + printf("malloc: not enough memory\n"); + goto end; + } + + rv = SCardListReaders(hContext, NULL, mszReaders, &dwReaders); + PCSC_ERROR_EXIT(rv, "SCardListReader"); + + /* connect to the first reader */ + dwActiveProtocol = -1; + rv = SCardConnect(hContext, mszReaders, SCARD_SHARE_EXCLUSIVE, + SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, &hCard, &dwActiveProtocol); + PCSC_ERROR_EXIT(rv, "SCardConnect") + + switch(dwActiveProtocol) + { + case SCARD_PROTOCOL_T0: + pioSendPci = *SCARD_PCI_T0; + break; + case SCARD_PROTOCOL_T1: + pioSendPci = *SCARD_PCI_T1; + break; + default: + printf("Unknown protocol\n"); + return -1; + } + + /* APDU select applet */ + length = sizeof(bRecvBuffer); + rv = SCardTransmit(hCard, &pioSendPci, cmd1, sizeof cmd1, + &pioRecvPci, bRecvBuffer, &length); + PCSC_ERROR_EXIT(rv, "SCardTransmit") + if ((length != 2) || (bRecvBuffer[0] != 0x90) || (bRecvBuffer[1] != 0x00)) + { + printf("cmd1 failed (%"LF"d): %02X%02X\n", length, bRecvBuffer[length-2], + bRecvBuffer[length-1]); + goto end; + } + + /* non ISO APDU */ + length = sizeof(bRecvBuffer); + rv = SCardTransmit(hCard, &pioSendPci, cmd2, sizeof cmd2, + &pioRecvPci, bRecvBuffer, &length); + PCSC_ERROR_EXIT(rv, "SCardTransmit") + if ((length != 6) || (bRecvBuffer[4] != 0x90) || (bRecvBuffer[5] != 0x00)) + { + printf("cmd2 failed (%"LF"d) : %02X%02X\n", length, + bRecvBuffer[length-2], bRecvBuffer[length-1]); + goto end; + } + + /* get the argument for cmd3 from result of cmd2 */ + memcpy(cmd3+5, bRecvBuffer, 4); + + /* non ISO APDU */ + length = sizeof(bRecvBuffer); + rv = SCardTransmit(hCard, &pioSendPci, cmd3, sizeof cmd3, + &pioRecvPci, bRecvBuffer, &length); + PCSC_ERROR_EXIT(rv, "SCardTransmit") + if ((length != 2) || (bRecvBuffer[0] != 0x90) || (bRecvBuffer[1] != 0x00)) + { + printf("cmd3 failed (%"LF"d): %02X%02X\n", length, bRecvBuffer[length-2], + bRecvBuffer[length-1]); + goto end; + } + + /* non iSO APDU */ + length = sizeof(bRecvBuffer); + rv = SCardTransmit(hCard, &pioSendPci, cmd4, sizeof cmd4, + &pioRecvPci, bRecvBuffer, &length); + PCSC_ERROR_EXIT(rv, "SCardTransmit") + if ((length != 7) || (bRecvBuffer[5] != 0x90) || (bRecvBuffer[6] != 0x00)) + { + printf("cmd4 failed (%"LF"d): %02X%02X\n", length, bRecvBuffer[length-2], + bRecvBuffer[length-1]); + goto end; + } + + printf("%02X%02X%02X\n", bRecvBuffer[2], bRecvBuffer[3], bRecvBuffer[4]); + +end: + /* We try to leave things as clean as possible */ + rv = SCardReleaseContext(hContext); + if (rv != SCARD_S_SUCCESS) + printf("SCardReleaseContext: %s (0x%"LF"X)\n", pcsc_stringify_error(rv), + rv); + + /* free allocated memory */ + free(mszReaders); + free(readers); + + return 0; +} /* main */ + diff --git a/depcomp b/depcomp new file mode 100755 index 0000000..fc98710 --- /dev/null +++ b/depcomp @@ -0,0 +1,791 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2013-05-30.07; # UTC + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputting dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Avoid interferences from the environment. +gccflag= dashmflag= + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The second -e expression handles DOS-style file names with drive + # letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the "deleted header file" problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. +## Some versions of gcc put a space before the ':'. On the theory +## that the space means something, we add a space to the output as +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like '#:fec' to the end of the + # dependency line. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" + # The second pass generates a dummy entry for each header file. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" + ;; + +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts '$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using '\' : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi + + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; + +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for ':' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. + "$@" $dashmflag | + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/examples/GPL-2 b/examples/GPL-2 new file mode 100644 index 0000000..d511905 --- /dev/null +++ b/examples/GPL-2 @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/examples/Makefile.am b/examples/Makefile.am new file mode 100644 index 0000000..6e5505a --- /dev/null +++ b/examples/Makefile.am @@ -0,0 +1,8 @@ +# Process this file with automake to create Makefile.in. + +noinst_PROGRAMS = scardcontrol +scardcontrol_SOURCES = scardcontrol.c PCSCv2part10.c PCSCv2part10.h +scardcontrol_CFLAGS = $(PCSC_CFLAGS) $(PTHREAD_CFLAGS) +scardcontrol_LDADD = $(PCSC_LIBS) $(PTHREAD_LIBS) + +EXTRA_DIST = GPL-2 diff --git a/examples/Makefile.in b/examples/Makefile.in new file mode 100644 index 0000000..4803619 --- /dev/null +++ b/examples/Makefile.in @@ -0,0 +1,653 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Process this file with automake to create Makefile.in. + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +noinst_PROGRAMS = scardcontrol$(EXEEXT) +subdir = examples +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \ + $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +PROGRAMS = $(noinst_PROGRAMS) +am_scardcontrol_OBJECTS = scardcontrol-scardcontrol.$(OBJEXT) \ + scardcontrol-PCSCv2part10.$(OBJEXT) +scardcontrol_OBJECTS = $(am_scardcontrol_OBJECTS) +am__DEPENDENCIES_1 = +scardcontrol_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +scardcontrol_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(scardcontrol_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(scardcontrol_SOURCES) +DIST_SOURCES = $(scardcontrol_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUNDLE_HOST = @BUNDLE_HOST@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DYN_LIB_EXT = @DYN_LIB_EXT@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIBUSB_CFLAGS = @LIBUSB_CFLAGS@ +LIBUSB_LIBS = @LIBUSB_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOCLASS = @NOCLASS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCSC_CFLAGS = @PCSC_CFLAGS@ +PCSC_LIBS = @PCSC_LIBS@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +SYMBOL_VISIBILITY = @SYMBOL_VISIBILITY@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_aux_dir = @ac_aux_dir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_pthread_config = @ax_pthread_config@ +bindir = @bindir@ +bindir_exp = @bindir_exp@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +bundle = @bundle@ +ccidtwindir = @ccidtwindir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +serialconfdir = @serialconfdir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +sysconfdir_exp = @sysconfdir_exp@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usbdropdir = @usbdropdir@ +scardcontrol_SOURCES = scardcontrol.c PCSCv2part10.c PCSCv2part10.h +scardcontrol_CFLAGS = $(PCSC_CFLAGS) $(PTHREAD_CFLAGS) +scardcontrol_LDADD = $(PCSC_LIBS) $(PTHREAD_LIBS) +EXTRA_DIST = GPL-2 +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign examples/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +scardcontrol$(EXEEXT): $(scardcontrol_OBJECTS) $(scardcontrol_DEPENDENCIES) $(EXTRA_scardcontrol_DEPENDENCIES) + @rm -f scardcontrol$(EXEEXT) + $(AM_V_CCLD)$(scardcontrol_LINK) $(scardcontrol_OBJECTS) $(scardcontrol_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scardcontrol-PCSCv2part10.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scardcontrol-scardcontrol.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +scardcontrol-scardcontrol.o: scardcontrol.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scardcontrol_CFLAGS) $(CFLAGS) -MT scardcontrol-scardcontrol.o -MD -MP -MF $(DEPDIR)/scardcontrol-scardcontrol.Tpo -c -o scardcontrol-scardcontrol.o `test -f 'scardcontrol.c' || echo '$(srcdir)/'`scardcontrol.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/scardcontrol-scardcontrol.Tpo $(DEPDIR)/scardcontrol-scardcontrol.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='scardcontrol.c' object='scardcontrol-scardcontrol.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scardcontrol_CFLAGS) $(CFLAGS) -c -o scardcontrol-scardcontrol.o `test -f 'scardcontrol.c' || echo '$(srcdir)/'`scardcontrol.c + +scardcontrol-scardcontrol.obj: scardcontrol.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scardcontrol_CFLAGS) $(CFLAGS) -MT scardcontrol-scardcontrol.obj -MD -MP -MF $(DEPDIR)/scardcontrol-scardcontrol.Tpo -c -o scardcontrol-scardcontrol.obj `if test -f 'scardcontrol.c'; then $(CYGPATH_W) 'scardcontrol.c'; else $(CYGPATH_W) '$(srcdir)/scardcontrol.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/scardcontrol-scardcontrol.Tpo $(DEPDIR)/scardcontrol-scardcontrol.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='scardcontrol.c' object='scardcontrol-scardcontrol.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scardcontrol_CFLAGS) $(CFLAGS) -c -o scardcontrol-scardcontrol.obj `if test -f 'scardcontrol.c'; then $(CYGPATH_W) 'scardcontrol.c'; else $(CYGPATH_W) '$(srcdir)/scardcontrol.c'; fi` + +scardcontrol-PCSCv2part10.o: PCSCv2part10.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scardcontrol_CFLAGS) $(CFLAGS) -MT scardcontrol-PCSCv2part10.o -MD -MP -MF $(DEPDIR)/scardcontrol-PCSCv2part10.Tpo -c -o scardcontrol-PCSCv2part10.o `test -f 'PCSCv2part10.c' || echo '$(srcdir)/'`PCSCv2part10.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/scardcontrol-PCSCv2part10.Tpo $(DEPDIR)/scardcontrol-PCSCv2part10.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='PCSCv2part10.c' object='scardcontrol-PCSCv2part10.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scardcontrol_CFLAGS) $(CFLAGS) -c -o scardcontrol-PCSCv2part10.o `test -f 'PCSCv2part10.c' || echo '$(srcdir)/'`PCSCv2part10.c + +scardcontrol-PCSCv2part10.obj: PCSCv2part10.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scardcontrol_CFLAGS) $(CFLAGS) -MT scardcontrol-PCSCv2part10.obj -MD -MP -MF $(DEPDIR)/scardcontrol-PCSCv2part10.Tpo -c -o scardcontrol-PCSCv2part10.obj `if test -f 'PCSCv2part10.c'; then $(CYGPATH_W) 'PCSCv2part10.c'; else $(CYGPATH_W) '$(srcdir)/PCSCv2part10.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/scardcontrol-PCSCv2part10.Tpo $(DEPDIR)/scardcontrol-PCSCv2part10.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='PCSCv2part10.c' object='scardcontrol-PCSCv2part10.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(scardcontrol_CFLAGS) $(CFLAGS) -c -o scardcontrol-PCSCv2part10.obj `if test -f 'PCSCv2part10.c'; then $(CYGPATH_W) 'PCSCv2part10.c'; else $(CYGPATH_W) '$(srcdir)/PCSCv2part10.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/examples/PCSCv2part10.c b/examples/PCSCv2part10.c new file mode 100644 index 0000000..9f118c7 --- /dev/null +++ b/examples/PCSCv2part10.c @@ -0,0 +1,123 @@ +/* + PCSCv2part10.c: helper functions for PC/SC v2 part 10 services + Copyright (C) 2012 Ludovic Rousseau + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include + +#ifdef __APPLE__ +#include +#include +#else +#include +#endif + +#include "PCSCv2part10.h" + +int PCSCv2Part10_find_TLV_property_by_tag_from_buffer( + unsigned char *buffer, int length, int property, int * value_int) +{ + unsigned char *p; + int found = 0, len; + int value = -1; + int ret = -1; /* not found by default */ + + p = buffer; + while (p-buffer < length) + { + if (*p++ == property) + { + found = 1; + break; + } + + /* go to next tag */ + len = *p++; + p += len; + } + + if (found) + { + len = *p++; + ret = 0; + + switch(len) + { + case 1: + value = *p; + break; + case 2: + value = *p + (*(p+1)<<8); + break; + case 4: + value = *p + (*(p+1)<<8) + (*(p+2)<<16) + (*(p+3)<<24); + break; + default: + /* wrong length for an integer */ + ret = -2; + } + } + + if (value_int) + *value_int = value; + + return ret; +} /* PCSCv2Part10_find_TLV_property_by_tag_from_buffer */ + +int PCSCv2Part10_find_TLV_property_by_tag_from_hcard(SCARDHANDLE hCard, + int property, int * value) +{ + unsigned char buffer[MAX_BUFFER_SIZE]; + LONG rv; + DWORD length; + unsigned int i; + PCSC_TLV_STRUCTURE *pcsc_tlv; + DWORD properties_in_tlv_ioctl; + int found; + + rv = SCardControl(hCard, CM_IOCTL_GET_FEATURE_REQUEST, NULL, 0, + buffer, sizeof buffer, &length); + if (rv != SCARD_S_SUCCESS) + return -1; + + /* get the number of elements instead of the complete size */ + length /= sizeof(PCSC_TLV_STRUCTURE); + + pcsc_tlv = (PCSC_TLV_STRUCTURE *)buffer; + found = 0; + for (i = 0; i < length; i++) + { + if (FEATURE_GET_TLV_PROPERTIES == pcsc_tlv[i].tag) + { + properties_in_tlv_ioctl = ntohl(pcsc_tlv[i].value); + found = 1; + } + } + + if (! found) + return -3; + + rv= SCardControl(hCard, properties_in_tlv_ioctl, NULL, 0, + buffer, sizeof buffer, &length); + if (rv != SCARD_S_SUCCESS) + return -1; + + return PCSCv2Part10_find_TLV_property_by_tag_from_buffer(buffer, + length, property, value); +} + diff --git a/examples/PCSCv2part10.h b/examples/PCSCv2part10.h new file mode 100644 index 0000000..7b2074c --- /dev/null +++ b/examples/PCSCv2part10.h @@ -0,0 +1,136 @@ +/* + PCSCv2part10.h: helper functions for PC/SC v2 part 10 services + Copyright (C) 2012 Ludovic Rousseau + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef __reader_h__ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_READER_H +#include +#else + +/** + * Provide source compatibility on different platforms + */ +#define SCARD_CTL_CODE(code) (0x42000000 + (code)) + +/** + * PC/SC part 10 v2.02.07 March 2010 reader tags + */ +#define CM_IOCTL_GET_FEATURE_REQUEST SCARD_CTL_CODE(3400) + +#define FEATURE_GET_TLV_PROPERTIES 0x12 /**< Get TLV properties */ + +#include + +/* Set structure elements aligment on bytes + * http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html */ +#if defined(__APPLE__) | defined(sun) +#pragma pack(1) +#else +#pragma pack(push, 1) +#endif + +/** the structure must be 6-bytes long */ +typedef struct +{ + uint8_t tag; /**< Tag */ + uint8_t length; /**< Length */ + uint32_t value; /**< This value is always in BIG ENDIAN format as documented in PCSC v2 part 10 ch 2.2 page 2. You can use ntohl() for example */ +} PCSC_TLV_STRUCTURE; + +/* restore default structure elements alignment */ +#if defined(__APPLE__) | defined(sun) +#pragma pack() +#else +#pragma pack(pop) +#endif + +/* properties returned by FEATURE_GET_TLV_PROPERTIES */ +#define PCSCv2_PART10_PROPERTY_wLcdLayout 1 /**< wLcdLayout */ +#define PCSCv2_PART10_PROPERTY_bEntryValidationCondition 2 /**< bEntryValidationCondition */ +#define PCSCv2_PART10_PROPERTY_bTimeOut2 3 /**< bTimeOut2 */ +#define PCSCv2_PART10_PROPERTY_wLcdMaxCharacters 4 /**< wLcdMaxCharacters */ +#define PCSCv2_PART10_PROPERTY_wLcdMaxLines 5 /**< wLcdMaxLines */ +#define PCSCv2_PART10_PROPERTY_bMinPINSize 6 /**< bMinPINSize */ +#define PCSCv2_PART10_PROPERTY_bMaxPINSize 7 /**< bMaxPINSize */ +#define PCSCv2_PART10_PROPERTY_sFirmwareID 8 /**< sFirmwareID */ +#define PCSCv2_PART10_PROPERTY_bPPDUSupport 9 /**< bPPDUSupport */ +#define PCSCv2_PART10_PROPERTY_dwMaxAPDUDataSize 10 /**< dwMaxAPDUDataSize */ +#define PCSCv2_PART10_PROPERTY_wIdVendor 11 /**< wIdVendor */ +#define PCSCv2_PART10_PROPERTY_wIdProduct 12 /**< wIdProduct */ + +#endif +#endif + +/** + * @file + * @defgroup API API + * + * The available PC/SC v2 part 10 tags are (from pcsc-lite 1.8.5): + * + * - \ref PCSCv2_PART10_PROPERTY_wLcdLayout + * - \ref PCSCv2_PART10_PROPERTY_bEntryValidationCondition + * - \ref PCSCv2_PART10_PROPERTY_bTimeOut2 + * - \ref PCSCv2_PART10_PROPERTY_wLcdMaxCharacters + * - \ref PCSCv2_PART10_PROPERTY_wLcdMaxLines + * - \ref PCSCv2_PART10_PROPERTY_bMinPINSize + * - \ref PCSCv2_PART10_PROPERTY_bMaxPINSize + * - \ref PCSCv2_PART10_PROPERTY_sFirmwareID + * - \ref PCSCv2_PART10_PROPERTY_bPPDUSupport + * - \ref PCSCv2_PART10_PROPERTY_dwMaxAPDUDataSize + * - \ref PCSCv2_PART10_PROPERTY_wIdVendor + * - \ref PCSCv2_PART10_PROPERTY_wIdProduct + * + * Example of code: + * @include sample.c + */ + +/** + * @brief Find an integer value by tag from TLV buffer + * @ingroup API + * + * @param buffer buffer received from FEATURE_GET_TLV_PROPERTIES + * @param length buffer length + * @param property tag searched + * @param[out] value value found + * @return Error code + * + * @retval 0 success + * @retval -1 not found + * @retval -2 invalid length in the TLV + * + */ +int PCSCv2Part10_find_TLV_property_by_tag_from_buffer( + unsigned char *buffer, int length, int property, int * value); + +/** + * @brief Find a integer value by tag from a PC/SC card handle + * @ingroup API + * + * @param hCard card handle as returned by SCardConnect() + * @param property tag searched + * @param[out] value value found + * @return Error code (see PCSCv2Part10_find_TLV_property_by_tag_from_buffer()) + */ +int PCSCv2Part10_find_TLV_property_by_tag_from_hcard(SCARDHANDLE hCard, + int property, int * value); + diff --git a/examples/scardcontrol.c b/examples/scardcontrol.c new file mode 100644 index 0000000..c09c99f --- /dev/null +++ b/examples/scardcontrol.c @@ -0,0 +1,896 @@ +/* + scardcontrol.c: sample code to use/test SCardControl() API + Copyright (C) 2004-2011 Ludovic Rousseau + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., 51 + Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include +#include +#include +#include +#include +#ifdef __APPLE__ +#include +#include +#else +#include +#endif +#include + +#include "PCSCv2part10.h" + +#define VERIFY_PIN +#undef MODIFY_PIN +#undef GET_GEMPC_FIRMWARE + +#ifndef TRUE +#define TRUE 1 +#define FALSE 0 +#endif + +#define IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE SCARD_CTL_CODE(1) + +#define BLUE "\33[34m" +#define RED "\33[31m" +#define BRIGHT_RED "\33[01;31m" +#define GREEN "\33[32m" +#define NORMAL "\33[0m" +#define MAGENTA "\33[35m" + +/* DWORD printf(3) format */ +#ifdef __APPLE__ +/* Apple defines DWORD as uint32_t so %d is correct */ +#define LF +#else +/* pcsc-lite defines DWORD as unsigned long so %ld is correct */ +#define LF "l" +#endif + +/* PCSC error message pretty print */ +#define PCSC_ERROR_EXIT(rv, text) \ +if (rv != SCARD_S_SUCCESS) \ +{ \ + printf(text ": " RED "%s (0x%"LF"X)\n" NORMAL, pcsc_stringify_error(rv), rv); \ + goto end; \ +} \ +else \ + printf(text ": " BLUE "OK\n\n" NORMAL); + +#define PCSC_ERROR_CONT(rv, text) \ +if (rv != SCARD_S_SUCCESS) \ + printf(text ": " BLUE "%s (0x%"LF"X)\n" NORMAL, pcsc_stringify_error(rv), rv); \ +else \ + printf(text ": " BLUE "OK\n\n" NORMAL); + +#define PRINT_GREEN(text, value) \ + printf("%s: " GREEN "%s\n" NORMAL, text, value) + +#define PRINT_GREEN_DEC(text, value) \ + printf("%s: " GREEN "%d\n" NORMAL, text, value) + +#define PRINT_RED_DEC(text, value) \ + printf("%s: " RED "%d\n" NORMAL, text, value) + +#define PRINT_GREEN_HEX2(text, value) \ + printf("%s: " GREEN "0x%02X\n" NORMAL, text, value) + +#define PRINT_GREEN_HEX4(text, value) \ + printf("%s: " GREEN "0x%04X\n" NORMAL, text, value) + +static void parse_properties(unsigned char *bRecvBuffer, int length) +{ + unsigned char *p; + int i; + + p = bRecvBuffer; + while (p-bRecvBuffer < length) + { + int tag, len, value; + + tag = *p++; + len = *p++; + + switch(len) + { + case 1: + value = *p; + break; + case 2: + value = *p + (*(p+1)<<8); + break; + case 4: + value = *p + (*(p+1)<<8) + (*(p+2)<<16) + (*(p+3)<<24); + break; + default: + value = -1; + } + + switch(tag) + { + case PCSCv2_PART10_PROPERTY_wLcdLayout: + PRINT_GREEN_HEX4(" wLcdLayout", value); + break; + case PCSCv2_PART10_PROPERTY_bEntryValidationCondition: + PRINT_GREEN_HEX2(" bEntryValidationCondition", value); + break; + case PCSCv2_PART10_PROPERTY_bTimeOut2: + PRINT_GREEN_HEX2(" bTimeOut2", value); + break; + case PCSCv2_PART10_PROPERTY_wLcdMaxCharacters: + PRINT_GREEN_HEX4(" wLcdMaxCharacters", value); + break; + case PCSCv2_PART10_PROPERTY_wLcdMaxLines: + PRINT_GREEN_HEX4(" wLcdMaxLines", value); + break; + case PCSCv2_PART10_PROPERTY_bMinPINSize: + PRINT_GREEN_HEX2(" bMinPINSize", value); + break; + case PCSCv2_PART10_PROPERTY_bMaxPINSize: + PRINT_GREEN_HEX2(" bMaxPINSize", value); + break; + case PCSCv2_PART10_PROPERTY_sFirmwareID: + printf(" sFirmwareID: " GREEN); + for (i=0; i\n\n"); + + printf(MAGENTA "THIS PROGRAM IS NOT DESIGNED AS A TESTING TOOL!\n"); + printf("Do NOT use it unless you really know what you do.\n\n" NORMAL); + + rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext); + if (rv != SCARD_S_SUCCESS) + { + printf("SCardEstablishContext: Cannot Connect to Resource Manager %"LF"X\n", rv); + return 1; + } + + /* Retrieve the available readers list */ + rv = SCardListReaders(hContext, NULL, NULL, &dwReaders); + PCSC_ERROR_EXIT(rv, "SCardListReaders") + + mszReaders = malloc(sizeof(char)*dwReaders); + if (mszReaders == NULL) + { + printf("malloc: not enough memory\n"); + goto end; + } + + rv = SCardListReaders(hContext, NULL, mszReaders, &dwReaders); + if (rv != SCARD_S_SUCCESS) + printf("SCardListReader: %"LF"X\n", rv); + + /* Extract readers from the null separated string and get the total + * number of readers */ + nbReaders = 0; + ptr = mszReaders; + while (*ptr != '\0') + { + ptr += strlen(ptr)+1; + nbReaders++; + } + + if (nbReaders == 0) + { + printf("No reader found\n"); + goto end; + } + + /* allocate the readers table */ + readers = calloc(nbReaders, sizeof(char *)); + if (NULL == readers) + { + printf("Not enough memory for readers[]\n"); + goto end; + } + + /* fill the readers table */ + nbReaders = 0; + ptr = mszReaders; + printf("Available readers (use command line argument to select)\n"); + while (*ptr != '\0') + { + printf("%d: %s\n", nbReaders, ptr); + readers[nbReaders] = ptr; + ptr += strlen(ptr)+1; + nbReaders++; + } + printf("\n"); + + if (argc > 1) + { + reader_nb = atoi(argv[1]); + if (reader_nb < 0 || reader_nb >= nbReaders) + { + printf("Wrong reader index: %d\n", reader_nb); + goto end; + } + } + else + reader_nb = 0; + + /* connect to a reader (even without a card) */ + dwActiveProtocol = -1; + printf("Using reader: " GREEN "%s\n" NORMAL, readers[reader_nb]); + rv = SCardConnect(hContext, readers[reader_nb], SCARD_SHARE_SHARED, + SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, &hCard, &dwActiveProtocol); + printf(" Protocol: " GREEN "%"LF"d\n" NORMAL, dwActiveProtocol); + PCSC_ERROR_EXIT(rv, "SCardConnect") + +#ifdef GET_GEMPC_FIRMWARE + /* get GemPC firmware */ + printf(" Get GemPC Firmware\n"); + + /* this is specific to Gemalto readers */ + bSendBuffer[0] = 0x02; + rv = SCardControl(hCard, IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE, bSendBuffer, + 1, bRecvBuffer, sizeof(bRecvBuffer), &length); + + printf(" Firmware: " GREEN); + for (i=0; i bEntryValidationCondition; + PRINT_GREEN_HEX4(" wLcdLayout", pin_properties -> wLcdLayout); + PRINT_GREEN_DEC(" bEntryValidationCondition", bEntryValidationCondition); + PRINT_GREEN_DEC(" bTimeOut2", pin_properties -> bTimeOut2); + + printf("\n"); + } + +#ifdef GET_GEMPC_FIRMWARE + if (ccid_esc_command) + { + /* get GemPC firmware */ + printf("Get GemPC Firmware\n"); + + /* this is specific to Gemalto readers */ + bSendBuffer[0] = 0x02; + rv = SCardControl(hCard, ccid_esc_command, bSendBuffer, + 1, bRecvBuffer, sizeof(bRecvBuffer), &length); + + printf(" Firmware: " GREEN); + for (i=0; i bTimerOut = 0x00; + pin_verify -> bTimerOut2 = 0x00; + pin_verify -> bmFormatString = 0x82; + pin_verify -> bmPINBlockString = 0x08; + pin_verify -> bmPINLengthFormat = 0x00; + pin_verify -> wPINMaxExtraDigit = (PIN_min_size << 8) + PIN_max_size; + pin_verify -> bEntryValidationCondition = bEntryValidationCondition; + pin_verify -> bNumberMessage = 0x01; + pin_verify -> wLangId = 0x0904; + pin_verify -> bMsgIndex = 0x00; + pin_verify -> bTeoPrologue[0] = 0x00; + pin_verify -> bTeoPrologue[1] = 0x00; + pin_verify -> bTeoPrologue[2] = 0x00; + /* pin_verify -> ulDataLength = 0x00; we don't know the size yet */ + + /* APDU: 00 20 00 00 08 30 30 30 30 00 00 00 00 */ + offset = 0; + pin_verify -> abData[offset++] = 0x00; /* CLA */ + pin_verify -> abData[offset++] = 0x20; /* INS: VERIFY */ + pin_verify -> abData[offset++] = 0x00; /* P1 */ + pin_verify -> abData[offset++] = 0x00; /* P2 */ + pin_verify -> abData[offset++] = 0x08; /* Lc: 8 data bytes */ + pin_verify -> abData[offset++] = 0x30; /* '0' */ + pin_verify -> abData[offset++] = 0x30; /* '0' */ + pin_verify -> abData[offset++] = 0x30; /* '0' */ + pin_verify -> abData[offset++] = 0x30; /* '0' */ + pin_verify -> abData[offset++] = 0x00; /* '\0' */ + pin_verify -> abData[offset++] = 0x00; /* '\0' */ + pin_verify -> abData[offset++] = 0x00; /* '\0' */ + pin_verify -> abData[offset++] = 0x00; /* '\0' */ + pin_verify -> ulDataLength = offset; /* APDU size */ + + length = sizeof(PIN_VERIFY_STRUCTURE) + offset; + + printf(" command:"); + for (i=0; i 0) + { + /* read the fake digits */ + char in[40]; /* 4 digits + \n + \0 */ + char *s = fgets(in, sizeof(in), stdin); + + if (s) + printf("keyboard sent: %s", in); + } + else + /* if it is not a keyboard */ + printf("\n"); + } + + printf(" card response:"); + for (i=0; i bTimerOut = 0x00; + pin_modify -> bTimerOut2 = 0x00; + pin_modify -> bmFormatString = 0x82; + pin_modify -> bmPINBlockString = 0x04; + pin_modify -> bmPINLengthFormat = 0x00; + pin_modify -> bInsertionOffsetOld = 0x00; /* offset from APDU start */ + pin_modify -> bInsertionOffsetNew = 0x04; /* offset from APDU start */ + pin_modify -> wPINMaxExtraDigit = (PIN_min_size << 8) + PIN_max_size; + pin_modify -> bConfirmPIN = 0x03; /* b0 set = confirmation requested */ + /* b1 set = current PIN entry requested */ + pin_modify -> bEntryValidationCondition = bEntryValidationCondition; + pin_modify -> bNumberMessage = 0x03; /* see table above */ + pin_modify -> wLangId = 0x0904; + pin_modify -> bMsgIndex1 = 0x00; + pin_modify -> bMsgIndex2 = 0x01; + pin_modify -> bMsgIndex3 = 0x02; + pin_modify -> bTeoPrologue[0] = 0x00; + pin_modify -> bTeoPrologue[1] = 0x00; + pin_modify -> bTeoPrologue[2] = 0x00; + /* pin_modify -> ulDataLength = 0x00; we don't know the size yet */ + + /* APDU: 00 20 00 00 08 30 30 30 30 00 00 00 00 */ + offset = 0; + pin_modify -> abData[offset++] = 0x00; /* CLA */ + pin_modify -> abData[offset++] = 0x24; /* INS: CHANGE/UNBLOCK */ + pin_modify -> abData[offset++] = 0x00; /* P1 */ + pin_modify -> abData[offset++] = 0x00; /* P2 */ + pin_modify -> abData[offset++] = 0x08; /* Lc: 2x8 data bytes */ + pin_modify -> abData[offset++] = 0x30; /* '0' old PIN */ + pin_modify -> abData[offset++] = 0x30; /* '0' */ + pin_modify -> abData[offset++] = 0x30; /* '0' */ + pin_modify -> abData[offset++] = 0x30; /* '0' */ + pin_modify -> abData[offset++] = 0x30; /* '0' new PIN */ + pin_modify -> abData[offset++] = 0x30; /* '0' */ + pin_modify -> abData[offset++] = 0x30; /* '0' */ + pin_modify -> abData[offset++] = 0x30; /* '0' */ + pin_modify -> ulDataLength = offset; /* APDU size */ + + length = sizeof(PIN_MODIFY_STRUCTURE) + offset; + + printf(" command:"); + for (i=0; i 0) + { + /* read the fake digits */ + char in[40]; /* 4 digits + \n + \0 */ + char *ret; + + ret = fgets(in, sizeof(in), stdin); + if (ret) + printf("keyboard sent: %s", in); + } + else + { + /* if it is not a keyboard */ + printf("\n"); + + /* exit the for() loop */ + break; + } + } + } + + printf(" card response:"); + for (i=0; i&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) + is_target_a_directory=always + dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) is_target_a_directory=never;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +# We allow the use of options -d and -T together, by making -d +# take the precedence; this is for compatibility with GNU install. + +if test -n "$dir_arg"; then + if test -n "$dst_arg"; then + echo "$0: target directory not allowed when installing a directory." >&2 + exit 1 + fi +fi + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + if test $# -gt 1 || test "$is_target_a_directory" = always; then + if test ! -d "$dst_arg"; then + echo "$0: $dst_arg: Is not a directory." >&2 + exit 1 + fi + fi +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test "$is_target_a_directory" = never; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + dstdir=`dirname "$dst"` + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + # $RANDOM is not portable (e.g. dash); use it when possible to + # lower collision chance + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 + + # As "mkdir -p" follows symlinks and we work in /tmp possibly; so + # create the $tmpdir first (and fail if unsuccessful) to make sure + # that nobody tries to guess the $tmpdir name. + if (umask $mkdir_umask && + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + oIFS=$IFS + IFS=/ + set -f + set fnord $dstdir + shift + set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + set +f && + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/ltmain.sh b/ltmain.sh new file mode 100644 index 0000000..a736cf9 --- /dev/null +++ b/ltmain.sh @@ -0,0 +1,11156 @@ +#! /bin/sh +## DO NOT EDIT - This file generated from ./build-aux/ltmain.in +## by inline-source v2014-01-03.01 + +# libtool (GNU libtool) 2.4.6 +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +PROGRAM=libtool +PACKAGE=libtool +VERSION="2.4.6 Debian-2.4.6-2" +package_revision=2.4.6 + + +## ------ ## +## Usage. ## +## ------ ## + +# Run './libtool --help' for help with using this script from the +# command line. + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# After configure completes, it has a better idea of some of the +# shell tools we need than the defaults used by the functions shared +# with bootstrap, so set those here where they can still be over- +# ridden by the user, but otherwise take precedence. + +: ${AUTOCONF="autoconf"} +: ${AUTOMAKE="automake"} + + +## -------------------------- ## +## Source external libraries. ## +## -------------------------- ## + +# Much of our low-level functionality needs to be sourced from external +# libraries, which are installed to $pkgauxdir. + +# Set a version string for this script. +scriptversion=2015-01-20.17; # UTC + +# General shell script boiler plate, and helper functions. +# Written by Gary V. Vaughan, 2004 + +# Copyright (C) 2004-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. + +# As a special exception to the GNU General Public License, if you distribute +# this file as part of a program or library that is built using GNU Libtool, +# you may include this file under the same distribution terms that you use +# for the rest of that program. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# Evaluate this file near the top of your script to gain access to +# the functions and variables defined here: +# +# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh +# +# If you need to override any of the default environment variable +# settings, do that before evaluating this file. + + +## -------------------- ## +## Shell normalisation. ## +## -------------------- ## + +# Some shells need a little help to be as Bourne compatible as possible. +# Before doing anything else, make sure all that help has been provided! + +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac +fi + +# NLS nuisances: We save the old values in case they are required later. +_G_user_locale= +_G_safe_locale= +for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test set = \"\${$_G_var+set}\"; then + save_$_G_var=\$$_G_var + $_G_var=C + export $_G_var + _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" + _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" + fi" +done + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Make sure IFS has a sensible default +sp=' ' +nl=' +' +IFS="$sp $nl" + +# There are apparently some retarded systems that use ';' as a PATH separator! +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + + +## ------------------------- ## +## Locate command utilities. ## +## ------------------------- ## + + +# func_executable_p FILE +# ---------------------- +# Check that FILE is an executable regular file. +func_executable_p () +{ + test -f "$1" && test -x "$1" +} + + +# func_path_progs PROGS_LIST CHECK_FUNC [PATH] +# -------------------------------------------- +# Search for either a program that responds to --version with output +# containing "GNU", or else returned by CHECK_FUNC otherwise, by +# trying all the directories in PATH with each of the elements of +# PROGS_LIST. +# +# CHECK_FUNC should accept the path to a candidate program, and +# set $func_check_prog_result if it truncates its output less than +# $_G_path_prog_max characters. +func_path_progs () +{ + _G_progs_list=$1 + _G_check_func=$2 + _G_PATH=${3-"$PATH"} + + _G_path_prog_max=0 + _G_path_prog_found=false + _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} + for _G_dir in $_G_PATH; do + IFS=$_G_save_IFS + test -z "$_G_dir" && _G_dir=. + for _G_prog_name in $_G_progs_list; do + for _exeext in '' .EXE; do + _G_path_prog=$_G_dir/$_G_prog_name$_exeext + func_executable_p "$_G_path_prog" || continue + case `"$_G_path_prog" --version 2>&1` in + *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; + *) $_G_check_func $_G_path_prog + func_path_progs_result=$func_check_prog_result + ;; + esac + $_G_path_prog_found && break 3 + done + done + done + IFS=$_G_save_IFS + test -z "$func_path_progs_result" && { + echo "no acceptable sed could be found in \$PATH" >&2 + exit 1 + } +} + + +# We want to be able to use the functions in this file before configure +# has figured out where the best binaries are kept, which means we have +# to search for them ourselves - except when the results are already set +# where we skip the searches. + +# Unless the user overrides by setting SED, search the path for either GNU +# sed, or the sed that truncates its output the least. +test -z "$SED" && { + _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for _G_i in 1 2 3 4 5 6 7; do + _G_sed_script=$_G_sed_script$nl$_G_sed_script + done + echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed + _G_sed_script= + + func_check_prog_sed () + { + _G_path_prog=$1 + + _G_count=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo '' >> conftest.nl + "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin + rm -f conftest.sed + SED=$func_path_progs_result +} + + +# Unless the user overrides by setting GREP, search the path for either GNU +# grep, or the grep that truncates its output the least. +test -z "$GREP" && { + func_check_prog_grep () + { + _G_path_prog=$1 + + _G_count=0 + _G_path_prog_max=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo 'GREP' >> conftest.nl + "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin + GREP=$func_path_progs_result +} + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# All uppercase variable names are used for environment variables. These +# variables can be overridden by the user before calling a script that +# uses them if a suitable command of that name is not already available +# in the command search PATH. + +: ${CP="cp -f"} +: ${ECHO="printf %s\n"} +: ${EGREP="$GREP -E"} +: ${FGREP="$GREP -F"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} + + +## -------------------- ## +## Useful sed snippets. ## +## -------------------- ## + +sed_dirname='s|/[^/]*$||' +sed_basename='s|^.*/||' + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Same as above, but do not quote variable references. +sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' + +# Sed substitution that converts a w32 file name or path +# that contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-'\' parameter expansions in output of sed_double_quote_subst that +# were '\'-ed in input to the same. If an odd number of '\' preceded a +# '$' in input to sed_double_quote_subst, that '$' was protected from +# expansion. Since each input '\' is now two '\'s, look for any number +# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. +_G_bs='\\' +_G_bs2='\\\\' +_G_bs4='\\\\\\\\' +_G_dollar='\$' +sed_double_backslash="\ + s/$_G_bs4/&\\ +/g + s/^$_G_bs2$_G_dollar/$_G_bs&/ + s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g + s/\n//g" + + +## ----------------- ## +## Global variables. ## +## ----------------- ## + +# Except for the global variables explicitly listed below, the following +# functions in the '^func_' namespace, and the '^require_' namespace +# variables initialised in the 'Resource management' section, sourcing +# this file will not pollute your global namespace with anything +# else. There's no portable way to scope variables in Bourne shell +# though, so actually running these functions will sometimes place +# results into a variable named after the function, and often use +# temporary variables in the '^_G_' namespace. If you are careful to +# avoid using those namespaces casually in your sourcing script, things +# should continue to work as you expect. And, of course, you can freely +# overwrite any of the functions or variables defined here before +# calling anything to customize them. + +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +# Allow overriding, eg assuming that you follow the convention of +# putting '$debug_cmd' at the start of all your functions, you can get +# bash to show function call trace with: +# +# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name +debug_cmd=${debug_cmd-":"} +exit_cmd=: + +# By convention, finish your script with: +# +# exit $exit_status +# +# so that you can set exit_status to non-zero if you want to indicate +# something went wrong during execution without actually bailing out at +# the point of failure. +exit_status=$EXIT_SUCCESS + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath=$0 + +# The name of this program. +progname=`$ECHO "$progpath" |$SED "$sed_basename"` + +# Make sure we have an absolute progpath for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` + progdir=`cd "$progdir" && pwd` + progpath=$progdir/$progname + ;; + *) + _G_IFS=$IFS + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS=$_G_IFS + test -x "$progdir/$progname" && break + done + IFS=$_G_IFS + test -n "$progdir" || progdir=`pwd` + progpath=$progdir/$progname + ;; +esac + + +## ----------------- ## +## Standard options. ## +## ----------------- ## + +# The following options affect the operation of the functions defined +# below, and should be set appropriately depending on run-time para- +# meters passed on the command line. + +opt_dry_run=false +opt_quiet=false +opt_verbose=false + +# Categories 'all' and 'none' are always available. Append any others +# you will pass as the first argument to func_warning from your own +# code. +warning_categories= + +# By default, display warnings according to 'opt_warning_types'. Set +# 'warning_func' to ':' to elide all warnings, or func_fatal_error to +# treat the next displayed warning as a fatal error. +warning_func=func_warn_and_continue + +# Set to 'all' to display all warnings, 'none' to suppress all +# warnings, or a space delimited list of some subset of +# 'warning_categories' to display only the listed warnings. +opt_warning_types=all + + +## -------------------- ## +## Resource management. ## +## -------------------- ## + +# This section contains definitions for functions that each ensure a +# particular resource (a file, or a non-empty configuration variable for +# example) is available, and if appropriate to extract default values +# from pertinent package files. Call them using their associated +# 'require_*' variable to ensure that they are executed, at most, once. +# +# It's entirely deliberate that calling these functions can set +# variables that don't obey the namespace limitations obeyed by the rest +# of this file, in order that that they be as useful as possible to +# callers. + + +# require_term_colors +# ------------------- +# Allow display of bold text on terminals that support it. +require_term_colors=func_require_term_colors +func_require_term_colors () +{ + $debug_cmd + + test -t 1 && { + # COLORTERM and USE_ANSI_COLORS environment variables take + # precedence, because most terminfo databases neglect to describe + # whether color sequences are supported. + test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} + + if test 1 = "$USE_ANSI_COLORS"; then + # Standard ANSI escape sequences + tc_reset='' + tc_bold=''; tc_standout='' + tc_red=''; tc_green='' + tc_blue=''; tc_cyan='' + else + # Otherwise trust the terminfo database after all. + test -n "`tput sgr0 2>/dev/null`" && { + tc_reset=`tput sgr0` + test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` + tc_standout=$tc_bold + test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` + test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` + test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` + test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` + test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` + } + fi + } + + require_term_colors=: +} + + +## ----------------- ## +## Function library. ## +## ----------------- ## + +# This section contains a variety of useful functions to call in your +# scripts. Take note of the portable wrappers for features provided by +# some modern shells, which will fall back to slower equivalents on +# less featureful shells. + + +# func_append VAR VALUE +# --------------------- +# Append VALUE onto the existing contents of VAR. + + # We should try to minimise forks, especially on Windows where they are + # unreasonably slow, so skip the feature probes when bash or zsh are + # being used: + if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then + : ${_G_HAVE_ARITH_OP="yes"} + : ${_G_HAVE_XSI_OPS="yes"} + # The += operator was introduced in bash 3.1 + case $BASH_VERSION in + [12].* | 3.0 | 3.0*) ;; + *) + : ${_G_HAVE_PLUSEQ_OP="yes"} + ;; + esac + fi + + # _G_HAVE_PLUSEQ_OP + # Can be empty, in which case the shell is probed, "yes" if += is + # useable or anything else if it does not work. + test -z "$_G_HAVE_PLUSEQ_OP" \ + && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ + && _G_HAVE_PLUSEQ_OP=yes + +if test yes = "$_G_HAVE_PLUSEQ_OP" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_append () + { + $debug_cmd + + eval "$1+=\$2" + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_append () + { + $debug_cmd + + eval "$1=\$$1\$2" + } +fi + + +# func_append_quoted VAR VALUE +# ---------------------------- +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +if test yes = "$_G_HAVE_PLUSEQ_OP"; then + eval 'func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1+=\\ \$func_quote_for_eval_result" + }' +else + func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1=\$$1\\ \$func_quote_for_eval_result" + } +fi + + +# func_append_uniq VAR VALUE +# -------------------------- +# Append unique VALUE onto the existing contents of VAR, assuming +# entries are delimited by the first character of VALUE. For example: +# +# func_append_uniq options " --another-option option-argument" +# +# will only append to $options if " --another-option option-argument " +# is not already present somewhere in $options already (note spaces at +# each end implied by leading space in second argument). +func_append_uniq () +{ + $debug_cmd + + eval _G_current_value='`$ECHO $'$1'`' + _G_delim=`expr "$2" : '\(.\)'` + + case $_G_delim$_G_current_value$_G_delim in + *"$2$_G_delim"*) ;; + *) func_append "$@" ;; + esac +} + + +# func_arith TERM... +# ------------------ +# Set func_arith_result to the result of evaluating TERMs. + test -z "$_G_HAVE_ARITH_OP" \ + && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ + && _G_HAVE_ARITH_OP=yes + +if test yes = "$_G_HAVE_ARITH_OP"; then + eval 'func_arith () + { + $debug_cmd + + func_arith_result=$(( $* )) + }' +else + func_arith () + { + $debug_cmd + + func_arith_result=`expr "$@"` + } +fi + + +# func_basename FILE +# ------------------ +# Set func_basename_result to FILE with everything up to and including +# the last / stripped. +if test yes = "$_G_HAVE_XSI_OPS"; then + # If this shell supports suffix pattern removal, then use it to avoid + # forking. Hide the definitions single quotes in case the shell chokes + # on unsupported syntax... + _b='func_basename_result=${1##*/}' + _d='case $1 in + */*) func_dirname_result=${1%/*}$2 ;; + * ) func_dirname_result=$3 ;; + esac' + +else + # ...otherwise fall back to using sed. + _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' + _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` + if test "X$func_dirname_result" = "X$1"; then + func_dirname_result=$3 + else + func_append func_dirname_result "$2" + fi' +fi + +eval 'func_basename () +{ + $debug_cmd + + '"$_b"' +}' + + +# func_dirname FILE APPEND NONDIR_REPLACEMENT +# ------------------------------------------- +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +eval 'func_dirname () +{ + $debug_cmd + + '"$_d"' +}' + + +# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT +# -------------------------------------------------------- +# Perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# For efficiency, we do not delegate to the functions above but instead +# duplicate the functionality here. +eval 'func_dirname_and_basename () +{ + $debug_cmd + + '"$_b"' + '"$_d"' +}' + + +# func_echo ARG... +# ---------------- +# Echo program name prefixed message. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_echo_all ARG... +# -------------------- +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + + +# func_echo_infix_1 INFIX ARG... +# ------------------------------ +# Echo program name, followed by INFIX on the first line, with any +# additional lines not showing INFIX. +func_echo_infix_1 () +{ + $debug_cmd + + $require_term_colors + + _G_infix=$1; shift + _G_indent=$_G_infix + _G_prefix="$progname: $_G_infix: " + _G_message=$* + + # Strip color escape sequences before counting printable length + for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" + do + test -n "$_G_tc" && { + _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` + _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` + } + done + _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes + + func_echo_infix_1_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_infix_1_IFS + $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 + _G_prefix=$_G_indent + done + IFS=$func_echo_infix_1_IFS +} + + +# func_error ARG... +# ----------------- +# Echo program name prefixed message to standard error. +func_error () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 +} + + +# func_fatal_error ARG... +# ----------------------- +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + $debug_cmd + + func_error "$*" + exit $EXIT_FAILURE +} + + +# func_grep EXPRESSION FILENAME +# ----------------------------- +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $debug_cmd + + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_len STRING +# --------------- +# Set func_len_result to the length of STRING. STRING may not +# start with a hyphen. + test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_len () + { + $debug_cmd + + func_len_result=${#1} + }' +else + func_len () + { + $debug_cmd + + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` + } +fi + + +# func_mkdir_p DIRECTORY-PATH +# --------------------------- +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + $debug_cmd + + _G_directory_path=$1 + _G_dir_list= + + if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then + + # Protect directory names starting with '-' + case $_G_directory_path in + -*) _G_directory_path=./$_G_directory_path ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$_G_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + _G_dir_list=$_G_directory_path:$_G_dir_list + + # If the last portion added has no slash in it, the list is done + case $_G_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` + done + _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` + + func_mkdir_p_IFS=$IFS; IFS=: + for _G_dir in $_G_dir_list; do + IFS=$func_mkdir_p_IFS + # mkdir can fail with a 'File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$_G_dir" 2>/dev/null || : + done + IFS=$func_mkdir_p_IFS + + # Bail out if we (or some other process) failed to create a directory. + test -d "$_G_directory_path" || \ + func_fatal_error "Failed to create '$1'" + fi +} + + +# func_mktempdir [BASENAME] +# ------------------------- +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, BASENAME is the basename for that directory. +func_mktempdir () +{ + $debug_cmd + + _G_template=${TMPDIR-/tmp}/${1-$progname} + + if test : = "$opt_dry_run"; then + # Return a directory name, but don't create it in dry-run mode + _G_tmpdir=$_G_template-$$ + else + + # If mktemp works, use that first and foremost + _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` + + if test ! -d "$_G_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + _G_tmpdir=$_G_template-${RANDOM-0}$$ + + func_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$_G_tmpdir" + umask $func_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$_G_tmpdir" || \ + func_fatal_error "cannot create temporary directory '$_G_tmpdir'" + fi + + $ECHO "$_G_tmpdir" +} + + +# func_normal_abspath PATH +# ------------------------ +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +func_normal_abspath () +{ + $debug_cmd + + # These SED scripts presuppose an absolute path with a trailing slash. + _G_pathcar='s|^/\([^/]*\).*$|\1|' + _G_pathcdr='s|^/[^/]*||' + _G_removedotparts=':dotsl + s|/\./|/|g + t dotsl + s|/\.$|/|' + _G_collapseslashes='s|/\{1,\}|/|g' + _G_finalslash='s|/*$|/|' + + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` + while :; do + # Processed it all yet? + if test / = "$func_normal_abspath_tpath"; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result"; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + + +# func_notquiet ARG... +# -------------------- +# Echo program name prefixed message only when not in quiet mode. +func_notquiet () +{ + $debug_cmd + + $opt_quiet || func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + + +# func_relative_path SRCDIR DSTDIR +# -------------------------------- +# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. +func_relative_path () +{ + $debug_cmd + + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=$func_dirname_result + if test -z "$func_relative_path_tlibdir"; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test -n "$func_stripname_result"; then + func_append func_relative_path_result "/$func_stripname_result" + fi + + # Normalisation. If bindir is libdir, return '.' else relative path. + if test -n "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + fi + + test -n "$func_relative_path_result" || func_relative_path_result=. + + : +} + + +# func_quote_for_eval ARG... +# -------------------------- +# Aesthetically quote ARGs to be evaled later. +# This function returns two values: +# i) func_quote_for_eval_result +# double-quoted, suitable for a subsequent eval +# ii) func_quote_for_eval_unquoted_result +# has all characters that are still active within double +# quotes backslashified. +func_quote_for_eval () +{ + $debug_cmd + + func_quote_for_eval_unquoted_result= + func_quote_for_eval_result= + while test 0 -lt $#; do + case $1 in + *[\\\`\"\$]*) + _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; + *) + _G_unquoted_arg=$1 ;; + esac + if test -n "$func_quote_for_eval_unquoted_result"; then + func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" + else + func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" + fi + + case $_G_unquoted_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_quoted_arg=\"$_G_unquoted_arg\" + ;; + *) + _G_quoted_arg=$_G_unquoted_arg + ;; + esac + + if test -n "$func_quote_for_eval_result"; then + func_append func_quote_for_eval_result " $_G_quoted_arg" + else + func_append func_quote_for_eval_result "$_G_quoted_arg" + fi + shift + done +} + + +# func_quote_for_expand ARG +# ------------------------- +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + $debug_cmd + + case $1 in + *[\\\`\"]*) + _G_arg=`$ECHO "$1" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; + *) + _G_arg=$1 ;; + esac + + case $_G_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_arg=\"$_G_arg\" + ;; + esac + + func_quote_for_expand_result=$_G_arg +} + + +# func_stripname PREFIX SUFFIX NAME +# --------------------------------- +# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_stripname () + { + $debug_cmd + + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary variable first. + func_stripname_result=$3 + func_stripname_result=${func_stripname_result#"$1"} + func_stripname_result=${func_stripname_result%"$2"} + }' +else + func_stripname () + { + $debug_cmd + + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; + esac + } +fi + + +# func_show_eval CMD [FAIL_EXP] +# ----------------------------- +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + func_quote_for_expand "$_G_cmd" + eval "func_notquiet $func_quote_for_expand_result" + + $opt_dry_run || { + eval "$_G_cmd" + _G_status=$? + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_show_eval_locale CMD [FAIL_EXP] +# ------------------------------------ +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + $opt_quiet || { + func_quote_for_expand "$_G_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + $opt_dry_run || { + eval "$_G_user_locale + $_G_cmd" + _G_status=$? + eval "$_G_safe_locale" + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_tr_sh +# ---------- +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + $debug_cmd + + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_verbose ARG... +# ------------------- +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $debug_cmd + + $opt_verbose && func_echo "$*" + + : +} + + +# func_warn_and_continue ARG... +# ----------------------------- +# Echo program name prefixed warning message to standard error. +func_warn_and_continue () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 +} + + +# func_warning CATEGORY ARG... +# ---------------------------- +# Echo program name prefixed warning message to standard error. Warning +# messages can be filtered according to CATEGORY, where this function +# elides messages where CATEGORY is not listed in the global variable +# 'opt_warning_types'. +func_warning () +{ + $debug_cmd + + # CATEGORY must be in the warning_categories list! + case " $warning_categories " in + *" $1 "*) ;; + *) func_internal_error "invalid warning category '$1'" ;; + esac + + _G_category=$1 + shift + + case " $opt_warning_types " in + *" $_G_category "*) $warning_func ${1+"$@"} ;; + esac +} + + +# func_sort_ver VER1 VER2 +# ----------------------- +# 'sort -V' is not generally available. +# Note this deviates from the version comparison in automake +# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a +# but this should suffice as we won't be specifying old +# version formats or redundant trailing .0 in bootstrap.conf. +# If we did want full compatibility then we should probably +# use m4_version_compare from autoconf. +func_sort_ver () +{ + $debug_cmd + + printf '%s\n%s\n' "$1" "$2" \ + | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n +} + +# func_lt_ver PREV CURR +# --------------------- +# Return true if PREV and CURR are in the correct order according to +# func_sort_ver, otherwise false. Use it like this: +# +# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." +func_lt_ver () +{ + $debug_cmd + + test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: +#! /bin/sh + +# Set a version string for this script. +scriptversion=2014-01-07.03; # UTC + +# A portable, pluggable option parser for Bourne shell. +# Written by Gary V. Vaughan, 2010 + +# Copyright (C) 2010-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# This file is a library for parsing options in your shell scripts along +# with assorted other useful supporting features that you can make use +# of too. +# +# For the simplest scripts you might need only: +# +# #!/bin/sh +# . relative/path/to/funclib.sh +# . relative/path/to/options-parser +# scriptversion=1.0 +# func_options ${1+"$@"} +# eval set dummy "$func_options_result"; shift +# ...rest of your script... +# +# In order for the '--version' option to work, you will need to have a +# suitably formatted comment like the one at the top of this file +# starting with '# Written by ' and ending with '# warranty; '. +# +# For '-h' and '--help' to work, you will also need a one line +# description of your script's purpose in a comment directly above the +# '# Written by ' line, like the one at the top of this file. +# +# The default options also support '--debug', which will turn on shell +# execution tracing (see the comment above debug_cmd below for another +# use), and '--verbose' and the func_verbose function to allow your script +# to display verbose messages only when your user has specified +# '--verbose'. +# +# After sourcing this file, you can plug processing for additional +# options by amending the variables from the 'Configuration' section +# below, and following the instructions in the 'Option parsing' +# section further down. + +## -------------- ## +## Configuration. ## +## -------------- ## + +# You should override these variables in your script after sourcing this +# file so that they reflect the customisations you have added to the +# option parser. + +# The usage line for option parsing errors and the start of '-h' and +# '--help' output messages. You can embed shell variables for delayed +# expansion at the time the message is displayed, but you will need to +# quote other shell meta-characters carefully to prevent them being +# expanded when the contents are evaled. +usage='$progpath [OPTION]...' + +# Short help message in response to '-h' and '--help'. Add to this or +# override it after sourcing this library to reflect the full set of +# options your script accepts. +usage_message="\ + --debug enable verbose shell tracing + -W, --warnings=CATEGORY + report the warnings falling in CATEGORY [all] + -v, --verbose verbosely report processing + --version print version information and exit + -h, --help print short or long help message and exit +" + +# Additional text appended to 'usage_message' in response to '--help'. +long_help_message=" +Warning categories include: + 'all' show all warnings + 'none' turn off all the warnings + 'error' warnings are treated as fatal errors" + +# Help message printed before fatal option parsing errors. +fatal_help="Try '\$progname --help' for more information." + + + +## ------------------------- ## +## Hook function management. ## +## ------------------------- ## + +# This section contains functions for adding, removing, and running hooks +# to the main code. A hook is just a named list of of function, that can +# be run in order later on. + +# func_hookable FUNC_NAME +# ----------------------- +# Declare that FUNC_NAME will run hooks added with +# 'func_add_hook FUNC_NAME ...'. +func_hookable () +{ + $debug_cmd + + func_append hookable_fns " $1" +} + + +# func_add_hook FUNC_NAME HOOK_FUNC +# --------------------------------- +# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must +# first have been declared "hookable" by a call to 'func_hookable'. +func_add_hook () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not accept hook functions." ;; + esac + + eval func_append ${1}_hooks '" $2"' +} + + +# func_remove_hook FUNC_NAME HOOK_FUNC +# ------------------------------------ +# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. +func_remove_hook () +{ + $debug_cmd + + eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' +} + + +# func_run_hooks FUNC_NAME [ARG]... +# --------------------------------- +# Run all hook functions registered to FUNC_NAME. +# It is assumed that the list of hook functions contains nothing more +# than a whitespace-delimited list of legal shell function names, and +# no effort is wasted trying to catch shell meta-characters or preserve +# whitespace. +func_run_hooks () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not support hook funcions.n" ;; + esac + + eval _G_hook_fns=\$$1_hooks; shift + + for _G_hook in $_G_hook_fns; do + eval $_G_hook '"$@"' + + # store returned options list back into positional + # parameters for next 'cmd' execution. + eval _G_hook_result=\$${_G_hook}_result + eval set dummy "$_G_hook_result"; shift + done + + func_quote_for_eval ${1+"$@"} + func_run_hooks_result=$func_quote_for_eval_result +} + + + +## --------------- ## +## Option parsing. ## +## --------------- ## + +# In order to add your own option parsing hooks, you must accept the +# full positional parameter list in your hook function, remove any +# options that you action, and then pass back the remaining unprocessed +# options in '_result', escaped suitably for +# 'eval'. Like this: +# +# my_options_prep () +# { +# $debug_cmd +# +# # Extend the existing usage message. +# usage_message=$usage_message' +# -s, --silent don'\''t print informational messages +# ' +# +# func_quote_for_eval ${1+"$@"} +# my_options_prep_result=$func_quote_for_eval_result +# } +# func_add_hook func_options_prep my_options_prep +# +# +# my_silent_option () +# { +# $debug_cmd +# +# # Note that for efficiency, we parse as many options as we can +# # recognise in a loop before passing the remainder back to the +# # caller on the first unrecognised argument we encounter. +# while test $# -gt 0; do +# opt=$1; shift +# case $opt in +# --silent|-s) opt_silent=: ;; +# # Separate non-argument short options: +# -s*) func_split_short_opt "$_G_opt" +# set dummy "$func_split_short_opt_name" \ +# "-$func_split_short_opt_arg" ${1+"$@"} +# shift +# ;; +# *) set dummy "$_G_opt" "$*"; shift; break ;; +# esac +# done +# +# func_quote_for_eval ${1+"$@"} +# my_silent_option_result=$func_quote_for_eval_result +# } +# func_add_hook func_parse_options my_silent_option +# +# +# my_option_validation () +# { +# $debug_cmd +# +# $opt_silent && $opt_verbose && func_fatal_help "\ +# '--silent' and '--verbose' options are mutually exclusive." +# +# func_quote_for_eval ${1+"$@"} +# my_option_validation_result=$func_quote_for_eval_result +# } +# func_add_hook func_validate_options my_option_validation +# +# You'll alse need to manually amend $usage_message to reflect the extra +# options you parse. It's preferable to append if you can, so that +# multiple option parsing hooks can be added safely. + + +# func_options [ARG]... +# --------------------- +# All the functions called inside func_options are hookable. See the +# individual implementations for details. +func_hookable func_options +func_options () +{ + $debug_cmd + + func_options_prep ${1+"$@"} + eval func_parse_options \ + ${func_options_prep_result+"$func_options_prep_result"} + eval func_validate_options \ + ${func_parse_options_result+"$func_parse_options_result"} + + eval func_run_hooks func_options \ + ${func_validate_options_result+"$func_validate_options_result"} + + # save modified positional parameters for caller + func_options_result=$func_run_hooks_result +} + + +# func_options_prep [ARG]... +# -------------------------- +# All initialisations required before starting the option parse loop. +# Note that when calling hook functions, we pass through the list of +# positional parameters. If a hook function modifies that list, and +# needs to propogate that back to rest of this script, then the complete +# modified list must be put in 'func_run_hooks_result' before +# returning. +func_hookable func_options_prep +func_options_prep () +{ + $debug_cmd + + # Option defaults: + opt_verbose=false + opt_warning_types= + + func_run_hooks func_options_prep ${1+"$@"} + + # save modified positional parameters for caller + func_options_prep_result=$func_run_hooks_result +} + + +# func_parse_options [ARG]... +# --------------------------- +# The main option parsing loop. +func_hookable func_parse_options +func_parse_options () +{ + $debug_cmd + + func_parse_options_result= + + # this just eases exit handling + while test $# -gt 0; do + # Defer to hook functions for initial option parsing, so they + # get priority in the event of reusing an option name. + func_run_hooks func_parse_options ${1+"$@"} + + # Adjust func_parse_options positional parameters to match + eval set dummy "$func_run_hooks_result"; shift + + # Break out of the loop if we already parsed every option. + test $# -gt 0 || break + + _G_opt=$1 + shift + case $_G_opt in + --debug|-x) debug_cmd='set -x' + func_echo "enabling shell trace mode" + $debug_cmd + ;; + + --no-warnings|--no-warning|--no-warn) + set dummy --warnings none ${1+"$@"} + shift + ;; + + --warnings|--warning|-W) + test $# = 0 && func_missing_arg $_G_opt && break + case " $warning_categories $1" in + *" $1 "*) + # trailing space prevents matching last $1 above + func_append_uniq opt_warning_types " $1" + ;; + *all) + opt_warning_types=$warning_categories + ;; + *none) + opt_warning_types=none + warning_func=: + ;; + *error) + opt_warning_types=$warning_categories + warning_func=func_fatal_error + ;; + *) + func_fatal_error \ + "unsupported warning category: '$1'" + ;; + esac + shift + ;; + + --verbose|-v) opt_verbose=: ;; + --version) func_version ;; + -\?|-h) func_usage ;; + --help) func_help ;; + + # Separate optargs to long options (plugins may need this): + --*=*) func_split_equals "$_G_opt" + set dummy "$func_split_equals_lhs" \ + "$func_split_equals_rhs" ${1+"$@"} + shift + ;; + + # Separate optargs to short options: + -W*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-v*|-x*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + func_parse_options_result=$func_quote_for_eval_result +} + + +# func_validate_options [ARG]... +# ------------------------------ +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +func_hookable func_validate_options +func_validate_options () +{ + $debug_cmd + + # Display all warnings if -W was not given. + test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" + + func_run_hooks func_validate_options ${1+"$@"} + + # Bail if the options were screwed! + $exit_cmd $EXIT_FAILURE + + # save modified positional parameters for caller + func_validate_options_result=$func_run_hooks_result +} + + + +## ----------------- ## +## Helper functions. ## +## ----------------- ## + +# This section contains the helper functions used by the rest of the +# hookable option parser framework in ascii-betical order. + + +# func_fatal_help ARG... +# ---------------------- +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + eval \$ECHO \""$fatal_help"\" + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + + +# func_help +# --------- +# Echo long help message to standard output and exit. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message" + exit 0 +} + + +# func_missing_arg ARGNAME +# ------------------------ +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $debug_cmd + + func_error "Missing argument for '$1'." + exit_cmd=exit +} + + +# func_split_equals STRING +# ------------------------ +# Set func_split_equals_lhs and func_split_equals_rhs shell variables after +# splitting STRING at the '=' sign. +test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=${1%%=*} + func_split_equals_rhs=${1#*=} + test "x$func_split_equals_lhs" = "x$1" \ + && func_split_equals_rhs= + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` + func_split_equals_rhs= + test "x$func_split_equals_lhs" = "x$1" \ + || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` + } +fi #func_split_equals + + +# func_split_short_opt SHORTOPT +# ----------------------------- +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"} + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` + func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` + } +fi #func_split_short_opt + + +# func_usage +# ---------- +# Echo short help message to standard output and exit. +func_usage () +{ + $debug_cmd + + func_usage_message + $ECHO "Run '$progname --help |${PAGER-more}' for full usage" + exit 0 +} + + +# func_usage_message +# ------------------ +# Echo short help message to standard output. +func_usage_message () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + echo + $SED -n 's|^# || + /^Written by/{ + x;p;x + } + h + /^Written by/q' < "$progpath" + echo + eval \$ECHO \""$usage_message"\" +} + + +# func_version +# ------------ +# Echo version message to standard output and exit. +func_version () +{ + $debug_cmd + + printf '%s\n' "$progname $scriptversion" + $SED -n ' + /(C)/!b go + :more + /\./!{ + N + s|\n# | | + b more + } + :go + /^# Written by /,/# warranty; / { + s|^# || + s|^# *$|| + s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| + p + } + /^# Written by / { + s|^# || + p + } + /^warranty; /q' < "$progpath" + + exit $? +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: + +# Set a version string. +scriptversion='(GNU libtool) 2.4.6' + + +# func_echo ARG... +# ---------------- +# Libtool also displays the current mode in messages, so override +# funclib.sh func_echo with this custom definition. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_warning ARG... +# ------------------- +# Libtool warnings are not categorized, so override funclib.sh +# func_warning with this simpler definition. +func_warning () +{ + $debug_cmd + + $warning_func ${1+"$@"} +} + + +## ---------------- ## +## Options parsing. ## +## ---------------- ## + +# Hook in the functions to make sure our own options are parsed during +# the option parsing loop. + +usage='$progpath [OPTION]... [MODE-ARG]...' + +# Short help message in response to '-h'. +usage_message="Options: + --config show all configuration variables + --debug enable verbose shell tracing + -n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --mode=MODE use operation mode MODE + --no-warnings equivalent to '-Wnone' + --preserve-dup-deps don't remove duplicate dependency libraries + --quiet, --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + -v, --verbose print more informational messages than default + --version print version information + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] + -h, --help, --help-all print short, long, or detailed help message +" + +# Additional text appended to 'usage_message' in response to '--help'. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. When passed as first option, +'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. +Try '$progname --help --mode=MODE' for a more detailed description of MODE. + +When reporting a bug, please describe a test case to reproduce it and +include the following information: + + host-triplet: $host + shell: $SHELL + compiler: $LTCC + compiler flags: $LTCFLAGS + linker: $LD (gnu? $with_gnu_ld) + version: $progname $scriptversion Debian-2.4.6-2 + automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` + autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` + +Report bugs to . +GNU libtool home page: . +General help using GNU software: ." + exit 0 +} + + +# func_lo2o OBJECT-NAME +# --------------------- +# Transform OBJECT-NAME from a '.lo' suffix to the platform specific +# object suffix. + +lo2o=s/\\.lo\$/.$objext/ +o2lo=s/\\.$objext\$/.lo/ + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_lo2o () + { + case $1 in + *.lo) func_lo2o_result=${1%.lo}.$objext ;; + * ) func_lo2o_result=$1 ;; + esac + }' + + # func_xform LIBOBJ-OR-SOURCE + # --------------------------- + # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) + # suffix to a '.lo' libtool-object suffix. + eval 'func_xform () + { + func_xform_result=${1%.*}.lo + }' +else + # ...otherwise fall back to using sed. + func_lo2o () + { + func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` + } + + func_xform () + { + func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` + } +fi + + +# func_fatal_configuration ARG... +# ------------------------------- +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func__fatal_error ${1+"$@"} \ + "See the $PACKAGE documentation for more information." \ + "Fatal configuration error." +} + + +# func_config +# ----------- +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + + +# func_features +# ------------- +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test yes = "$build_libtool_libs"; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test yes = "$build_old_libs"; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + + +# func_enable_tag TAGNAME +# ----------------------- +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname=$1 + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf=/$re_begincf/,/$re_endcf/p + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + + +# func_check_version_match +# ------------------------ +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# libtool_options_prep [ARG]... +# ----------------------------- +# Preparation for options parsed by libtool. +libtool_options_prep () +{ + $debug_mode + + # Option defaults: + opt_config=false + opt_dlopen= + opt_dry_run=false + opt_help=false + opt_mode= + opt_preserve_dup_deps=false + opt_quiet=false + + nonopt= + preserve_args= + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Pass back the list of options. + func_quote_for_eval ${1+"$@"} + libtool_options_prep_result=$func_quote_for_eval_result +} +func_add_hook func_options_prep libtool_options_prep + + +# libtool_parse_options [ARG]... +# --------------------------------- +# Provide handling for libtool specific options. +libtool_parse_options () +{ + $debug_cmd + + # Perform our own loop to consume as many options as possible in + # each iteration. + while test $# -gt 0; do + _G_opt=$1 + shift + case $_G_opt in + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + + --config) func_config ;; + + --dlopen|-dlopen) + opt_dlopen="${opt_dlopen+$opt_dlopen +}$1" + shift + ;; + + --preserve-dup-deps) + opt_preserve_dup_deps=: ;; + + --features) func_features ;; + + --finish) set dummy --mode finish ${1+"$@"}; shift ;; + + --help) opt_help=: ;; + + --help-all) opt_help=': help-all' ;; + + --mode) test $# = 0 && func_missing_arg $_G_opt && break + opt_mode=$1 + case $1 in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $_G_opt" + exit_cmd=exit + break + ;; + esac + shift + ;; + + --no-silent|--no-quiet) + opt_quiet=false + func_append preserve_args " $_G_opt" + ;; + + --no-warnings|--no-warning|--no-warn) + opt_warning=false + func_append preserve_args " $_G_opt" + ;; + + --no-verbose) + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --silent|--quiet) + opt_quiet=: + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --tag) test $# = 0 && func_missing_arg $_G_opt && break + opt_tag=$1 + func_append preserve_args " $_G_opt $1" + func_enable_tag "$1" + shift + ;; + + --verbose|-v) opt_quiet=false + opt_verbose=: + func_append preserve_args " $_G_opt" + ;; + + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + libtool_parse_options_result=$func_quote_for_eval_result +} +func_add_hook func_parse_options libtool_parse_options + + + +# libtool_validate_options [ARG]... +# --------------------------------- +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +libtool_validate_options () +{ + # save first non-option argument + if test 0 -lt $#; then + nonopt=$1 + shift + fi + + # preserve --debug + test : = "$debug_cmd" || func_append preserve_args " --debug" + + case $host in + # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 + # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 + *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + test yes != "$build_libtool_libs" \ + && test yes != "$build_old_libs" \ + && func_fatal_configuration "not configured to build any kind of library" + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test execute != "$opt_mode"; then + func_error "unrecognized option '-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help=$help + help="Try '$progname --help --mode=$opt_mode' for more information." + } + + # Pass back the unparsed argument list + func_quote_for_eval ${1+"$@"} + libtool_validate_options_result=$func_quote_for_eval_result +} +func_add_hook func_validate_options libtool_validate_options + + +# Process options as early as possible so that --help and --version +# can return quickly. +func_options ${1+"$@"} +eval set dummy "$func_options_result"; shift + + + +## ----------- ## +## Main. ## +## ----------- ## + +magic='%%%MAGIC variable%%%' +magic_exe='%%%MAGIC EXE variable%%%' + +# Global variables. +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# func_generated_by_libtool +# True iff stdin has been generated by Libtool. This function is only +# a basic sanity check; it will hardly flush out determined imposters. +func_generated_by_libtool_p () +{ + $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if 'file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case $lalib_p_line in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test yes = "$lalib_p" +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + test -f "$1" && + $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $debug_cmd + + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# 'FILE.' does not work on cygwin managed mounts. +func_source () +{ + $debug_cmd + + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case $lt_sysroot:$1 in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result='='$func_stripname_result + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $debug_cmd + + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with '--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=$1 + if test yes = "$build_libtool_libs"; then + write_lobj=\'$2\' + else + write_lobj=none + fi + + if test yes = "$build_old_libs"; then + write_oldobj=\'$3\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $debug_cmd + + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result= + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result"; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $debug_cmd + + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $debug_cmd + + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $debug_cmd + + if test -z "$2" && test -n "$1"; then + func_error "Could not determine host file name corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result=$1 + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $debug_cmd + + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " '$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result=$3 + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $debug_cmd + + case $4 in + $1 ) func_to_host_path_result=$3$func_to_host_path_result + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via '$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $debug_cmd + + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $debug_cmd + + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result=$1 +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result=$func_convert_core_msys_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result=$func_convert_core_file_wine_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via '$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $debug_cmd + + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd=func_convert_path_$func_stripname_result + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $debug_cmd + + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result=$1 +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_msys_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_path_wine_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_dll_def_p FILE +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with _LT_DLL_DEF_P in libtool.m4 +func_dll_def_p () +{ + $debug_cmd + + func_dll_def_p_tmp=`$SED -n \ + -e 's/^[ ]*//' \ + -e '/^\(;.*\)*$/d' \ + -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ + -e q \ + "$1"` + test DEF = "$func_dll_def_p_tmp" +} + + +# func_mode_compile arg... +func_mode_compile () +{ + $debug_cmd + + # Get the compilation command and the source file. + base_compile= + srcfile=$nonopt # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg=$arg + arg_mode=normal + ;; + + target ) + libobj=$arg + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify '-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs=$IFS; IFS=, + for arg in $args; do + IFS=$save_ifs + func_append_quoted lastarg "$arg" + done + IFS=$save_ifs + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg=$srcfile + srcfile=$arg + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with '-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj=$func_basename_result + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from '$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test yes = "$build_libtool_libs" \ + || func_fatal_configuration "cannot build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name '$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname=$func_basename_result + xdir=$func_dirname_result + lobj=$xdir$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test yes = "$build_old_libs"; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test no = "$compiler_c_o"; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext + lockfile=$output_obj.lock + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test yes = "$need_locks"; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test warn = "$need_locks"; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test yes = "$build_libtool_libs"; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test no != "$pic_mode"; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test yes = "$suppress_opt"; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test yes = "$build_old_libs"; then + if test yes != "$pic_mode"; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test yes = "$compiler_c_o"; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test no != "$need_locks"; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test compile = "$opt_mode" && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a '.o' file suitable for static linking + -static only build a '.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a 'standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix '.c' with the +library object suffix, '.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to '-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the '--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the 'install' or 'cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE use a list of object files found in FILE to specify objects + -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with '-') are ignored. + +Every other argument is treated as a filename. Files ending in '.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in '.la', then a libtool library is created, +only library objects ('.lo' files) may be specified, and '-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created +using 'ar' and 'ranlib', or on Windows using 'lib'. + +If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode '$opt_mode'" + ;; + esac + + echo + $ECHO "Try '$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test : = "$opt_help"; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | $SED -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + $SED '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $debug_cmd + + # The first argument is the command name. + cmd=$nonopt + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "'$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "'$file' was not linked with '-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir=$func_dirname_result + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir=$func_dirname_result + ;; + + *) + func_warning "'-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir=$absdir + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic=$magic + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file=$progdir/$program + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file=$progdir/$program + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if $opt_dry_run; then + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + else + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd=\$cmd$args + fi +} + +test execute = "$opt_mode" && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $debug_cmd + + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "'$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument '$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and '=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_quiet && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the '-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the '$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the '$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the '$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test finish = "$opt_mode" && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $debug_cmd + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac + then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=false + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=: ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test X-m = "X$prev" && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the '$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=: + if $isdir; then + destdir=$dest + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir=$func_dirname_result + destname=$func_basename_result + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "'$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "'$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir=$func_dirname_result + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking '$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname=$1 + shift + + srcname=$realname + test -n "$relink_command" && srcname=${realname}T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme=$stripme + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme= + ;; + esac + ;; + os2*) + case $realname in + *_dll.a) + tstripme= + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try 'ln -sf' first, because the 'ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib=$destdir/$realname + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name=$func_basename_result + instname=$dir/${name}i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest=$destfile + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to '$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test yes = "$build_old_libs"; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext= + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=.exe + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script '$wrapper'" + + finalize=: + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "'$lib' has not been installed in '$libdir'" + finalize=false + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test no = "$fast_install" && test -n "$relink_command"; then + $opt_dry_run || { + if $finalize; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file=$func_basename_result + outputname=$tmpdir/$file + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_quiet || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink '$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file=$outputname + else + func_warning "cannot relink '$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name=$func_basename_result + + # Set up the ranlib parameters. + oldlib=$destdir/$name + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run '$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test install = "$opt_mode" && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $debug_cmd + + my_outputname=$1 + my_originator=$2 + my_pic_p=${3-false} + my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms=${my_outputname}S.c + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist=$output_objdir/$my_outputname.nm + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* External symbol declarations for the compiler. */\ +" + + if test yes = "$dlself"; then + func_verbose "generating symbol list for '$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from '$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols=$output_objdir/$outputname.exp + $opt_dry_run || { + $RM $export_symbols + eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from '$dlprefile'" + func_basename "$dlprefile" + name=$func_basename_result + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename= + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname"; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename=$func_basename_result + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename"; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + func_show_eval '$RM "${nlist}I"' + if test -n "$global_symbol_to_import"; then + eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[];\ +" + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ +static void lt_syminit(void) +{ + LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; + for (; symbol->name; ++symbol) + {" + $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" + echo >> "$output_objdir/$my_dlsyms" "\ + } +}" + fi + echo >> "$output_objdir/$my_dlsyms" "\ +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{ {\"$my_originator\", (void *) 0}," + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ + {\"@INIT@\", (void *) <_syminit}," + fi + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + $my_pic_p && pic_flag_for_symtable=" $pic_flag" + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' + + # Transform the symbol file into the correct name. + symfileobj=$output_objdir/${my_outputname}S.$objext + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for '$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $debug_cmd + + win32_libid_type=unknown + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + case $nm_interface in + "MS dumpbin") + if func_cygming_ms_implib_p "$1" || + func_cygming_gnu_implib_p "$1" + then + win32_nmres=import + else + win32_nmres= + fi + ;; + *) + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s|.*|import| + p + q + } + }'` + ;; + esac + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $debug_cmd + + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $debug_cmd + + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive that possess that section. Heuristic: eliminate + # all those that have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $debug_cmd + + if func_cygming_gnu_implib_p "$1"; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1"; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result= + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $debug_cmd + + f_ex_an_ar_dir=$1; shift + f_ex_an_ar_oldlib=$1 + if test yes = "$lock_old_archive_extraction"; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test yes = "$lock_old_archive_extraction"; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $debug_cmd + + my_gentop=$1; shift + my_oldlibs=${1+"$@"} + my_oldobjs= + my_xlib= + my_xabs= + my_xdir= + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib=$func_basename_result + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir=$my_gentop/$my_xlib_u + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + func_basename "$darwin_archive" + darwin_base_archive=$func_basename_result + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches; do + func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" + $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" + cd "unfat-$$/$darwin_base_archive-$darwin_arch" + func_extract_an_archive "`pwd`" "$darwin_base_archive" + cd "$darwin_curdir" + $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result=$my_oldobjs +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory where it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test yes = "$fast_install"; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + \$ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* declarations of non-ANSI functions */ +#if defined __MINGW32__ +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined __CYGWIN__ +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined other_platform || defined ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined _MSC_VER +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +#elif defined __MINGW32__ +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined __CYGWIN__ +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined other platforms ... */ +#endif + +#if defined PATH_MAX +# define LT_PATHMAX PATH_MAX +#elif defined MAXPATHLEN +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ + defined __OS2__ +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free (stale); stale = 0; } \ +} while (0) + +#if defined LT_DEBUGWRAPPER +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + size_t tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined HAVE_DOS_BASED_FILE_SYSTEM + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined HAVE_DOS_BASED_FILE_SYSTEM + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = (size_t) (q - p); + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (STREQ (str, pat)) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + size_t len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + size_t orig_value_len = strlen (orig_value); + size_t add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + size_t len = strlen (new_value); + while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[--len] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -n -e ' +s/^\(.\{79\}\)\(..*\)/\1\ +\2/ +h +s/\([\\"]\)/\\\1/g +s/$/\\n/ +s/\([^\n]*\).*/ fputs ("\1", f);/p +g +D' + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $debug_cmd + + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_suncc_cstd_abi +# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! +# Several compiler flags select an ABI that is incompatible with the +# Cstd library. Avoid specifying it if any are in CXXFLAGS. +func_suncc_cstd_abi () +{ + $debug_cmd + + case " $compile_command " in + *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) + suncc_use_cstd_abi=no + ;; + *) + suncc_use_cstd_abi=yes + ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $debug_cmd + + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # what system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll that has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + os2dllname= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=false + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module=$wl-single_module + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test yes != "$build_libtool_libs" \ + && func_fatal_configuration "cannot build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg=$1 + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir=$arg + prev= + continue + ;; + dlfiles|dlprefiles) + $preload || { + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=: + } + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test no = "$dlself"; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test dlprefiles = "$prev"; then + dlself=yes + elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test dlfiles = "$prev"; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols=$arg + test -f "$arg" \ + || func_fatal_error "symbol file '$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex=$arg + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir=$arg + prev= + continue + ;; + mllvm) + # Clang does not use LLVM to link, so we can simply discard any + # '-mllvm $arg' options when doing the link step. + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + if test none != "$pic_object"; then + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + fi + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file '$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + os2dllname) + os2dllname=$arg + prev= + continue + ;; + precious_regex) + precious_files_regex=$arg + prev= + continue + ;; + release) + release=-$arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test rpath = "$prev"; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds=$arg + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg=$arg + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "'-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test X-export-symbols = "X$arg"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between '-L' and '$1'" + else + func_fatal_error "need path for '-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of '$dir'" + dir=$absdir + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test X-lc = "X$arg" || test X-lm = "X$arg"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test X-lc = "X$arg" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc due to us having libc/libc_r. + test X-lc = "X$arg" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test X-lc = "X$arg" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test X-lc = "X$arg" && continue + ;; + esac + elif test X-lc_r = "X$arg"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -mllvm) + prev=mllvm + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module=$wl-multi_module + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "'-no-install' is ignored for $host" + func_warning "assuming '-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -os2dllname) + prev=os2dllname + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # -fstack-protector* stack protector flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -specs=* GCC specs files + # -stdlib=* select c++ std lib with clang + # -fsanitize=* Clang/GCC memory and address sanitizer + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ + -specs=*|-fsanitize=*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + -Z*) + if test os2 = "`expr $host : '.*\(os2\)'`"; then + # OS/2 uses -Zxxx to specify OS/2-specific options + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case $arg in + -Zlinker | -Zstack) + prev=xcompiler + ;; + esac + continue + else + # Otherwise treat like 'Some other compiler flag' below + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + fi + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + test none = "$pic_object" || { + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + } + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test dlfiles = "$prev"; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test dlprefiles = "$prev"; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the '$prevarg' option requires an argument" + + if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname=$func_basename_result + libobjs_save=$libobjs + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + # Definition is injected by LT_CONFIG during libtool generation. + func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" + + func_dirname "$output" "/" "" + output_objdir=$func_dirname_result$objdir + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test lib = "$linkmode"; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=false + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test lib,link = "$linkmode,$pass"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs=$tmp_deplibs + fi + + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass"; then + libs=$deplibs + deplibs= + fi + if test prog = "$linkmode"; then + case $pass in + dlopen) libs=$dlfiles ;; + dlpreopen) libs=$dlprefiles ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test lib,dlpreopen = "$linkmode,$pass"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs=$dlprefiles + fi + if test dlopen = "$pass"; then + # Collect dlpreopened libraries + save_deplibs=$deplibs + deplibs= + fi + + for deplib in $libs; do + lib= + found=false + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test lib != "$linkmode" && test prog != "$linkmode"; then + func_warning "'-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test lib = "$linkmode"; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib=$searchdir/lib$name$search_ext + if test -f "$lib"; then + if test .la = "$search_ext"; then + found=: + else + found=false + fi + break 2 + fi + done + done + if $found; then + # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll=$l + done + if test "X$ll" = "X$old_library"; then # only static version available + found=false + func_dirname "$lib" "" "." + ladir=$func_dirname_result + lib=$ladir/$old_library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + else + # deplib doesn't seem to be a libtool library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + ;; # -l + *.ltframework) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test conv = "$pass" && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + if test scan = "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "'-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test link = "$pass"; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=false + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=: + fi + ;; + pass_all) + valid_a_lib=: + ;; + esac + if $valid_a_lib; then + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + else + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + fi + ;; + esac + continue + ;; + prog) + if test link != "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + elif test prog = "$linkmode"; then + if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=: + continue + ;; + esac # case $deplib + + $found || test -f "$lib" \ + || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "'$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir=$func_dirname_result + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass" || + { test prog != "$linkmode" && test lib != "$linkmode"; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test conv = "$pass"; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + elif test prog != "$linkmode" && test lib != "$linkmode"; then + func_fatal_error "'$lib' is not a convenience library" + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test yes = "$prefer_static_libs" || + test built,no = "$prefer_static_libs,$installed"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib=$l + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + + # This library was specified with -dlopen. + if test dlopen = "$pass"; then + test -z "$libdir" \ + && func_fatal_error "cannot -dlopen a convenience library: '$lib'" + if test -z "$dlname" || + test yes != "$dlopen_support" || + test no = "$build_libtool_libs" + then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of '$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir=$ladir + fi + ;; + esac + func_basename "$lib" + laname=$func_basename_result + + # Find the relevant object directory and library name. + if test yes = "$installed"; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library '$lib' was moved." + dir=$ladir + absdir=$abs_ladir + libdir=$abs_ladir + else + dir=$lt_sysroot$libdir + absdir=$lt_sysroot$libdir + fi + test yes = "$hardcode_automatic" && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir=$ladir + absdir=$abs_ladir + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir=$ladir/$objdir + absdir=$abs_ladir/$objdir + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test dlpreopen = "$pass"; then + if test -z "$libdir" && test prog = "$linkmode"; then + func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" + fi + case $host in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test lib = "$linkmode"; then + deplibs="$dir/$old_library $deplibs" + elif test prog,link = "$linkmode,$pass"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test prog = "$linkmode" && test link != "$pass"; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=false + if test no != "$link_all_deplibs" || test -z "$library_names" || + test no = "$build_libtool_libs"; then + linkalldeplibs=: + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if $linkalldeplibs; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test prog,link = "$linkmode,$pass"; then + if test -n "$library_names" && + { { test no = "$prefer_static_libs" || + test built,yes = "$prefer_static_libs,$installed"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then + # Make sure the rpath contains only unique directories. + case $temp_rpath: in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if $alldeplibs && + { test pass_all = "$deplibs_check_method" || + { test yes = "$build_libtool_libs" && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test built = "$use_static_libs" && test yes = "$installed"; then + use_static_libs=no + fi + if test -n "$library_names" && + { test no = "$use_static_libs" || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc* | *os2*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test no = "$installed"; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule= + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule=$dlpremoduletest + break + fi + done + if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then + echo + if test prog = "$linkmode"; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test lib = "$linkmode" && + test yes = "$hardcode_into_libs"; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname=$1 + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname=$dlname + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc* | *os2*) + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + esac + eval soname=\"$soname_spec\" + else + soname=$realname + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot=$soname + func_basename "$soroot" + soname=$func_basename_result + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from '$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for '$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test prog = "$linkmode" || test relink != "$opt_mode"; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test no = "$hardcode_direct"; then + add=$dir/$linklib + case $host in + *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; + *-*-sysv4*uw2*) add_dir=-L$dir ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir=-L$dir ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we cannot + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library"; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add=$dir/$old_library + fi + elif test -n "$old_library"; then + add=$dir/$old_library + fi + fi + esac + elif test no = "$hardcode_minus_L"; then + case $host in + *-*-sunos*) add_shlibpath=$dir ;; + esac + add_dir=-L$dir + add=-l$name + elif test no = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + relink) + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$dir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$absdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test yes != "$lib_linked"; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test prog = "$linkmode"; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test yes != "$hardcode_direct" && + test yes != "$hardcode_minus_L" && + test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test prog = "$linkmode" || test relink = "$opt_mode"; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$libdir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$libdir + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add=-l$name + elif test yes = "$hardcode_automatic"; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib"; then + add=$inst_prefix_dir$libdir/$linklib + else + add=$libdir/$linklib + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir=-L$libdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + fi + + if test prog = "$linkmode"; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test prog = "$linkmode"; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test unsupported != "$hardcode_direct"; then + test -n "$old_library" && linklib=$old_library + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test yes = "$build_libtool_libs"; then + # Not a shared library + if test pass_all != "$deplibs_check_method"; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system cannot link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test yes = "$module"; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test lib = "$linkmode"; then + if test -n "$dependency_libs" && + { test yes != "$hardcode_into_libs" || + test yes = "$build_old_libs" || + test yes = "$link_static"; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs=$temp_deplibs + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test no != "$link_all_deplibs"; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path=$deplib ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of '$dir'" + absdir=$dir + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names"; then + for tmp in $deplibrary_names; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl"; then + depdepl=$absdir/$objdir/$depdepl + darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" + func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" + path= + fi + fi + ;; + *) + path=-L$absdir/$objdir + ;; + esac + else + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "'$deplib' seems to be moved" + + path=-L$absdir + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test link = "$pass"; then + if test prog = "$linkmode"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs=$newdependency_libs + if test dlpreopen = "$pass"; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test dlopen != "$pass"; then + test conv = "$pass" || { + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + } + + if test prog,link = "$linkmode,$pass"; then + vars="compile_deplibs finalize_deplibs" + else + vars=deplibs + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + + # Add Sun CC postdeps if required: + test CXX = "$tagname" && { + case $host_os in + linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C++ 5.9 + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + + solaris*) + func_cc_basename "$CC" + case $func_cc_basename_result in + CC* | sunCC*) + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + esac + } + + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i= + ;; + esac + if test -n "$i"; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test prog = "$linkmode"; then + dlfiles=$newdlfiles + fi + if test prog = "$linkmode" || test lib = "$linkmode"; then + dlprefiles=$newdlprefiles + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "'-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "'-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs=$output + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form 'libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test no = "$module" \ + && func_fatal_help "libtool library '$output' must begin with 'lib'" + + if test no != "$need_lib_prefix"; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test pass_all != "$deplibs_check_method"; then + func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test no = "$dlself" \ + || func_warning "'-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test 1 -lt "$#" \ + && func_warning "ignoring multiple '-rpath's for a libtool library" + + install_libdir=$1 + + oldlibs= + if test -z "$rpath"; then + if test yes = "$build_libtool_libs"; then + # Building a libtool convenience library. + # Some compilers have problems with a '.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "'-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs=$IFS; IFS=: + set dummy $vinfo 0 0 0 + shift + IFS=$save_ifs + + test -n "$7" && \ + func_fatal_help "too many parameters to '-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major=$1 + number_minor=$2 + number_revision=$3 + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # that has an extra 1 added just for fun + # + case $version_type in + # correct linux to gnu/linux during the next big refactor + darwin|freebsd-elf|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_revision + ;; + freebsd-aout|qnx|sunos) + current=$number_major + revision=$number_minor + age=0 + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_minor + lt_irix_increment=no + ;; + *) + func_fatal_configuration "$modename: unknown library version type '$version_type'" + ;; + esac + ;; + no) + current=$1 + revision=$2 + age=$3 + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT '$current' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION '$revision' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE '$age' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE '$age' is greater than the current interface number '$current'" + func_fatal_error "'$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + # On Darwin other compilers + case $CC in + nagfor*) + verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + ;; + *) + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + esac + ;; + + freebsd-aout) + major=.$current + versuffix=.$current.$revision + ;; + + freebsd-elf) + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + irix | nonstopux) + if test no = "$lt_irix_increment"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring=$verstring_prefix$major.$revision + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test 0 -ne "$loop"; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring_prefix$major.$iface:$verstring + done + + # Before this point, $major must not contain '.'. + major=.$major + versuffix=$major.$revision + ;; + + linux) # correct to gnu/linux during the next big refactor + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=.$current.$age.$revision + verstring=$current.$age.$revision + + # Add in all the interfaces that we are compatible with. + loop=$age + while test 0 -ne "$loop"; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring:$iface.0 + done + + # Make executables depend on our current version. + func_append verstring ":$current.0" + ;; + + qnx) + major=.$current + versuffix=.$current + ;; + + sco) + major=.$current + versuffix=.$current + ;; + + sunos) + major=.$current + versuffix=.$current.$revision + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 file systems. + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + + *) + func_fatal_configuration "unknown library version type '$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring=0.0 + ;; + esac + if test no = "$need_version"; then + versuffix= + else + versuffix=.0.0 + fi + fi + + # Remove version info from name if versioning should be avoided + if test yes,no = "$avoid_version,$need_version"; then + major= + versuffix= + verstring= + fi + + # Check to see if the archive will have undefined symbols. + if test yes = "$allow_undefined"; then + if test unsupported = "$allow_undefined_flag"; then + if test yes = "$build_old_libs"; then + func_warning "undefined symbols not allowed in $host shared libraries; building static only" + build_libtool_libs=no + else + func_fatal_error "can't build $host shared library unless -no-undefined is specified" + fi + fi + else + # Don't allow undefined symbols. + allow_undefined_flag=$no_undefined_flag + fi + + fi + + func_generate_dlsyms "$libname" "$libname" : + func_append libobjs " $symfileobj" + test " " = "$libobjs" && libobjs= + + if test relink != "$opt_mode"; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) + if test -n "$precious_files_regex"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles=$dlfiles + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles=$dlprefiles + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test yes = "$build_libtool_libs"; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test yes = "$build_libtool_need_lc"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release= + versuffix= + major= + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib=$potent_lib + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | $SED 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; + *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib= + ;; + esac + fi + if test -n "$a_deplib"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib=$potent_lib # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs= + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + for i in $predeps $postdeps; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test none = "$deplibs_check_method"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test yes = "$droppeddeps"; then + if test yes = "$module"; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test no = "$allow_undefined"; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs=$new_libs + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test yes = "$build_libtool_libs"; then + # Remove $wl instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac + if test yes = "$hardcode_into_libs"; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath=$finalize_rpath + test relink = "$opt_mode" || rpath=$compile_rpath$rpath + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath=$finalize_shlibpath + test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname=$1 + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname=$realname + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib=$output_objdir/$realname + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols=$output_objdir/$libname.uexp + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + func_dll_def_p "$export_symbols" || { + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols=$export_symbols + export_symbols= + always_export_symbols=yes + } + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs=$IFS; IFS='~' + for cmd1 in $cmds; do + IFS=$save_ifs + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test yes = "$try_normal_branch" \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=$output_objdir/$output_la.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS=$save_ifs + if test -n "$export_symbols_regex" && test : != "$skipped_export"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test : != "$skipped_export" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs=$tmp_deplibs + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test yes = "$compiler_needs_object" && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test : != "$skipped_export" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then + output=$output_objdir/$output_la.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then + output=$output_objdir/$output_la.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test yes = "$compiler_needs_object"; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-$k.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test -z "$objlist" || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test 1 -eq "$k"; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-$k.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-$k.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + ${skipped_export-false} && { + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + } + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs=$IFS; IFS='~' + for cmd in $concat_cmds; do + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + ${skipped_export-false} && { + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + } + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs=$IFS; IFS='~' + for cmd in $cmds; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test yes = "$module" || test yes = "$export_dynamic"; then + # On all known operating systems, these are identical. + dlname=$soname + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "'-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object '$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj=$output + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # if reload_cmds runs $LD directly, get rid of -Wl from + # whole_archive_flag_spec and hope we can get by with turning comma + # into space. + case $reload_cmds in + *\$LD[\ \$]*) wl= ;; + esac + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags + else + gentop=$output_objdir/${obj}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test yes = "$build_libtool_libs" || libobjs=$non_pic_objects + + # Create the old-style object. + reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs + + output=$obj + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + test yes = "$build_libtool_libs" || { + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + } + + if test -n "$pic_flag" || test default != "$pic_mode"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output=$libobj + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "'-release' is ignored for programs" + + $preload \ + && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ + && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test CXX = "$tagname"; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " $wl-bind_at_load" + func_append finalize_command " $wl-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs=$new_libs + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath=$rpath + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath=$rpath + + if test -n "$libobjs" && test yes = "$build_old_libs"; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" false + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=: + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=false + ;; + *cygwin* | *mingw* ) + test yes = "$build_libtool_libs" || wrappers_required=false + ;; + *) + if test no = "$need_relink" || test yes != "$build_libtool_libs"; then + wrappers_required=false + fi + ;; + esac + $wrappers_required || { + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command=$compile_command$compile_rpath + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.$objext"; then + func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' + fi + + exit $exit_status + } + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test yes = "$no_install"; then + # We don't need to create a wrapper script. + link_command=$compile_var$compile_command$compile_rpath + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + case $hardcode_action,$fast_install in + relink,*) + # Fast installation is not supported + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "'$output' will be relinked during installation" + ;; + *,yes) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + ;; + *,no) + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + ;; + *,needless) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command= + ;; + esac + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource=$output_path/$objdir/lt-$output_name.c + cwrapper=$output_path/$output_name.exe + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host"; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + case $build_libtool_libs in + convenience) + oldobjs="$libobjs_save $symfileobj" + addlibs=$convenience + build_libtool_libs=no + ;; + module) + oldobjs=$libobjs_save + addlibs=$old_convenience + build_libtool_libs=no + ;; + *) + oldobjs="$old_deplibs $non_pic_objects" + $preload && test -f "$symfileobj" \ + && func_append oldobjs " $symfileobj" + addlibs=$old_convenience + ;; + esac + + if test -n "$addlibs"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase=$func_basename_result + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj"; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test -z "$oldobjs"; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test yes = "$build_old_libs" && old_library=$libname.$libext + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test yes = "$hardcode_automatic"; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test yes = "$installed"; then + if test -z "$install_libdir"; then + break + fi + output=$output_objdir/${outputname}i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name=$func_basename_result + func_resolve_sysroot "$deplib" + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs=$newdependency_libs + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles=$newdlprefiles + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles=$newdlprefiles + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test -n "$bindir"; then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result/$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test no,yes = "$installed,$need_relink"; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +if test link = "$opt_mode" || test relink = "$opt_mode"; then + func_mode_link ${1+"$@"} +fi + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $debug_cmd + + RM=$nonopt + files= + rmforce=false + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=: ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir=$func_dirname_result + if test . = "$dir"; then + odir=$objdir + else + odir=$dir/$objdir + fi + func_basename "$file" + name=$func_basename_result + test uninstall = "$opt_mode" && odir=$dir + + # Remember odir for removal later, being careful to avoid duplicates + if test clean = "$opt_mode"; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif $rmforce; then + continue + fi + + rmfiles=$file + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case $opt_mode in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && test none != "$pic_object"; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && test none != "$non_pic_object"; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test clean = "$opt_mode"; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.$objext" + if test yes = "$fast_install" && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name"; then + func_append rmfiles " $odir/lt-$noexename.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the $objdir's in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then + func_mode_uninstall ${1+"$@"} +fi + +test -z "$opt_mode" && { + help=$generic_help + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode '$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# where we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/m4/as-ac-expand.m4 b/m4/as-ac-expand.m4 new file mode 100644 index 0000000..d6c9e33 --- /dev/null +++ b/m4/as-ac-expand.m4 @@ -0,0 +1,43 @@ +dnl as-ac-expand.m4 0.2.0 +dnl autostars m4 macro for expanding directories using configure's prefix +dnl thomas@apestaart.org + +dnl AS_AC_EXPAND(VAR, CONFIGURE_VAR) +dnl example +dnl AS_AC_EXPAND(SYSCONFDIR, $sysconfdir) +dnl will set SYSCONFDIR to /usr/local/etc if prefix=/usr/local + +AC_DEFUN([AS_AC_EXPAND], +[ + EXP_VAR=[$1] + FROM_VAR=[$2] + + dnl first expand prefix and exec_prefix if necessary + prefix_save=$prefix + exec_prefix_save=$exec_prefix + + dnl if no prefix given, then use /usr/local, the default prefix + if test "x$prefix" = "xNONE"; then + prefix="$ac_default_prefix" + fi + dnl if no exec_prefix given, then use prefix + if test "x$exec_prefix" = "xNONE"; then + exec_prefix=$prefix + fi + + full_var="$FROM_VAR" + dnl loop until it doesn't change anymore + while true; do + new_full_var="`eval echo $full_var`" + if test "x$new_full_var" = "x$full_var"; then break; fi + full_var=$new_full_var + done + + dnl clean up + full_var=$new_full_var + AC_SUBST([$1], "$full_var") + + dnl restore prefix and exec_prefix + prefix=$prefix_save + exec_prefix=$exec_prefix_save +]) diff --git a/m4/ax_pthread.m4 b/m4/ax_pthread.m4 new file mode 100644 index 0000000..d90de34 --- /dev/null +++ b/m4/ax_pthread.m4 @@ -0,0 +1,309 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_pthread.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +# +# DESCRIPTION +# +# This macro figures out how to build C programs using POSIX threads. It +# sets the PTHREAD_LIBS output variable to the threads library and linker +# flags, and the PTHREAD_CFLAGS output variable to any special C compiler +# flags that are needed. (The user can also force certain compiler +# flags/libs to be tested by setting these environment variables.) +# +# Also sets PTHREAD_CC to any special C compiler that is needed for +# multi-threaded programs (defaults to the value of CC otherwise). (This +# is necessary on AIX to use the special cc_r compiler alias.) +# +# NOTE: You are assumed to not only compile your program with these flags, +# but also link it with them as well. e.g. you should link with +# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS +# +# If you are only building threads programs, you may wish to use these +# variables in your default LIBS, CFLAGS, and CC: +# +# LIBS="$PTHREAD_LIBS $LIBS" +# CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +# CC="$PTHREAD_CC" +# +# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant +# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name +# (e.g. PTHREAD_CREATE_UNDETACHED on AIX). +# +# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the +# PTHREAD_PRIO_INHERIT symbol is defined when compiling with +# PTHREAD_CFLAGS. +# +# ACTION-IF-FOUND is a list of shell commands to run if a threads library +# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it +# is not found. If ACTION-IF-FOUND is not specified, the default action +# will define HAVE_PTHREAD. +# +# Please let the authors know if this macro fails on any platform, or if +# you have any other suggestions or comments. This macro was based on work +# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help +# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by +# Alejandro Forero Cuervo to the autoconf macro repository. We are also +# grateful for the helpful feedback of numerous users. +# +# Updated for Autoconf 2.68 by Daniel Richard G. +# +# LICENSE +# +# Copyright (c) 2008 Steven G. Johnson +# Copyright (c) 2011 Daniel Richard G. +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 18 + +AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) +AC_DEFUN([AX_PTHREAD], [ +AC_REQUIRE([AC_CANONICAL_HOST]) +AC_LANG_PUSH([C]) +ax_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on True64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) + AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes) + AC_MSG_RESULT($ax_pthread_ok) + if test x"$ax_pthread_ok" = xno; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. + +ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) +# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) +# -pthreads: Solaris/gcc +# -mthreads: Mingw32/gcc, Lynx/gcc +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads too; +# also defines -D_REENTRANT) +# ... -mt is also the pthreads flag for HP/aCC +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case ${host_os} in + solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (We need to link with -pthreads/-mt/ + # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather + # a function called by this macro, so we could check for that, but + # who knows whether they'll stub that too in a future libc.) So, + # we'll just look for -pthreads and -lpthread first: + + ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" + ;; + + darwin*) + ax_pthread_flags="-pthread $ax_pthread_flags" + ;; +esac + +if test x"$ax_pthread_ok" = xno; then +for flag in $ax_pthread_flags; do + + case $flag in + none) + AC_MSG_CHECKING([whether pthreads work without any flags]) + ;; + + -*) + AC_MSG_CHECKING([whether pthreads work with $flag]) + PTHREAD_CFLAGS="$flag" + ;; + + pthread-config) + AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no) + if test x"$ax_pthread_config" = xno; then continue; fi + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + AC_MSG_CHECKING([for the pthreads library -l$flag]) + PTHREAD_LIBS="-l$flag" + ;; + esac + + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include + static void routine(void *a) { a = 0; } + static void *start_routine(void *a) { return a; }], + [pthread_t th; pthread_attr_t attr; + pthread_create(&th, 0, start_routine, 0); + pthread_join(th, 0); + pthread_attr_init(&attr); + pthread_cleanup_push(routine, 0); + pthread_cleanup_pop(0) /* ; */])], + [ax_pthread_ok=yes], + []) + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + AC_MSG_RESULT($ax_pthread_ok) + if test "x$ax_pthread_ok" = xyes; then + break; + fi + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$ax_pthread_ok" = xyes; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + AC_MSG_CHECKING([for joinable pthread attribute]) + attr_name=unknown + for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], + [int attr = $attr; return attr /* ; */])], + [attr_name=$attr; break], + []) + done + AC_MSG_RESULT($attr_name) + if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then + AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, + [Define to necessary symbol if this constant + uses a non-standard name on your system.]) + fi + + AC_MSG_CHECKING([if more special flags are required for pthreads]) + flag=no + case ${host_os} in + aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; + osf* | hpux*) flag="-D_REENTRANT";; + solaris*) + if test "$GCC" = "yes"; then + flag="-D_REENTRANT" + else + flag="-mt -D_REENTRANT" + fi + ;; + esac + AC_MSG_RESULT(${flag}) + if test "x$flag" != xno; then + PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" + fi + + AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], + ax_cv_PTHREAD_PRIO_INHERIT, [ + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[#include ]], [[int i = PTHREAD_PRIO_INHERIT;]])], + [ax_cv_PTHREAD_PRIO_INHERIT=yes], + [ax_cv_PTHREAD_PRIO_INHERIT=no]) + ]) + AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"], + AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], 1, [Have PTHREAD_PRIO_INHERIT.])) + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + # More AIX lossage: must compile with xlc_r or cc_r + if test x"$GCC" != xyes; then + AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC}) + else + PTHREAD_CC=$CC + fi +else + PTHREAD_CC="$CC" +fi + +AC_SUBST(PTHREAD_LIBS) +AC_SUBST(PTHREAD_CFLAGS) +AC_SUBST(PTHREAD_CC) + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$ax_pthread_ok" = xyes; then + ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) + : +else + ax_pthread_ok=no + $2 +fi +AC_LANG_POP +])dnl AX_PTHREAD diff --git a/m4/libtool.m4 b/m4/libtool.m4 new file mode 100644 index 0000000..ee80844 --- /dev/null +++ b/m4/libtool.m4 @@ -0,0 +1,8387 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +]) + +# serial 58 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_PREPARE_CC_BASENAME +# ----------------------- +m4_defun([_LT_PREPARE_CC_BASENAME], [ +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in @S|@*""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} +])# _LT_PREPARE_CC_BASENAME + + +# _LT_CC_BASENAME(CC) +# ------------------- +# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, +# but that macro is also expanded into generated libtool script, which +# arranges for $SED and $ECHO to be set by different means. +m4_defun([_LT_CC_BASENAME], +[m4_require([_LT_PREPARE_CC_BASENAME])dnl +AC_REQUIRE([_LT_DECL_SED])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl +func_cc_basename $1 +cc_basename=$func_cc_basename_result +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +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_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl +m4_require([_LT_CMD_TRUNCATE])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from 'configure', and 'config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# 'config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain=$ac_aux_dir/ltmain.sh +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the 'libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to 'config.status' so that its +# declaration there will have the same value as in 'configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags='_LT_TAGS'dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into 'config.status', and then the shell code to quote escape them in +# for loops in 'config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# '#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test 0 = "$lt_write_fail" && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +'$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test 0 != $[#] +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try '$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try '$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test yes = "$silent" && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +_LT_COPYING +_LT_LIBTOOL_TAGS + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +_LT_PREPARE_MUNGE_PATH_LIST +_LT_PREPARE_CC_BASENAME + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # 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" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +m4_ifndef([AC_PROG_GO], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS=$save_LDFLAGS + ]) + + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +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 cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru 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 +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _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[[91]]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[[012]][[,.]]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test yes = "$lt_cv_ld_force_load"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + 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" + 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" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script that will find a shell with a builtin +# printf (that we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case $ECHO in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[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 + if not specified).])], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([$with_sysroot]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and where our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + 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 + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # 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 + *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 + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test yes = "[$]$2"; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS +]) + +if test yes = "[$]$2"; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | 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` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + 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/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n "$lt_cv_sys_max_cmd_len"; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes = "$cross_compiling"; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen=shl_load], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen=dlopen], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links=nottested +if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test no = "$hard_links"; then + AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", + [Define to the sub-directory where libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then + + # We can hardcode non-existent directories. + if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && + test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || + test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +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" + 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 + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_PREPARE_MUNGE_PATH_LIST +# --------------------------- +# Make sure func_munge_path_list() is defined correctly. +m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], +[[# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x@S|@2 in + x) + ;; + *:) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" + ;; + x:*) + eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" + ;; + *) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + esac +} +]])# _LT_PREPARE_PATH_LIST + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +AC_ARG_VAR([LT_SYS_LIBRARY_PATH], +[User-defined run-time library search path.]) + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[[4-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a[(]lib.so.V[)]' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + 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' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + 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' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + 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|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], + [Detected run-time system search path for libraries]) +_LT_DECL([], [configure_time_lt_sys_library_path], [2], + [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program that can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$1"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac]) +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program that can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test no = "$withval" || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], +[if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi]) +rm -f conftest.i conftest2.i conftest.out]) +])# _LT_PATH_DD + + +# _LT_CMD_TRUNCATE +# ---------------- +# find command to truncate a binary pipe +m4_defun([_LT_CMD_TRUNCATE], +[m4_require([_LT_PATH_DD]) +AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], +[printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) +_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], + [Command to truncate a binary pipe]) +])# _LT_CMD_TRUNCATE + + +# _LT_CHECK_MAGIC_METHOD +# ---------------------- +# how to check for library dependencies +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_MAGIC_METHOD], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +AC_CACHE_CHECK([how to recognize dependent libraries], +lt_cv_deplibs_check_method, +[lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[[4-9]]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +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_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + 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_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + 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' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +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_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + 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 + *$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 + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi]) +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # 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 + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# _LT_DLL_DEF_P([FILE]) +# --------------------- +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with func_dll_def_p in the libtool script +AC_DEFUN([_LT_DLL_DEF_P], +[dnl + test DEF = "`$SED -n dnl + -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace + -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments + -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl + -e q dnl Only consider the first "real" line + $1`" dnl +])# _LT_DLL_DEF_P + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM=-lm) + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +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'" + # 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'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +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_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_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_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + 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++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" 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'" + fi + 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 + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], + [Transform the output of nm into a list of symbols to manually relocate]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([nm_interface], [lt_cv_nm_interface], [1], + [The name lister interface]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64, which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test yes = "$GCC"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + 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' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + 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' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + 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 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + 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 + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 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' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + 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 + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $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~ + 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(export_dynamic_flag_spec, $1)='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _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~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + 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' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _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 + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS=$save_LDFLAGS]) + if test yes = "$lt_cv_irix_exported_symbol"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + _LT_TAGVAR(link_all_deplibs, $1)=no + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # 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' + ;; + esac + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + 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 + ;; + + osf3*) + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting $shlibpath_var if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC=$CC +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report what library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC=$lt_save_CC +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_caught_CXX_error"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test yes = "$GXX"; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test yes = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='$wl' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GXX"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + # The "-G" linker flag allows undefined symbols. + _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + 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 + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 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' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _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~ + 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 + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _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 + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require '-G' NOT '-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + + _LT_TAGVAR(GCC, $1)=$GXX + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case @S|@2 in + .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; + *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $prev$p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test x-L = "$p" || + test x-R = "$p"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test no = "$pre_test_object_deps_done"; then + case $prev in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)=$prev$p + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test no = "$pre_test_object_deps_done"; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)=$p + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)=$p + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test no = "$F77"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_F77"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$G77 + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_F77" + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test no = "$FC"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_FC"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_FC" + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code=$lt_simple_compile_test_code + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f "$lt_ac_sed" && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test 10 -lt "$lt_ac_count" && break + lt_ac_count=`expr $lt_ac_count + 1` + if test "$lt_ac_count" -gt "$lt_ac_max"; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine what file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4 new file mode 100644 index 0000000..94b0829 --- /dev/null +++ b/m4/ltoptions.m4 @@ -0,0 +1,437 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 8 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option '$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl 'shared' nor 'disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], + [_LT_WITH_AIX_SONAME([aix])]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the 'shared' and +# 'disable-shared' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the 'static' and +# 'disable-static' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the 'fast-install' +# and 'disable-fast-install' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_AIX_SONAME([DEFAULT]) +# ---------------------------------- +# implement the --with-aix-soname flag, and support the `aix-soname=aix' +# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT +# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. +m4_define([_LT_WITH_AIX_SONAME], +[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl +shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[[5-9]]*,yes) + AC_MSG_CHECKING([which variant of shared library versioning to provide]) + AC_ARG_WITH([aix-soname], + [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], + [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], + [case $withval in + aix|svr4|both) + ;; + *) + AC_MSG_ERROR([Unknown argument to --with-aix-soname]) + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname], + [AC_CACHE_VAL([lt_cv_with_aix_soname], + [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) + with_aix_soname=$lt_cv_with_aix_soname]) + AC_MSG_RESULT([$with_aix_soname]) + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + +_LT_DECL([], [shared_archive_member_spec], [0], + [Shared archive member basename, for filename based shared library versioning on AIX])dnl +])# _LT_WITH_AIX_SONAME + +LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the 'pic-only' and 'no-pic' +# LT_INIT options. +# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [pic_mode=m4_default([$1], [default])]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4 new file mode 100644 index 0000000..48bc934 --- /dev/null +++ b/m4/ltsugar.m4 @@ -0,0 +1,124 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59, which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/m4/ltversion.m4 b/m4/ltversion.m4 new file mode 100644 index 0000000..fa04b52 --- /dev/null +++ b/m4/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 4179 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]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4.6' +macro_revision='2.4.6' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4 new file mode 100644 index 0000000..c6b26f8 --- /dev/null +++ b/m4/lt~obsolete.m4 @@ -0,0 +1,99 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/missing b/missing new file mode 100755 index 0000000..f62bbae --- /dev/null +++ b/missing @@ -0,0 +1,215 @@ +#! /bin/sh +# Common wrapper for a few potentially missing GNU programs. + +scriptversion=2013-10-28.13; # UTC + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try '$0 --help' for more information" + exit 1 +fi + +case $1 in + + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; + + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" + exit 1 + ;; + +esac + +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi + +perl_URL=http://www.perl.org/ +flex_URL=http://flex.sourceforge.net/ +gnu_software_URL=http://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'autom4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" + ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/readers/Makefile.am b/readers/Makefile.am new file mode 100644 index 0000000..fda66e6 --- /dev/null +++ b/readers/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = supported_readers.txt diff --git a/readers/Makefile.in b/readers/Makefile.in new file mode 100644 index 0000000..0028387 --- /dev/null +++ b/readers/Makefile.in @@ -0,0 +1,464 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = readers +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \ + $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUNDLE_HOST = @BUNDLE_HOST@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DYN_LIB_EXT = @DYN_LIB_EXT@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIBUSB_CFLAGS = @LIBUSB_CFLAGS@ +LIBUSB_LIBS = @LIBUSB_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOCLASS = @NOCLASS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCSC_CFLAGS = @PCSC_CFLAGS@ +PCSC_LIBS = @PCSC_LIBS@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +SYMBOL_VISIBILITY = @SYMBOL_VISIBILITY@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_aux_dir = @ac_aux_dir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_pthread_config = @ax_pthread_config@ +bindir = @bindir@ +bindir_exp = @bindir_exp@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +bundle = @bundle@ +ccidtwindir = @ccidtwindir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +serialconfdir = @serialconfdir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +sysconfdir_exp = @sysconfdir_exp@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usbdropdir = @usbdropdir@ +EXTRA_DIST = supported_readers.txt +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign readers/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign readers/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/readers/supported_readers.txt b/readers/supported_readers.txt new file mode 100644 index 0000000..d2ac461 --- /dev/null +++ b/readers/supported_readers.txt @@ -0,0 +1,890 @@ +# +# List of readers supported by the CCID driver +# Generated: 2018-02-20 +# +# DO NOT EDIT BY HAND + +# Website: http://pcsclite.alioth.debian.org/ccid.html + +########################## +# section: supported +########################## + +# ACS +0x072F:0x90CC:ACS ACR 38U-CCID + +# ActivIdentity +0x09C3:0x0013:ActivIdentity USB Reader V3 +0x09C3:0x0014:ActivIdentity Activkey_Sim + +# Alcor Micro +0x058F:0x9520:Alcor Micro AU9520 +0x058F:0x9540:Alcor Micro AU9560 + +# Athena +0x0DC3:0x1004:Athena ASE IIIe +0x0DC3:0x1102:Athena ASEDrive IIIe KB + +# BLUTRONICS +0x1B0E:0x1078:BLUTRONICS BLUDRIVE II CCID + +# C3PO +0x0783:0x0006:C3PO LTC31 v2 + +# Cherry GmbH +0x046A:0x0005:Cherry GmbH SmartBoard XX33 +0x046A:0x0010:Cherry GmbH SmartBoard XX44 +0x046A:0x002D:Cherry GmbH SmartTerminal XX44 +0x046A:0x003E:Cherry GmbH SmartTerminal ST-2xxx + +# COVADIS +0x0982:0x0007:COVADIS ALYA + +# Dell +0x413C:0x2100:Dell keyboard SK-3106 +0x413C:0x2101:Dell Dell Smart Card Reader Keyboard + +# Eutron +0x073D:0x0007:Eutron CryptoIdentity CCID +0x073D:0x0008:Eutron CryptoIdentity CCID +0x073D:0x0B00:Eutron Digipass 860 +0x073D:0x0C00:Eutron Card Reader +0x073D:0x0C01:Eutron Smart Pocket + +# Gemalto +0x08E6:0x1227:Gemalto PDT +0x08E6:0x3437:Gemalto PC Twin Reader +0x08E6:0x3438:Gemalto USB Shell Token V2 +0x08E6:0x3478:Gemalto USB GemPCPinpad SmartCard Reader +0x08E6:0x3480:Gemalto GemCore SIM Pro Smart Card Reader +0x08E6:0x34C0:Gemalto Ezio Shield +0x08E6:0x34C3:Gemalto EZIO CB+ +0x08E6:0x4433:Gemalto Gemplus USB SmartCard Reader 433-Swap +0x08E6:0x5503:Gemalto Prox Dual USB PC Link Reader +0x08E6:0x5504:Gemalto Prox SU USB PC LinkReader +0x08E6:0x8000:Gemalto Smart Enterprise Guardian Secure USB Device +0x08E6:0x8141:Gemalto IDBridge K3000 + +# Giesecke & Devrient GmbH +0x1059:0x0017:Giesecke & Devrient GmbH StarSign Crypto USB Token +0x1059:0x0019:Giesecke & Devrient GmbH StarSign CUT S + +# id3 Semiconductors +0x0B81:0x0200:id3 Semiconductors CL1356T + +# INGENICO +0x0F14:0x003B:INGENICO Leo + +# Ingenico +0x0F14:0x003D:Ingenico WITEO USB Smart Card Reader + +# KOBIL +0x0D46:0x3001:KOBIL KAAN Base +0x0D46:0x3002:KOBIL KAAN Advanced +0x0D46:0x3003:KOBIL KAAN SIM III +0x0D46:0x3010:KOBIL EMV CAP - SecOVID Reader III + +# Lenovo +0x17EF:0x1003:Lenovo Integrated Smart Card Reader + +# MYSMART +0x09BE:0x0002:MYSMART MySMART PAD V2.0 + +# OMNIKEY AG +0x076B:0x3021:OMNIKEY AG CardMan 3121 + +# Precise Biometrics +0x076B:0xA022:Precise Biometrics Sense MC + +# SCM Microsystems Inc. +0x03F0:0x0824:SCM Microsystems Inc. HP USB Smartcard Reader +0x04E6:0x5111:SCM Microsystems Inc. SCR 331-DI +0x04E6:0x5116:SCM Microsystems Inc. SCR 3310 +0x04E6:0x511D:SCM Microsystems Inc. SCR 3311 +0x04E6:0x5410:SCM Microsystems Inc. SCR 355 +0x04E6:0xE001:SCM Microsystems Inc. SCR 331 +0x04E6:0xE003:SCM Microsystems Inc. SPR 532 + +# TianYu CCID Key +0xA625:0x0801:TianYu CCID Key TianYu CCID SmartKey + +# Verisign +0x08E6:0x1359:Verisign Secure Storage Token +0x08E6:0xACE0:Verisign Secure Token + +# XIRING +0x0F14:0x0011:XIRING XI-SIGN USB V2 +0x0F14:0x0037:XIRING MyLeo +0x0F14:0x0038:XIRING Leo v2 + +########################## +# section: shouldwork +########################## + +# Access IS +0x0DB5:0x0138:Access IS ePassport Reader +0x0DB5:0x0160:Access IS NFC Smart Module +0x0DB5:0x0164:Access IS NFC Smart Module + +# ACS +0x072F:0x1204:ACS ACR101 ICC Reader +0x072F:0x221A:ACS ACR1251 Dual Reader +0x072F:0x223B:ACS ACR1252 Dual Reader +0x072F:0x223F:ACS ACR1255U-J1 +0x072F:0x8201:ACS APG8201 PINhandy 1 +0x072F:0x8202:ACS APG8201 USB Reader +0x072F:0x90DB:ACS CryptoMate64 +0x072F:0xB000:ACS ACR3901U ICC Reader +0x072F:0xB100:ACS ACR39U ICC Reader +0x072F:0xB106:ACS CryptoMate (T2) + +# AK910 +0x2021:0x0001:AK910 CKey +0x2021:0x0011:AK910 CKey +0x2021:0x0101:AK910 IDONE + +# Akasa + +# Aktiv +0x0A89:0x0025:Aktiv Rutoken lite +0x0A89:0x0030:Aktiv Rutoken ECP +0x0A89:0x0080:Aktiv PINPad Ex +0x0A89:0x0081:Aktiv PINPad In +0x0A89:0x0082:Aktiv Rutoken PINPad 2 + +# Aktiv Co., ProgramPark +0x0A89:0x0060:Aktiv Co., ProgramPark Rutoken Magistra + +# Aladdin R.D. +0x24DC:0x0101:Aladdin R.D. JaCarta +0x24DC:0x0102:Aladdin R.D. JaCarta LT +0x24DC:0x0201:Aladdin R.D. JCR-770 +0x24DC:0x0401:Aladdin R.D. JC-WebPass (JC600) +0x24DC:0x0402:Aladdin R.D. JaCarta +0x24DC:0x0501:Aladdin R.D. JaCarta U2F (JC602) +0x24DC:0x100F:Aladdin R.D. JaCarta Flash + +# Alcor Micro +0x058F:0x9522:Alcor Micro AU9522 + +# ANCUD +0x0483:0xACD1:ANCUD CCID USB Reader & RNG + +# appidkey GmbH +0x2406:0x5003:appidkey GmbH ID50 -USB +0x2406:0x5004:appidkey GmbH ID100L-USB-SC-Reader +0x2406:0x5006:appidkey GmbH ID60-USB + +# ASK-RFID +0x1FD3:0xCC1D:ASK-RFID CPL108 + +# Athena +0x0DC3:0x0900:Athena IDProtect Key v2 +0x0DC3:0x1007:Athena ASEDrive IIIe KB Bio PIV +0x0DC3:0x1008:Athena ASEDrive IIIe Combo Bio PIV + +# ATMEL +0x03EB:0x6004:ATMEL AT91SO CCID Smart Card Reader +0x03EB:0x6009:ATMEL AT98SC032CT-USB +0x03EB:0x600B:ATMEL AT91SC192192CT-USB ICCD reader +0x03EB:0x6010:ATMEL AT90SCR100 +0x03EB:0x6011:ATMEL AT90SCR050 +0x03EB:0x6012:ATMEL VaultIC420 Smart Object +0x03EB:0x6014:ATMEL VaultIC440 + +# Avtor +0x15CF:0x0019:Avtor SecureToken +0x15CF:0x001D:Avtor SC Reader 371 + +# Axalto +0x04E6:0x511C:Axalto Reflex USB v3 + +# BIFIT +0x23A0:0x0001:BIFIT USB-Token iBank2key +0x23A0:0x0002:BIFIT iBank2Key +0x23A0:0x0003:BIFIT iToken + +# Bit4id +0x25DD:0x1101:Bit4id miniLector-s +0x25DD:0x1201:Bit4id cryptokey +0x25DD:0x2221:Bit4id iAM +0x25DD:0x2321:Bit4id CKey4 +0x25DD:0x2341:Bit4id tokenME FIPS v3 +0x25DD:0x2351:Bit4id Digital DNA Key +0x25DD:0x2361:Bit4id Digital-DNA Key BT +0x25DD:0x2362:Bit4id Digital-DNA Key +0x25DD:0x3111:Bit4id miniLector + +# Bluink Ltd. +0x2ABE:0x1003:Bluink Ltd. Bluink CCID + +# BLUTRONICS +0x1B0E:0x1079:BLUTRONICS BLUDRIVE II CCID + +# Broadcom Corp +0x0A5C:0x5802:Broadcom Corp 5880 +0x0A5C:0x5804:Broadcom Corp 5880 +0x0A5C:0x5832:Broadcom Corp 5880 +0x0A5C:0x5833:Broadcom Corp 5880 +0x0A5C:0x5834:Broadcom Corp 5880 + +# C3PO +0x0783:0x0007:C3PO TLTC2USB +0x0783:0x0009:C3PO KBR36 +0x0783:0x0010:C3PO LTC32 +0x0783:0x0036:C3PO LTC36 + +# CASTLES +0x0CA6:0x00A0:CASTLES EZCCID Smart Card Reader + +# CCB +0x8829:0xCCB2:CCB eSafeLD + +# charismathics +0x19E7:0x0002:charismathics plug'n'crypt CCID token + +# Cherry +0x046A:0x0090:Cherry Smart Card Reader USB +0x046A:0x0092:Cherry TC 1300 +0x046A:0x00A1:Cherry KC 1000 SC +0x046A:0x00A2:Cherry KC 1000 SC/DI +0x046A:0x00A3:Cherry Smartcard Keyboard G87-1xx44 +0x046A:0x00A4:Cherry KC 1000 SC Z +0x046A:0x00A5:Cherry KC 1000 SC/DI Z +0x046A:0x00A7:Cherry SmartTerminal XX44 + +# Cherry GmbH +0x046A:0x005B:Cherry GmbH SmartBoard XX1X +0x046A:0x0070:Cherry GmbH SmartTerminal XX1X +0x046A:0x0072:Cherry GmbH SmartTerminal ST-1275 + +# Chicony +0x04F2:0x0967:Chicony USB Smart Card Keyboard +0x03F0:0x114A:Chicony HP USB Smartcard CCID Keyboard KR +0x03F0:0x124A:Chicony HP USB Smartcard CCID Keyboard JP +0x04F2:0x1469:Chicony HP Skylab USB Smartcard Keyboard + +# COVADIS +0x0982:0x0008:COVADIS VEGA-ALPHA +0x0982:0x0040:COVADIS Auriga + +# DUALi +0x1DB2:0x0801:DUALi DE-620 Combi +0x1DB2:0x088B:DUALi DRAGON NFC READER + +# eID_R6 001 +0x257B:0xD205:eID_R6 001 X8 + +# Elatec +0x09D8:0x0427:Elatec TWN4 SmartCard NFC +0x09D8:0x0428:Elatec TWN4/B1.06/CPF3.05/S1SC1.32/P (Beta 3) + +# ESMART +0x2CE4:0x7479:ESMART Token GOST + +# FEITIAN +0x096E:0x0619:FEITIAN iR301 +0x096E:0x061A:FEITIAN bR301 +0x096E:0x061C:FEITIAN iR301 + +# Feitian +0x096E:0x0608:Feitian 502-CL +0x096E:0x060D:Feitian R502 +0x096E:0x0622:Feitian VR504 VHBR Contactless & Contact Card Reader +0x096E:0x0623:Feitian bR500 +0x096E:0x0624:Feitian bR301 +0x096E:0x0807:Feitian ePass2003 +0x096E:0x080F:Feitian eJAVA Token + +# Feitian Technologies +0x096E:0x0505:Feitian Technologies FT SCR310 + +# Free Software Initiative of Japan +0x234B:0x0000:Free Software Initiative of Japan Gnuk + +# FT +0x096E:0x080A:FT ePass2003Auto +0x096E:0x0853:FT U2F CCID KB +0x096E:0x0855:FT CCID KB +0x096E:0x0856:FT U2F CCID +0x096E:0x0859:FT CCID + +# Fujitsu +0x0BF8:0x1024:Fujitsu Smartcard Reader D323 + +# Fujitsu Siemens Computers +0x0BF8:0x1005:Fujitsu Siemens Computers SmartCard Keyboard USB 2A +0x0BF8:0x1006:Fujitsu Siemens Computers SmartCard USB 2A + +# FujitsuTechnologySolutions GmbH +0x0BF8:0x1017:FujitsuTechnologySolutions GmbH SmartCase KB SCR eSIG +0x0BF8:0x1021:FujitsuTechnologySolutions GmbH Smartcard Keyboard G87-914x +0x0BF8:0x1022:FujitsuTechnologySolutions GmbH Keyboard KB100 SCR +0x0BF8:0x1023:FujitsuTechnologySolutions GmbH Keyboard KB100 SCR eSIG + +# GEMALTO +0x08E6:0x3440:GEMALTO CT1100 + +# Gemalto +0x08E6:0x2202:Gemalto Gem e-Seal Pro USB Token +0x08E6:0x34C1:Gemalto Ezio Shield Secure Channel +0x08E6:0x34C2:Gemalto Ezio Shield +0x08E6:0x34C5:Gemalto Ezio Shield Branch Reader +0x08E6:0x34EC:Gemalto GemPC Express +0x08E6:0x4042:Gemalto SA .NET Dual +0x08E6:0x5743:Gemalto Hybrid Smartcard Reader +0x08E6:0x8108:Gemalto Smart Enterprise Guardian Secure USB Device + +# Gemplus +0x08E6:0x3479:Gemplus GemCore POS Pro Smart Card Reader + +# Generic +0x0BDA:0x0169:Generic USB2.0-CRW +0x048D:0x1366:Generic MultiCard Device + +# Generic USB +0x076B:0x3A21:Generic USB Smart Card Reader + +# German Privacy Foundation +0x20A0:0x4107:German Privacy Foundation Crypto Stick v1.2 + +# Giesecke & Devrient GmbH +0x1059:0x000C:Giesecke & Devrient GmbH Star Sign Card Token 350 (ICCD) +0x1059:0x000D:Giesecke & Devrient GmbH Star Sign Card Token 550 (ICCD) + +# GIS Ltd +0x0F1A:0x0002:GIS Ltd SmartMouse USB + +# GoldKey Security +0x19C8:0x0012:GoldKey Security PIV Token + +# HDZB +0x1677:0x0025:HDZB uKeyCI800-K18 + +# Hewlett Packard +0x03F0:0x104A:Hewlett Packard HP USB Smartcard CCID Keyboard +0x03F0:0x2924:Hewlett Packard MFP Smart Card Reader + +# Hewlett-Packard +0x03F0:0x581D:Hewlett-Packard HP lt4112 Gobi 4G Module + +# HID + +# HID Global +0x076B:0x3031:HID Global OMNIKEY 3x21 Smart Card Reader +0x076B:0x5022:HID Global OMNIKEY 5022 Smart Card Reader +0x076B:0x5023:HID Global OMNIKEY 5023 Smart Card Reader +0x076B:0x5400:HID Global veriCLASS Reader +0x076B:0x5412:HID Global OMNIKEY 5122 Smartcard Reader +0x076B:0x5422:HID Global OMNIKEY 5422 Smartcard Reader +0x076B:0x5432:HID Global OMNIKEY 5122 Dual +0x076B:0x5A27:HID Global OMNIKEY 5027CK CCID CONFIG IF +0x076B:0x6632:HID Global OMNIKEY 6121 Smart Card Reader + +# HID OMNIKEY +0x076B:0x502A:HID OMNIKEY 5025-CL +0x076B:0x5127:HID OMNIKEY 5127 CK +0x076B:0x5326:HID OMNIKEY 5326 DFR +0x076B:0x5427:HID OMNIKEY 5427 CK + +# Hitachi, Ltd. +0x04A4:0x00C7:Hitachi, Ltd. Hitachi Biometric Reader +0x04A4:0x00D4:Hitachi, Ltd. Hitachi Portable Biometric Reader + +# id3 Semiconductors +0x0B81:0x0220:id3 Semiconductors CL1356A_HID + +# Identiv +0x04E6:0x5713:Identiv CLOUD 2980 F Smart Card Reader +0x04E6:0x5724:Identiv Identiv uTrust 4701 F Dual Interface Reader +0x04E6:0x5790:Identiv uTrust 3700 F CL Reader +0x04E6:0x5791:Identiv uTrust 3701 F CL Reader +0x04E6:0x5811:Identiv uTrust 2900 R Smart Card Reader +0x04E6:0x5812:Identiv uTrust 2910 R Smart Card Reader +0x04E6:0x5814:Identiv SCR3500 A Contact Reader +0x04E6:0x5815:Identiv SCR3500 B Contact Reader +0x04E6:0x5816:Identiv uTrust 3512 SAM slot Token +0x04E6:0x5818:Identiv @MAXX Light2 token +0x04E6:0x5819:Identiv @MAXX ID-1 Smart Card Reader +0x04E6:0x581A:Identiv uTrust 3522 embd SE RFID Token +0x04E6:0x581B:Identiv uTrust 2910 R Taglio SC Reader +0x04E6:0x581C:Identiv SCR35xx USB Smart Card Reader + +# Identive +0x04E6:0x5710:Identive CLOUD 2700 F Smart Card Reader +0x04E6:0x5720:Identive Identive CLOUD 4500 F Dual Interface Reader +0x04E6:0x5721:Identive Identive CLOUD 4510 F Contactless + SAM Reader +0x04E6:0x5723:Identive Identive CLOUD 4000 F DTC +0x04E6:0x5810:Identive CLOUD 2700 R Smart Card Reader +0x04E6:0x5817:Identive SCT3522CC token + +# Identive Technologies +0x1FFA:0x000C:Identive Technologies Multi-ISO HF Reader - USB + +# IID +0x2406:0x6200:IID AT90S064 CCID READER + +# IIT +0x03EB:0x9308:IIT E.Key Crystal-1 +0x03EB:0x9324:IIT E.Key Almaz-1C + +# InfoThink +0x1FC9:0x0102:InfoThink IT-102MU Reader + +# Inside Secure +0x2406:0x6300:Inside Secure VaultIC 420 Smart Object +0x2406:0x6301:Inside Secure VaultIC 440 Smart Object +0x2406:0x6302:Inside Secure VaultIC 460 Smart Object +0x2406:0x6403:Inside Secure AT90SCR100 +0x2406:0x6404:Inside Secure AT90SCR050 +0x2406:0x6407:Inside Secure AT90SCR200 + +# INSIDE Secure +0x2406:0x6303:INSIDE Secure VaultIC 405 Smart Object +0x2406:0x6305:INSIDE Secure VaultIC 441 Smart Object + +# IonIDe +0x076B:0x3B01:IonIDe Smartcard Reader + +# KACST +0x2A18:0x5000:KACST HSID Reader +0x2A18:0x5001:KACST HSID Reader Single Storage +0x2A18:0x5002:KACST HSID Reader Dual Storage + +# Kapsch TrafficCom +0x28B9:0x0002:Kapsch TrafficCom USB SAM reader + +# KeyXentic Inc. +0x2F76:0x0906:KeyXentic Inc. KX906 Smart Card Reader + +# Kingtrust +0x0483:0x0007:Kingtrust Multi-Reader + +# KOBIL Systems +0x0D46:0x3014:KOBIL Systems Smart Token +0x0D46:0x301D:KOBIL Systems IDToken +0x0D46:0x4189:KOBIL Systems mIDentity 4smart +0x0D46:0x41A9:KOBIL Systems mIDentity 4smart AES +0x0D46:0x4289:KOBIL Systems mIDentity visual +0x0D46:0x4389:KOBIL Systems mIDentity fullsize +0x0D46:0x43A9:KOBIL Systems mIDentity fullsize AES + +# KRONEGGER +0x2D25:0x0000:KRONEGGER NFC blue Reader Platform +0x2D25:0x0001:KRONEGGER Micro Core Platform + +# Ledger +0x2C97:0x0001:Ledger Nano S + +# Lenovo +0x17EF:0x6007:Lenovo Lenovo USB Smartcard Keyboard +0x17EF:0x6055:Lenovo Lenovo USB Smartcard Keyboard + +# Liteon +0x03F0:0x164A:Liteon HP SC Keyboard - Apollo (Liteon) +0x03F0:0x174A:Liteon HP SC Keyboard - Apollo KR (Liteon) +0x03F0:0x184A:Liteon HP SC Keyboard - Apollo JP (Liteon) + +# Macally +0x08AE:0x0BDF:Macally NFC CCID eNetPad + +# mCore +0x1403:0x7502:mCore SCard-Reader + +# Microchip +0x0424:0x1104:Microchip SEC1110 +0x0424:0x1202:Microchip SEC1210 + +# MK Technology +0x0416:0xC136:MK Technology KeyPass S1 + +# Morpho +0x079B:0x0026:Morpho MSO350/MSO351 Fingerprint Sensor & SmartCard Reader +0x079B:0x0052:Morpho MSO1350 Fingerprint Sensor & SmartCard Reader + +# MSI +0x0BDA:0x0161:MSI StarReader SMART + +# Mulann +0x4D55:0x0010:Mulann PVT + +# Neowave +0x1E0D:0x0013:Neowave Weneo +0x1E0D:0x0033:Neowave Weneo +0x1E0D:0x1023:Neowave Weneo +0x1E0D:0x8033:Neowave Weneo + +# Nitrokey +0x20A0:0x4108:Nitrokey Nitrokey Pro +0x20A0:0x4109:Nitrokey Nitrokey Storage +0x20A0:0x4211:Nitrokey Nitrokey Start +0x20A0:0x4230:Nitrokey Nitrokey HSM + +# NTT Communications Corp. +0x04E6:0x511A:NTT Communications Corp. SCR3310-NTTCom USB SmartCard Reader + +# NXP +0x1FC9:0x0107:NXP Pegoda 2 N +0x1FC9:0x010B:NXP PR533 + +# OBERTHUR TECHNOLOGIES +0x1A74:0xB111:OBERTHUR TECHNOLOGIES ID-ONE TOKEN SLIM v2 + +# OCS ID-One Cosmo Card +0x1A74:0x6354:OCS ID-One Cosmo Card USB Smart Chip Device + +# OMNIKEY +0x076B:0x1021:OMNIKEY CardMan 1021 +0x076B:0x4321:OMNIKEY CardMan 4321 +0x076B:0x5321:OMNIKEY CardMan 5321 +0x076B:0x5421:OMNIKEY 5421 +0x076B:0x6321:OMNIKEY 6321 CLi USB + +# OMNIKEY AG +0x076B:0x3022:OMNIKEY AG 3121 USB +0x076B:0x3621:OMNIKEY AG CardMan 3621 +0x076B:0x3821:OMNIKEY AG CardMan 3821 +0x076B:0x5121:OMNIKEY AG CardMan 5121 +0x076B:0x5125:OMNIKEY AG CardMan 5125 +0x076B:0x6622:OMNIKEY AG CardMan 6121 +0x076B:0x6623:OMNIKEY AG 6121 USB mobile +0x076B:0xA021:OMNIKEY AG Smart Card Reader + +# Panasonic +0x04DA:0x117A:Panasonic Panasonic USB Smart Card Reader 7A-Smart + +# Philips Semiconductors +0x0471:0x040F:Philips Semiconductors JCOP41V221 +0x04B9:0x1400:Philips Semiconductors SmartMX Sample + +# PIVKey +0x096E:0x0603:PIVKey T800 + +# Planeta +0x21AB:0x0010:Planeta RC700-NFC CCID + +# Raritan +0x14DD:0x1006:Raritan D2CIM-DVUSB VM/CCID + +# Regula +0x1C6A:0x7050:Regula RFID Reader + +# REINER SCT +0x0C4B:0x0500:REINER SCT cyberJack RFID standard +0x0C4B:0x0504:REINER SCT cyberJack go +0x0C4B:0x0520:REINER SCT tanJack Bluetooth +0x0C4B:0x0580:REINER SCT cyberJack one +0x0C4B:0x9102:REINER SCT cyberJack RFID basis + +# Rocketek +0x14CD:0x8166:Rocketek RT-SCR1 + +# SafeNet +0x0529:0x0602:SafeNet eToken 7300 +0x0529:0x0620:SafeNet eToken 5100 +0x08E6:0x34CC:SafeNet eToken 5300 + +# SafeTech +0x24A2:0x0102:SafeTech SafeTouch + +# SAFETRUST +0x2EE1:0x0001:SAFETRUST SABRE SCR + +# SchlumbergerSema +0x0973:0x0003:SchlumbergerSema SchlumbergerSema Cyberflex Access + +# SCM Microsystems Inc. +0x04E6:0x5113:SCM Microsystems Inc. SCR33x USB Smart Card Reader +0x04E6:0x5115:SCM Microsystems Inc. SCR 335 +0x04E6:0x5117:SCM Microsystems Inc. SCR3320 - Smart Card Reader +0x04E6:0x5119:SCM Microsystems Inc. SCR3340 - ExpressCard54 Smart Card Reader +0x04E6:0x511F:SCM Microsystems Inc. SCR3310 USB Smart Card Reader +0x04E6:0x5120:SCM Microsystems Inc. SCR331-DI USB Smart Card Reader +0x04E6:0x5121:SCM Microsystems Inc. SDI010 Smart Card Reader +0x04E6:0x512B:SCM Microsystems Inc. SDI011 Contactless Reader +0x04E6:0x512C:SCM Microsystems Inc. SDI011 Contactless Reader +0x04E6:0x5291:SCM Microsystems Inc. SCL010 Contactless Reader +0x04E6:0x5293:SCM Microsystems Inc. SCL01x Contactless Reader + +# Secure Device Solutions +0x0B81:0x8007:Secure Device Solutions DOMINO-Key TWIN + +# SecuTech +0x0403:0xC587:SecuTech SecuTech Token + +# Sitecom +0x0DF6:0x800A:Sitecom Sitecom USB simcard reader MD-010 + +# Softforum Co., Ltd +0x04E8:0x0007:Softforum Co., Ltd XecureHSM + +# SpringCard +0x1C34:0x7113:SpringCard CrazyWriter +0x1C34:0x7121:SpringCard CSB6 Basic +0x1C34:0x7123:SpringCard CSB6 Secure +0x1C34:0x7124:SpringCard CSB6 Ultimate +0x1C34:0x7136:SpringCard EasyFinger Standard +0x1C34:0x7138:SpringCard EasyFinger Ultimate +0x1C34:0x7141:SpringCard Prox'N'Roll +0x1C34:0x8141:SpringCard NFC'Roll +0x1C34:0x91B1:SpringCard H663 Series +0x1C34:0xA1A1:SpringCard H512 Series + +# Spyrus Inc +0x08DF:0x0004:Spyrus Inc Rosetta USB +0x08DF:0x3115:Spyrus Inc WorkSafe Pro +0x08DF:0x3201:Spyrus Inc PocketVault P-3X + +# SYNNIX +0x1206:0x2105:SYNNIX STD200 + +# Teridian Semiconductors +0x1862:0x0000:Teridian Semiconductors TSC12xxFV.09 + +# THURSBY SOFTWARE +0x1976:0x0001:THURSBY SOFTWARE TSS-PK1 + +# Thursby Software Systems, Inc. + +# Tianyu +0xA625:0x0810:Tianyu Smart Card Reader + +# Todos +0x0B0C:0x0050:Todos Argos Mini II +0x0B0C:0x0052:Todos CX00 + +# ubisys +0x19A6:0x0009:ubisys 13.56MHz RFID (CCID) + +# udea +0x2A17:0x0001:udea MILKO V1. + +# Unicept GmbH +0x2DFF:0x1540:Unicept GmbH AirID USB +0x2DFF:0x1543:Unicept GmbH AirID USB Dongle + +# Validy +0x1CF0:0x0001:Validy TokenA sl vt + +# VASCO +0x1A44:0x0001:VASCO DP905v1.1 +0x1A44:0x0101:VASCO DIGIPASS KEY 101 +0x1A44:0x0112:VASCO DIGIPASS KEY 860 +0x1A44:0x0115:VASCO DIGIPASS KEY 200 +0x1A44:0x0117:VASCO DIGIPASS KEY 860 +0x1A44:0x0119:VASCO DIGIPASS KEY 200 +0x1A44:0x0120:VASCO DIGIPASS KEY 202 +0x1A44:0x0122:VASCO DIGIPASS KEY 202 +0x1A44:0x0855:VASCO DP855 +0x1A44:0x0865:VASCO DP865 +0x1A44:0x0870:VASCO DIGIPASS 870 +0x1A44:0x0875:VASCO DIGIPASS 875 +0x1A44:0x0920:VASCO DIGIPASS 920 + +# VMware +0x0E0F:0x0004:VMware Virtual USB CCID + +# WatchCNPC +0x163C:0x0406:WatchCNPC USB CCID Key + +# Watchdata +0x163C:0x0407:Watchdata USB Key +0x163C:0x0417:Watchdata USB Key +0x163C:0x0418:Watchdata USB Key + +# Watchdata W5181 +0x163C:0x0A03:Watchdata W5181 + +# Winbond +0x0416:0x3815:Winbond CCID SmartCard Controller + +# XIRING + +# Yubico +0x1050:0x0111:Yubico Yubikey NEO OTP+CCID +0x1050:0x0112:Yubico Yubikey NEO CCID +0x1050:0x0115:Yubico Yubikey NEO U2F+CCID +0x1050:0x0116:Yubico Yubikey NEO OTP+U2F+CCID +0x1050:0x0404:Yubico Yubikey 4 CCID +0x1050:0x0405:Yubico Yubikey 4 OTP+CCID +0x1050:0x0406:Yubico Yubikey 4 U2F+CCID +0x1050:0x0407:Yubico Yubikey 4 OTP+U2F+CCID + +########################## +# section: unsupported +########################## + +# ACS +0x072F:0x2200:ACS ACR122U PICC Interface + +# ActivCard +0x09C3:0x0008:ActivCard ActivCard USB Reader V2 + +# Aladdin + +# Alcor Micro + +# Athena +0x0DC3:0x100F:Athena IDProtect Flash + +# ATMEL +0x03EB:0x6016:ATMEL VaultIC460 + +# Broadcom Corp +0x0A5C:0x5800:Broadcom Corp 5880 +0x0A5C:0x5801:Broadcom Corp 5880 +0x0A5C:0x5805:Broadcom Corp 5880 + +# C3PO +0x0783:0x0003:C3PO LTC3x USB + +# Feitian +0x096E:0x0503:Feitian SCR301 + +# Generic +0x0BDA:0x0165:Generic Smart Card Reader Interface + +# Hewlett-Packard Company +0x03F0:0x0036:Hewlett-Packard Company HP USB CCID Smartcard Keyboard +0x03F0:0x1024:Hewlett-Packard Company HP USB Smart Card Keyboard + +# KEBTechnology +0x04CC:0x5072:KEBTechnology KONA USB SmartCard + +# KOBIL Systems +0x0D46:0x4000:KOBIL Systems mIDentity M +0x0D46:0x4001:KOBIL Systems mIDentity XL + +# O2 +0x0B97:0x7762:O2 Micro Oz776 +0x0B97:0x7772:O2 Micro Oz776 + +# Precise Biometrics +0x08C3:0x0401:Precise Biometrics Precise 250 MC +0x08C3:0x0402:Precise Biometrics Precise 200 MC + +# RSA +0x15E1:0x2007:RSA RSA SecurID (R) Authenticator + +# THRC +0x062D:0x0001:THRC Smart Card Reader + +# VMware + +########################## +# section: disabled +########################## + +# DUALi +#0x1DB2:0x0600:DUALi DE-ABCM6 + +# HID OMNIKEY +#0x076B:0x5340:HID OMNIKEY 5021 CL + +# Jinmuyu Electronics Co., Ltd. +#0x03EB:0x6120:Jinmuyu Electronics Co., Ltd. MR800 + +# jNet Technology inc. +#0x0483:0x2010:jNet Technology inc. jToken s1 + +# Morpho +#0x1A6F:0x0104:Morpho ypsID Key E + +# MX5 +#0x0980:0x902F:MX5 MX5 SMART CCID DRIVER + +# OCS ID-One Cosmo Card +#0x1A74:0x6356:OCS ID-One Cosmo Card USB Smart Chip Device + +# OMNIKEY +#0x076B:0x532A:OMNIKEY 5321 CLi USB + +# Precise Biometrics +#0x08C3:0x0406:Precise Biometrics Precise 200 MC Upgrade + +# Reiner-SCT +#0x0C4B:0x0300:Reiner-SCT cyberJack pinpad(a) + +# SCM Microsystems Inc. +#0x04E6:0x5292:SCM Microsystems Inc. SCL01x Contactless Reader + +# SMART +#0x0B8C:0x000E:SMART SBV280 + +########################## +# section: duplicates +########################## +#0x046A:0x0090:Cherry Smart Card Reader USB (Cherry_Smart_Card_Reader_USB.txt) +#0x046A:0x0090:Cherry Cherry TC 1100 (Cherry_Smart_Card_Reader_USB_2_04.txt) + +#0x04E6:0x5291:SCM Microsystems Inc. SCL010 Contactless Reader (SCL010.txt) +#0x04E6:0x5291:SCM Microsystems Inc. SCL010 Contactless Reader (SCM_SCL010.txt) + +#0x04E6:0x5410:SCM Microsystems Inc. SCR35xx v2.0 USB SC Reader (SCR3500.txt) +#0x04E6:0x5410:SCM Microsystems Inc. SCR 355 (SCR355.txt) + +#0x04E6:0x5720:Identive Identive CLOUD 4500 F Dual Interface Reader (Identive_CLOUD_4500_F.txt) +#0x04E6:0x5720:Identive Identive CLOUD 4700 F Dual Interface Reader (Identive_CLOUD_4700_F.txt) + +#0x04E6:0x5721:Identive Identive CLOUD 4510 F Contactless + SAM Reader (Identive_CLOUD_4510_F.txt) +#0x04E6:0x5721:Identive Identive CLOUD 4710 F Contactless + SAM Reader (Identive_CLOUD_4710_F.txt) + +#0x0529:0x0620:Aladdin eToken PRO USB 72K Java (Aladdin_eToken_PRO_USB_72K_Java.txt) +#0x0529:0x0620:SafeNet eToken 5100 (SafeNet_Token_JC.txt) + +#0x058F:0x9520:Alcor Micro AU9520 (AU9520.txt) +#0x058F:0x9520:Akasa AK-CR-03 (Akasa_AK-CR-03.txt) +#0x058F:0x9520:Alcor Micro SCR001 (Alcor_SCR001.txt) + +#0x058F:0x9540:Alcor Micro AU9540 (AU9540.txt) +#0x058F:0x9540:Alcor Micro AU9560 (AlcorMicro_AU9560.txt) + +#0x072F:0x90CC:ACS ACR122U (ACR122U.txt) +#0x072F:0x90CC:ACS ACR 38U-CCID (ACR38U-CCID.txt) +#0x072F:0x90CC:ACS ACR100 (ACS_ACR100.txt) +#0x072F:0x90CC:ACS ACR38 plugin (ACS_ACR38_plugin.txt) +#0x072F:0x90CC:ACS AET65 (ACS_AET65.txt) + +#0x073D:0x0C00:Eutron Card Reader (Eutron_SIM_Pocket_Combo_(Card_Reader).txt) +#0x073D:0x0C00:Eutron SIM Reader (Eutron_SIM_Pocket_Combo_(SIM_Reader).txt) + +#0x076B:0x3021:OMNIKEY AG CardMan 3021 (CardMan3021.txt) +#0x076B:0x3021:OMNIKEY AG CardMan 3121 (CardMan3121.txt) + +#0x076B:0x3A21:Generic USB Smart Card Reader (Generic_USB_Smart_Card_Reader.txt) +#0x076B:0x3A21:HID AVIATOR Generic (HID_Aviator.txt) + +#0x076B:0xA022:Precise Biometrics Sense MC (Precise_Sense_MC.txt) +#0x076B:0xA022:XIRING Teo (Teo.txt) + +#0x08E6:0x3437:Gemalto PC Twin Reader (GemPCTwin.txt) +#0x08E6:0x3437:Gemalto IDBridge CT30 (Gemalto_IDBridge_CT30.txt) +#0x08E6:0x3437:Gemalto K50 (Gemalto_K50.txt) + +#0x08E6:0x3438:Gemalto USB Shell Token V2 (GemPCKey.txt) +#0x08E6:0x3438:Gemalto IDBridge K30 (Gemalto_IDBridge_K30.txt) + +#0x08E6:0x3440:GEMALTO CT1100 (Gemalto_CT1100.txt) +#0x08E6:0x3440:GEMALTO K1100 (Gemalto_K1100.txt) + +#0x08E6:0x3478:Gemalto USB GemPCPinpad SmartCard Reader (GemPCPinpad.txt) +#0x08E6:0x3478:Gemalto USB GemPCPinpad SmartCard Reader (GemPCPinpadv2.txt) + +#0x08E6:0x34C0:Gemalto Ezio Shield (Gemalto_Ezio_Shield.txt) +#0x08E6:0x34C0:Gemalto Ezio Shield Pro SC (Gemalto_Ezio_Shield_Pro_SC.txt) + +#0x0A5C:0x5802:Broadcom Corp 5880 (Broadcom_5880v3.txt) +#0x0A5C:0x5802:Broadcom Corp 5880 (Broadcom_5880v4.txt) + +#0x0B81:0x0200:id3 Semiconductors CL1356T (id3_CL1356T.txt) +#0x0B81:0x0200:id3 Semiconductors CL1356T5 (id3_CL1356T5.txt) + +#0x0E0F:0x0004:VMware Virtual USB CCID (VMware_Virtual_USB_CCID.txt) +#0x0E0F:0x0004:VMware Virtual USB CCID (VMware_Virtual_USB_CCID2.txt) + +#0x0F14:0x0011:XIRING XI-SIGN USB V2 (Xiring_XI-SIGN.txt) +#0x0F14:0x0011:XIRING XI-SIGN USB V2 (Xiring_XI-SIGN_6000.txt) + +#0x0F14:0x003D:Ingenico WITEO USB Smart Card Reader (Ingenico_WITEO_badge.txt) +#0x0F14:0x003D:Ingenico WITEO USB Smart Card Reader (Ingenico_WITEO_base.txt) + diff --git a/src/92_pcscd_ccid.rules b/src/92_pcscd_ccid.rules new file mode 100644 index 0000000..b577bb9 --- /dev/null +++ b/src/92_pcscd_ccid.rules @@ -0,0 +1,21 @@ +# udev rules for CCID devices + +# Gemplus PCMCIA Card +#SUBSYSTEMS=="pcmcia", DRIVERS=="serial_cs", ACTION=="add", ATTRS{prod_id1}=="Gemplus", ATTRS{prod_id2}=="SerialPort", ATTRS{prod_id3}=="GemPC Card", RUN+="/usr/sbin/pcscd --hotplug" + +# If not adding the device, go away +ACTION!="add", GOTO="pcscd_ccid_rules_end" +SUBSYSTEM!="usb", GOTO="pcscd_ccid_rules_end" +ENV{DEVTYPE}!="usb_device", GOTO="pcscd_ccid_rules_end" + +# Kobil mIDentity +ATTRS{idVendor}=="0d46", ATTRS{idProduct}=="4081", RUN+="/usr/sbin/Kobil_mIDentity_switch" + +# Keep USB autosuspend off for the C3PO LTC31 v1 SmartCard Reader +ATTR{idVendor}=="0783", ATTR{idProduct}=="0003", GOTO="pcscd_ccid_rules_end" + +# set USB power management to auto. +ENV{ID_USB_INTERFACES}==":0b0000:", TEST=="power/control", ATTR{power/control}="auto" + +# All done +LABEL="pcscd_ccid_rules_end" diff --git a/src/Info.plist.src b/src/Info.plist.src new file mode 100644 index 0000000..0d71e3d --- /dev/null +++ b/src/Info.plist.src @@ -0,0 +1,121 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + MAGIC_TARGET + CFBundleIdentifier + org.debian.alioth.pcsclite.smartcardccid + CFBundleInfoDictionaryVersion + 6.0 + MAGIC_CLASS + CFBundlePackageType + BNDL + CFBundleShortVersionString + MAGIC_VERSION + CFBundleSignature + ???? + CFBundleVersion + 0.0.1d1 + ifdCapabilities + 0x00000000 + + + + ifdProtocolSupport + 0x00000001 + ifdVersionNumber + 0x00000001 + + ifdLogLevel + 0x0003 + + + + ifdDriverOptions + 0x0000 + + + + ifdManufacturerString + Ludovic Rousseau (ludovic.rousseau@free.fr) + + ifdProductString + Generic CCID driver + + ifdVendorID + + MAGIC_VENDOR + + + ifdProductID + + MAGIC_PRODUCT + + + ifdFriendlyName + + MAGIC_FRIENDLYNAME + + + Copyright + This driver is protected by terms of the GNU Lesser General Public License version 2.1, or (at your option) any later version. + + + diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..99f3567 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,110 @@ +CCID_BUNDLE = $(bundle) +CCID_LIB = libccid.$(DYN_LIB_EXT) +CCIDTWIN_LIB = libccidtwin.$(DYN_LIB_EXT) + +CCID_VERSION=CCID_VERSION=`$(srcdir)/convert_version.pl $(PACKAGE_VERSION)` + +lib_LTLIBRARIES = +LIBS_TO_INSTALL = +LIBS_TO_UNINSTALL = +if WITH_LIBUSB +lib_LTLIBRARIES += libccid.la +LIBS_TO_INSTALL += install_ccid +LIBS_TO_UNINSTALL += uninstall_ccid +noinst_PROGRAMS = parse +endif +if WITH_TWIN_SERIAL +lib_LTLIBRARIES += libccidtwin.la +LIBS_TO_INSTALL += install_ccidtwin +LIBS_TO_UNINSTALL += uninstall_ccidtwin +endif + +COMMON = ccid.c \ + ccid.h \ + ccid_ifdhandler.h \ + commands.c \ + commands.h \ + debug.h \ + defs.h \ + ifdhandler.c \ + utils.c \ + utils.h +USB = ccid_usb.c ccid_usb.h +SERIAL = ccid_serial.c ccid_serial.h +T1 = towitoko/atr.c \ + towitoko/atr.h \ + towitoko/defines.h \ + towitoko/pps.c \ + towitoko/pps.h \ + openct/buffer.c \ + openct/buffer.h \ + openct/checksum.c \ + openct/checksum.h \ + openct/proto-t1.c \ + openct/proto-t1.h +TOKEN_PARSER = tokenparser.l parser.h \ + strlcpy.c \ + misc.h \ + strlcpycat.h \ + simclist.c \ + simclist.h + +if WITHOUT_PCSC +PROVIDED_BY_PCSC = debug.c +endif + +libccid_la_SOURCES = $(COMMON) $(USB) $(TOKEN_PARSER) $(PROVIDED_BY_PCSC) $(T1) +libccid_la_LIBADD = $(LEXLIB) $(LIBUSB_LIBS) $(PTHREAD_LIBS) +libccid_la_CFLAGS = $(PCSC_CFLAGS) $(LIBUSB_CFLAGS) $(PTHREAD_CFLAGS) \ + $(SYMBOL_VISIBILITY) -D$(CCID_VERSION) -DSIMCLIST_NO_DUMPRESTORE +libccid_la_LDFLAGS = -avoid-version + +libccidtwin_la_SOURCES = $(COMMON) $(SERIAL) $(TOKEN_PARSER) \ + $(PROVIDED_BY_PCSC) $(T1) +libccidtwin_la_CFLAGS = $(PCSC_CFLAGS) $(PTHREAD_CFLAGS) $(SYMBOL_VISIBILITY) \ + -DTWIN_SERIAL -D$(CCID_VERSION) -DSIMCLIST_NO_DUMPRESTORE +libccidtwin_la_LIBADD = $(PTHREAD_LIBS) +libccidtwin_la_LDFLAGS = -avoid-version + +parse_SOURCES = parse.c debug.c ccid_usb.c $(TOKEN_PARSER) +parse_LDADD = $(LIBUSB_LIBS) +parse_CFLAGS = $(PCSC_CFLAGS) $(LIBUSB_CFLAGS) -DSIMCLIST_NO_DUMPRESTORE + +EXTRA_DIST = Info.plist.src create_Info_plist.pl reader.conf.in \ + towitoko/COPYING towitoko/README openct/LICENSE openct/README \ + convert_version.pl 92_pcscd_ccid.rules + +# We can't use install-exec-local since we want to overwrite the install +# rule. We do not want to _add_ files to install +install: $(LIBS_TO_INSTALL) + +INSTALL_UDEV_RULE_FILE=@/bin/echo "***************" ; echo "copy the src/92_pcscd_ccid.rules file in udev directory (/etc/udev/rules.d/)" ; /bin/echo "***************" + +Info.plist: Info.plist.src $(srcdir)/../readers/supported_readers.txt + $(srcdir)/create_Info_plist.pl $(srcdir)/../readers/supported_readers.txt $(srcdir)/Info.plist.src --target=$(CCID_LIB) --version=$(VERSION) $(NOCLASS) > Info.plist + +DISTCLEANFILES = tokenparser.c Info.plist + +install_ccid: libccid.la Info.plist + $(mkinstalldirs) "$(DESTDIR)$(usbdropdir)/$(CCID_BUNDLE)/Contents/$(BUNDLE_HOST)/" + cp Info.plist "$(DESTDIR)$(usbdropdir)/$(CCID_BUNDLE)/Contents/" + cp .libs/$(CCID_LIB) "$(DESTDIR)$(usbdropdir)/$(CCID_BUNDLE)/Contents/$(BUNDLE_HOST)/$(CCID_LIB)" + $(INSTALL_UDEV_RULE_FILE) + +install_ccidtwin: libccidtwin.la + $(mkinstalldirs) "$(DESTDIR)$(ccidtwindir)" + cp .libs/$(CCIDTWIN_LIB) "$(DESTDIR)$(ccidtwindir)/$(CCIDTWIN_LIB)" + $(mkinstalldirs) "$(DESTDIR)/$(serialconfdir)" ; \ + perl -ne "s|TARGET|$(ccidtwindir)/$(CCIDTWIN_LIB)| ; print" $(srcdir)/reader.conf.in > "$(DESTDIR)/$(serialconfdir)/libccidtwin" + +# do not uninstall the serial driver by default +# use explicitely 'make uninstall_ccidtwin' +uninstall: $(LIBS_TO_UNINSTALL) + +uninstall_ccid: + rm -rf "$(DESTDIR)$(usbdropdir)/$(CCID_BUNDLE)" + +uninstall_ccidtwin: + rm -f "$(DESTDIR)$(ccidtwindir)/$(CCIDTWIN_LIB)" + rm -f "$(DESTDIR)/$(serialconfdir)/libccidtwin" + diff --git a/src/Makefile.in b/src/Makefile.in new file mode 100644 index 0000000..2be5c10 --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,1217 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@WITH_LIBUSB_TRUE@am__append_1 = libccid.la +@WITH_LIBUSB_TRUE@am__append_2 = install_ccid +@WITH_LIBUSB_TRUE@am__append_3 = uninstall_ccid +@WITH_LIBUSB_TRUE@noinst_PROGRAMS = parse$(EXEEXT) +@WITH_TWIN_SERIAL_TRUE@am__append_4 = libccidtwin.la +@WITH_TWIN_SERIAL_TRUE@am__append_5 = install_ccidtwin +@WITH_TWIN_SERIAL_TRUE@am__append_6 = uninstall_ccidtwin +subdir = src +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/as-ac-expand.m4 \ + $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +am__DEPENDENCIES_1 = +libccid_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am__libccid_la_SOURCES_DIST = ccid.c ccid.h ccid_ifdhandler.h \ + commands.c commands.h debug.h defs.h ifdhandler.c utils.c \ + utils.h ccid_usb.c ccid_usb.h tokenparser.l parser.h strlcpy.c \ + misc.h strlcpycat.h simclist.c simclist.h debug.c \ + towitoko/atr.c towitoko/atr.h towitoko/defines.h \ + towitoko/pps.c towitoko/pps.h openct/buffer.c openct/buffer.h \ + openct/checksum.c openct/checksum.h openct/proto-t1.c \ + openct/proto-t1.h +am__objects_1 = libccid_la-ccid.lo libccid_la-commands.lo \ + libccid_la-ifdhandler.lo libccid_la-utils.lo +am__objects_2 = libccid_la-ccid_usb.lo +am__objects_3 = libccid_la-tokenparser.lo libccid_la-strlcpy.lo \ + libccid_la-simclist.lo +@WITHOUT_PCSC_TRUE@am__objects_4 = libccid_la-debug.lo +am__dirstamp = $(am__leading_dot)dirstamp +am__objects_5 = towitoko/libccid_la-atr.lo towitoko/libccid_la-pps.lo \ + openct/libccid_la-buffer.lo openct/libccid_la-checksum.lo \ + openct/libccid_la-proto-t1.lo +am_libccid_la_OBJECTS = $(am__objects_1) $(am__objects_2) \ + $(am__objects_3) $(am__objects_4) $(am__objects_5) +libccid_la_OBJECTS = $(am_libccid_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libccid_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libccid_la_CFLAGS) \ + $(CFLAGS) $(libccid_la_LDFLAGS) $(LDFLAGS) -o $@ +@WITH_LIBUSB_TRUE@am_libccid_la_rpath = -rpath $(libdir) +libccidtwin_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am__libccidtwin_la_SOURCES_DIST = ccid.c ccid.h ccid_ifdhandler.h \ + commands.c commands.h debug.h defs.h ifdhandler.c utils.c \ + utils.h ccid_serial.c ccid_serial.h tokenparser.l parser.h \ + strlcpy.c misc.h strlcpycat.h simclist.c simclist.h debug.c \ + towitoko/atr.c towitoko/atr.h towitoko/defines.h \ + towitoko/pps.c towitoko/pps.h openct/buffer.c openct/buffer.h \ + openct/checksum.c openct/checksum.h openct/proto-t1.c \ + openct/proto-t1.h +am__objects_6 = libccidtwin_la-ccid.lo libccidtwin_la-commands.lo \ + libccidtwin_la-ifdhandler.lo libccidtwin_la-utils.lo +am__objects_7 = libccidtwin_la-ccid_serial.lo +am__objects_8 = libccidtwin_la-tokenparser.lo \ + libccidtwin_la-strlcpy.lo libccidtwin_la-simclist.lo +@WITHOUT_PCSC_TRUE@am__objects_9 = libccidtwin_la-debug.lo +am__objects_10 = towitoko/libccidtwin_la-atr.lo \ + towitoko/libccidtwin_la-pps.lo openct/libccidtwin_la-buffer.lo \ + openct/libccidtwin_la-checksum.lo \ + openct/libccidtwin_la-proto-t1.lo +am_libccidtwin_la_OBJECTS = $(am__objects_6) $(am__objects_7) \ + $(am__objects_8) $(am__objects_9) $(am__objects_10) +libccidtwin_la_OBJECTS = $(am_libccidtwin_la_OBJECTS) +libccidtwin_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(libccidtwin_la_CFLAGS) $(CFLAGS) $(libccidtwin_la_LDFLAGS) \ + $(LDFLAGS) -o $@ +@WITH_TWIN_SERIAL_TRUE@am_libccidtwin_la_rpath = -rpath $(libdir) +PROGRAMS = $(noinst_PROGRAMS) +am__objects_11 = parse-tokenparser.$(OBJEXT) parse-strlcpy.$(OBJEXT) \ + parse-simclist.$(OBJEXT) +am_parse_OBJECTS = parse-parse.$(OBJEXT) parse-debug.$(OBJEXT) \ + parse-ccid_usb.$(OBJEXT) $(am__objects_11) +parse_OBJECTS = $(am_parse_OBJECTS) +parse_DEPENDENCIES = $(am__DEPENDENCIES_1) +parse_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(parse_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +@MAINTAINER_MODE_FALSE@am__skiplex = test -f $@ || +LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS) +LTLEXCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(LEX) $(AM_LFLAGS) $(LFLAGS) +AM_V_LEX = $(am__v_LEX_@AM_V@) +am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@) +am__v_LEX_0 = @echo " LEX " $@; +am__v_LEX_1 = +YLWRAP = $(top_srcdir)/ylwrap +SOURCES = $(libccid_la_SOURCES) $(libccidtwin_la_SOURCES) \ + $(parse_SOURCES) +DIST_SOURCES = $(am__libccid_la_SOURCES_DIST) \ + $(am__libccidtwin_la_SOURCES_DIST) $(parse_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ + $(top_srcdir)/ylwrap tokenparser.c +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUNDLE_HOST = @BUNDLE_HOST@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DYN_LIB_EXT = @DYN_LIB_EXT@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIBUSB_CFLAGS = @LIBUSB_CFLAGS@ +LIBUSB_LIBS = @LIBUSB_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOCLASS = @NOCLASS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PCSC_CFLAGS = @PCSC_CFLAGS@ +PCSC_LIBS = @PCSC_LIBS@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +SYMBOL_VISIBILITY = @SYMBOL_VISIBILITY@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_aux_dir = @ac_aux_dir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_pthread_config = @ax_pthread_config@ +bindir = @bindir@ +bindir_exp = @bindir_exp@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +bundle = @bundle@ +ccidtwindir = @ccidtwindir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +serialconfdir = @serialconfdir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +sysconfdir_exp = @sysconfdir_exp@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usbdropdir = @usbdropdir@ +CCID_BUNDLE = $(bundle) +CCID_LIB = libccid.$(DYN_LIB_EXT) +CCIDTWIN_LIB = libccidtwin.$(DYN_LIB_EXT) +CCID_VERSION = CCID_VERSION=`$(srcdir)/convert_version.pl $(PACKAGE_VERSION)` +lib_LTLIBRARIES = $(am__append_1) $(am__append_4) +LIBS_TO_INSTALL = $(am__append_2) $(am__append_5) +LIBS_TO_UNINSTALL = $(am__append_3) $(am__append_6) +COMMON = ccid.c \ + ccid.h \ + ccid_ifdhandler.h \ + commands.c \ + commands.h \ + debug.h \ + defs.h \ + ifdhandler.c \ + utils.c \ + utils.h + +USB = ccid_usb.c ccid_usb.h +SERIAL = ccid_serial.c ccid_serial.h +T1 = towitoko/atr.c \ + towitoko/atr.h \ + towitoko/defines.h \ + towitoko/pps.c \ + towitoko/pps.h \ + openct/buffer.c \ + openct/buffer.h \ + openct/checksum.c \ + openct/checksum.h \ + openct/proto-t1.c \ + openct/proto-t1.h + +TOKEN_PARSER = tokenparser.l parser.h \ + strlcpy.c \ + misc.h \ + strlcpycat.h \ + simclist.c \ + simclist.h + +@WITHOUT_PCSC_TRUE@PROVIDED_BY_PCSC = debug.c +libccid_la_SOURCES = $(COMMON) $(USB) $(TOKEN_PARSER) $(PROVIDED_BY_PCSC) $(T1) +libccid_la_LIBADD = $(LEXLIB) $(LIBUSB_LIBS) $(PTHREAD_LIBS) +libccid_la_CFLAGS = $(PCSC_CFLAGS) $(LIBUSB_CFLAGS) $(PTHREAD_CFLAGS) \ + $(SYMBOL_VISIBILITY) -D$(CCID_VERSION) -DSIMCLIST_NO_DUMPRESTORE + +libccid_la_LDFLAGS = -avoid-version +libccidtwin_la_SOURCES = $(COMMON) $(SERIAL) $(TOKEN_PARSER) \ + $(PROVIDED_BY_PCSC) $(T1) + +libccidtwin_la_CFLAGS = $(PCSC_CFLAGS) $(PTHREAD_CFLAGS) $(SYMBOL_VISIBILITY) \ + -DTWIN_SERIAL -D$(CCID_VERSION) -DSIMCLIST_NO_DUMPRESTORE + +libccidtwin_la_LIBADD = $(PTHREAD_LIBS) +libccidtwin_la_LDFLAGS = -avoid-version +parse_SOURCES = parse.c debug.c ccid_usb.c $(TOKEN_PARSER) +parse_LDADD = $(LIBUSB_LIBS) +parse_CFLAGS = $(PCSC_CFLAGS) $(LIBUSB_CFLAGS) -DSIMCLIST_NO_DUMPRESTORE +EXTRA_DIST = Info.plist.src create_Info_plist.pl reader.conf.in \ + towitoko/COPYING towitoko/README openct/LICENSE openct/README \ + convert_version.pl 92_pcscd_ccid.rules + +INSTALL_UDEV_RULE_FILE = @/bin/echo "***************" ; echo "copy the src/92_pcscd_ccid.rules file in udev directory (/etc/udev/rules.d/)" ; /bin/echo "***************" +DISTCLEANFILES = tokenparser.c Info.plist +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .l .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } +towitoko/$(am__dirstamp): + @$(MKDIR_P) towitoko + @: > towitoko/$(am__dirstamp) +towitoko/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) towitoko/$(DEPDIR) + @: > towitoko/$(DEPDIR)/$(am__dirstamp) +towitoko/libccid_la-atr.lo: towitoko/$(am__dirstamp) \ + towitoko/$(DEPDIR)/$(am__dirstamp) +towitoko/libccid_la-pps.lo: towitoko/$(am__dirstamp) \ + towitoko/$(DEPDIR)/$(am__dirstamp) +openct/$(am__dirstamp): + @$(MKDIR_P) openct + @: > openct/$(am__dirstamp) +openct/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) openct/$(DEPDIR) + @: > openct/$(DEPDIR)/$(am__dirstamp) +openct/libccid_la-buffer.lo: openct/$(am__dirstamp) \ + openct/$(DEPDIR)/$(am__dirstamp) +openct/libccid_la-checksum.lo: openct/$(am__dirstamp) \ + openct/$(DEPDIR)/$(am__dirstamp) +openct/libccid_la-proto-t1.lo: openct/$(am__dirstamp) \ + openct/$(DEPDIR)/$(am__dirstamp) + +libccid.la: $(libccid_la_OBJECTS) $(libccid_la_DEPENDENCIES) $(EXTRA_libccid_la_DEPENDENCIES) + $(AM_V_CCLD)$(libccid_la_LINK) $(am_libccid_la_rpath) $(libccid_la_OBJECTS) $(libccid_la_LIBADD) $(LIBS) +towitoko/libccidtwin_la-atr.lo: towitoko/$(am__dirstamp) \ + towitoko/$(DEPDIR)/$(am__dirstamp) +towitoko/libccidtwin_la-pps.lo: towitoko/$(am__dirstamp) \ + towitoko/$(DEPDIR)/$(am__dirstamp) +openct/libccidtwin_la-buffer.lo: openct/$(am__dirstamp) \ + openct/$(DEPDIR)/$(am__dirstamp) +openct/libccidtwin_la-checksum.lo: openct/$(am__dirstamp) \ + openct/$(DEPDIR)/$(am__dirstamp) +openct/libccidtwin_la-proto-t1.lo: openct/$(am__dirstamp) \ + openct/$(DEPDIR)/$(am__dirstamp) + +libccidtwin.la: $(libccidtwin_la_OBJECTS) $(libccidtwin_la_DEPENDENCIES) $(EXTRA_libccidtwin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libccidtwin_la_LINK) $(am_libccidtwin_la_rpath) $(libccidtwin_la_OBJECTS) $(libccidtwin_la_LIBADD) $(LIBS) + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +parse$(EXEEXT): $(parse_OBJECTS) $(parse_DEPENDENCIES) $(EXTRA_parse_DEPENDENCIES) + @rm -f parse$(EXEEXT) + $(AM_V_CCLD)$(parse_LINK) $(parse_OBJECTS) $(parse_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f openct/*.$(OBJEXT) + -rm -f openct/*.lo + -rm -f towitoko/*.$(OBJEXT) + -rm -f towitoko/*.lo + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libccid_la-ccid.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libccid_la-ccid_usb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libccid_la-commands.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libccid_la-debug.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libccid_la-ifdhandler.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libccid_la-simclist.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libccid_la-strlcpy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libccid_la-tokenparser.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libccid_la-utils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libccidtwin_la-ccid.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libccidtwin_la-ccid_serial.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libccidtwin_la-commands.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libccidtwin_la-debug.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libccidtwin_la-ifdhandler.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libccidtwin_la-simclist.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libccidtwin_la-strlcpy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libccidtwin_la-tokenparser.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libccidtwin_la-utils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse-ccid_usb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse-debug.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse-parse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse-simclist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse-strlcpy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse-tokenparser.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@openct/$(DEPDIR)/libccid_la-buffer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@openct/$(DEPDIR)/libccid_la-checksum.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@openct/$(DEPDIR)/libccid_la-proto-t1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@openct/$(DEPDIR)/libccidtwin_la-buffer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@openct/$(DEPDIR)/libccidtwin_la-checksum.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@openct/$(DEPDIR)/libccidtwin_la-proto-t1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@towitoko/$(DEPDIR)/libccid_la-atr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@towitoko/$(DEPDIR)/libccid_la-pps.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@towitoko/$(DEPDIR)/libccidtwin_la-atr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@towitoko/$(DEPDIR)/libccidtwin_la-pps.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +libccid_la-ccid.lo: ccid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -MT libccid_la-ccid.lo -MD -MP -MF $(DEPDIR)/libccid_la-ccid.Tpo -c -o libccid_la-ccid.lo `test -f 'ccid.c' || echo '$(srcdir)/'`ccid.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libccid_la-ccid.Tpo $(DEPDIR)/libccid_la-ccid.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ccid.c' object='libccid_la-ccid.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -c -o libccid_la-ccid.lo `test -f 'ccid.c' || echo '$(srcdir)/'`ccid.c + +libccid_la-commands.lo: commands.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -MT libccid_la-commands.lo -MD -MP -MF $(DEPDIR)/libccid_la-commands.Tpo -c -o libccid_la-commands.lo `test -f 'commands.c' || echo '$(srcdir)/'`commands.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libccid_la-commands.Tpo $(DEPDIR)/libccid_la-commands.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands.c' object='libccid_la-commands.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -c -o libccid_la-commands.lo `test -f 'commands.c' || echo '$(srcdir)/'`commands.c + +libccid_la-ifdhandler.lo: ifdhandler.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -MT libccid_la-ifdhandler.lo -MD -MP -MF $(DEPDIR)/libccid_la-ifdhandler.Tpo -c -o libccid_la-ifdhandler.lo `test -f 'ifdhandler.c' || echo '$(srcdir)/'`ifdhandler.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libccid_la-ifdhandler.Tpo $(DEPDIR)/libccid_la-ifdhandler.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ifdhandler.c' object='libccid_la-ifdhandler.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -c -o libccid_la-ifdhandler.lo `test -f 'ifdhandler.c' || echo '$(srcdir)/'`ifdhandler.c + +libccid_la-utils.lo: utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -MT libccid_la-utils.lo -MD -MP -MF $(DEPDIR)/libccid_la-utils.Tpo -c -o libccid_la-utils.lo `test -f 'utils.c' || echo '$(srcdir)/'`utils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libccid_la-utils.Tpo $(DEPDIR)/libccid_la-utils.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='utils.c' object='libccid_la-utils.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -c -o libccid_la-utils.lo `test -f 'utils.c' || echo '$(srcdir)/'`utils.c + +libccid_la-ccid_usb.lo: ccid_usb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -MT libccid_la-ccid_usb.lo -MD -MP -MF $(DEPDIR)/libccid_la-ccid_usb.Tpo -c -o libccid_la-ccid_usb.lo `test -f 'ccid_usb.c' || echo '$(srcdir)/'`ccid_usb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libccid_la-ccid_usb.Tpo $(DEPDIR)/libccid_la-ccid_usb.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ccid_usb.c' object='libccid_la-ccid_usb.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -c -o libccid_la-ccid_usb.lo `test -f 'ccid_usb.c' || echo '$(srcdir)/'`ccid_usb.c + +libccid_la-tokenparser.lo: tokenparser.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -MT libccid_la-tokenparser.lo -MD -MP -MF $(DEPDIR)/libccid_la-tokenparser.Tpo -c -o libccid_la-tokenparser.lo `test -f 'tokenparser.c' || echo '$(srcdir)/'`tokenparser.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libccid_la-tokenparser.Tpo $(DEPDIR)/libccid_la-tokenparser.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tokenparser.c' object='libccid_la-tokenparser.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -c -o libccid_la-tokenparser.lo `test -f 'tokenparser.c' || echo '$(srcdir)/'`tokenparser.c + +libccid_la-strlcpy.lo: strlcpy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -MT libccid_la-strlcpy.lo -MD -MP -MF $(DEPDIR)/libccid_la-strlcpy.Tpo -c -o libccid_la-strlcpy.lo `test -f 'strlcpy.c' || echo '$(srcdir)/'`strlcpy.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libccid_la-strlcpy.Tpo $(DEPDIR)/libccid_la-strlcpy.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strlcpy.c' object='libccid_la-strlcpy.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -c -o libccid_la-strlcpy.lo `test -f 'strlcpy.c' || echo '$(srcdir)/'`strlcpy.c + +libccid_la-simclist.lo: simclist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -MT libccid_la-simclist.lo -MD -MP -MF $(DEPDIR)/libccid_la-simclist.Tpo -c -o libccid_la-simclist.lo `test -f 'simclist.c' || echo '$(srcdir)/'`simclist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libccid_la-simclist.Tpo $(DEPDIR)/libccid_la-simclist.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='simclist.c' object='libccid_la-simclist.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -c -o libccid_la-simclist.lo `test -f 'simclist.c' || echo '$(srcdir)/'`simclist.c + +libccid_la-debug.lo: debug.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -MT libccid_la-debug.lo -MD -MP -MF $(DEPDIR)/libccid_la-debug.Tpo -c -o libccid_la-debug.lo `test -f 'debug.c' || echo '$(srcdir)/'`debug.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libccid_la-debug.Tpo $(DEPDIR)/libccid_la-debug.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='debug.c' object='libccid_la-debug.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -c -o libccid_la-debug.lo `test -f 'debug.c' || echo '$(srcdir)/'`debug.c + +towitoko/libccid_la-atr.lo: towitoko/atr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -MT towitoko/libccid_la-atr.lo -MD -MP -MF towitoko/$(DEPDIR)/libccid_la-atr.Tpo -c -o towitoko/libccid_la-atr.lo `test -f 'towitoko/atr.c' || echo '$(srcdir)/'`towitoko/atr.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) towitoko/$(DEPDIR)/libccid_la-atr.Tpo towitoko/$(DEPDIR)/libccid_la-atr.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='towitoko/atr.c' object='towitoko/libccid_la-atr.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -c -o towitoko/libccid_la-atr.lo `test -f 'towitoko/atr.c' || echo '$(srcdir)/'`towitoko/atr.c + +towitoko/libccid_la-pps.lo: towitoko/pps.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -MT towitoko/libccid_la-pps.lo -MD -MP -MF towitoko/$(DEPDIR)/libccid_la-pps.Tpo -c -o towitoko/libccid_la-pps.lo `test -f 'towitoko/pps.c' || echo '$(srcdir)/'`towitoko/pps.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) towitoko/$(DEPDIR)/libccid_la-pps.Tpo towitoko/$(DEPDIR)/libccid_la-pps.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='towitoko/pps.c' object='towitoko/libccid_la-pps.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -c -o towitoko/libccid_la-pps.lo `test -f 'towitoko/pps.c' || echo '$(srcdir)/'`towitoko/pps.c + +openct/libccid_la-buffer.lo: openct/buffer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -MT openct/libccid_la-buffer.lo -MD -MP -MF openct/$(DEPDIR)/libccid_la-buffer.Tpo -c -o openct/libccid_la-buffer.lo `test -f 'openct/buffer.c' || echo '$(srcdir)/'`openct/buffer.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) openct/$(DEPDIR)/libccid_la-buffer.Tpo openct/$(DEPDIR)/libccid_la-buffer.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openct/buffer.c' object='openct/libccid_la-buffer.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -c -o openct/libccid_la-buffer.lo `test -f 'openct/buffer.c' || echo '$(srcdir)/'`openct/buffer.c + +openct/libccid_la-checksum.lo: openct/checksum.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -MT openct/libccid_la-checksum.lo -MD -MP -MF openct/$(DEPDIR)/libccid_la-checksum.Tpo -c -o openct/libccid_la-checksum.lo `test -f 'openct/checksum.c' || echo '$(srcdir)/'`openct/checksum.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) openct/$(DEPDIR)/libccid_la-checksum.Tpo openct/$(DEPDIR)/libccid_la-checksum.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openct/checksum.c' object='openct/libccid_la-checksum.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -c -o openct/libccid_la-checksum.lo `test -f 'openct/checksum.c' || echo '$(srcdir)/'`openct/checksum.c + +openct/libccid_la-proto-t1.lo: openct/proto-t1.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -MT openct/libccid_la-proto-t1.lo -MD -MP -MF openct/$(DEPDIR)/libccid_la-proto-t1.Tpo -c -o openct/libccid_la-proto-t1.lo `test -f 'openct/proto-t1.c' || echo '$(srcdir)/'`openct/proto-t1.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) openct/$(DEPDIR)/libccid_la-proto-t1.Tpo openct/$(DEPDIR)/libccid_la-proto-t1.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openct/proto-t1.c' object='openct/libccid_la-proto-t1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccid_la_CFLAGS) $(CFLAGS) -c -o openct/libccid_la-proto-t1.lo `test -f 'openct/proto-t1.c' || echo '$(srcdir)/'`openct/proto-t1.c + +libccidtwin_la-ccid.lo: ccid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -MT libccidtwin_la-ccid.lo -MD -MP -MF $(DEPDIR)/libccidtwin_la-ccid.Tpo -c -o libccidtwin_la-ccid.lo `test -f 'ccid.c' || echo '$(srcdir)/'`ccid.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libccidtwin_la-ccid.Tpo $(DEPDIR)/libccidtwin_la-ccid.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ccid.c' object='libccidtwin_la-ccid.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -c -o libccidtwin_la-ccid.lo `test -f 'ccid.c' || echo '$(srcdir)/'`ccid.c + +libccidtwin_la-commands.lo: commands.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -MT libccidtwin_la-commands.lo -MD -MP -MF $(DEPDIR)/libccidtwin_la-commands.Tpo -c -o libccidtwin_la-commands.lo `test -f 'commands.c' || echo '$(srcdir)/'`commands.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libccidtwin_la-commands.Tpo $(DEPDIR)/libccidtwin_la-commands.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands.c' object='libccidtwin_la-commands.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -c -o libccidtwin_la-commands.lo `test -f 'commands.c' || echo '$(srcdir)/'`commands.c + +libccidtwin_la-ifdhandler.lo: ifdhandler.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -MT libccidtwin_la-ifdhandler.lo -MD -MP -MF $(DEPDIR)/libccidtwin_la-ifdhandler.Tpo -c -o libccidtwin_la-ifdhandler.lo `test -f 'ifdhandler.c' || echo '$(srcdir)/'`ifdhandler.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libccidtwin_la-ifdhandler.Tpo $(DEPDIR)/libccidtwin_la-ifdhandler.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ifdhandler.c' object='libccidtwin_la-ifdhandler.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -c -o libccidtwin_la-ifdhandler.lo `test -f 'ifdhandler.c' || echo '$(srcdir)/'`ifdhandler.c + +libccidtwin_la-utils.lo: utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -MT libccidtwin_la-utils.lo -MD -MP -MF $(DEPDIR)/libccidtwin_la-utils.Tpo -c -o libccidtwin_la-utils.lo `test -f 'utils.c' || echo '$(srcdir)/'`utils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libccidtwin_la-utils.Tpo $(DEPDIR)/libccidtwin_la-utils.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='utils.c' object='libccidtwin_la-utils.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -c -o libccidtwin_la-utils.lo `test -f 'utils.c' || echo '$(srcdir)/'`utils.c + +libccidtwin_la-ccid_serial.lo: ccid_serial.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -MT libccidtwin_la-ccid_serial.lo -MD -MP -MF $(DEPDIR)/libccidtwin_la-ccid_serial.Tpo -c -o libccidtwin_la-ccid_serial.lo `test -f 'ccid_serial.c' || echo '$(srcdir)/'`ccid_serial.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libccidtwin_la-ccid_serial.Tpo $(DEPDIR)/libccidtwin_la-ccid_serial.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ccid_serial.c' object='libccidtwin_la-ccid_serial.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -c -o libccidtwin_la-ccid_serial.lo `test -f 'ccid_serial.c' || echo '$(srcdir)/'`ccid_serial.c + +libccidtwin_la-tokenparser.lo: tokenparser.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -MT libccidtwin_la-tokenparser.lo -MD -MP -MF $(DEPDIR)/libccidtwin_la-tokenparser.Tpo -c -o libccidtwin_la-tokenparser.lo `test -f 'tokenparser.c' || echo '$(srcdir)/'`tokenparser.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libccidtwin_la-tokenparser.Tpo $(DEPDIR)/libccidtwin_la-tokenparser.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tokenparser.c' object='libccidtwin_la-tokenparser.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -c -o libccidtwin_la-tokenparser.lo `test -f 'tokenparser.c' || echo '$(srcdir)/'`tokenparser.c + +libccidtwin_la-strlcpy.lo: strlcpy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -MT libccidtwin_la-strlcpy.lo -MD -MP -MF $(DEPDIR)/libccidtwin_la-strlcpy.Tpo -c -o libccidtwin_la-strlcpy.lo `test -f 'strlcpy.c' || echo '$(srcdir)/'`strlcpy.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libccidtwin_la-strlcpy.Tpo $(DEPDIR)/libccidtwin_la-strlcpy.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strlcpy.c' object='libccidtwin_la-strlcpy.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -c -o libccidtwin_la-strlcpy.lo `test -f 'strlcpy.c' || echo '$(srcdir)/'`strlcpy.c + +libccidtwin_la-simclist.lo: simclist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -MT libccidtwin_la-simclist.lo -MD -MP -MF $(DEPDIR)/libccidtwin_la-simclist.Tpo -c -o libccidtwin_la-simclist.lo `test -f 'simclist.c' || echo '$(srcdir)/'`simclist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libccidtwin_la-simclist.Tpo $(DEPDIR)/libccidtwin_la-simclist.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='simclist.c' object='libccidtwin_la-simclist.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -c -o libccidtwin_la-simclist.lo `test -f 'simclist.c' || echo '$(srcdir)/'`simclist.c + +libccidtwin_la-debug.lo: debug.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -MT libccidtwin_la-debug.lo -MD -MP -MF $(DEPDIR)/libccidtwin_la-debug.Tpo -c -o libccidtwin_la-debug.lo `test -f 'debug.c' || echo '$(srcdir)/'`debug.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libccidtwin_la-debug.Tpo $(DEPDIR)/libccidtwin_la-debug.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='debug.c' object='libccidtwin_la-debug.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -c -o libccidtwin_la-debug.lo `test -f 'debug.c' || echo '$(srcdir)/'`debug.c + +towitoko/libccidtwin_la-atr.lo: towitoko/atr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -MT towitoko/libccidtwin_la-atr.lo -MD -MP -MF towitoko/$(DEPDIR)/libccidtwin_la-atr.Tpo -c -o towitoko/libccidtwin_la-atr.lo `test -f 'towitoko/atr.c' || echo '$(srcdir)/'`towitoko/atr.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) towitoko/$(DEPDIR)/libccidtwin_la-atr.Tpo towitoko/$(DEPDIR)/libccidtwin_la-atr.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='towitoko/atr.c' object='towitoko/libccidtwin_la-atr.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -c -o towitoko/libccidtwin_la-atr.lo `test -f 'towitoko/atr.c' || echo '$(srcdir)/'`towitoko/atr.c + +towitoko/libccidtwin_la-pps.lo: towitoko/pps.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -MT towitoko/libccidtwin_la-pps.lo -MD -MP -MF towitoko/$(DEPDIR)/libccidtwin_la-pps.Tpo -c -o towitoko/libccidtwin_la-pps.lo `test -f 'towitoko/pps.c' || echo '$(srcdir)/'`towitoko/pps.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) towitoko/$(DEPDIR)/libccidtwin_la-pps.Tpo towitoko/$(DEPDIR)/libccidtwin_la-pps.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='towitoko/pps.c' object='towitoko/libccidtwin_la-pps.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -c -o towitoko/libccidtwin_la-pps.lo `test -f 'towitoko/pps.c' || echo '$(srcdir)/'`towitoko/pps.c + +openct/libccidtwin_la-buffer.lo: openct/buffer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -MT openct/libccidtwin_la-buffer.lo -MD -MP -MF openct/$(DEPDIR)/libccidtwin_la-buffer.Tpo -c -o openct/libccidtwin_la-buffer.lo `test -f 'openct/buffer.c' || echo '$(srcdir)/'`openct/buffer.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) openct/$(DEPDIR)/libccidtwin_la-buffer.Tpo openct/$(DEPDIR)/libccidtwin_la-buffer.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openct/buffer.c' object='openct/libccidtwin_la-buffer.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -c -o openct/libccidtwin_la-buffer.lo `test -f 'openct/buffer.c' || echo '$(srcdir)/'`openct/buffer.c + +openct/libccidtwin_la-checksum.lo: openct/checksum.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -MT openct/libccidtwin_la-checksum.lo -MD -MP -MF openct/$(DEPDIR)/libccidtwin_la-checksum.Tpo -c -o openct/libccidtwin_la-checksum.lo `test -f 'openct/checksum.c' || echo '$(srcdir)/'`openct/checksum.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) openct/$(DEPDIR)/libccidtwin_la-checksum.Tpo openct/$(DEPDIR)/libccidtwin_la-checksum.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openct/checksum.c' object='openct/libccidtwin_la-checksum.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -c -o openct/libccidtwin_la-checksum.lo `test -f 'openct/checksum.c' || echo '$(srcdir)/'`openct/checksum.c + +openct/libccidtwin_la-proto-t1.lo: openct/proto-t1.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -MT openct/libccidtwin_la-proto-t1.lo -MD -MP -MF openct/$(DEPDIR)/libccidtwin_la-proto-t1.Tpo -c -o openct/libccidtwin_la-proto-t1.lo `test -f 'openct/proto-t1.c' || echo '$(srcdir)/'`openct/proto-t1.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) openct/$(DEPDIR)/libccidtwin_la-proto-t1.Tpo openct/$(DEPDIR)/libccidtwin_la-proto-t1.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openct/proto-t1.c' object='openct/libccidtwin_la-proto-t1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libccidtwin_la_CFLAGS) $(CFLAGS) -c -o openct/libccidtwin_la-proto-t1.lo `test -f 'openct/proto-t1.c' || echo '$(srcdir)/'`openct/proto-t1.c + +parse-parse.o: parse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -MT parse-parse.o -MD -MP -MF $(DEPDIR)/parse-parse.Tpo -c -o parse-parse.o `test -f 'parse.c' || echo '$(srcdir)/'`parse.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/parse-parse.Tpo $(DEPDIR)/parse-parse.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='parse.c' object='parse-parse.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -c -o parse-parse.o `test -f 'parse.c' || echo '$(srcdir)/'`parse.c + +parse-parse.obj: parse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -MT parse-parse.obj -MD -MP -MF $(DEPDIR)/parse-parse.Tpo -c -o parse-parse.obj `if test -f 'parse.c'; then $(CYGPATH_W) 'parse.c'; else $(CYGPATH_W) '$(srcdir)/parse.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/parse-parse.Tpo $(DEPDIR)/parse-parse.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='parse.c' object='parse-parse.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -c -o parse-parse.obj `if test -f 'parse.c'; then $(CYGPATH_W) 'parse.c'; else $(CYGPATH_W) '$(srcdir)/parse.c'; fi` + +parse-debug.o: debug.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -MT parse-debug.o -MD -MP -MF $(DEPDIR)/parse-debug.Tpo -c -o parse-debug.o `test -f 'debug.c' || echo '$(srcdir)/'`debug.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/parse-debug.Tpo $(DEPDIR)/parse-debug.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='debug.c' object='parse-debug.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -c -o parse-debug.o `test -f 'debug.c' || echo '$(srcdir)/'`debug.c + +parse-debug.obj: debug.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -MT parse-debug.obj -MD -MP -MF $(DEPDIR)/parse-debug.Tpo -c -o parse-debug.obj `if test -f 'debug.c'; then $(CYGPATH_W) 'debug.c'; else $(CYGPATH_W) '$(srcdir)/debug.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/parse-debug.Tpo $(DEPDIR)/parse-debug.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='debug.c' object='parse-debug.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -c -o parse-debug.obj `if test -f 'debug.c'; then $(CYGPATH_W) 'debug.c'; else $(CYGPATH_W) '$(srcdir)/debug.c'; fi` + +parse-ccid_usb.o: ccid_usb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -MT parse-ccid_usb.o -MD -MP -MF $(DEPDIR)/parse-ccid_usb.Tpo -c -o parse-ccid_usb.o `test -f 'ccid_usb.c' || echo '$(srcdir)/'`ccid_usb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/parse-ccid_usb.Tpo $(DEPDIR)/parse-ccid_usb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ccid_usb.c' object='parse-ccid_usb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -c -o parse-ccid_usb.o `test -f 'ccid_usb.c' || echo '$(srcdir)/'`ccid_usb.c + +parse-ccid_usb.obj: ccid_usb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -MT parse-ccid_usb.obj -MD -MP -MF $(DEPDIR)/parse-ccid_usb.Tpo -c -o parse-ccid_usb.obj `if test -f 'ccid_usb.c'; then $(CYGPATH_W) 'ccid_usb.c'; else $(CYGPATH_W) '$(srcdir)/ccid_usb.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/parse-ccid_usb.Tpo $(DEPDIR)/parse-ccid_usb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ccid_usb.c' object='parse-ccid_usb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -c -o parse-ccid_usb.obj `if test -f 'ccid_usb.c'; then $(CYGPATH_W) 'ccid_usb.c'; else $(CYGPATH_W) '$(srcdir)/ccid_usb.c'; fi` + +parse-tokenparser.o: tokenparser.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -MT parse-tokenparser.o -MD -MP -MF $(DEPDIR)/parse-tokenparser.Tpo -c -o parse-tokenparser.o `test -f 'tokenparser.c' || echo '$(srcdir)/'`tokenparser.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/parse-tokenparser.Tpo $(DEPDIR)/parse-tokenparser.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tokenparser.c' object='parse-tokenparser.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -c -o parse-tokenparser.o `test -f 'tokenparser.c' || echo '$(srcdir)/'`tokenparser.c + +parse-tokenparser.obj: tokenparser.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -MT parse-tokenparser.obj -MD -MP -MF $(DEPDIR)/parse-tokenparser.Tpo -c -o parse-tokenparser.obj `if test -f 'tokenparser.c'; then $(CYGPATH_W) 'tokenparser.c'; else $(CYGPATH_W) '$(srcdir)/tokenparser.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/parse-tokenparser.Tpo $(DEPDIR)/parse-tokenparser.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tokenparser.c' object='parse-tokenparser.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -c -o parse-tokenparser.obj `if test -f 'tokenparser.c'; then $(CYGPATH_W) 'tokenparser.c'; else $(CYGPATH_W) '$(srcdir)/tokenparser.c'; fi` + +parse-strlcpy.o: strlcpy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -MT parse-strlcpy.o -MD -MP -MF $(DEPDIR)/parse-strlcpy.Tpo -c -o parse-strlcpy.o `test -f 'strlcpy.c' || echo '$(srcdir)/'`strlcpy.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/parse-strlcpy.Tpo $(DEPDIR)/parse-strlcpy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strlcpy.c' object='parse-strlcpy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -c -o parse-strlcpy.o `test -f 'strlcpy.c' || echo '$(srcdir)/'`strlcpy.c + +parse-strlcpy.obj: strlcpy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -MT parse-strlcpy.obj -MD -MP -MF $(DEPDIR)/parse-strlcpy.Tpo -c -o parse-strlcpy.obj `if test -f 'strlcpy.c'; then $(CYGPATH_W) 'strlcpy.c'; else $(CYGPATH_W) '$(srcdir)/strlcpy.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/parse-strlcpy.Tpo $(DEPDIR)/parse-strlcpy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strlcpy.c' object='parse-strlcpy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -c -o parse-strlcpy.obj `if test -f 'strlcpy.c'; then $(CYGPATH_W) 'strlcpy.c'; else $(CYGPATH_W) '$(srcdir)/strlcpy.c'; fi` + +parse-simclist.o: simclist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -MT parse-simclist.o -MD -MP -MF $(DEPDIR)/parse-simclist.Tpo -c -o parse-simclist.o `test -f 'simclist.c' || echo '$(srcdir)/'`simclist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/parse-simclist.Tpo $(DEPDIR)/parse-simclist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='simclist.c' object='parse-simclist.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -c -o parse-simclist.o `test -f 'simclist.c' || echo '$(srcdir)/'`simclist.c + +parse-simclist.obj: simclist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -MT parse-simclist.obj -MD -MP -MF $(DEPDIR)/parse-simclist.Tpo -c -o parse-simclist.obj `if test -f 'simclist.c'; then $(CYGPATH_W) 'simclist.c'; else $(CYGPATH_W) '$(srcdir)/simclist.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/parse-simclist.Tpo $(DEPDIR)/parse-simclist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='simclist.c' object='parse-simclist.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(parse_CFLAGS) $(CFLAGS) -c -o parse-simclist.obj `if test -f 'simclist.c'; then $(CYGPATH_W) 'simclist.c'; else $(CYGPATH_W) '$(srcdir)/simclist.c'; fi` + +.l.c: + $(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE) + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + -rm -rf openct/.libs openct/_libs + -rm -rf towitoko/.libs towitoko/_libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(libdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install-exec: install-exec-am +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f openct/$(DEPDIR)/$(am__dirstamp) + -rm -f openct/$(am__dirstamp) + -rm -f towitoko/$(DEPDIR)/$(am__dirstamp) + -rm -f towitoko/$(am__dirstamp) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -rm -f tokenparser.c +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + clean-noinstPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) openct/$(DEPDIR) towitoko/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) openct/$(DEPDIR) towitoko/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-libLTLIBRARIES \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-libLTLIBRARIES + +.PRECIOUS: Makefile + + +# We can't use install-exec-local since we want to overwrite the install +# rule. We do not want to _add_ files to install +install: $(LIBS_TO_INSTALL) + +Info.plist: Info.plist.src $(srcdir)/../readers/supported_readers.txt + $(srcdir)/create_Info_plist.pl $(srcdir)/../readers/supported_readers.txt $(srcdir)/Info.plist.src --target=$(CCID_LIB) --version=$(VERSION) $(NOCLASS) > Info.plist + +install_ccid: libccid.la Info.plist + $(mkinstalldirs) "$(DESTDIR)$(usbdropdir)/$(CCID_BUNDLE)/Contents/$(BUNDLE_HOST)/" + cp Info.plist "$(DESTDIR)$(usbdropdir)/$(CCID_BUNDLE)/Contents/" + cp .libs/$(CCID_LIB) "$(DESTDIR)$(usbdropdir)/$(CCID_BUNDLE)/Contents/$(BUNDLE_HOST)/$(CCID_LIB)" + $(INSTALL_UDEV_RULE_FILE) + +install_ccidtwin: libccidtwin.la + $(mkinstalldirs) "$(DESTDIR)$(ccidtwindir)" + cp .libs/$(CCIDTWIN_LIB) "$(DESTDIR)$(ccidtwindir)/$(CCIDTWIN_LIB)" + $(mkinstalldirs) "$(DESTDIR)/$(serialconfdir)" ; \ + perl -ne "s|TARGET|$(ccidtwindir)/$(CCIDTWIN_LIB)| ; print" $(srcdir)/reader.conf.in > "$(DESTDIR)/$(serialconfdir)/libccidtwin" + +# do not uninstall the serial driver by default +# use explicitely 'make uninstall_ccidtwin' +uninstall: $(LIBS_TO_UNINSTALL) + +uninstall_ccid: + rm -rf "$(DESTDIR)$(usbdropdir)/$(CCID_BUNDLE)" + +uninstall_ccidtwin: + rm -f "$(DESTDIR)$(ccidtwindir)/$(CCIDTWIN_LIB)" + rm -f "$(DESTDIR)/$(serialconfdir)/libccidtwin" + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/ccid.c b/src/ccid.c new file mode 100644 index 0000000..edded92 --- /dev/null +++ b/src/ccid.c @@ -0,0 +1,701 @@ +/* + ccid.c: CCID common code + Copyright (C) 2003-2010 Ludovic Rousseau + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include + +#ifdef HAVE_STDIO_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_STRING_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif + +#include +#include + +#include "debug.h" +#include "ccid.h" +#include "defs.h" +#include "ccid_ifdhandler.h" +#include "commands.h" +#include "utils.h" + +#ifdef __APPLE__ +#include +#endif + +/***************************************************************************** + * + * ccid_open_hack_pre + * + ****************************************************************************/ +int ccid_open_hack_pre(unsigned int reader_index) +{ + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); + + switch (ccid_descriptor->readerID) + { + case MYSMARTPAD: + ccid_descriptor->dwMaxIFSD = 254; + break; + + case CL1356D: + /* the firmware needs some time to initialize */ + (void)sleep(1); + ccid_descriptor->readTimeout = 60*1000; /* 60 seconds */ + break; + +#ifdef ENABLE_ZLP + case GEMPCTWIN: + case GEMPCKEY: + case DELLSCRK: + /* Only the chipset with firmware version 2.00 is "bogus" + * The reader may send packets of 0 bytes when the reader is + * connected to a USB 3 port */ + if (0x0200 == ccid_descriptor->IFD_bcdDevice) + { + ccid_descriptor->zlp = TRUE; + DEBUG_INFO1("ZLP fixup"); + } + break; +#endif + + case OZ776: + case OZ776_7772: + ccid_descriptor->dwMaxDataRate = 9600; + break; + + case ElatecTWN4_CCID_CDC: + case ElatecTWN4_CCID: + /* Use a timeout of 1000 ms instead of 100 ms in + * CmdGetSlotStatus() used by CreateChannelByNameOrChannel() + * The reader answers after up to 1 s if no tag is present */ + ccid_descriptor->readTimeout = DEFAULT_COM_READ_TIMEOUT * 10; + break; + + case SCM_SCL011: + /* The SCM SCL011 reader needs 350 ms to answer */ + ccid_descriptor->readTimeout = DEFAULT_COM_READ_TIMEOUT * 4; + break; + } + + /* CCID */ + if ((PROTOCOL_CCID == ccid_descriptor->bInterfaceProtocol) + && (3 == ccid_descriptor -> bNumEndpoints)) + { +#ifndef TWIN_SERIAL + /* just wait for 100ms in case a notification is in the pipe */ + (void)InterruptRead(reader_index, 100); +#endif + } + + /* ICCD type A */ + if (PROTOCOL_ICCD_A == ccid_descriptor->bInterfaceProtocol) + { + unsigned char tmp[MAX_ATR_SIZE]; + unsigned int n = sizeof(tmp); + + DEBUG_COMM("ICCD type A"); + (void)CmdPowerOff(reader_index); + (void)CmdPowerOn(reader_index, &n, tmp, CCID_CLASS_AUTO_VOLTAGE); + (void)CmdPowerOff(reader_index); + } + + /* ICCD type B */ + if (PROTOCOL_ICCD_B == ccid_descriptor->bInterfaceProtocol) + { + unsigned char tmp[MAX_ATR_SIZE]; + unsigned int n = sizeof(tmp); + + DEBUG_COMM("ICCD type B"); + if (CCID_CLASS_SHORT_APDU == + (ccid_descriptor->dwFeatures & CCID_CLASS_EXCHANGE_MASK)) + { + /* use the extended APDU comm alogorithm */ + ccid_descriptor->dwFeatures &= ~CCID_CLASS_EXCHANGE_MASK; + ccid_descriptor->dwFeatures |= CCID_CLASS_EXTENDED_APDU; + } + + (void)CmdPowerOff(reader_index); + (void)CmdPowerOn(reader_index, &n, tmp, CCID_CLASS_AUTO_VOLTAGE); + (void)CmdPowerOff(reader_index); + } + + return 0; +} /* ccid_open_hack_pre */ + +#ifndef NO_LOG +/***************************************************************************** + * + * dump_gemalto_firmware_features + * + ****************************************************************************/ +static void dump_gemalto_firmware_features(struct GEMALTO_FIRMWARE_FEATURES *gff) +{ + DEBUG_INFO2("Dumping Gemalto firmware features (%zd bytes):", + sizeof(struct GEMALTO_FIRMWARE_FEATURES)); + +#define YESNO(x) (x) ? "yes" : "no" + + DEBUG_INFO2(" bLogicalLCDLineNumber: %d", gff->bLogicalLCDLineNumber); + DEBUG_INFO2(" bLogicalLCDRowNumber: %d", gff->bLogicalLCDRowNumber); + DEBUG_INFO2(" bLcdInfo: 0x%02X", gff->bLcdInfo); + DEBUG_INFO2(" bEntryValidationCondition: 0x%02X", + gff->bEntryValidationCondition); + + DEBUG_INFO1(" Reader supports PC/SCv2 features:"); + DEBUG_INFO2(" VerifyPinStart: %s", YESNO(gff->VerifyPinStart)); + DEBUG_INFO2(" VerifyPinFinish: %s", YESNO(gff->VerifyPinFinish)); + DEBUG_INFO2(" ModifyPinStart: %s", YESNO(gff->ModifyPinStart)); + DEBUG_INFO2(" ModifyPinFinish: %s", YESNO(gff->ModifyPinFinish)); + DEBUG_INFO2(" GetKeyPressed: %s", YESNO(gff->GetKeyPressed)); + DEBUG_INFO2(" VerifyPinDirect: %s", YESNO(gff->VerifyPinDirect)); + DEBUG_INFO2(" ModifyPinDirect: %s", YESNO(gff->ModifyPinDirect)); + DEBUG_INFO2(" Abort: %s", YESNO(gff->Abort)); + DEBUG_INFO2(" GetKey: %s", YESNO(gff->GetKey)); + DEBUG_INFO2(" WriteDisplay: %s", YESNO(gff->WriteDisplay)); + DEBUG_INFO2(" SetSpeMessage: %s", YESNO(gff->SetSpeMessage)); + DEBUG_INFO2(" bTimeOut2: %s", YESNO(gff->bTimeOut2)); + DEBUG_INFO2(" bPPDUSupportOverXferBlock: %s", + YESNO(gff->bPPDUSupportOverXferBlock)); + DEBUG_INFO2(" bPPDUSupportOverEscape: %s", + YESNO(gff->bPPDUSupportOverEscape)); + + DEBUG_INFO2(" bListSupportedLanguages: %s", + YESNO(gff->bListSupportedLanguages)); + DEBUG_INFO2(" bNumberMessageFix: %s", YESNO(gff->bNumberMessageFix)); + + DEBUG_INFO2(" VersionNumber: 0x%02X", gff->VersionNumber); + DEBUG_INFO2(" MinimumPINSize: %d", gff->MinimumPINSize); + DEBUG_INFO2(" MaximumPINSize: %d", gff->MaximumPINSize); + DEBUG_INFO2(" Firewall: %s", YESNO(gff->Firewall)); + if (gff->Firewall && gff->FirewalledCommand_SW1 + && gff->FirewalledCommand_SW2) + { + DEBUG_INFO2(" FirewalledCommand_SW1: 0x%02X", + gff->FirewalledCommand_SW1); + DEBUG_INFO2(" FirewalledCommand_SW2: 0x%02X", + gff->FirewalledCommand_SW2); + } + +} /* dump_gemalto_firmware_features */ +#endif + +/***************************************************************************** + * + * set_gemalto_firmware_features + * + ****************************************************************************/ +static void set_gemalto_firmware_features(unsigned int reader_index) +{ + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); + struct GEMALTO_FIRMWARE_FEATURES *gf_features; + + gf_features = malloc(sizeof(struct GEMALTO_FIRMWARE_FEATURES)); + if (gf_features) + { + unsigned char cmd[] = { 0x6A }; /* GET_FIRMWARE_FEATURES command id */ + unsigned int len_features = sizeof *gf_features; + RESPONSECODE ret; + + ret = CmdEscapeCheck(reader_index, cmd, sizeof cmd, + (unsigned char*)gf_features, &len_features, 0, TRUE); + if ((IFD_SUCCESS == ret) && + (len_features == sizeof *gf_features)) + { + /* Command is supported if it succeeds at CCID level */ + /* and returned size matches our expectation */ + ccid_descriptor->gemalto_firmware_features = gf_features; +#ifndef NO_LOG + dump_gemalto_firmware_features(gf_features); +#endif + } + else + { + /* Command is not supported, let's free allocated memory */ + free(gf_features); + DEBUG_INFO3("GET_FIRMWARE_FEATURES failed: " DWORD_D ", len=%d", + ret, len_features); + } + } +} /* set_gemalto_firmware_features */ + +/***************************************************************************** + * + * ccid_open_hack_post + * + ****************************************************************************/ +int ccid_open_hack_post(unsigned int reader_index) +{ + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); + RESPONSECODE return_value = IFD_SUCCESS; + + switch (ccid_descriptor->readerID) + { + case GEMPCKEY: + case GEMPCTWIN: + /* Reader announces TPDU but can do APDU (EMV in fact) */ + if (DriverOptions & DRIVER_OPTION_GEMPC_TWIN_KEY_APDU) + { + unsigned char cmd[] = { 0x1F, 0x02 }; + unsigned char res[10]; + unsigned int length_res = sizeof(res); + + if (CmdEscape(reader_index, cmd, sizeof(cmd), res, &length_res, 0) == IFD_SUCCESS) + { + ccid_descriptor->dwFeatures &= ~CCID_CLASS_EXCHANGE_MASK; + ccid_descriptor->dwFeatures |= CCID_CLASS_SHORT_APDU; + } + } + break; + + case VEGAALPHA: + case GEMPCPINPAD: + /* load the l10n strings in the pinpad memory */ + { +#define L10N_HEADER_SIZE 5 +#define L10N_STRING_MAX_SIZE 16 +#define L10N_NB_STRING 10 + + unsigned char cmd[L10N_HEADER_SIZE + L10N_NB_STRING * L10N_STRING_MAX_SIZE]; + unsigned char res[20]; + unsigned int length_res = sizeof(res); + int offset, i, j; + + const char *fr[] = { + "Entrer PIN", + "Nouveau PIN", + "Confirmer PIN", + "PIN correct", + "PIN Incorrect !", + "Delai depasse", + "* essai restant", + "Inserer carte", + "Erreur carte", + "PIN bloque" }; + + const char *de[] = { + "PIN eingeben", + "Neue PIN", + "PIN bestatigen", + "PIN korrect", + "Falsche PIN !", + "Zeit abgelaufen", + "* Versuche ubrig", + "Karte einstecken", + "Fehler Karte", + "PIN blockiert" }; + + const char *es[] = { + "Introducir PIN", + "Nuevo PIN", + "Confirmar PIN", + "PIN OK", + "PIN Incorrecto !", + "Tiempo Agotado", + "* ensayos quedan", + "Introducir Tarj.", + "Error en Tarjeta", + "PIN bloqueado" }; + + const char *it[] = { + "Inserire PIN", + "Nuovo PIN", + "Confermare PIN", + "PIN Corretto", + "PIN Errato !", + "Tempo scaduto", + "* prove rimaste", + "Inserire Carta", + "Errore Carta", + "PIN ostruito"}; + + const char *pt[] = { + "Insira PIN", + "Novo PIN", + "Conf. novo PIN", + "PIN OK", + "PIN falhou!", + "Tempo expirou", + "* tentiv. restam", + "Introduza cartao", + "Erro cartao", + "PIN bloqueado" }; + + const char *nl[] = { + "Inbrengen code", + "Nieuwe code", + "Bevestig code", + "Code aanvaard", + "Foute code", + "Time out", + "* Nog Pogingen", + "Kaart inbrengen", + "Kaart fout", + "Kaart blok" }; + + const char *tr[] = { + "PIN Giriniz", + "Yeni PIN", + "PIN Onayala", + "PIN OK", + "Yanlis PIN", + "Zaman Asimi", + "* deneme kaldi", + "Karti Takiniz", + "Kart Hatasi", + "Kart Kilitli" }; + + const char *en[] = { + "Enter PIN", + "New PIN", + "Confirm PIN", + "PIN OK", + "Incorrect PIN!", + "Time Out", + "* retries left", + "Insert Card", + "Card Error", + "PIN blocked" }; + + const char *lang; + const char **l10n; + +#ifdef __APPLE__ + CFArrayRef cfa; + CFStringRef slang; + + /* Get the complete ordered list */ + cfa = CFLocaleCopyPreferredLanguages(); + + /* Use the first/preferred language + * As the driver is run as root we get the language + * selected during install */ + slang = CFArrayGetValueAtIndex(cfa, 0); + + /* CFString -> C string */ + lang = CFStringGetCStringPtr(slang, kCFStringEncodingMacRoman); +#else + /* The other Unixes just use the LANG env variable */ + lang = getenv("LANG"); +#endif + DEBUG_COMM2("Using lang: %s", lang); + if (NULL == lang) + l10n = en; + else + { + if (0 == strncmp(lang, "fr", 2)) + l10n = fr; + else if (0 == strncmp(lang, "de", 2)) + l10n = de; + else if (0 == strncmp(lang, "es", 2)) + l10n = es; + else if (0 == strncmp(lang, "it", 2)) + l10n = it; + else if (0 == strncmp(lang, "pt", 2)) + l10n = pt; + else if (0 == strncmp(lang, "nl", 2)) + l10n = nl; + else if (0 == strncmp(lang, "tr", 2)) + l10n = tr; + else + l10n = en; + } + +#ifdef __APPLE__ + /* Release the allocated array */ + CFRelease(cfa); +#endif + offset = 0; + cmd[offset++] = 0xB2; /* load strings */ + cmd[offset++] = 0xA0; /* address of the memory */ + cmd[offset++] = 0x00; /* address of the first byte */ + cmd[offset++] = 0x4D; /* magic value */ + cmd[offset++] = 0x4C; /* magic value */ + + /* for each string */ + for (i=0; ibPINSupport = 0; + break; + + case HID_AVIATOR: /* OMNIKEY Generic */ + case HID_OMNIKEY_3X21: /* OMNIKEY 3121 or 3021 or 1021 */ + case HID_OMNIKEY_6121: /* OMNIKEY 6121 */ + case CHERRY_XX44: /* Cherry Smart Terminal xx44 */ + case FUJITSU_D323: /* Fujitsu Smartcard Reader D323 */ + /* The chip advertises pinpad but actually doesn't have one */ + ccid_descriptor->bPINSupport = 0; + /* Firmware uses chaining */ + ccid_descriptor->dwFeatures &= ~CCID_CLASS_EXCHANGE_MASK; + ccid_descriptor->dwFeatures |= CCID_CLASS_EXTENDED_APDU; + break; + +#if 0 + /* SCM SCR331-DI contactless */ + case SCR331DI: + /* SCM SCR331-DI-NTTCOM contactless */ + case SCR331DINTTCOM: + /* SCM SDI010 contactless */ + case SDI010: + /* the contactless reader is in the second slot */ + if (ccid_descriptor->bCurrentSlotIndex > 0) + { + unsigned char cmd1[] = { 0x00 }; + /* command: 00 ?? + * response: 06 10 03 03 00 00 00 01 FE FF FF FE 01 ?? */ + unsigned char cmd2[] = { 0x02 }; + /* command: 02 ?? + * response: 00 ?? */ + + unsigned char res[20]; + unsigned int length_res = sizeof(res); + + if ((IFD_SUCCESS == CmdEscape(reader_index, cmd1, sizeof(cmd1), res, &length_res, 0)) + && (IFD_SUCCESS == CmdEscape(reader_index, cmd2, sizeof(cmd2), res, &length_res, 0))) + { + DEBUG_COMM("SCM SCR331-DI contactless detected"); + } + else + { + DEBUG_COMM("SCM SCR331-DI contactless init failed"); + } + + /* hack since the contactless reader do not share dwFeatures */ + ccid_descriptor->dwFeatures &= ~CCID_CLASS_EXCHANGE_MASK; + ccid_descriptor->dwFeatures |= CCID_CLASS_SHORT_APDU; + + ccid_descriptor->dwFeatures |= CCID_CLASS_AUTO_IFSD; + } + break; +#endif + case CHERRY_KC1000SC: + if ((0x0100 == ccid_descriptor->IFD_bcdDevice) + && (ccid_descriptor->dwFeatures & CCID_CLASS_EXCHANGE_MASK) == CCID_CLASS_SHORT_APDU) + { + /* firmware 1.00 is bogus + * With a T=1 card and case 2 APDU (data from card to + * host) the maximum size returned by the reader is 128 + * byes. The reader is then using chaining as with + * extended APDU. + */ + ccid_descriptor->dwFeatures &= ~CCID_CLASS_EXCHANGE_MASK; + ccid_descriptor->dwFeatures |= CCID_CLASS_EXTENDED_APDU; + } + break; + + case ElatecTWN4_CCID_CDC: + case ElatecTWN4_CCID: + case SCM_SCL011: + /* restore default timeout (modified in ccid_open_hack_pre()) */ + ccid_descriptor->readTimeout = DEFAULT_COM_READ_TIMEOUT; + break; + } + + /* Gemalto readers may report additional information */ + if (GET_VENDOR(ccid_descriptor->readerID) == VENDOR_GEMALTO) + set_gemalto_firmware_features(reader_index); + + return return_value; +} /* ccid_open_hack_post */ + +/***************************************************************************** + * + * ccid_error + * + ****************************************************************************/ +void ccid_error(int log_level, int error, const char *file, int line, + const char *function) +{ +#ifndef NO_LOG + const char *text; + char var_text[30]; + + switch (error) + { + case 0x00: + text = "Command not supported or not allowed"; + break; + + case 0x01: + text = "Wrong command length"; + break; + + case 0x05: + text = "Invalid slot number"; + break; + + case 0xA2: + text = "Card short-circuiting. Card powered off"; + break; + + case 0xA3: + text = "ATR too long (> 33)"; + break; + + case 0xAB: + text = "No data exchanged"; + break; + + case 0xB0: + text = "Reader in EMV mode and T=1 message too long"; + break; + + case 0xBB: + text = "Protocol error in EMV mode"; + break; + + case 0xBD: + text = "Card error during T=1 exchange"; + break; + + case 0xBE: + text = "Wrong APDU command length"; + break; + + case 0xE0: + text = "Slot busy"; + break; + + case 0xEF: + text = "PIN cancelled"; + break; + + case 0xF0: + text = "PIN timeout"; + break; + + case 0xF2: + text = "Busy with autosequence"; + break; + + case 0xF3: + text = "Deactivated protocol"; + break; + + case 0xF4: + text = "Procedure byte conflict"; + break; + + case 0xF5: + text = "Class not supported"; + break; + + case 0xF6: + text = "Protocol not supported"; + break; + + case 0xF7: + text = "Invalid ATR checksum byte (TCK)"; + break; + + case 0xF8: + text = "Invalid ATR first byte"; + break; + + case 0xFB: + text = "Hardware error"; + break; + + case 0xFC: + text = "Overrun error"; + break; + + case 0xFD: + text = "Parity error during exchange"; + break; + + case 0xFE: + text = "Card absent or mute"; + break; + + case 0xFF: + text = "Activity aborted by Host"; + break; + + default: + if ((error >= 1) && (error <= 127)) + (void)snprintf(var_text, sizeof(var_text), "error on byte %d", + error); + else + (void)snprintf(var_text, sizeof(var_text), + "Unknown CCID error: 0x%02X", error); + + text = var_text; + break; + } + log_msg(log_level, "%s:%d:%s %s", file, line, function, text); +#endif + +} /* ccid_error */ + diff --git a/src/ccid.h b/src/ccid.h new file mode 100644 index 0000000..46afc4c --- /dev/null +++ b/src/ccid.h @@ -0,0 +1,354 @@ +/* + ccid.h: CCID structures + Copyright (C) 2003-2010 Ludovic Rousseau + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +typedef struct +{ + /* + * CCID Sequence number + */ + unsigned char *pbSeq; + unsigned char real_bSeq; + + /* + * VendorID << 16 + ProductID + */ + int readerID; + + /* + * Maximum message length + */ + unsigned int dwMaxCCIDMessageLength; + + /* + * Maximum IFSD + */ + int dwMaxIFSD; + + /* + * Features supported by the reader (directly from Class Descriptor) + */ + int dwFeatures; + + /* + * PIN support of the reader (directly from Class Descriptor) + */ + char bPINSupport; + + /* + * Display dimensions of the reader (directly from Class Descriptor) + */ + unsigned int wLcdLayout; + + /* + * Default Clock + */ + int dwDefaultClock; + + /* + * Max Data Rate + */ + unsigned int dwMaxDataRate; + + /* + * Number of available slots + */ + char bMaxSlotIndex; + + /* + * Slot in use + */ + char bCurrentSlotIndex; + + /* + * The array of data rates supported by the reader + */ + unsigned int *arrayOfSupportedDataRates; + + /* + * Read communication port timeout + * value is milliseconds + * this value can evolve dynamically if card request it (time processing). + */ + unsigned int readTimeout; + + /* + * Card protocol + */ + int cardProtocol; + + /* + * bInterfaceProtocol (CCID, ICCD-A, ICCD-B) + */ + int bInterfaceProtocol; + + /* + * bNumEndpoints + */ + int bNumEndpoints; + + /* + * GemCore SIM PRO slot status management + * The reader always reports a card present even if no card is inserted. + * If the Power Up fails the driver will report IFD_ICC_NOT_PRESENT instead + * of IFD_ICC_PRESENT + */ + int dwSlotStatus; + + /* + * bVoltageSupport (bit field) + * 1 = 5.0V + * 2 = 3.0V + * 4 = 1.8V + */ + int bVoltageSupport; + + /* + * USB serial number of the device (if any) + */ + char *sIFD_serial_number; + + /* + * USB iManufacturer string + */ + char *sIFD_iManufacturer; + + /* + * USB bcdDevice + */ + int IFD_bcdDevice; + + /* + * Gemalto extra features, if any + */ + struct GEMALTO_FIRMWARE_FEATURES *gemalto_firmware_features; + +#ifdef ENABLE_ZLP + /* + * Zero Length Packet fixup (boolean) + */ + char zlp; +#endif +} _ccid_descriptor; + +/* Features from dwFeatures */ +#define CCID_CLASS_AUTO_CONF_ATR 0x00000002 +#define CCID_CLASS_AUTO_ACTIVATION 0x00000004 +#define CCID_CLASS_AUTO_VOLTAGE 0x00000008 +#define CCID_CLASS_AUTO_BAUD 0x00000020 +#define CCID_CLASS_AUTO_PPS_PROP 0x00000040 +#define CCID_CLASS_AUTO_PPS_CUR 0x00000080 +#define CCID_CLASS_AUTO_IFSD 0x00000400 +#define CCID_CLASS_CHARACTER 0x00000000 +#define CCID_CLASS_TPDU 0x00010000 +#define CCID_CLASS_SHORT_APDU 0x00020000 +#define CCID_CLASS_EXTENDED_APDU 0x00040000 +#define CCID_CLASS_EXCHANGE_MASK 0x00070000 + +/* Features from bPINSupport */ +#define CCID_CLASS_PIN_VERIFY 0x01 +#define CCID_CLASS_PIN_MODIFY 0x02 + +/* See CCID specs ch. 4.2.1 */ +#define CCID_ICC_PRESENT_ACTIVE 0x00 /* 00 0000 00 */ +#define CCID_ICC_PRESENT_INACTIVE 0x01 /* 00 0000 01 */ +#define CCID_ICC_ABSENT 0x02 /* 00 0000 10 */ +#define CCID_ICC_STATUS_MASK 0x03 /* 00 0000 11 */ + +#define CCID_COMMAND_FAILED 0x40 /* 01 0000 00 */ +#define CCID_TIME_EXTENSION 0x80 /* 10 0000 00 */ + +/* bInterfaceProtocol for ICCD */ +#define PROTOCOL_CCID 0 /* plain CCID */ +#define PROTOCOL_ICCD_A 1 /* ICCD Version A */ +#define PROTOCOL_ICCD_B 2 /* ICCD Version B */ + +/* Product identification for special treatments */ +#define GEMPC433 0x08E64433 +#define GEMPCKEY 0x08E63438 +#define GEMPCTWIN 0x08E63437 +#define GEMPCPINPAD 0x08E63478 +#define GEMCORESIMPRO 0x08E63480 +#define GEMCORESIMPRO2 0x08E60000 /* Does NOT match a real VID/PID as new firmware release exposes same VID/PID */ +#define GEMCOREPOSPRO 0x08E63479 +#define GEMALTOPROXDU 0x08E65503 +#define GEMALTOPROXSU 0x08E65504 +#define GEMALTO_EZIO_CBP 0x08E634C3 +#define CARDMAN3121 0x076B3021 +#define LTC31 0x07830003 +#define C3PO_LTC31_v2 0x07830006 +#define SCR331DI 0x04E65111 +#define SCR331DINTTCOM 0x04E65120 +#define SDI010 0x04E65121 +#define SEC1210 0x04241202 +#define CHERRYXX33 0x046A0005 +#define CHERRYST2000 0x046A003E +#define OZ776 0x0B977762 +#define OZ776_7772 0x0B977772 +#define SPR532 0x04E6E003 +#define MYSMARTPAD 0x09BE0002 +#define CHERRYXX44 0x046a0010 +#define CL1356D 0x0B810200 +#define REINER_SCT 0x0C4B0300 +#define SEG 0x08E68000 +#define BLUDRIVEII_CCID 0x1B0E1078 +#define DELLSCRK 0x413C2101 +#define DELLSK 0x413C2100 +#define KOBIL_TRIBANK 0x0D463010 +#define KOBIL_MIDENTITY_VISUAL 0x0D464289 +#define VEGAALPHA 0x09820008 +#define HPSMARTCARDKEYBOARD 0x03F01024 +#define HP_CCIDSMARTCARDKEYBOARD 0x03F00036 +#define KOBIL_IDTOKEN 0x0D46301D +#define FUJITSUSMARTKEYB 0x0BF81017 +#define FEITIANR502DUAL 0x096E060D +#define MICROCHIP_SEC1100 0x04241104 +#define CHERRY_KC1000SC 0x046A00A1 +#define ElatecTWN4_CCID_CDC 0x09D80427 +#define ElatecTWN4_CCID 0x09D80428 +#define SCM_SCL011 0x04E65293 +#define HID_AVIATOR 0x076B3A21 +#define HID_OMNIKEY_5422 0x076B5422 +#define HID_OMNIKEY_3X21 0x076B3031 /* OMNIKEY 3121 or 3021 or 1021 */ +#define HID_OMNIKEY_6121 0x076B6632 /* OMNIKEY 6121 */ +#define CHERRY_XX44 0x046A00A7 /* Cherry Smart Terminal xx44 */ +#define FUJITSU_D323 0x0BF81024 /* Fujitsu Smartcard Reader D323 */ + +#define VENDOR_GEMALTO 0x08E6 +#define GET_VENDOR(readerID) ((readerID >> 16) & 0xFFFF) + +/* + * The O2Micro OZ776S reader has a wrong USB descriptor + * The extra[] field is associated with the last endpoint instead of the + * main USB descriptor + */ +#define O2MICRO_OZ776_PATCH + +/* Escape sequence codes */ +#define ESC_GEMPC_SET_ISO_MODE 1 +#define ESC_GEMPC_SET_APDU_MODE 2 + +/* + * Possible values : + * 3 -> 1.8V, 3V, 5V + * 2 -> 3V, 5V, 1.8V + * 1 -> 5V, 1.8V, 3V + * 0 -> automatic (selection made by the reader) + */ +/* + * The default is to start at 5V + * otherwise we would have to parse the ATR and get the value of TAi (i>2) when + * in T=15 + */ +#define VOLTAGE_AUTO 0 +#define VOLTAGE_5V 1 +#define VOLTAGE_3V 2 +#define VOLTAGE_1_8V 3 + +int ccid_open_hack_pre(unsigned int reader_index); +int ccid_open_hack_post(unsigned int reader_index); +void ccid_error(int log_level, int error, const char *file, int line, + const char *function); +_ccid_descriptor *get_ccid_descriptor(unsigned int reader_index); + +/* convert a 4 byte integer in USB format into an int */ +#define dw2i(a, x) (unsigned int)((((((a[x+3] << 8) + a[x+2]) << 8) + a[x+1]) << 8) + a[x]) + +/* all the data rates specified by ISO 7816-3 Fi/Di tables */ +#define ISO_DATA_RATES 10753, 14337, 15625, 17204, \ + 20833, 21505, 23438, 25806, 28674, \ + 31250, 32258, 34409, 39063, 41667, \ + 43011, 46875, 52083, 53763, 57348, \ + 62500, 64516, 68817, 71685, 78125, \ + 83333, 86022, 93750, 104167, 107527, \ + 114695, 125000, 129032, 143369, 156250, \ + 166667, 172043, 215054, 229391, 250000, \ + 344086 + +/* data rates supported by the secondary slots on the GemCore Pos Pro & SIM Pro */ +#define GEMPLUS_CUSTOM_DATA_RATES 10753, 21505, 43011, 125000 + +/* data rates for GemCore SIM Pro 2 */ +#define SIMPRO2_ISO_DATA_RATES 8709, 10322, 12403, 12500, \ + 12903, 17204, 18750, 20645, 24806, \ + 25000, 25806, 28125, 30967, 34408, \ + 37500, 41290, 46875, 49612, 50000, \ + 51612, 56250, 62500, 64516, 68817, \ + 74418, 75000, 82580, 86021, 93750, \ + 99224, 100000, 103225, 112500, 124031, \ + 125000, 137634, 150000, 154838, 165161, \ + 172043, 187500, 198449, 200000, 206451, \ + 258064, 275268, 300000, 396899, 400000, \ + 412903, 550537, 600000, 825806 + +/* Structure returned by Gemalto readers for the CCID Escape command 0x6A */ +struct GEMALTO_FIRMWARE_FEATURES +{ + unsigned char bLogicalLCDLineNumber; /* Logical number of LCD lines */ + unsigned char bLogicalLCDRowNumber; /* Logical number of characters per LCD line */ + unsigned char bLcdInfo; /* b0 indicates if scrolling is available */ + unsigned char bEntryValidationCondition; /* See PIN_PROPERTIES */ + + /* Here come the PC/SC bit features to report */ + unsigned char VerifyPinStart:1; + unsigned char VerifyPinFinish:1; + unsigned char ModifyPinStart:1; + unsigned char ModifyPinFinish:1; + unsigned char GetKeyPressed:1; + unsigned char VerifyPinDirect:1; + unsigned char ModifyPinDirect:1; + unsigned char Abort:1; + + unsigned char GetKey:1; + unsigned char WriteDisplay:1; + unsigned char SetSpeMessage:1; + unsigned char RFUb1:5; + + unsigned char RFUb2[2]; + + /* Additional flags */ + unsigned char bTimeOut2:1; + unsigned char bListSupportedLanguages:1; /* Reader is able to indicate + the list of supported languages through CCID-ESC 0x6B */ + unsigned char bNumberMessageFix:1; /* Reader handles correctly shifts + made by bNumberMessage in PIN modification data structure */ + unsigned char bPPDUSupportOverXferBlock:1; /* Reader supports PPDU over + PC_to_RDR_XferBlock command */ + unsigned char bPPDUSupportOverEscape:1; /* Reader supports PPDU over + PC_to_RDR_Escape command with abData[0]=0xFF */ + unsigned char RFUb3:3; + + unsigned char RFUb4[3]; + + unsigned char VersionNumber; /* ?? */ + unsigned char MinimumPINSize; /* for Verify and Modify */ + unsigned char MaximumPINSize; + + /* Miscellaneous reader features */ + unsigned char Firewall:1; + unsigned char RFUb5:7; + + /* The following fields, FirewalledCommand_SW1 and + * FirewalledCommand_SW2 are only valid if Firewall=1 + * These fields give the SW1 SW2 value used by the reader to + * indicate a command has been firewalled */ + unsigned char FirewalledCommand_SW1; + unsigned char FirewalledCommand_SW2; + unsigned char RFUb6[3]; +}; + diff --git a/src/ccid_ifdhandler.h b/src/ccid_ifdhandler.h new file mode 100644 index 0000000..b2e3102 --- /dev/null +++ b/src/ccid_ifdhandler.h @@ -0,0 +1,58 @@ +/* + ccid_ifdhandler.h: non-generic ifdhandler functions + Copyright (C) 2004-2010 Ludovic Rousseau + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef _ccid_ifd_handler_h_ +#define _ccid_ifd_handler_h_ + +#define IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE SCARD_CTL_CODE(1) + +#define CLASS2_IOCTL_MAGIC 0x330000 +#define IOCTL_FEATURE_VERIFY_PIN_DIRECT \ + SCARD_CTL_CODE(FEATURE_VERIFY_PIN_DIRECT + CLASS2_IOCTL_MAGIC) +#define IOCTL_FEATURE_MODIFY_PIN_DIRECT \ + SCARD_CTL_CODE(FEATURE_MODIFY_PIN_DIRECT + CLASS2_IOCTL_MAGIC) +#define IOCTL_FEATURE_MCT_READER_DIRECT \ + SCARD_CTL_CODE(FEATURE_MCT_READER_DIRECT + CLASS2_IOCTL_MAGIC) +#define IOCTL_FEATURE_IFD_PIN_PROPERTIES \ + SCARD_CTL_CODE(FEATURE_IFD_PIN_PROPERTIES + CLASS2_IOCTL_MAGIC) +#define IOCTL_FEATURE_GET_TLV_PROPERTIES \ + SCARD_CTL_CODE(FEATURE_GET_TLV_PROPERTIES + CLASS2_IOCTL_MAGIC) + +#define DRIVER_OPTION_CCID_EXCHANGE_AUTHORIZED 1 +#define DRIVER_OPTION_GEMPC_TWIN_KEY_APDU 2 +#define DRIVER_OPTION_USE_BOGUS_FIRMWARE 4 +#define DRIVER_OPTION_DISABLE_PIN_RETRIES (1 << 6) + +extern int DriverOptions; + +/* + * Maximum number of CCID readers supported simultaneously + * + * The maximum number of readers is also limited in pcsc-lite (16 by default) + * see the definition of PCSCLITE_MAX_READERS_CONTEXTS in src/PCSC/pcsclite.h + */ +#define CCID_DRIVER_MAX_READERS 16 + +/* + * CCID driver specific functions + */ +CcidDesc *get_ccid_slot(unsigned int reader_index); + +#endif + diff --git a/src/ccid_serial.c b/src/ccid_serial.c new file mode 100644 index 0000000..eca543a --- /dev/null +++ b/src/ccid_serial.c @@ -0,0 +1,942 @@ +/* + * ccid_serial.c: communicate with a GemPC Twin smart card reader + * Copyright (C) 2001-2010 Ludovic Rousseau + * + * Thanks to Niki W. Waibel for a prototype version + * + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "defs.h" +#include "ccid_ifdhandler.h" +#include "debug.h" +#include "ccid.h" +#include "utils.h" +#include "commands.h" +#include "parser.h" +#include "strlcpycat.h" + +#define SYNC 0x03 +#define CTRL_ACK 0x06 +#define CTRL_NAK 0x15 +#define RDR_to_PC_NotifySlotChange 0x50 +#define CARD_ABSENT 0x02 +#define CARD_PRESENT 0x03 + +/* + * normal command: + * 1 : SYNC + * 1 : CTRL + * 10 +data length : CCID command + * 1 : LRC + * + * SYNC : 0x03 + * CTRL : ACK (0x06) or NAK (0x15) + * CCID command : see USB CCID specs + * LRC : xor of all the previous byes + * + * Error message: + * 1 : SYNC (0x03) + * 1 : CTRL (NAK: 0x15) + * 1 : LRC (0x16) + * + * Card insertion/withdrawal + * 1 : RDR_to_PC_NotifySlotChange (0x50) + * 1 : bmSlotIccState + * 0x02 if card absent + * 0x03 is card present + * + * Time request + * T=1 : normal CCID command + * T=0 : 1 byte (value between 0x80 and 0xFF) + * + */ + +/* + * You may get read timeout after a card movement. + * This is because you will get the echo of the CCID command + * but not the result of the command. + * + * This is not an applicative issue since the card is either removed (and + * powered off) or just inserted (and not yet powered on). + */ + +/* 271 = max size for short APDU + * 2 bytes for header + * 1 byte checksum + * doubled for echo + */ +#define GEMPCTWIN_MAXBUF (271 +2 +1) * 2 + +typedef struct +{ + /* + * File handle on the serial port + */ + int fd; + + /* + * device used ("/dev/ttyS?" under Linux) + */ + /*@null@*/ char *device; + + /* + * Number of slots using the same device + */ + int real_nb_opened_slots; + int *nb_opened_slots; + + /* + * does the reader echoes the serial communication bytes? + */ + int echo; + + /* + * serial communication buffer + */ + unsigned char buffer[GEMPCTWIN_MAXBUF]; + + /* + * next available byte + */ + int buffer_offset; + + /* + * number of available bytes + */ + int buffer_offset_last; + + /* + * CCID infos common to USB and serial + */ + _ccid_descriptor ccid; + +} _serialDevice; + +/* The _serialDevice structure must be defined before including ccid_serial.h */ +#include "ccid_serial.h" + +/* data rates supported by the GemPC Twin (serial and PCMCIA) */ +unsigned int SerialTwinDataRates[] = { ISO_DATA_RATES, 0 }; + +/* data rates supported by the GemPC PinPad, GemCore Pos Pro & SIM Pro */ +unsigned int SerialExtendedDataRates[] = { ISO_DATA_RATES, 500000, 0 }; + +/* data rates supported by the secondary slots on the GemCore Pos Pro & SIM Pro */ +unsigned int SerialCustomDataRates[] = { GEMPLUS_CUSTOM_DATA_RATES, 0 }; + +/* data rates supported by the GemCore SIM Pro 2 */ +unsigned int SIMPro2DataRates[] = { SIMPRO2_ISO_DATA_RATES, 0 }; + +/* no need to initialize to 0 since it is static */ +static _serialDevice serialDevice[CCID_DRIVER_MAX_READERS]; + +/* unexported functions */ +static int ReadChunk(unsigned int reader_index, unsigned char *buffer, + int buffer_length, int min_length); + +static int get_bytes(unsigned int reader_index, /*@out@*/ unsigned char *buffer, + int length); + + +/***************************************************************************** + * + * WriteSerial: Send bytes to the card reader + * + *****************************************************************************/ +status_t WriteSerial(unsigned int reader_index, unsigned int length, + unsigned char *buffer) +{ + unsigned int i; + unsigned char lrc; + unsigned char low_level_buffer[GEMPCTWIN_MAXBUF]; + + char debug_header[] = "-> 123456 "; + + (void)snprintf(debug_header, sizeof(debug_header), "-> %06X ", + reader_index); + + if (length > GEMPCTWIN_MAXBUF-3) + { + DEBUG_CRITICAL3("command too long: %d for max %d", + length, GEMPCTWIN_MAXBUF-3); + return STATUS_UNSUCCESSFUL; + } + + /* header */ + low_level_buffer[0] = 0x03; /* SYNC */ + low_level_buffer[1] = 0x06; /* ACK */ + + /* CCID command */ + memcpy(low_level_buffer+2, buffer, length); + + /* checksum */ + lrc = 0; + for(i=0; i= 0x80) + { + DEBUG_COMM2("time request: 0x%02X", c); + goto start; + } + + DEBUG_CRITICAL2("Got 0x%02X", c); + return STATUS_COMM_ERROR; + +slot_change: + DEBUG_COMM("slot change"); + if ((rv = get_bytes(reader_index, &c, 1)) != STATUS_SUCCESS) + return rv; + + if (c == CARD_ABSENT) + { + DEBUG_COMM("Card removed"); + } + else + if (c == CARD_PRESENT) + { + DEBUG_COMM("Card inserted"); + } + else + { + DEBUG_COMM2("Unknown card movement: %d", c); + } + goto start; + +sync: + DEBUG_COMM("sync"); + if ((rv = get_bytes(reader_index, &c, 1)) != STATUS_SUCCESS) + return rv; + + if (c == CTRL_ACK) + goto ack; + + if (c == CTRL_NAK) + goto nak; + + DEBUG_CRITICAL2("Got 0x%02X instead of ACK/NAK", c); + return STATUS_COMM_ERROR; + +nak: + DEBUG_COMM("nak"); + if ((rv = get_bytes(reader_index, &c, 1)) != STATUS_SUCCESS) + return rv; + + if (c != (SYNC ^ CTRL_NAK)) + { + DEBUG_CRITICAL2("Wrong LRC: 0x%02X", c); + return STATUS_COMM_ERROR; + } + else + { + DEBUG_COMM("NAK requested"); + return STATUS_COMM_NAK; + } + +ack: + DEBUG_COMM("ack"); + /* normal CCID frame */ + if ((rv = get_bytes(reader_index, buffer, 5)) != STATUS_SUCCESS) + return rv; + + /* total frame size */ + to_read = 10+dw2i(buffer, 1); + + if ((to_read < 10) || (to_read > (int)*length)) + { + DEBUG_CRITICAL2("Wrong value for frame size: %d", to_read); + return STATUS_COMM_ERROR; + } + + DEBUG_COMM2("frame size: %d", to_read); + if ((rv = get_bytes(reader_index, buffer+5, to_read-5)) != STATUS_SUCCESS) + return rv; + + DEBUG_XXD("frame: ", buffer, to_read); + + /* lrc */ + DEBUG_COMM("lrc"); + if ((rv = get_bytes(reader_index, &c, 1)) != STATUS_SUCCESS) + return rv; + + DEBUG_COMM2("lrc: 0x%02X", c); + for (i=0; i 0) + { + DEBUG_COMM2("some data available: %d", present); + memcpy(buffer, serialDevice[reader_index].buffer + offset, + present); + } + + /* get fresh data */ + DEBUG_COMM2("get more data: %d", length - present); + rv = ReadChunk(reader_index, serialDevice[reader_index].buffer, + sizeof(serialDevice[reader_index].buffer), length - present); + if (rv < 0) + return STATUS_COMM_ERROR; + + /* fill the buffer */ + memcpy(buffer + present, serialDevice[reader_index].buffer, + length - present); + serialDevice[reader_index].buffer_offset = length - present; + serialDevice[reader_index].buffer_offset_last = rv; + DEBUG_COMM3("offset: %d, last_offset: %d", + serialDevice[reader_index].buffer_offset, + serialDevice[reader_index].buffer_offset_last); + } + + return STATUS_SUCCESS; +} /* get_bytes */ + + +/***************************************************************************** + * + * ReadChunk: read a minimum number of bytes + * + *****************************************************************************/ +static int ReadChunk(unsigned int reader_index, unsigned char *buffer, + int buffer_length, int min_length) +{ + int fd = serialDevice[reader_index].fd; +# ifndef S_SPLINT_S + fd_set fdset; +# endif + struct timeval t; + int i, rv = 0; + int already_read; + char debug_header[] = "<- 123456 "; + + (void)snprintf(debug_header, sizeof(debug_header), "<- %06X ", + reader_index); + + already_read = 0; + while (already_read < min_length) + { + /* use select() to, eventually, timeout */ + FD_ZERO(&fdset); + FD_SET(fd, &fdset); + t.tv_sec = serialDevice[reader_index].ccid.readTimeout / 1000; + t.tv_usec = (serialDevice[reader_index].ccid.readTimeout - t.tv_sec*1000)*1000; + + i = select(fd+1, &fdset, NULL, NULL, &t); + if (i == -1) + { + DEBUG_CRITICAL2("select: %s", strerror(errno)); + return -1; + } + else + if (i == 0) + { + DEBUG_COMM2("Timeout! (%d ms)", serialDevice[reader_index].ccid.readTimeout); + return -1; + } + + rv = read(fd, buffer + already_read, buffer_length - already_read); + if (rv < 0) + { + DEBUG_COMM2("read error: %s", strerror(errno)); + return -1; + } + + DEBUG_XXD(debug_header, buffer + already_read, rv); + + already_read += rv; + DEBUG_COMM3("read: %d, to read: %d", already_read, + min_length); + } + + return already_read; +} /* ReadChunk */ + + +/***************************************************************************** + * + * OpenSerial: open the port + * + *****************************************************************************/ +status_t OpenSerial(unsigned int reader_index, int channel) +{ + char dev_name[FILENAME_MAX]; + + DEBUG_COMM3("Reader index: %X, Channel: %d", reader_index, channel); + + /* + * Conversion of old-style ifd-hanler 1.0 CHANNELID + */ + if (channel == 0x0103F8) + channel = 1; + else + if (channel == 0x0102F8) + channel = 2; + else + if (channel == 0x0103E8) + channel = 3; + else + if (channel == 0x0102E8) + channel = 4; + + if (channel < 0) + { + DEBUG_CRITICAL2("wrong port number: %d", channel); + return STATUS_UNSUCCESSFUL; + } + + (void)snprintf(dev_name, sizeof(dev_name), "/dev/pcsc/%d", channel); + + return OpenSerialByName(reader_index, dev_name); +} /* OpenSerial */ + +/***************************************************************************** + * + * set_ccid_descriptor: init ccid descriptor + * depending on reader type specified in device. + * + * return: STATUS_UNSUCCESSFUL, + * STATUS_SUCCESS, + * -1 (Reader already used) + * + *****************************************************************************/ +static status_t set_ccid_descriptor(unsigned int reader_index, + const char *reader_name, const char *dev_name) +{ + int readerID; + int i; + int already_used = FALSE; + static int previous_reader_index = -1; + + readerID = GEMPCTWIN; + if (0 == strcasecmp(reader_name,"GemCorePOSPro")) + readerID = GEMCOREPOSPRO; + else if (0 == strcasecmp(reader_name,"GemCoreSIMPro")) + readerID = GEMCORESIMPRO; + else if (0 == strcasecmp(reader_name,"GemCoreSIMPro2")) + readerID = GEMCORESIMPRO2; + else if (0 == strcasecmp(reader_name,"GemPCPinPad")) + readerID = GEMPCPINPAD; + else if (0 == strcasecmp(reader_name,"SEC1210")) + readerID = SEC1210; + + /* check if the same channel is not already used to manage multi-slots readers*/ + for (i = 0; i < CCID_DRIVER_MAX_READERS; i++) + { + if (serialDevice[i].device + && strcmp(serialDevice[i].device, dev_name) == 0) + { + already_used = TRUE; + + DEBUG_COMM2("%s already used. Multi-slot reader?", dev_name); + break; + } + } + + /* this reader is already managed by us */ + if (already_used) + { + if ((previous_reader_index != -1) + && serialDevice[previous_reader_index].device + && (strcmp(serialDevice[previous_reader_index].device, dev_name) == 0) + && serialDevice[previous_reader_index].ccid.bCurrentSlotIndex < serialDevice[previous_reader_index].ccid.bMaxSlotIndex) + { + /* we reuse the same device and the reader is multi-slot */ + serialDevice[reader_index] = serialDevice[previous_reader_index]; + + *serialDevice[reader_index].nb_opened_slots += 1; + serialDevice[reader_index].ccid.bCurrentSlotIndex++; + serialDevice[reader_index].ccid.dwSlotStatus = IFD_ICC_PRESENT; + DEBUG_INFO2("Opening slot: %d", + serialDevice[reader_index].ccid.bCurrentSlotIndex); + switch (readerID) + { + case GEMCOREPOSPRO: + case GEMCORESIMPRO: + { + /* Allocate a memory buffer that will be + * released in CloseUSB() */ + void *ptr = malloc(sizeof SerialCustomDataRates); + if (ptr) + { + memcpy(ptr, SerialCustomDataRates, + sizeof SerialCustomDataRates); + } + + serialDevice[reader_index].ccid.arrayOfSupportedDataRates = ptr; + } + serialDevice[reader_index].ccid.dwMaxDataRate = 125000; + break; + + case SEC1210: + serialDevice[reader_index].ccid.arrayOfSupportedDataRates = NULL; + serialDevice[reader_index].ccid.dwMaxDataRate = 826000; + break; + + /* GemPC Twin or GemPC Card */ + default: + serialDevice[reader_index].ccid.arrayOfSupportedDataRates = SerialTwinDataRates; + serialDevice[reader_index].ccid.dwMaxDataRate = 344086; + break; + } + goto end; + } + else + { + DEBUG_CRITICAL2("Trying to open too many slots on %s", dev_name); + return STATUS_UNSUCCESSFUL; + } + + } + + /* Common to all readers */ + serialDevice[reader_index].ccid.real_bSeq = 0; + serialDevice[reader_index].ccid.pbSeq = &serialDevice[reader_index].ccid.real_bSeq; + serialDevice[reader_index].real_nb_opened_slots = 1; + serialDevice[reader_index].nb_opened_slots = &serialDevice[reader_index].real_nb_opened_slots; + serialDevice[reader_index].ccid.bCurrentSlotIndex = 0; + + serialDevice[reader_index].ccid.dwMaxCCIDMessageLength = 271; + serialDevice[reader_index].ccid.dwMaxIFSD = 254; + serialDevice[reader_index].ccid.dwFeatures = 0x00010230; + serialDevice[reader_index].ccid.dwDefaultClock = 4000; + + serialDevice[reader_index].buffer_offset = 0; + serialDevice[reader_index].buffer_offset_last = 0; + + serialDevice[reader_index].ccid.readerID = readerID; + serialDevice[reader_index].ccid.bPINSupport = 0x0; + serialDevice[reader_index].ccid.dwMaxDataRate = 344086; + serialDevice[reader_index].ccid.bMaxSlotIndex = 0; + serialDevice[reader_index].ccid.arrayOfSupportedDataRates = SerialTwinDataRates; + serialDevice[reader_index].ccid.readTimeout = DEFAULT_COM_READ_TIMEOUT; + serialDevice[reader_index].ccid.dwSlotStatus = IFD_ICC_PRESENT; + serialDevice[reader_index].ccid.bVoltageSupport = 0x07; /* 1.8V, 3V and 5V */ + serialDevice[reader_index].ccid.gemalto_firmware_features = NULL; +#ifdef ENABLE_ZLP + serialDevice[reader_index].ccid.zlp = FALSE; +#endif + serialDevice[reader_index].echo = TRUE; + + /* change some values depending on the reader */ + switch (readerID) + { + case GEMCOREPOSPRO: + serialDevice[reader_index].ccid.bMaxSlotIndex = 4; /* 5 slots */ + serialDevice[reader_index].ccid.arrayOfSupportedDataRates = SerialExtendedDataRates; + serialDevice[reader_index].echo = FALSE; + serialDevice[reader_index].ccid.dwMaxDataRate = 500000; + break; + + case GEMCORESIMPRO: + serialDevice[reader_index].ccid.bMaxSlotIndex = 1; /* 2 slots */ + serialDevice[reader_index].ccid.arrayOfSupportedDataRates = SerialExtendedDataRates; + serialDevice[reader_index].echo = FALSE; + serialDevice[reader_index].ccid.dwMaxDataRate = 500000; + break; + + case GEMCORESIMPRO2: + serialDevice[reader_index].ccid.dwDefaultClock = 4800; + serialDevice[reader_index].ccid.bMaxSlotIndex = 1; /* 2 slots */ + serialDevice[reader_index].ccid.arrayOfSupportedDataRates = SIMPro2DataRates; + serialDevice[reader_index].echo = FALSE; + serialDevice[reader_index].ccid.dwMaxDataRate = 825806; + break; + + case GEMPCPINPAD: + serialDevice[reader_index].ccid.bPINSupport = 0x03; + serialDevice[reader_index].ccid.arrayOfSupportedDataRates = SerialExtendedDataRates; + serialDevice[reader_index].ccid.dwMaxDataRate = 500000; + break; + + case SEC1210: + serialDevice[reader_index].ccid.dwFeatures = 0x000100B2; + serialDevice[reader_index].ccid.dwDefaultClock = 4800; + serialDevice[reader_index].ccid.dwMaxDataRate = 826000; + serialDevice[reader_index].ccid.arrayOfSupportedDataRates = NULL; + serialDevice[reader_index].ccid.bMaxSlotIndex = 1; /* 2 slots */ + serialDevice[reader_index].echo = FALSE; + break; + + } + +end: + /* memorise the current reader_index so we can detect + * a new OpenSerialByName on a multi slot reader */ + previous_reader_index = reader_index; + + /* we just created a secondary slot on a multi-slot reader */ + if (already_used) + return STATUS_SECONDARY_SLOT; + + return STATUS_SUCCESS; +} /* set_ccid_descriptor */ + + +/***************************************************************************** + * + * OpenSerialByName: open the port + * + *****************************************************************************/ +status_t OpenSerialByName(unsigned int reader_index, char *dev_name) +{ + struct termios current_termios; + unsigned int reader = reader_index; + /* 255 is MAX_DEVICENAME in pcscd.h */ + char reader_name[255] = "GemPCTwin"; + char *p; + status_t ret; + + DEBUG_COMM3("Reader index: %X, Device: %s", reader_index, dev_name); + + /* parse dev_name using the pattern "device:name" */ + p = strchr(dev_name, ':'); + if (p) + { + /* copy the second part of the string */ + strlcpy(reader_name, p+1, sizeof(reader_name)); + + /* replace ':' by '\0' so that dev_name only contains the device name */ + *p = '\0'; + } + + ret = set_ccid_descriptor(reader_index, reader_name, dev_name); + if (STATUS_UNSUCCESSFUL == ret) + return STATUS_UNSUCCESSFUL; + + /* secondary slot so do not physically open the device */ + if (STATUS_SECONDARY_SLOT == ret) + return STATUS_SUCCESS; + + serialDevice[reader].fd = open(dev_name, O_RDWR | O_NOCTTY); + + if (-1 == serialDevice[reader].fd) + { + DEBUG_CRITICAL3("open %s: %s", dev_name, strerror(errno)); + return STATUS_UNSUCCESSFUL; + } + + /* Set RTS signal to low to prevent the smart card reader + * from sending its plug and play string. */ + { + int flags; + + if (ioctl(serialDevice[reader].fd, TIOCMGET, &flags) < 0) + { + DEBUG_CRITICAL2("Get RS232 signals state failed: %s", + strerror(errno)); + } + else + { + flags &= ~TIOCM_RTS; + if (ioctl(serialDevice[reader].fd, TIOCMSET, &flags) < 0) + { + DEBUG_CRITICAL2("Set RTS to low failed: %s", strerror(errno)); + } + else + { + DEBUG_COMM("Plug-n-Play inhibition successful"); + } + } + } + + /* set channel used */ + serialDevice[reader].device = strdup(dev_name); + + /* empty in and out serial buffers */ + if (tcflush(serialDevice[reader].fd, TCIOFLUSH)) + DEBUG_INFO2("tcflush() function error: %s", strerror(errno)); + + /* get config attributes */ + if (tcgetattr(serialDevice[reader].fd, ¤t_termios) == -1) + { + DEBUG_INFO2("tcgetattr() function error: %s", strerror(errno)); + (void)close(serialDevice[reader].fd); + serialDevice[reader].fd = -1; + + return STATUS_UNSUCCESSFUL; + } + + /* IGNBRK: ignore BREAK condition on input + * IGNPAR: ignore framing errors and parity errors. */ + current_termios.c_iflag = IGNBRK | IGNPAR; + current_termios.c_oflag = 0; /* Raw output modes */ + /* CS8: 8-bits character size + * CSTOPB: set two stop bits + * CREAD: enable receiver + * CLOCAL: ignore modem control lines */ + current_termios.c_cflag = CS8 | CSTOPB | CREAD | CLOCAL; + + /* Do not echo characters because if you connect to a host it or your modem + * will echo characters for you. Don't generate signals. */ + current_termios.c_lflag = 0; + + if (0 == strcasecmp(reader_name,"GemCoreSIMPro2")) + { + unsigned char pcbuffer[SIZE_GET_SLOT_STATUS]; + unsigned int old_timeout; + RESPONSECODE r; + + /* Unless we resume from a stand-by condition, GemCoreSIMPro2 + * starts at 9600 bauds, so let's first try this speed */ + /* set serial port speed to 9600 bauds */ + (void)cfsetspeed(¤t_termios, B9600); + DEBUG_INFO1("Set serial port baudrate to 9600 and correct configuration"); + if (tcsetattr(serialDevice[reader_index].fd, TCSANOW, ¤t_termios) == -1) + { + (void)close(serialDevice[reader_index].fd); + serialDevice[reader_index].fd = -1; + DEBUG_CRITICAL2("tcsetattr error: %s", strerror(errno)); + + return STATUS_UNSUCCESSFUL; + } + + /* Test current speed issuing a CmdGetSlotStatus with a very + * short time out of 1 seconds */ + old_timeout = serialDevice[reader_index].ccid.readTimeout; + + serialDevice[reader_index].ccid.readTimeout = 1*1000; + r = CmdGetSlotStatus(reader_index, pcbuffer); + + /* Restore default time out value */ + serialDevice[reader_index].ccid.readTimeout = old_timeout; + + if (IFD_SUCCESS == r) + { + /* We are at 9600 bauds, let's move to 115200 */ + unsigned char tx_buffer[] = { 0x01, 0x10, 0x20 }; + unsigned char rx_buffer[50]; + unsigned int rx_length = sizeof(rx_buffer); + + if (IFD_SUCCESS == CmdEscape(reader_index, tx_buffer, + sizeof(tx_buffer), rx_buffer, &rx_length, 0)) + { + /* Let the reader setup its new communication speed */ + (void)usleep(250*1000); + } + else + { + DEBUG_INFO1("CmdEscape to configure 115200 bauds failed"); + } + } + /* In case of a failure, reader is probably already at 115200 + * bauds as code below assumes */ + } + + /* set serial port speed to 115200 bauds */ + (void)cfsetspeed(¤t_termios, B115200); + + DEBUG_INFO1("Set serial port baudrate to 115200 and correct configuration"); + if (tcsetattr(serialDevice[reader].fd, TCSANOW, ¤t_termios) == -1) + { + (void)close(serialDevice[reader].fd); + serialDevice[reader].fd = -1; + DEBUG_INFO2("tcsetattr error: %s", strerror(errno)); + + return STATUS_UNSUCCESSFUL; + } + + /* perform a command to be sure a Gemalto reader is connected + * get the reader firmware */ + { + unsigned char tx_buffer[1]; + unsigned char rx_buffer[50]; + unsigned int rx_length = sizeof(rx_buffer); + + if (0 == strcasecmp(reader_name,"SEC1210")) + tx_buffer[0] = 0x06; // unknown but supported command + else + tx_buffer[0] = 0x02; // get reader firmware + + /* 2 seconds timeout to not wait too long if no reader is connected */ + if (IFD_SUCCESS != CmdEscape(reader_index, tx_buffer, sizeof(tx_buffer), + rx_buffer, &rx_length, 2*1000)) + { + DEBUG_CRITICAL("Get firmware failed. Maybe the reader is not connected"); + (void)CloseSerial(reader_index); + return STATUS_UNSUCCESSFUL; + } + + rx_buffer[rx_length] = '\0'; + DEBUG_INFO2("Firmware: %s", rx_buffer); + } + + /* perform a command to configure GemPC Twin reader card movement + * notification to synchronous mode: the card movement is notified _after_ + * the host command and _before_ the reader anwser */ + if (0 != strcasecmp(reader_name,"SEC1210")) + { + unsigned char tx_buffer[] = { 0x01, 0x01, 0x01}; + unsigned char rx_buffer[50]; + unsigned int rx_length = sizeof(rx_buffer); + + if (IFD_SUCCESS != CmdEscape(reader_index, tx_buffer, sizeof(tx_buffer), + rx_buffer, &rx_length, 0)) + { + DEBUG_CRITICAL("Change card movement notification failed."); + (void)CloseSerial(reader_index); + return STATUS_UNSUCCESSFUL; + } + } + + serialDevice[reader_index].ccid.sIFD_serial_number = NULL; + serialDevice[reader_index].ccid.sIFD_iManufacturer = NULL; + serialDevice[reader_index].ccid.IFD_bcdDevice = 0; + + return STATUS_SUCCESS; +} /* OpenSerialByName */ + + +/***************************************************************************** + * + * CloseSerial: close the port + * + *****************************************************************************/ +status_t CloseSerial(unsigned int reader_index) +{ + unsigned int reader = reader_index; + + /* device not opened */ + if (NULL == serialDevice[reader_index].device) + return STATUS_UNSUCCESSFUL; + + DEBUG_COMM2("Closing serial device: %s", serialDevice[reader_index].device); + + /* Decrement number of opened slot */ + (*serialDevice[reader_index].nb_opened_slots)--; + + /* release the allocated ressources for the last slot only */ + if (0 == *serialDevice[reader_index].nb_opened_slots) + { + DEBUG_COMM("Last slot closed. Release resources"); + + (void)close(serialDevice[reader].fd); + serialDevice[reader].fd = -1; + + free(serialDevice[reader].device); + serialDevice[reader].device = NULL; + } + + return STATUS_SUCCESS; +} /* CloseSerial */ + + +/***************************************************************************** + * + * get_ccid_descriptor + * + ****************************************************************************/ +_ccid_descriptor *get_ccid_descriptor(unsigned int reader_index) +{ + return &serialDevice[reader_index].ccid; +} /* get_ccid_descriptor */ + + diff --git a/src/ccid_serial.h b/src/ccid_serial.h new file mode 100644 index 0000000..c946dd0 --- /dev/null +++ b/src/ccid_serial.h @@ -0,0 +1,35 @@ +/* + ccid_serial.h: Serial access routines + Copyright (C) 2003-2008 Ludovic Rousseau + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef __CCID_SERAL_H__ +#define __CCID_SERAL_H__ + +status_t OpenSerial(unsigned int reader_index, int channel); + +status_t OpenSerialByName(unsigned int reader_index, char *dev_name); + +status_t WriteSerial(unsigned int reader_index, unsigned int length, + unsigned char *Buffer); + +status_t ReadSerial(unsigned int reader_index, unsigned int *length, + unsigned char *Buffer); + +status_t CloseSerial(unsigned int reader_index); + +#endif diff --git a/src/ccid_usb.c b/src/ccid_usb.c new file mode 100644 index 0000000..1996cb8 --- /dev/null +++ b/src/ccid_usb.c @@ -0,0 +1,1758 @@ +/* + ccid_usb.c: USB access routines using the libusb library + Copyright (C) 2003-2010 Ludovic Rousseau + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#define __CCID_USB__ + +#include +#include +# ifdef S_SPLINT_S +# include +# endif +#include +#include +#include +#include +#include + +#include +#include "misc.h" +#include "ccid.h" +#include "debug.h" +#include "defs.h" +#include "utils.h" +#include "parser.h" +#include "ccid_ifdhandler.h" + + +/* write timeout + * we don't have to wait a long time since the card was doing nothing */ +#define USB_WRITE_TIMEOUT (5 * 1000) /* 5 seconds timeout */ + +/* + * Proprietary USB Class (0xFF) are (or are not) accepted + * A proprietary class is used for devices released before the final CCID + * specifications were ready. + * We should not have problems with non CCID devices because the + * Manufacturer and Product ID are also used to identify the device */ +#define ALLOW_PROPRIETARY_CLASS + +#define BUS_DEVICE_STRSIZE 32 + +/* Using the default libusb context */ +/* does not work for libusb <= 1.0.8 */ +/* #define ctx NULL */ +libusb_context *ctx = NULL; + +#define CCID_INTERRUPT_SIZE 8 + +struct usbDevice_MultiSlot_Extension +{ + int reader_index; + + /* The multi-threaded polling part */ + int terminated; + int status; + unsigned char buffer[CCID_INTERRUPT_SIZE]; + pthread_t thread_proc; + pthread_mutex_t mutex; + pthread_cond_t condition; + struct libusb_transfer *transfer; +}; + +typedef struct +{ + libusb_device_handle *dev_handle; + uint8_t bus_number; + uint8_t device_address; + int interface; + + /* + * Endpoints + */ + int bulk_in; + int bulk_out; + int interrupt; + + /* Number of slots using the same device */ + int real_nb_opened_slots; + int *nb_opened_slots; + + /* + * CCID infos common to USB and serial + */ + _ccid_descriptor ccid; + + /* libusb transfer for the polling (or NULL) */ + struct libusb_transfer *polling_transfer; + + /* pointer to the multislot extension (if any) */ + struct usbDevice_MultiSlot_Extension *multislot_extension; + +} _usbDevice; + +/* The _usbDevice structure must be defined before including ccid_usb.h */ +#include "ccid_usb.h" + +/* Specific hooks for multislot readers */ +static int Multi_InterruptRead(int reader_index, int timeout /* in ms */); +static void Multi_InterruptStop(int reader_index); +static struct usbDevice_MultiSlot_Extension *Multi_CreateFirstSlot(int reader_index); +static struct usbDevice_MultiSlot_Extension *Multi_CreateNextSlot(int physical_reader_index); +static void Multi_PollingTerminate(struct usbDevice_MultiSlot_Extension *msExt); + +static int get_end_points(struct libusb_config_descriptor *desc, + _usbDevice *usbdevice, int num); +int ccid_check_firmware(struct libusb_device_descriptor *desc); +static unsigned int *get_data_rates(unsigned int reader_index, + struct libusb_config_descriptor *desc, int num); + +/* ne need to initialize to 0 since it is static */ +static _usbDevice usbDevice[CCID_DRIVER_MAX_READERS]; + +#define PCSCLITE_MANUKEY_NAME "ifdVendorID" +#define PCSCLITE_PRODKEY_NAME "ifdProductID" +#define PCSCLITE_NAMEKEY_NAME "ifdFriendlyName" + +struct _bogus_firmware +{ + int vendor; /* idVendor */ + int product; /* idProduct */ + int firmware; /* bcdDevice: previous firmwares have bugs */ +}; + +static struct _bogus_firmware Bogus_firmwares[] = { + { 0x04e6, 0xe001, 0x0516 }, /* SCR 331 */ + { 0x04e6, 0x5111, 0x0620 }, /* SCR 331-DI */ + { 0x04e6, 0xe003, 0x0510 }, /* SPR 532 */ + { 0x0D46, 0x3001, 0x0037 }, /* KAAN Base */ + { 0x0D46, 0x3002, 0x0037 }, /* KAAN Advanced */ + { 0x09C3, 0x0008, 0x0203 }, /* ActivCard V2 */ + { 0x0DC3, 0x1004, 0x0502 }, /* ASE IIIe USBv2 */ + { 0x0DC3, 0x1102, 0x0607 }, /* ASE IIIe KB USB */ + { 0x058F, 0x9520, 0x0102 }, /* Alcor AU9520-G */ + { 0x072F, 0x2200, 0x0206 }, /* ACS ACR122U-WB-R */ + { 0x08C3, 0x0402, 0x5000 }, /* Precise Biometrics Precise 200 MC */ + { 0x08C3, 0x0401, 0x5000 }, /* Precise Biometrics Precise 250 MC */ + { 0x0B0C, 0x0050, 0x0101 }, /* Todos Argos Mini II */ + { 0x0DC3, 0x0900, 0x0200 }, /* Athena IDProtect Key v2 */ + { 0x03F0, 0x0036, 0x0124 }, /* HP USB CCID Smartcard Keyboard */ + { 0x062D, 0x0001, 0x0102 }, /* THRC Smart Card Reader */ + { 0x04E6, 0x5291, 0x0112 }, /* SCM SCL010 Contactless Reader */ + + /* the firmware version is not correct since I do not have received a + * working reader yet */ +#ifndef O2MICRO_OZ776_PATCH + { 0x0b97, 0x7762, 0x0111 }, /* Oz776S */ +#endif +}; + +/* data rates supported by the secondary slots on the GemCore Pos Pro & SIM Pro */ +unsigned int SerialCustomDataRates[] = { GEMPLUS_CUSTOM_DATA_RATES, 0 }; + +/***************************************************************************** + * + * close_libusb_if_needed + * + ****************************************************************************/ +static void close_libusb_if_needed(void) +{ + int i, to_exit = TRUE; + + if (NULL == ctx) + return; + + /* if at least 1 reader is still in use we do not exit libusb */ + for (i=0; ialtsetting->bInterfaceNumber; + if (interface_number >= 0 && interface != interface_number) + { + /* an interface was specified and it is not the + * current one */ + DEBUG_INFO3("Found interface %d but expecting %d", + interface, interface_number); + DEBUG_INFO3("Wrong interface for USB device %d/%d." + " Checking next one.", bus_number, device_address); + + /* check for another CCID interface on the same device */ + num++; + + goto again; + } + + r = libusb_claim_interface(dev_handle, interface); + if (r < 0) + { + (void)libusb_close(dev_handle); + DEBUG_CRITICAL4("Can't claim interface %d/%d: %s", + bus_number, device_address, libusb_error_name(r)); + claim_failed = TRUE; + interface_number = -1; + continue; + } + + DEBUG_INFO4("Found Vendor/Product: %04X/%04X (%s)", + desc.idVendor, desc.idProduct, friendlyName); + DEBUG_INFO3("Using USB bus/device: %d/%d", + bus_number, device_address); + + /* check for firmware bugs */ + if (ccid_check_firmware(&desc)) + { + (void)libusb_close(dev_handle); + return_value = STATUS_UNSUCCESSFUL; + goto end2; + } + +#ifdef USE_COMPOSITE_AS_MULTISLOT + if ((GEMALTOPROXDU == readerID) + || (GEMALTOPROXSU == readerID) + || (HID_OMNIKEY_5422 == readerID) + || (FEITIANR502DUAL == readerID)) + { + /* use the next interface for the next "slot" */ + static_interface = interface + 1; + + /* reset for a next reader */ + /* max interface number for all 3 readers is 2 */ + if (static_interface > max_interface_number) + static_interface = -1; + } +#endif + + /* Get Endpoints values*/ + (void)get_end_points(config_desc, &usbDevice[reader_index], num); + + /* store device information */ + usbDevice[reader_index].dev_handle = dev_handle; + usbDevice[reader_index].bus_number = bus_number; + usbDevice[reader_index].device_address = device_address; + usbDevice[reader_index].interface = interface; + usbDevice[reader_index].real_nb_opened_slots = 1; + usbDevice[reader_index].nb_opened_slots = &usbDevice[reader_index].real_nb_opened_slots; + usbDevice[reader_index].polling_transfer = NULL; + + /* CCID common informations */ + usbDevice[reader_index].ccid.real_bSeq = 0; + usbDevice[reader_index].ccid.pbSeq = &usbDevice[reader_index].ccid.real_bSeq; + usbDevice[reader_index].ccid.readerID = + (desc.idVendor << 16) + desc.idProduct; + usbDevice[reader_index].ccid.dwFeatures = dw2i(device_descriptor, 40); + usbDevice[reader_index].ccid.wLcdLayout = + (device_descriptor[51] << 8) + device_descriptor[50]; + usbDevice[reader_index].ccid.bPINSupport = device_descriptor[52]; + usbDevice[reader_index].ccid.dwMaxCCIDMessageLength = dw2i(device_descriptor, 44); + usbDevice[reader_index].ccid.dwMaxIFSD = dw2i(device_descriptor, 28); + usbDevice[reader_index].ccid.dwDefaultClock = dw2i(device_descriptor, 10); + usbDevice[reader_index].ccid.dwMaxDataRate = dw2i(device_descriptor, 23); + usbDevice[reader_index].ccid.bMaxSlotIndex = device_descriptor[4]; + usbDevice[reader_index].ccid.bCurrentSlotIndex = 0; + usbDevice[reader_index].ccid.readTimeout = DEFAULT_COM_READ_TIMEOUT; + if (device_descriptor[27]) + usbDevice[reader_index].ccid.arrayOfSupportedDataRates = get_data_rates(reader_index, config_desc, num); + else + { + usbDevice[reader_index].ccid.arrayOfSupportedDataRates = NULL; + DEBUG_INFO1("bNumDataRatesSupported is 0"); + } + usbDevice[reader_index].ccid.bInterfaceProtocol = usb_interface->altsetting->bInterfaceProtocol; + usbDevice[reader_index].ccid.bNumEndpoints = usb_interface->altsetting->bNumEndpoints; + usbDevice[reader_index].ccid.dwSlotStatus = IFD_ICC_PRESENT; + usbDevice[reader_index].ccid.bVoltageSupport = device_descriptor[5]; + usbDevice[reader_index].ccid.sIFD_serial_number = NULL; + usbDevice[reader_index].ccid.gemalto_firmware_features = NULL; +#ifdef ENABLE_ZLP + usbDevice[reader_index].ccid.zlp = FALSE; +#endif + if (desc.iSerialNumber) + { + unsigned char serial[128]; + int ret; + + ret = libusb_get_string_descriptor_ascii(dev_handle, + desc.iSerialNumber, serial, + sizeof(serial)); + if (ret > 0) + usbDevice[reader_index].ccid.sIFD_serial_number + = strdup((char *)serial); + } + + usbDevice[reader_index].ccid.sIFD_iManufacturer = NULL; + if (desc.iManufacturer) + { + unsigned char iManufacturer[128]; + int ret; + + ret = libusb_get_string_descriptor_ascii(dev_handle, + desc.iManufacturer, iManufacturer, + sizeof(iManufacturer)); + if (ret > 0) + usbDevice[reader_index].ccid.sIFD_iManufacturer + = strdup((char *)iManufacturer); + } + + usbDevice[reader_index].ccid.IFD_bcdDevice = desc.bcdDevice; + + /* If this is a multislot reader, init the multislot stuff */ + if (usbDevice[reader_index].ccid.bMaxSlotIndex) + usbDevice[reader_index].multislot_extension = Multi_CreateFirstSlot(reader_index); + else + usbDevice[reader_index].multislot_extension = NULL; + + goto end; + } + } + } +end: + if (usbDevice[reader_index].dev_handle == NULL) + { + /* free the libusb allocated list & devices */ + libusb_free_device_list(devs, 1); + +#ifdef __APPLE__ + /* give some time to libusb to detect the new USB devices on Mac OS X */ + if (count_libusb > 0) + { + count_libusb--; + DEBUG_INFO2("Wait after libusb: %d", count_libusb); + nanosleep(&sleep_time, NULL); + + goto again_libusb; + } +#endif + /* failed */ + close_libusb_if_needed(); + + if (claim_failed) + return STATUS_COMM_ERROR; + DEBUG_INFO1("Device not found?"); + return STATUS_NO_SUCH_DEVICE; + } + + /* memorise the current reader_index so we can detect + * a new OpenUSBByName on a multi slot reader */ + previous_reader_index = reader_index; + +end2: + /* free the libusb allocated list & devices */ + libusb_free_device_list(devs, 1); + +end1: + /* free bundle list */ + bundleRelease(&plist); + + if (return_value != STATUS_SUCCESS) + close_libusb_if_needed(); + + return return_value; +} /* OpenUSBByName */ + + +/***************************************************************************** + * + * WriteUSB + * + ****************************************************************************/ +status_t WriteUSB(unsigned int reader_index, unsigned int length, + unsigned char *buffer) +{ + int rv; + int actual_length; + char debug_header[] = "-> 121234 "; + + (void)snprintf(debug_header, sizeof(debug_header), "-> %06X ", + (int)reader_index); + +#ifdef ENABLE_ZLP + if (usbDevice[reader_index].ccid.zlp) + { /* Zero Length Packet */ + int dummy_length; + + /* try to read a ZLP so transfer length = 0 + * timeout of 10 ms */ + (void)libusb_bulk_transfer(usbDevice[reader_index].dev_handle, + usbDevice[reader_index].bulk_in, NULL, 0, &dummy_length, 10); + } +#endif + + DEBUG_XXD(debug_header, buffer, length); + + rv = libusb_bulk_transfer(usbDevice[reader_index].dev_handle, + usbDevice[reader_index].bulk_out, buffer, length, + &actual_length, USB_WRITE_TIMEOUT); + + if (rv < 0) + { + DEBUG_CRITICAL5("write failed (%d/%d): %d %s", + usbDevice[reader_index].bus_number, + usbDevice[reader_index].device_address, rv, libusb_error_name(rv)); + + if (LIBUSB_ERROR_NO_DEVICE == rv) + return STATUS_NO_SUCH_DEVICE; + + return STATUS_UNSUCCESSFUL; + } + + return STATUS_SUCCESS; +} /* WriteUSB */ + + +/***************************************************************************** + * + * ReadUSB + * + ****************************************************************************/ +status_t ReadUSB(unsigned int reader_index, unsigned int * length, + unsigned char *buffer) +{ + int rv; + int actual_length; + char debug_header[] = "<- 121234 "; + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); + int duplicate_frame = 0; + +read_again: + (void)snprintf(debug_header, sizeof(debug_header), "<- %06X ", + (int)reader_index); + + rv = libusb_bulk_transfer(usbDevice[reader_index].dev_handle, + usbDevice[reader_index].bulk_in, buffer, *length, + &actual_length, usbDevice[reader_index].ccid.readTimeout); + + if (rv < 0) + { + *length = 0; + DEBUG_CRITICAL5("read failed (%d/%d): %d %s", + usbDevice[reader_index].bus_number, + usbDevice[reader_index].device_address, rv, libusb_error_name(rv)); + + if (LIBUSB_ERROR_NO_DEVICE == rv) + return STATUS_NO_SUCH_DEVICE; + + return STATUS_UNSUCCESSFUL; + } + + *length = actual_length; + + DEBUG_XXD(debug_header, buffer, *length); + +#define BSEQ_OFFSET 6 + if ((*length >= BSEQ_OFFSET) + && (buffer[BSEQ_OFFSET] < *ccid_descriptor->pbSeq -1)) + { + duplicate_frame++; + if (duplicate_frame > 10) + { + DEBUG_CRITICAL("Too many duplicate frame detected"); + return STATUS_UNSUCCESSFUL; + } + DEBUG_INFO1("Duplicate frame detected"); + goto read_again; + } + + return STATUS_SUCCESS; +} /* ReadUSB */ + + +/***************************************************************************** + * + * CloseUSB + * + ****************************************************************************/ +status_t CloseUSB(unsigned int reader_index) +{ + /* device not opened */ + if (usbDevice[reader_index].dev_handle == NULL) + return STATUS_UNSUCCESSFUL; + + DEBUG_COMM3("Closing USB device: %d/%d", + usbDevice[reader_index].bus_number, + usbDevice[reader_index].device_address); + + /* one slot closed */ + (*usbDevice[reader_index].nb_opened_slots)--; + + /* release the allocated ressources for the last slot only */ + if (0 == *usbDevice[reader_index].nb_opened_slots) + { + struct usbDevice_MultiSlot_Extension *msExt; + + DEBUG_COMM("Last slot closed. Release resources"); + + msExt = usbDevice[reader_index].multislot_extension; + /* If this is a multislot reader, close using the multislot stuff */ + if (msExt) + { + /* terminate the interrupt waiter thread */ + Multi_PollingTerminate(msExt); + + /* wait for the thread to actually terminate */ + pthread_join(msExt->thread_proc, NULL); + + /* release the shared objects */ + pthread_cond_destroy(&msExt->condition); + pthread_mutex_destroy(&msExt->mutex); + + /* Deallocate the extension itself */ + free(msExt); + + /* Stop the slot */ + usbDevice[reader_index].multislot_extension = NULL; + } + + if (usbDevice[reader_index].ccid.gemalto_firmware_features) + free(usbDevice[reader_index].ccid.gemalto_firmware_features); + + if (usbDevice[reader_index].ccid.sIFD_serial_number) + free(usbDevice[reader_index].ccid.sIFD_serial_number); + + if (usbDevice[reader_index].ccid.sIFD_iManufacturer) + free(usbDevice[reader_index].ccid.sIFD_iManufacturer); + + if (usbDevice[reader_index].ccid.arrayOfSupportedDataRates) + free(usbDevice[reader_index].ccid.arrayOfSupportedDataRates); + + (void)libusb_release_interface(usbDevice[reader_index].dev_handle, + usbDevice[reader_index].interface); + (void)libusb_close(usbDevice[reader_index].dev_handle); + } + + /* mark the resource unused */ + usbDevice[reader_index].dev_handle = NULL; + usbDevice[reader_index].interface = 0; + + close_libusb_if_needed(); + + return STATUS_SUCCESS; +} /* CloseUSB */ + + +/***************************************************************************** + * + * get_ccid_descriptor + * + ****************************************************************************/ +_ccid_descriptor *get_ccid_descriptor(unsigned int reader_index) +{ + return &usbDevice[reader_index].ccid; +} /* get_ccid_descriptor */ + + +/***************************************************************************** + * + * get_ccid_device_descriptor + * + ****************************************************************************/ +const unsigned char *get_ccid_device_descriptor(const struct libusb_interface *usb_interface) +{ +#ifdef O2MICRO_OZ776_PATCH + uint8_t last_endpoint; +#endif + + if (54 == usb_interface->altsetting->extra_length) + return usb_interface->altsetting->extra; + + if (0 != usb_interface->altsetting->extra_length) + { + /* If extra_length is zero, the descriptor might be at + * the end, but if it's not zero, we have a + * problem. */ + DEBUG_CRITICAL2("Extra field has a wrong length: %d", + usb_interface->altsetting->extra_length); + return NULL; + } + +#ifdef O2MICRO_OZ776_PATCH + /* Some devices, such as the Oz776, Reiner SCT and bludrive II + * report the device descriptor at the end of the endpoint + * descriptors; to support those, look for it at the end as well. + */ + last_endpoint = usb_interface->altsetting->bNumEndpoints-1; + if (usb_interface->altsetting->endpoint + && usb_interface->altsetting->endpoint[last_endpoint].extra_length == 54) + return usb_interface->altsetting->endpoint[last_endpoint].extra; +#else + DEBUG_CRITICAL2("Extra field has a wrong length: %d", + usb_interface->altsetting->extra_length); +#endif + + return NULL; +} /* get_ccid_device_descriptor */ + + +/***************************************************************************** + * + * get_end_points + * + ****************************************************************************/ +static int get_end_points(struct libusb_config_descriptor *desc, + _usbDevice *usbdevice, int num) +{ + int i; + int bEndpointAddress; + const struct libusb_interface *usb_interface; + + usb_interface = get_ccid_usb_interface(desc, &num); + + /* + * 3 Endpoints maximum: Interrupt In, Bulk In, Bulk Out + */ + for (i=0; ialtsetting->bNumEndpoints; i++) + { + /* interrupt end point (if available) */ + if (usb_interface->altsetting->endpoint[i].bmAttributes + == LIBUSB_TRANSFER_TYPE_INTERRUPT) + { + usbdevice->interrupt = + usb_interface->altsetting->endpoint[i].bEndpointAddress; + continue; + } + + if (usb_interface->altsetting->endpoint[i].bmAttributes + != LIBUSB_TRANSFER_TYPE_BULK) + continue; + + bEndpointAddress = + usb_interface->altsetting->endpoint[i].bEndpointAddress; + + if ((bEndpointAddress & LIBUSB_ENDPOINT_DIR_MASK) + == LIBUSB_ENDPOINT_IN) + usbdevice->bulk_in = bEndpointAddress; + + if ((bEndpointAddress & LIBUSB_ENDPOINT_DIR_MASK) + == LIBUSB_ENDPOINT_OUT) + usbdevice->bulk_out = bEndpointAddress; + } + + return 0; +} /* get_end_points */ + + +/***************************************************************************** + * + * get_ccid_usb_interface + * + ****************************************************************************/ +/*@null@*/ EXTERNAL const struct libusb_interface * get_ccid_usb_interface( + struct libusb_config_descriptor *desc, int *num) +{ + const struct libusb_interface *usb_interface = NULL; + int i; + + /* if multiple interfaces use the first one with CCID class type */ + for (i = *num; i < desc->bNumInterfaces; i++) + { + /* CCID Class? */ + if (desc->interface[i].altsetting->bInterfaceClass == 0xb +#ifdef ALLOW_PROPRIETARY_CLASS + || (desc->interface[i].altsetting->bInterfaceClass == 0xff + && 54 == desc->interface[i].altsetting->extra_length) +#endif + ) + { + usb_interface = &desc->interface[i]; + /* store the interface number for further reference */ + *num = i; + break; + } + } + + return usb_interface; +} /* get_ccid_usb_interface */ + + +/***************************************************************************** + * + * ccid_check_firmware + * + ****************************************************************************/ +int ccid_check_firmware(struct libusb_device_descriptor *desc) +{ + unsigned int i; + + for (i=0; iidVendor != Bogus_firmwares[i].vendor) + continue; + + if (desc->idProduct != Bogus_firmwares[i].product) + continue; + + /* firmware too old and buggy */ + if (desc->bcdDevice < Bogus_firmwares[i].firmware) + { + if (DriverOptions & DRIVER_OPTION_USE_BOGUS_FIRMWARE) + { + DEBUG_INFO3("Firmware (%X.%02X) is bogus! but you choosed to use it", + desc->bcdDevice >> 8, desc->bcdDevice & 0xFF); + return FALSE; + } + else + { + DEBUG_CRITICAL3("Firmware (%X.%02X) is bogus! Upgrade the reader firmware or get a new reader.", + desc->bcdDevice >> 8, desc->bcdDevice & 0xFF); + return TRUE; + } + } + } + + /* by default the firmware is not bogus */ + return FALSE; +} /* ccid_check_firmware */ + + +/***************************************************************************** + * + * get_data_rates + * + ****************************************************************************/ +static unsigned int *get_data_rates(unsigned int reader_index, + struct libusb_config_descriptor *desc, int num) +{ + int n, i, len; + unsigned char buffer[256*sizeof(int)]; /* maximum is 256 records */ + unsigned int *uint_array; + + /* See CCID 3.7.3 page 25 */ + n = ControlUSB(reader_index, + 0xA1, /* request type */ + 0x03, /* GET_DATA_RATES */ + 0x00, /* value */ + buffer, sizeof(buffer)); + + /* we got an error? */ + if (n <= 0) + { + DEBUG_INFO2("IFD does not support GET_DATA_RATES request: %d", n); + return NULL; + } + + /* we got a strange value */ + if (n % 4) + { + DEBUG_INFO2("Wrong GET DATA RATES size: %d", n); + return NULL; + } + + /* allocate the buffer (including the end marker) */ + n /= sizeof(int); + + /* we do not get the expected number of data rates */ + len = get_ccid_device_descriptor(get_ccid_usb_interface(desc, &num))[27]; /* bNumDataRatesSupported */ + if ((n != len) && len) + { + DEBUG_INFO3("Got %d data rates but was expecting %d", n, len); + + /* we got more data than expected */ + if (n > len) + n = len; + } + + uint_array = calloc(n+1, sizeof(uint_array[0])); + if (NULL == uint_array) + { + DEBUG_CRITICAL("Memory allocation failed"); + return NULL; + } + + /* convert in correct endianess */ + for (i=0; iuser_data; + *completed = 1; + /* caller interprets results and frees transfer */ +} + +/***************************************************************************** + * + * InterruptRead + * + ****************************************************************************/ +int InterruptRead(int reader_index, int timeout /* in ms */) +{ + int ret, actual_length; + int return_value = IFD_SUCCESS; + unsigned char buffer[8]; + struct libusb_transfer *transfer; + int completed = 0; + + /* Multislot reader: redirect to Multi_InterrupRead */ + if (usbDevice[reader_index].multislot_extension != NULL) + return Multi_InterruptRead(reader_index, timeout); + + DEBUG_PERIODIC2("before (%d)", reader_index); + + transfer = libusb_alloc_transfer(0); + if (NULL == transfer) + return LIBUSB_ERROR_NO_MEM; + + libusb_fill_bulk_transfer(transfer, + usbDevice[reader_index].dev_handle, + usbDevice[reader_index].interrupt, buffer, sizeof(buffer), + bulk_transfer_cb, &completed, timeout); + transfer->type = LIBUSB_TRANSFER_TYPE_INTERRUPT; + + ret = libusb_submit_transfer(transfer); + if (ret < 0) { + libusb_free_transfer(transfer); + DEBUG_CRITICAL2("libusb_submit_transfer failed: %s", + libusb_error_name(ret)); + return IFD_COMMUNICATION_ERROR; + } + + usbDevice[reader_index].polling_transfer = transfer; + + while (!completed) + { + ret = libusb_handle_events_completed(ctx, &completed); + if (ret < 0) + { + if (ret == LIBUSB_ERROR_INTERRUPTED) + continue; + libusb_cancel_transfer(transfer); + while (!completed) + if (libusb_handle_events_completed(ctx, &completed) < 0) + break; + libusb_free_transfer(transfer); + DEBUG_CRITICAL2("libusb_handle_events failed: %s", + libusb_error_name(ret)); + return IFD_COMMUNICATION_ERROR; + } + } + + actual_length = transfer->actual_length; + ret = transfer->status; + + usbDevice[reader_index].polling_transfer = NULL; + libusb_free_transfer(transfer); + + DEBUG_PERIODIC3("after (%d) (%d)", reader_index, ret); + + switch (ret) + { + case LIBUSB_TRANSFER_COMPLETED: + DEBUG_XXD("NotifySlotChange: ", buffer, actual_length); + break; + + case LIBUSB_TRANSFER_TIMED_OUT: + break; + + default: + /* if libusb_interrupt_transfer() times out we get EILSEQ or EAGAIN */ + DEBUG_COMM4("InterruptRead (%d/%d): %s", + usbDevice[reader_index].bus_number, + usbDevice[reader_index].device_address, libusb_error_name(ret)); + return_value = IFD_COMMUNICATION_ERROR; + } + + return return_value; +} /* InterruptRead */ + + +/***************************************************************************** + * + * Stop the async loop + * + ****************************************************************************/ +void InterruptStop(int reader_index) +{ + struct libusb_transfer *transfer; + + /* Multislot reader: redirect to Multi_InterrupStop */ + if (usbDevice[reader_index].multislot_extension != NULL) + { + Multi_InterruptStop(reader_index); + return; + } + + transfer = usbDevice[reader_index].polling_transfer; + usbDevice[reader_index].polling_transfer = NULL; + if (transfer) + { + int ret; + + ret = libusb_cancel_transfer(transfer); + if (ret < 0) + DEBUG_CRITICAL2("libusb_cancel_transfer failed: %d", ret); + } +} /* InterruptStop */ + + +/***************************************************************************** + * + * Multi_PollingProc + * + ****************************************************************************/ +static void *Multi_PollingProc(void *p_ext) +{ + struct usbDevice_MultiSlot_Extension *msExt = p_ext; + int rv, status, actual_length; + unsigned char buffer[CCID_INTERRUPT_SIZE]; + struct libusb_transfer *transfer; + int completed; + + DEBUG_COMM3("Multi_PollingProc (%d/%d): thread starting", + usbDevice[msExt->reader_index].bus_number, + usbDevice[msExt->reader_index].device_address); + + rv = 0; + while (!msExt->terminated) + { + DEBUG_COMM3("Multi_PollingProc (%d/%d): waiting", + usbDevice[msExt->reader_index].bus_number, + usbDevice[msExt->reader_index].device_address); + + transfer = libusb_alloc_transfer(0); + if (NULL == transfer) + { + rv = LIBUSB_ERROR_NO_MEM; + DEBUG_COMM2("libusb_alloc_transfer err %d", rv); + break; + } + + libusb_fill_bulk_transfer(transfer, + usbDevice[msExt->reader_index].dev_handle, + usbDevice[msExt->reader_index].interrupt, + buffer, CCID_INTERRUPT_SIZE, + bulk_transfer_cb, &completed, 0); /* No timeout ! */ + + transfer->type = LIBUSB_TRANSFER_TYPE_INTERRUPT; + + rv = libusb_submit_transfer(transfer); + if (rv) + { + libusb_free_transfer(transfer); + DEBUG_COMM2("libusb_submit_transfer err %d", rv); + break; + } + + usbDevice[msExt->reader_index].polling_transfer = transfer; + + completed = 0; + while (!completed && !msExt->terminated) + { + rv = libusb_handle_events_completed(ctx, &completed); + if (rv < 0) + { + DEBUG_COMM2("libusb_handle_events err %d", rv); + + if (rv == LIBUSB_ERROR_INTERRUPTED) + continue; + + libusb_cancel_transfer(transfer); + + while (!completed && !msExt->terminated) + { + if (libusb_handle_events_completed(ctx, &completed) < 0) + break; + } + + break; + } + } + + usbDevice[msExt->reader_index].polling_transfer = NULL; + + if (rv < 0) + libusb_free_transfer(transfer); + else + { + int b, slot; + + actual_length = transfer->actual_length; + status = transfer->status; + + libusb_free_transfer(transfer); + + switch (status) + { + case LIBUSB_TRANSFER_COMPLETED: + DEBUG_COMM3("Multi_PollingProc (%d/%d): OK", + usbDevice[msExt->reader_index].bus_number, + usbDevice[msExt->reader_index].device_address); + DEBUG_XXD("NotifySlotChange: ", buffer, actual_length); + + /* log the RDR_to_PC_NotifySlotChange data */ + slot = 0; + for (b=0; b> (s*2)) & 3); + const char *present, *change; + + present = (slot_status & 1) ? "present" : "absent"; + change = (slot_status & 2) ? "status changed" : "no change"; + + DEBUG_COMM3("slot %d status: %d", + s + b*4, slot_status); + DEBUG_COMM3("ICC %s, %s", present, change); + } + slot += 4; + } + break; + + case LIBUSB_TRANSFER_TIMED_OUT: + DEBUG_COMM3("Multi_PollingProc (%d/%d): Timeout", + usbDevice[msExt->reader_index].bus_number, + usbDevice[msExt->reader_index].device_address); + break; + + default: + /* if libusb_interrupt_transfer() times out + * we get EILSEQ or EAGAIN */ + DEBUG_COMM4("Multi_PollingProc (%d/%d): %d", + usbDevice[msExt->reader_index].bus_number, + usbDevice[msExt->reader_index].device_address, + status); + } + + /* Tell other slots that there's a new interrupt buffer */ + DEBUG_COMM3("Multi_PollingProc (%d/%d): Broadcast to slot(s)", + usbDevice[msExt->reader_index].bus_number, + usbDevice[msExt->reader_index].device_address); + + /* Lock the mutex */ + pthread_mutex_lock(&msExt->mutex); + + /* Set the status and the interrupt buffer */ + msExt->status = status; + memset(msExt->buffer, 0, sizeof msExt->buffer); + memcpy(msExt->buffer, buffer, actual_length); + + /* Broadcast the condition and unlock */ + pthread_cond_broadcast(&msExt->condition); + pthread_mutex_unlock(&msExt->mutex); + } + } + + msExt->terminated = TRUE; + + if (rv < 0) + { + DEBUG_CRITICAL4("Multi_PollingProc (%d/%d): error %d", + usbDevice[msExt->reader_index].bus_number, + usbDevice[msExt->reader_index].device_address, rv); + } + + /* Wake up the slot threads so they will exit as well */ + + /* Lock the mutex */ + pthread_mutex_lock(&msExt->mutex); + + /* Set the status and fill-in the interrupt buffer */ + msExt->status = 0; + memset(msExt->buffer, 0xFF, sizeof msExt->buffer); + + /* Broadcast the condition */ + pthread_cond_broadcast(&msExt->condition); + + /* Unlock */ + pthread_mutex_unlock(&msExt->mutex); + + /* Now exit */ + DEBUG_COMM3("Multi_PollingProc (%d/%d): Thread terminated", + usbDevice[msExt->reader_index].bus_number, + usbDevice[msExt->reader_index].device_address); + + pthread_exit(NULL); + return NULL; +} /* Multi_PollingProc */ + + +/***************************************************************************** + * + * Multi_PollingTerminate + * + ****************************************************************************/ +static void Multi_PollingTerminate(struct usbDevice_MultiSlot_Extension *msExt) +{ + struct libusb_transfer *transfer; + + if (msExt && !msExt->terminated) + { + msExt->terminated = TRUE; + + transfer = usbDevice[msExt->reader_index].polling_transfer; + + if (transfer) + { + int ret; + + ret = libusb_cancel_transfer(transfer); + if (ret < 0) + DEBUG_CRITICAL2("libusb_cancel_transfer failed: %d", ret); + } + } +} /* Multi_PollingTerminate */ + + +/***************************************************************************** + * + * Multi_InterruptRead + * + ****************************************************************************/ +static int Multi_InterruptRead(int reader_index, int timeout /* in ms */) +{ + struct usbDevice_MultiSlot_Extension *msExt; + unsigned char buffer[CCID_INTERRUPT_SIZE]; + struct timespec cond_wait_until; + struct timeval local_time; + int rv, status, interrupt_byte, interrupt_mask; + + msExt = usbDevice[reader_index].multislot_extension; + + /* When stopped, return 0 so IFDHPolling will return IFD_NO_SUCH_DEVICE */ + if ((msExt == NULL) || msExt->terminated) + return 0; + + DEBUG_PERIODIC3("Multi_InterruptRead (%d), timeout: %d ms", + reader_index, timeout); + + /* Select the relevant bit in the interrupt buffer */ + interrupt_byte = (usbDevice[reader_index].ccid.bCurrentSlotIndex / 4) + 1; + interrupt_mask = 0x02 << (2 * (usbDevice[reader_index].ccid.bCurrentSlotIndex % 4)); + + /* Wait until the condition is signaled or a timeout occurs */ + gettimeofday(&local_time, NULL); + cond_wait_until.tv_sec = local_time.tv_sec; + cond_wait_until.tv_nsec = local_time.tv_usec * 1000; + + cond_wait_until.tv_sec += timeout / 1000; + cond_wait_until.tv_nsec += 1000000 * (timeout % 1000); + +again: + pthread_mutex_lock(&msExt->mutex); + + rv = pthread_cond_timedwait(&msExt->condition, &msExt->mutex, + &cond_wait_until); + + if (0 == rv) + { + /* Retrieve interrupt buffer and request result */ + memcpy(buffer, msExt->buffer, sizeof buffer); + status = msExt->status; + } + else + if (rv == ETIMEDOUT) + status = LIBUSB_TRANSFER_TIMED_OUT; + else + status = -1; + + /* Don't forget to unlock the mutex */ + pthread_mutex_unlock(&msExt->mutex); + + /* When stopped, return 0 so IFDHPolling will return IFD_NO_SUCH_DEVICE */ + if (msExt->terminated) + return 0; + + /* Not stopped */ + if (status == LIBUSB_TRANSFER_COMPLETED) + { + if (0 == (buffer[interrupt_byte] & interrupt_mask)) + { + DEBUG_PERIODIC2("Multi_InterruptRead (%d) -- skipped", reader_index); + goto again; + } + DEBUG_PERIODIC2("Multi_InterruptRead (%d), got an interrupt", reader_index); + } + else + { + DEBUG_PERIODIC3("Multi_InterruptRead (%d), status=%d", reader_index, status); + } + + return status; +} /* Multi_InterruptRead */ + + +/***************************************************************************** + * + * Multi_InterruptStop + * + ****************************************************************************/ +static void Multi_InterruptStop(int reader_index) +{ + struct usbDevice_MultiSlot_Extension *msExt; + int interrupt_byte, interrupt_mask; + + msExt = usbDevice[reader_index].multislot_extension; + + /* Already stopped ? */ + if ((NULL == msExt) || msExt->terminated) + return; + + DEBUG_PERIODIC2("Stop (%d)", reader_index); + + interrupt_byte = (usbDevice[reader_index].ccid.bCurrentSlotIndex / 4) + 1; + interrupt_mask = 0x02 << (2 * (usbDevice[reader_index].ccid.bCurrentSlotIndex % 4)); + + pthread_mutex_lock(&msExt->mutex); + + /* Broacast an interrupt to wake-up the slot's thread */ + msExt->buffer[interrupt_byte] |= interrupt_mask; + pthread_cond_broadcast(&msExt->condition); + + pthread_mutex_unlock(&msExt->mutex); +} /* Multi_InterruptStop */ + + +/***************************************************************************** + * + * Multi_CreateFirstSlot + * + ****************************************************************************/ +static struct usbDevice_MultiSlot_Extension *Multi_CreateFirstSlot(int reader_index) +{ + struct usbDevice_MultiSlot_Extension *msExt; + + /* Allocate a new extension buffer */ + msExt = malloc(sizeof(struct usbDevice_MultiSlot_Extension)); + if (NULL == msExt) + return NULL; + + /* Remember the index */ + msExt->reader_index = reader_index; + + msExt->terminated = FALSE; + msExt->status = 0; + msExt->transfer = NULL; + + /* Create mutex and condition object for the interrupt polling */ + pthread_mutex_init(&msExt->mutex, NULL); + pthread_cond_init(&msExt->condition, NULL); + + /* create the thread in charge of the interrupt polling */ + pthread_create(&msExt->thread_proc, NULL, Multi_PollingProc, msExt); + + return msExt; +} /* Multi_CreateFirstSlot */ + + +/***************************************************************************** + * + * Multi_CreateNextSlot + * + ****************************************************************************/ +static struct usbDevice_MultiSlot_Extension *Multi_CreateNextSlot(int physical_reader_index) +{ + /* Take the extension buffer from the main slot */ + return usbDevice[physical_reader_index].multislot_extension; +} /* Multi_CreateNextSlot */ + diff --git a/src/ccid_usb.h b/src/ccid_usb.h new file mode 100644 index 0000000..839d364 --- /dev/null +++ b/src/ccid_usb.h @@ -0,0 +1,45 @@ +/* + ccid_usb.h: USB access routines using the libusb library + Copyright (C) 2003-2010 Ludovic Rousseau + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef __CCID_USB_H__ +#define __CCID_USB_H__ +status_t OpenUSB(unsigned int reader_index, int channel); + +status_t OpenUSBByName(unsigned int reader_index, /*@null@*/ char *device); + +status_t WriteUSB(unsigned int reader_index, unsigned int length, + unsigned char *Buffer); + +status_t ReadUSB(unsigned int reader_index, unsigned int *length, + /*@out@*/ unsigned char *Buffer); + +status_t CloseUSB(unsigned int reader_index); + +#include +/*@null@*/ const struct libusb_interface *get_ccid_usb_interface( + struct libusb_config_descriptor *desc, int *num); + +const unsigned char *get_ccid_device_descriptor(const struct libusb_interface *usb_interface); + +int ControlUSB(int reader_index, int requesttype, int request, int value, + unsigned char *bytes, unsigned int size); + +int InterruptRead(int reader_index, int timeout); +void InterruptStop(int reader_index); +#endif diff --git a/src/commands.c b/src/commands.c new file mode 100644 index 0000000..4c58b39 --- /dev/null +++ b/src/commands.c @@ -0,0 +1,2328 @@ +/* + commands.c: Commands sent to the card + Copyright (C) 2003-2010 Ludovic Rousseau + Copyright (C) 2005 Martin Paljak + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include + +#ifdef HAVE_STRING_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_ERRNO_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif + +#include +#include +#include + +#include "misc.h" +#include "commands.h" +#include "openct/proto-t1.h" +#include "ccid.h" +#include "defs.h" +#include "ccid_ifdhandler.h" +#include "debug.h" +#include "utils.h" + +/* All the pinpad readers I used are more or less bogus + * I use code to change the user command and make the firmware happy */ +#define BOGUS_PINPAD_FIRMWARE + +/* The firmware of SCM readers reports dwMaxCCIDMessageLength = 263 + * instead of 270 so this prevents from sending a full length APDU + * of 260 bytes since the driver check this value */ +#define BOGUS_SCM_FIRMWARE_FOR_dwMaxCCIDMessageLength + +#ifndef offsetof +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) +#endif + +#ifndef BSWAP_16 +#define BSWAP_8(x) ((x) & 0xff) +#define BSWAP_16(x) ((BSWAP_8(x) << 8) | BSWAP_8((x) >> 8)) +#define BSWAP_32(x) ((BSWAP_16(x) << 16) | BSWAP_16((x) >> 16)) +#endif + +#define CHECK_STATUS(res) \ + if (STATUS_NO_SUCH_DEVICE == res) \ + return IFD_NO_SUCH_DEVICE; \ + if (STATUS_SUCCESS != res) \ + return IFD_COMMUNICATION_ERROR; + +/* internal functions */ +static RESPONSECODE CmdXfrBlockAPDU_extended(unsigned int reader_index, + unsigned int tx_length, unsigned char tx_buffer[], unsigned int *rx_length, + unsigned char rx_buffer[]); + +static RESPONSECODE CmdXfrBlockTPDU_T0(unsigned int reader_index, + unsigned int tx_length, unsigned char tx_buffer[], unsigned int *rx_length, + unsigned char rx_buffer[]); + +static RESPONSECODE CmdXfrBlockCHAR_T0(unsigned int reader_index, unsigned int + tx_length, unsigned char tx_buffer[], unsigned int *rx_length, unsigned + char rx_buffer[]); + +static RESPONSECODE CmdXfrBlockTPDU_T1(unsigned int reader_index, + unsigned int tx_length, unsigned char tx_buffer[], unsigned int *rx_length, + unsigned char rx_buffer[]); + +static void i2dw(int value, unsigned char *buffer); +static unsigned int bei2i(unsigned char *buffer); + + +/***************************************************************************** + * + * CmdPowerOn + * + ****************************************************************************/ +RESPONSECODE CmdPowerOn(unsigned int reader_index, unsigned int * nlength, + unsigned char buffer[], int voltage) +{ + unsigned char cmd[10]; + status_t res; + int length, count = 1; + unsigned int atr_len; + int init_voltage; + RESPONSECODE return_value = IFD_SUCCESS; + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); + +#ifndef TWIN_SERIAL + if (PROTOCOL_ICCD_A == ccid_descriptor->bInterfaceProtocol) + { + int r; + unsigned char pcbuffer[SIZE_GET_SLOT_STATUS]; + + /* first power off to reset the ICC state machine */ + r = CmdPowerOff(reader_index); + if (r != IFD_SUCCESS) + return r; + + /* wait for ready */ + r = CmdGetSlotStatus(reader_index, pcbuffer); + if (r != IFD_SUCCESS) + return r; + + /* Power On */ + r = ControlUSB(reader_index, 0xA1, 0x62, 0, buffer, *nlength); + + /* we got an error? */ + if (r < 0) + { + DEBUG_INFO2("ICC Power On failed: %s", strerror(errno)); + return IFD_COMMUNICATION_ERROR; + } + + *nlength = r; + + return IFD_SUCCESS; + } + + if (PROTOCOL_ICCD_B == ccid_descriptor->bInterfaceProtocol) + { + int r; + unsigned char tmp[MAX_ATR_SIZE+1]; + + /* first power off to reset the ICC state machine */ + r = CmdPowerOff(reader_index); + if (r != IFD_SUCCESS) + return r; + + /* Power On */ + r = ControlUSB(reader_index, 0x21, 0x62, 1, NULL, 0); + + /* we got an error? */ + if (r < 0) + { + DEBUG_INFO2("ICC Power On failed: %s", strerror(errno)); + return IFD_COMMUNICATION_ERROR; + } + + /* Data Block */ + r = ControlUSB(reader_index, 0xA1, 0x6F, 0, tmp, sizeof(tmp)); + + /* we got an error? */ + if (r < 0) + { + DEBUG_INFO2("ICC Data Block failed: %s", strerror(errno)); + return IFD_COMMUNICATION_ERROR; + } + + if (tmp[0] != 0x00) + { + DEBUG_CRITICAL2("bResponseType: 0x%02X", tmp[0]); + + /* Status Information? */ + if (0x40 == tmp[0]) + ccid_error(PCSC_LOG_ERROR, tmp[2], __FILE__, __LINE__, __FUNCTION__); + return IFD_COMMUNICATION_ERROR; + } + + DEBUG_INFO_XXD("Data Block: ", tmp, r); + if ((int)*nlength > r-1) + *nlength = r-1; + memcpy(buffer, tmp+1, *nlength); + + return IFD_SUCCESS; + } +#endif + + /* store length of buffer[] */ + length = *nlength; + + if ((ccid_descriptor->dwFeatures & CCID_CLASS_AUTO_VOLTAGE) + || (ccid_descriptor->dwFeatures & CCID_CLASS_AUTO_ACTIVATION)) + voltage = 0; /* automatic voltage selection */ + else + { + int bVoltageSupport = ccid_descriptor->bVoltageSupport; + +check_again: + if ((1 == voltage) && !(bVoltageSupport & 1)) + { + DEBUG_INFO1("5V requested but not support by reader"); + voltage = 2; /* 3V */ + } + + if ((2 == voltage) && !(bVoltageSupport & 2)) + { + DEBUG_INFO1("3V requested but not support by reader"); + voltage = 3; /* 1.8V */ + } + + if ((3 == voltage) && !(bVoltageSupport & 4)) + { + DEBUG_INFO1("1.8V requested but not support by reader"); + voltage = 1; /* 5V */ + goto check_again; + } + } + init_voltage = voltage; + +again: + cmd[0] = 0x62; /* IccPowerOn */ + cmd[1] = cmd[2] = cmd[3] = cmd[4] = 0; /* dwLength */ + cmd[5] = ccid_descriptor->bCurrentSlotIndex; /* slot number */ + cmd[6] = (*ccid_descriptor->pbSeq)++; + cmd[7] = voltage; + cmd[8] = cmd[9] = 0; /* RFU */ + + res = WritePort(reader_index, sizeof(cmd), cmd); + CHECK_STATUS(res) + + /* reset available buffer size */ + /* needed if we go back after a switch to ISO mode */ + *nlength = length; + + res = ReadPort(reader_index, nlength, buffer); + CHECK_STATUS(res) + + if (*nlength < STATUS_OFFSET+1) + { + DEBUG_CRITICAL2("Not enough data received: %d bytes", *nlength); + return IFD_COMMUNICATION_ERROR; + } + + if (buffer[STATUS_OFFSET] & CCID_COMMAND_FAILED) + { + ccid_error(PCSC_LOG_ERROR, buffer[ERROR_OFFSET], __FILE__, __LINE__, __FUNCTION__); /* bError */ + + if (0xBB == buffer[ERROR_OFFSET] && /* Protocol error in EMV mode */ + ((GEMPC433 == ccid_descriptor->readerID) + || (CHERRYXX33 == ccid_descriptor->readerID))) + { + unsigned char cmd_tmp[] = {0x1F, 0x01}; + unsigned char res_tmp[1]; + unsigned int res_length = sizeof(res_tmp); + + if ((return_value = CmdEscape(reader_index, cmd_tmp, + sizeof(cmd_tmp), res_tmp, &res_length, 0)) != IFD_SUCCESS) + return return_value; + + /* avoid looping if we can't switch mode */ + if (count--) + goto again; + else + DEBUG_CRITICAL("Can't set reader in ISO mode"); + } + + /* continue with other voltage values */ + if (voltage) + { +#ifndef NO_LOG + const char *voltage_code[] = { "auto", "5V", "3V", "1.8V" }; +#endif + + DEBUG_INFO3("Power up with %s failed. Try with %s.", + voltage_code[voltage], voltage_code[voltage-1]); + voltage--; + + /* loop from 5V to 1.8V */ + if (0 == voltage) + voltage = 3; + + /* continue until we tried every values */ + if (voltage != init_voltage) + goto again; + } + + return IFD_COMMUNICATION_ERROR; + } + + /* extract the ATR */ + atr_len = dw2i(buffer, 1); /* ATR length */ + if (atr_len > *nlength) + atr_len = *nlength; + else + *nlength = atr_len; + + memmove(buffer, buffer+10, atr_len); + + return return_value; +} /* CmdPowerOn */ + + +/***************************************************************************** + * + * SecurePINVerify + * + ****************************************************************************/ +RESPONSECODE SecurePINVerify(unsigned int reader_index, + unsigned char TxBuffer[], unsigned int TxLength, + unsigned char RxBuffer[], unsigned int *RxLength) +{ + unsigned char cmd[11+14+TxLength]; + unsigned int a, b; + PIN_VERIFY_STRUCTURE *pvs; + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); + int old_read_timeout; + RESPONSECODE ret; + status_t res; + + pvs = (PIN_VERIFY_STRUCTURE *)TxBuffer; + cmd[0] = 0x69; /* Secure */ + cmd[5] = ccid_descriptor->bCurrentSlotIndex; /* slot number */ + cmd[6] = (*ccid_descriptor->pbSeq)++; + cmd[7] = 0; /* bBWI */ + cmd[8] = 0; /* wLevelParameter */ + cmd[9] = 0; + cmd[10] = 0; /* bPINOperation: PIN Verification */ + + if (TxLength < 19+4 /* 4 = APDU size */) /* command too short? */ + { + DEBUG_INFO3("Command too short: %d < %d", TxLength, 19+4); + return IFD_NOT_SUPPORTED; + } + + /* On little endian machines we are all set. */ + /* If on big endian machine and caller is using host byte order */ + if ((pvs->ulDataLength + 19 == TxLength) && + (bei2i((unsigned char*)(&pvs->ulDataLength)) == pvs->ulDataLength)) + { + DEBUG_INFO1("Reversing order from big to little endian"); + /* If ulDataLength is big endian, assume others are too */ + /* reverse the byte order for 3 fields */ + pvs->wPINMaxExtraDigit = BSWAP_16(pvs->wPINMaxExtraDigit); + pvs->wLangId = BSWAP_16(pvs->wLangId); + pvs->ulDataLength = BSWAP_32(pvs->ulDataLength); + } + /* At this point we now have the above 3 variables in little endian */ + + if (dw2i(TxBuffer, 15) + 19 != TxLength) /* ulDataLength field coherency */ + { + DEBUG_INFO3("Wrong lengths: %d %d", dw2i(TxBuffer, 15) + 19, TxLength); + return IFD_NOT_SUPPORTED; + } + + /* make sure bEntryValidationCondition is valid + * The Cherry XX44 reader crashes with a wrong value */ + if ((0x00 == TxBuffer[7]) || (TxBuffer[7] > 0x07)) + { + DEBUG_INFO2("Correct bEntryValidationCondition (was 0x%02X)", + TxBuffer[7]); + TxBuffer[7] = 0x02; + } + +#ifdef BOGUS_PINPAD_FIRMWARE + /* bug circumvention for the GemPC Pinpad */ + if ((GEMPCPINPAD == ccid_descriptor->readerID) + || (VEGAALPHA == ccid_descriptor->readerID)) + { + /* the firmware reject the cases: 00h No string and FFh default + * CCID message. The only value supported is 01h (display 1 message) */ + if (0x01 != TxBuffer[8]) + { + DEBUG_INFO2("Correct bNumberMessage for GemPC Pinpad (was %d)", + TxBuffer[8]); + TxBuffer[8] = 0x01; + } + + /* The reader does not support, and actively reject, "max size reached" + * and "timeout occured" validation conditions */ + if (0x02 != TxBuffer[7]) + { + DEBUG_INFO2("Correct bEntryValidationCondition for GemPC Pinpad (was %d)", + TxBuffer[7]); + TxBuffer[7] = 0x02; /* validation key pressed */ + } + + } + + if ((DELLSCRK == ccid_descriptor->readerID) + || (DELLSK == ccid_descriptor->readerID)) + { + /* the firmware rejects the cases: 01h-FEh and FFh default + * CCID message. The only value supported is 00h (no message) */ + if (0x00 != TxBuffer[8]) + { + DEBUG_INFO2("Correct bNumberMessage for Dell keyboard (was %d)", + TxBuffer[8]); + TxBuffer[8] = 0x00; + } + + /* avoid the command rejection because the Enter key is still + * pressed. Wait a bit for the key to be released */ + (void)usleep(250*1000); + } + + if (DELLSK == ccid_descriptor->readerID) + { + /* the 2 bytes of wPINMaxExtraDigit are reversed */ + int tmp; + + tmp = TxBuffer[6]; + TxBuffer[6] = TxBuffer[5]; + TxBuffer[5] = tmp; + DEBUG_INFO1("Correcting wPINMaxExtraDigit for Dell keyboard"); + } +#endif + + /* T=1 Protocol Management for a TPDU reader */ + if ((SCARD_PROTOCOL_T1 == ccid_descriptor->cardProtocol) + && (CCID_CLASS_TPDU == (ccid_descriptor->dwFeatures & CCID_CLASS_EXCHANGE_MASK))) + { + ct_buf_t sbuf; + unsigned char sdata[T1_BUFFER_SIZE]; + + /* Initialize send buffer with the APDU */ + ct_buf_set(&sbuf, + (void *)(TxBuffer + offsetof(PIN_VERIFY_STRUCTURE, abData)), + TxLength - offsetof(PIN_VERIFY_STRUCTURE, abData)); + + /* Create T=1 block */ + (void)t1_build(&((get_ccid_slot(reader_index))->t1), + sdata, 0, T1_I_BLOCK, &sbuf, NULL); + + /* Increment the sequence numbers */ + get_ccid_slot(reader_index)->t1.ns ^= 1; + get_ccid_slot(reader_index)->t1.nr ^= 1; + + /* Copy the generated T=1 block prologue into the teoprologue + * of the CCID command */ + memcpy(TxBuffer + offsetof(PIN_VERIFY_STRUCTURE, bTeoPrologue), + sdata, 3); + } + + /* Build a CCID block from a PC/SC V2.02.05 Part 10 block */ + for (a = 11, b = 0; b < TxLength; b++) + { + if (1 == b) /* bTimeOut2 field */ + /* Ignore the second timeout as there's nothing we can do with + * it currently */ + continue; + + if ((b >= 15) && (b <= 18)) /* ulDataLength field (4 bytes) */ + /* the ulDataLength field is not present in the CCID frame + * so do not copy */ + continue; + + /* copy the CCID block 'verbatim' */ + cmd[a] = TxBuffer[b]; + a++; + } + + /* SPR532 and Case 1 APDU */ + if ((SPR532 == ccid_descriptor->readerID) + /* bmPINBlockString = 0 => PIN length not inserted in APDU */ + && (0 == TxBuffer[3]) + /* case 1 APDU */ + && (4 == TxBuffer[15])) + { + RESPONSECODE return_value; + unsigned char cmd_tmp[] = { 0x80, 0x02, 0x00 }; + unsigned char res_tmp[1]; + unsigned int res_length = sizeof(res_tmp); + + /* the SPR532 will append the PIN code without any padding */ + return_value = CmdEscape(reader_index, cmd_tmp, sizeof(cmd_tmp), + res_tmp, &res_length, 0); + if (return_value != IFD_SUCCESS) + return return_value; + + /* we need to set bSeq again to avoid a "Duplicate frame detected" + * error since the bSeq of CmdEscape is now greater than bSeq set at + * the beginning of this function */ + cmd[6] = (*ccid_descriptor->pbSeq)++; + } + + i2dw(a - 10, cmd + 1); /* CCID message length */ + + old_read_timeout = ccid_descriptor -> readTimeout; + ccid_descriptor -> readTimeout = max(90, TxBuffer[0]+10)*1000; /* at least 90 seconds */ + + res = WritePort(reader_index, a, cmd); + if (STATUS_SUCCESS != res) + { + if (STATUS_NO_SUCH_DEVICE == res) + ret = IFD_NO_SUCH_DEVICE; + else + ret = IFD_COMMUNICATION_ERROR; + goto end; + } + + ret = CCID_Receive(reader_index, RxLength, RxBuffer, NULL); + + /* T=1 Protocol Management for a TPDU reader */ + if ((SCARD_PROTOCOL_T1 == ccid_descriptor->cardProtocol) + && (CCID_CLASS_TPDU == (ccid_descriptor->dwFeatures & CCID_CLASS_EXCHANGE_MASK))) + { + /* timeout and cancel cases are faked by CCID_Receive() */ + if ((2 == *RxLength) + /* the CCID command is rejected or failed */ + || (IFD_SUCCESS != ret)) + { + /* Decrement the sequence numbers since no TPDU was sent */ + get_ccid_slot(reader_index)->t1.ns ^= 1; + get_ccid_slot(reader_index)->t1.nr ^= 1; + } + else + { + /* FIXME: manage T=1 error blocks */ + + /* defines from openct/proto-t1.c */ + #define PCB 1 + #define DATA 3 + #define T1_S_BLOCK 0xC0 + #define T1_S_RESPONSE 0x20 + #define T1_S_TYPE(pcb) ((pcb) & 0x0F) + #define T1_S_WTX 0x03 + + /* WTX S-block */ + if ((T1_S_BLOCK | T1_S_WTX) == RxBuffer[PCB]) + { +/* + * The Swiss health care card sends a WTX request before returning the + * SW code. If the reader is in TPDU the driver must manage the request + * itself. + * + * received: 00 C3 01 09 CB + * openct/proto-t1.c:432:t1_transceive() S-Block request received + * openct/proto-t1.c:489:t1_transceive() CT sent S-block with wtx=9 + * sending: 00 E3 01 09 EB + * openct/proto-t1.c:667:t1_xcv() New timeout at WTX request: 23643 sec + * received: 00 40 02 90 00 D2 +*/ + ct_buf_t tbuf; + unsigned char sblk[1]; /* we only need 1 byte of data */ + t1_state_t *t1 = &get_ccid_slot(reader_index)->t1; + unsigned int slen; + int oldReadTimeout; + + DEBUG_COMM2("CT sent S-block with wtx=%u", RxBuffer[DATA]); + t1->wtx = RxBuffer[DATA]; + + oldReadTimeout = ccid_descriptor->readTimeout; + if (t1->wtx > 1) + { + /* set the new temporary timeout at WTX card request */ + ccid_descriptor->readTimeout *= t1->wtx; + DEBUG_INFO2("New timeout at WTX request: %d sec", + ccid_descriptor->readTimeout); + } + + ct_buf_init(&tbuf, sblk, sizeof(sblk)); + t1->wtx = RxBuffer[DATA]; + ct_buf_putc(&tbuf, RxBuffer[DATA]); + + slen = t1_build(t1, RxBuffer, 0, + T1_S_BLOCK | T1_S_RESPONSE | T1_S_TYPE(RxBuffer[PCB]), + &tbuf, NULL); + + ret = CCID_Transmit(t1 -> lun, slen, RxBuffer, 0, t1->wtx); + if (ret != IFD_SUCCESS) + return ret; + + /* I guess we have at least 6 bytes in RxBuffer */ + *RxLength = 6; + ret = CCID_Receive(reader_index, RxLength, RxBuffer, NULL); + if (ret != IFD_SUCCESS) + return ret; + + /* Restore initial timeout */ + ccid_descriptor->readTimeout = oldReadTimeout; + } + + /* get only the T=1 data */ + memmove(RxBuffer, RxBuffer+3, *RxLength -4); + *RxLength -= 4; /* remove NAD, PCB, LEN and CRC */ + } + } + +end: + ccid_descriptor -> readTimeout = old_read_timeout; + return ret; +} /* SecurePINVerify */ + + +#ifdef BOGUS_PINPAD_FIRMWARE +/***************************************************************************** + * + * has_gemalto_modify_pin_bug + * + ****************************************************************************/ +static int has_gemalto_modify_pin_bug(_ccid_descriptor *ccid_descriptor) +{ + /* Bug not present by default */ + int has_bug = 0; + + /* Covadis Véga-Alpha reader */ + if (VEGAALPHA == ccid_descriptor->readerID) + { + /* This reader has the bug (uses a Gemalto firmware) */ + has_bug = 1; + } + else + { + /* Gemalto reader */ + if ((GET_VENDOR(ccid_descriptor->readerID) == VENDOR_GEMALTO)) + { + has_bug = 1; /* assume it has the bug */ + + if (ccid_descriptor->gemalto_firmware_features && + ccid_descriptor->gemalto_firmware_features->bNumberMessageFix) + { + /* A Gemalto reader has the ModifyPIN structure bug */ + /* unless it explicitly reports it has been fixed */ + has_bug = 0; + } + } + } + + return has_bug; +} /* has_gemalto_modify_pin_bug */ +#endif + +/***************************************************************************** + * + * SecurePINModify + * + ****************************************************************************/ +RESPONSECODE SecurePINModify(unsigned int reader_index, + unsigned char TxBuffer[], unsigned int TxLength, + unsigned char RxBuffer[], unsigned int *RxLength) +{ + unsigned char cmd[11+19+TxLength]; + unsigned int a, b; + PIN_MODIFY_STRUCTURE *pms; + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); + int old_read_timeout; + RESPONSECODE ret; + status_t res; +#ifdef BOGUS_PINPAD_FIRMWARE + int bNumberMessage = 0; /* for GemPC Pinpad */ + int gemalto_modify_pin_bug; +#endif + + pms = (PIN_MODIFY_STRUCTURE *)TxBuffer; + cmd[0] = 0x69; /* Secure */ + cmd[5] = ccid_descriptor->bCurrentSlotIndex; /* slot number */ + cmd[6] = (*ccid_descriptor->pbSeq)++; + cmd[7] = 0; /* bBWI */ + cmd[8] = 0; /* wLevelParameter */ + cmd[9] = 0; + cmd[10] = 1; /* bPINOperation: PIN Modification */ + + if (TxLength < 24+4 /* 4 = APDU size */) /* command too short? */ + { + DEBUG_INFO3("Command too short: %d < %d", TxLength, 24+4); + return IFD_NOT_SUPPORTED; + } + + /* On little endian machines we are all set. */ + /* If on big endian machine and caller is using host byte order */ + if ((pms->ulDataLength + 24 == TxLength) && + (bei2i((unsigned char*)(&pms->ulDataLength)) == pms->ulDataLength)) + { + DEBUG_INFO1("Reversing order from big to little endian"); + /* If ulDataLength is big endian, assume others are too */ + /* reverse the byte order for 3 fields */ + pms->wPINMaxExtraDigit = BSWAP_16(pms->wPINMaxExtraDigit); + pms->wLangId = BSWAP_16(pms->wLangId); + pms->ulDataLength = BSWAP_32(pms->ulDataLength); + } + /* At this point we now have the above 3 variables in little endian */ + + + if (dw2i(TxBuffer, 20) + 24 != TxLength) /* ulDataLength field coherency */ + { + DEBUG_INFO3("Wrong lengths: %d %d", dw2i(TxBuffer, 20) + 24, TxLength); + return IFD_NOT_SUPPORTED; + } + + /* Make sure in the beginning if bNumberMessage is valid or not. + * 0xFF is the default value. */ + if ((TxBuffer[11] > 3) && (TxBuffer[11] != 0xFF)) + { + DEBUG_INFO2("Wrong bNumberMessage: %d", TxBuffer[11]); + return IFD_NOT_SUPPORTED; + } + + /* Make sure bEntryValidationCondition is valid + * The Cherry XX44 reader crashes with a wrong value */ + if ((0x00 == TxBuffer[10]) || (TxBuffer[10] > 0x07)) + { + DEBUG_INFO2("Correct bEntryValidationCondition (was 0x%02X)", + TxBuffer[10]); + TxBuffer[10] = 0x02; + } + +#ifdef BOGUS_PINPAD_FIRMWARE + /* some firmwares are buggy so we try to "correct" the frame */ + /* + * SPR 532 and Cherry ST 2000C has no display but requires _all_ + * bMsgIndex fields with bNumberMessage set to 0. + */ + if ((SPR532 == ccid_descriptor->readerID) + || (CHERRYST2000 == ccid_descriptor->readerID)) + { + TxBuffer[11] = 0x03; /* set bNumberMessage to 3 so that + all bMsgIndex123 are filled */ + TxBuffer[14] = TxBuffer[15] = TxBuffer[16] = 0; /* bMsgIndex123 */ + } + + /* the bug is a bit different than for the Cherry ST 2000C + * with bNumberMessage < 3 the command seems to be accepted + * and the card sends 6B 80 */ + if (CHERRYXX44 == ccid_descriptor->readerID) + { + TxBuffer[11] = 0x03; /* set bNumberMessage to 3 so that + all bMsgIndex123 are filled */ + } + + /* bug circumvention for the GemPC Pinpad */ + if ((GEMPCPINPAD == ccid_descriptor->readerID) + || (VEGAALPHA == ccid_descriptor->readerID)) + { + /* The reader does not support, and actively reject, "max size reached" + * and "timeout occured" validation conditions */ + if (0x02 != TxBuffer[10]) + { + DEBUG_INFO2("Correct bEntryValidationCondition for GemPC Pinpad (was %d)", + TxBuffer[10]); + TxBuffer[10] = 0x02; /* validation key pressed */ + } + } + + gemalto_modify_pin_bug = has_gemalto_modify_pin_bug(ccid_descriptor); + if (gemalto_modify_pin_bug) + { + DEBUG_INFO1("Gemalto CCID Modify Pin Bug"); + + /* The reader requests a value for bMsgIndex2 and bMsgIndex3 + * even if they should not be present. So we fake + * bNumberMessage=3. The real number of messages will be + * corrected later in the code */ + bNumberMessage = TxBuffer[11]; + if (0x03 != TxBuffer[11]) + { + DEBUG_INFO2("Correct bNumberMessage for GemPC Pinpad (was %d)", + TxBuffer[11]); + TxBuffer[11] = 0x03; /* 3 messages */ + } + } +#endif + + /* T=1 Protocol Management for a TPDU reader */ + if ((SCARD_PROTOCOL_T1 == ccid_descriptor->cardProtocol) + && (CCID_CLASS_TPDU == (ccid_descriptor->dwFeatures & CCID_CLASS_EXCHANGE_MASK))) + { + ct_buf_t sbuf; + unsigned char sdata[T1_BUFFER_SIZE]; + + /* Initialize send buffer with the APDU */ + ct_buf_set(&sbuf, + (void *)(TxBuffer + offsetof(PIN_MODIFY_STRUCTURE, abData)), + TxLength - offsetof(PIN_MODIFY_STRUCTURE, abData)); + + /* Create T=1 block */ + (void)t1_build(&((get_ccid_slot(reader_index))->t1), + sdata, 0, T1_I_BLOCK, &sbuf, NULL); + + /* Increment the sequence numbers */ + get_ccid_slot(reader_index)->t1.ns ^= 1; + get_ccid_slot(reader_index)->t1.nr ^= 1; + + /* Copy the generated T=1 block prologue into the teoprologue + * of the CCID command */ + memcpy(TxBuffer + offsetof(PIN_MODIFY_STRUCTURE, bTeoPrologue), + sdata, 3); + } + + /* Build a CCID block from a PC/SC V2.02.05 Part 10 block */ + + /* Do adjustments as needed - CCID spec is not exact with some + * details in the format of the structure, per-reader adaptions + * might be needed. + */ + for (a = 11, b = 0; b < TxLength; b++) + { + if (1 == b) /* bTimeOut2 */ + /* Ignore the second timeout as there's nothing we can do with it + * currently */ + continue; + + if (15 == b) /* bMsgIndex2 */ + { + /* in CCID the bMsgIndex2 is present only if bNumberMessage != 0 */ + if (0 == TxBuffer[11]) + continue; + } + + if (16 == b) /* bMsgIndex3 */ + { + /* in CCID the bMsgIndex3 is present only if bNumberMessage == 3 */ + if (TxBuffer[11] < 3) + continue; + } + + if ((b >= 20) && (b <= 23)) /* ulDataLength field (4 bytes) */ + /* the ulDataLength field is not present in the CCID frame + * so do not copy */ + continue; + + /* copy to the CCID block 'verbatim' */ + cmd[a] = TxBuffer[b]; + a++; + } + +#ifdef BOGUS_PINPAD_FIRMWARE + if ((SPR532 == ccid_descriptor->readerID) + || (CHERRYST2000 == ccid_descriptor->readerID)) + { + cmd[21] = 0x00; /* set bNumberMessage to 0 */ + } + + if (gemalto_modify_pin_bug) + cmd[21] = bNumberMessage; /* restore the real value */ +#endif + + /* We know the size of the CCID message now */ + i2dw(a - 10, cmd + 1); /* command length (includes bPINOperation) */ + + old_read_timeout = ccid_descriptor -> readTimeout; + ccid_descriptor -> readTimeout = max(90, TxBuffer[0]+10)*1000; /* at least 90 seconds */ + + res = WritePort(reader_index, a, cmd); + if (STATUS_SUCCESS != res) + { + if (STATUS_NO_SUCH_DEVICE == res) + ret = IFD_NO_SUCH_DEVICE; + else + ret = IFD_COMMUNICATION_ERROR; + goto end; + } + + ret = CCID_Receive(reader_index, RxLength, RxBuffer, NULL); + + /* T=1 Protocol Management for a TPDU reader */ + if ((SCARD_PROTOCOL_T1 == ccid_descriptor->cardProtocol) + && (CCID_CLASS_TPDU == (ccid_descriptor->dwFeatures & CCID_CLASS_EXCHANGE_MASK))) + { + /* timeout and cancel cases are faked by CCID_Receive() */ + if ((2 == *RxLength) + /* the CCID command is rejected or failed */ + || (IFD_SUCCESS != ret)) + { + /* Decrement the sequence numbers since no TPDU was sent */ + get_ccid_slot(reader_index)->t1.ns ^= 1; + get_ccid_slot(reader_index)->t1.nr ^= 1; + } + else + { + /* get only the T=1 data */ + /* FIXME: manage T=1 error blocks */ + memmove(RxBuffer, RxBuffer+3, *RxLength -4); + *RxLength -= 4; /* remove NAD, PCB, LEN and CRC */ + } + } + +end: + ccid_descriptor -> readTimeout = old_read_timeout; + return ret; +} /* SecurePINModify */ + + +/***************************************************************************** + * + * Escape + * + ****************************************************************************/ +RESPONSECODE CmdEscape(unsigned int reader_index, + const unsigned char TxBuffer[], unsigned int TxLength, + unsigned char RxBuffer[], unsigned int *RxLength, unsigned int timeout) +{ + return CmdEscapeCheck(reader_index, TxBuffer, TxLength, RxBuffer, RxLength, + timeout, FALSE); +} /* CmdEscape */ + + +/***************************************************************************** + * + * Escape (with check of gravity) + * + ****************************************************************************/ +RESPONSECODE CmdEscapeCheck(unsigned int reader_index, + const unsigned char TxBuffer[], unsigned int TxLength, + unsigned char RxBuffer[], unsigned int *RxLength, unsigned int timeout, + int mayfail) +{ + unsigned char *cmd_in, *cmd_out; + status_t res; + unsigned int length_in, length_out; + RESPONSECODE return_value = IFD_SUCCESS; + int old_read_timeout; + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); + + /* a value of 0 do not change the default read timeout */ + if (timeout > 0) + { + old_read_timeout = ccid_descriptor -> readTimeout; + ccid_descriptor -> readTimeout = timeout; + } + +again: + /* allocate buffers */ + length_in = 10 + TxLength; + if (NULL == (cmd_in = malloc(length_in))) + { + return_value = IFD_COMMUNICATION_ERROR; + goto end; + } + + length_out = 10 + *RxLength; + if (NULL == (cmd_out = malloc(length_out))) + { + free(cmd_in); + return_value = IFD_COMMUNICATION_ERROR; + goto end; + } + + cmd_in[0] = 0x6B; /* PC_to_RDR_Escape */ + i2dw(length_in - 10, cmd_in+1); /* dwLength */ + cmd_in[5] = ccid_descriptor->bCurrentSlotIndex; /* slot number */ + cmd_in[6] = (*ccid_descriptor->pbSeq)++; + cmd_in[7] = cmd_in[8] = cmd_in[9] = 0; /* RFU */ + + /* copy the command */ + memcpy(&cmd_in[10], TxBuffer, TxLength); + + res = WritePort(reader_index, length_in, cmd_in); + free(cmd_in); + if (res != STATUS_SUCCESS) + { + free(cmd_out); + if (STATUS_NO_SUCH_DEVICE == res) + return_value = IFD_NO_SUCH_DEVICE; + else + return_value = IFD_COMMUNICATION_ERROR; + goto end; + } + +time_request: + length_out = 10 + *RxLength; + res = ReadPort(reader_index, &length_out, cmd_out); + + /* replay the command if NAK + * This (generally) happens only for the first command sent to the reader + * with the serial protocol so it is not really needed for all the other + * ReadPort() calls */ + if (STATUS_COMM_NAK == res) + { + free(cmd_out); + goto again; + } + + if (res != STATUS_SUCCESS) + { + free(cmd_out); + if (STATUS_NO_SUCH_DEVICE == res) + return_value = IFD_NO_SUCH_DEVICE; + else + return_value = IFD_COMMUNICATION_ERROR; + goto end; + } + + if (length_out < STATUS_OFFSET+1) + { + free(cmd_out); + DEBUG_CRITICAL2("Not enough data received: %d bytes", length_out); + return_value = IFD_COMMUNICATION_ERROR; + goto end; + } + + if (cmd_out[STATUS_OFFSET] & CCID_TIME_EXTENSION) + { + DEBUG_COMM2("Time extension requested: 0x%02X", cmd_out[ERROR_OFFSET]); + goto time_request; + } + + if (cmd_out[STATUS_OFFSET] & CCID_COMMAND_FAILED) + { + /* mayfail: the error may be expected and not fatal */ + ccid_error(mayfail ? PCSC_LOG_INFO : PCSC_LOG_ERROR, + cmd_out[ERROR_OFFSET], __FILE__, __LINE__, __FUNCTION__); /* bError */ + return_value = IFD_COMMUNICATION_ERROR; + } + + /* copy the response */ + length_out = dw2i(cmd_out, 1); + if (length_out > *RxLength) + { + length_out = *RxLength; + return_value = IFD_ERROR_INSUFFICIENT_BUFFER; + } + *RxLength = length_out; + memcpy(RxBuffer, &cmd_out[10], length_out); + + free(cmd_out); + +end: + if (timeout > 0) + ccid_descriptor -> readTimeout = old_read_timeout; + + return return_value; +} /* EscapeCheck */ + + +/***************************************************************************** + * + * CmdPowerOff + * + ****************************************************************************/ +RESPONSECODE CmdPowerOff(unsigned int reader_index) +{ + unsigned char cmd[10]; + status_t res; + unsigned int length; + RESPONSECODE return_value = IFD_SUCCESS; + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); + +#ifndef TWIN_SERIAL + if (PROTOCOL_ICCD_A == ccid_descriptor->bInterfaceProtocol) + { + int r; + + /* PowerOff */ + r = ControlUSB(reader_index, 0x21, 0x63, 0, NULL, 0); + + /* we got an error? */ + if (r < 0) + { + DEBUG_INFO2("ICC Power Off failed: %s", strerror(errno)); + return IFD_COMMUNICATION_ERROR; + } + + return IFD_SUCCESS; + } + + if (PROTOCOL_ICCD_B == ccid_descriptor->bInterfaceProtocol) + { + int r; + unsigned char buffer[3]; + + /* PowerOff */ + r = ControlUSB(reader_index, 0x21, 0x63, 0, NULL, 0); + + /* we got an error? */ + if (r < 0) + { + DEBUG_INFO2("ICC Power Off failed: %s", strerror(errno)); + return IFD_COMMUNICATION_ERROR; + } + + /* SlotStatus */ + r = ControlUSB(reader_index, 0xA1, 0x81, 0, buffer, sizeof(buffer)); + + /* we got an error? */ + if (r < 0) + { + DEBUG_INFO2("ICC SlotStatus failed: %s", strerror(errno)); + return IFD_COMMUNICATION_ERROR; + } + + return IFD_SUCCESS; + } +#endif + + cmd[0] = 0x63; /* IccPowerOff */ + cmd[1] = cmd[2] = cmd[3] = cmd[4] = 0; /* dwLength */ + cmd[5] = ccid_descriptor->bCurrentSlotIndex; /* slot number */ + cmd[6] = (*ccid_descriptor->pbSeq)++; + cmd[7] = cmd[8] = cmd[9] = 0; /* RFU */ + + res = WritePort(reader_index, sizeof(cmd), cmd); + CHECK_STATUS(res) + + length = sizeof(cmd); + res = ReadPort(reader_index, &length, cmd); + CHECK_STATUS(res) + + if (length < STATUS_OFFSET+1) + { + DEBUG_CRITICAL2("Not enough data received: %d bytes", length); + return IFD_COMMUNICATION_ERROR; + } + + if (cmd[STATUS_OFFSET] & CCID_COMMAND_FAILED) + { + ccid_error(PCSC_LOG_ERROR, cmd[ERROR_OFFSET], __FILE__, __LINE__, __FUNCTION__); /* bError */ + return_value = IFD_COMMUNICATION_ERROR; + } + + return return_value; +} /* CmdPowerOff */ + + +/***************************************************************************** + * + * CmdGetSlotStatus + * + ****************************************************************************/ +RESPONSECODE CmdGetSlotStatus(unsigned int reader_index, unsigned char buffer[]) +{ + unsigned char cmd[10]; + status_t res; + unsigned int length; + RESPONSECODE return_value = IFD_SUCCESS; + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); + +#ifndef TWIN_SERIAL + if (PROTOCOL_ICCD_A == ccid_descriptor->bInterfaceProtocol) + { + int r; + unsigned char status[1]; + +again_status: + /* SlotStatus */ + r = ControlUSB(reader_index, 0xA1, 0xA0, 0, status, sizeof(status)); + + /* we got an error? */ + if (r < 0) + { + DEBUG_INFO2("ICC Slot Status failed: %s", strerror(errno)); + if (ENODEV == errno) + return IFD_NO_SUCH_DEVICE; + return IFD_COMMUNICATION_ERROR; + } + + /* busy */ + if (status[0] & 0x40) + { + DEBUG_INFO2("Busy: 0x%02X", status[0]); + (void)usleep(1000 * 10); + goto again_status; + } + + /* simulate a CCID bStatus */ + /* present and active by default */ + buffer[7] = CCID_ICC_PRESENT_ACTIVE; + + /* mute */ + if (0x80 == status[0]) + buffer[7] = CCID_ICC_ABSENT; + + /* store the status for CmdXfrBlockCHAR_T0() */ + buffer[0] = status[0]; + + return IFD_SUCCESS; + } + + if (PROTOCOL_ICCD_B == ccid_descriptor->bInterfaceProtocol) + { + int r; + unsigned char buffer_tmp[3]; + + /* SlotStatus */ + r = ControlUSB(reader_index, 0xA1, 0x81, 0, buffer_tmp, + sizeof(buffer_tmp)); + + /* we got an error? */ + if (r < 0) + { + DEBUG_INFO2("ICC Slot Status failed: %s", strerror(errno)); + if (ENODEV == errno) + return IFD_NO_SUCH_DEVICE; + return IFD_COMMUNICATION_ERROR; + } + + /* simulate a CCID bStatus */ + switch (buffer_tmp[1] & 0x03) + { + case 0: + buffer[7] = CCID_ICC_PRESENT_ACTIVE; + break; + case 1: + buffer[7] = CCID_ICC_PRESENT_INACTIVE; + break; + case 2: + case 3: + buffer[7] = CCID_ICC_ABSENT; + } + return IFD_SUCCESS; + } +#endif + +#ifdef __APPLE__ + if (MICROCHIP_SEC1100 == ccid_descriptor->readerID) + InterruptRead(reader_index, 10); +#endif + + cmd[0] = 0x65; /* GetSlotStatus */ + cmd[1] = cmd[2] = cmd[3] = cmd[4] = 0; /* dwLength */ + cmd[5] = ccid_descriptor->bCurrentSlotIndex; /* slot number */ + cmd[6] = (*ccid_descriptor->pbSeq)++; + cmd[7] = cmd[8] = cmd[9] = 0; /* RFU */ + + res = WritePort(reader_index, sizeof(cmd), cmd); + CHECK_STATUS(res) + + length = SIZE_GET_SLOT_STATUS; + res = ReadPort(reader_index, &length, buffer); + CHECK_STATUS(res) + + if (length < STATUS_OFFSET+1) + { + DEBUG_CRITICAL2("Not enough data received: %d bytes", length); + return IFD_COMMUNICATION_ERROR; + } + + if ((buffer[STATUS_OFFSET] & CCID_COMMAND_FAILED) + /* card absent or mute is not an communication error */ + && (buffer[ERROR_OFFSET] != 0xFE)) + { + return_value = IFD_COMMUNICATION_ERROR; + ccid_error(PCSC_LOG_ERROR, buffer[ERROR_OFFSET], __FILE__, __LINE__, __FUNCTION__); /* bError */ + } + + return return_value; +} /* CmdGetSlotStatus */ + + +/***************************************************************************** + * + * CmdXfrBlock + * + ****************************************************************************/ +RESPONSECODE CmdXfrBlock(unsigned int reader_index, unsigned int tx_length, + unsigned char tx_buffer[], unsigned int *rx_length, + unsigned char rx_buffer[], int protocol) +{ + RESPONSECODE return_value = IFD_SUCCESS; + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); + + /* APDU or TPDU? */ + switch (ccid_descriptor->dwFeatures & CCID_CLASS_EXCHANGE_MASK) + { + case CCID_CLASS_TPDU: + if (protocol == T_0) + return_value = CmdXfrBlockTPDU_T0(reader_index, + tx_length, tx_buffer, rx_length, rx_buffer); + else + if (protocol == T_1) + return_value = CmdXfrBlockTPDU_T1(reader_index, tx_length, + tx_buffer, rx_length, rx_buffer); + else + return_value = IFD_PROTOCOL_NOT_SUPPORTED; + break; + + case CCID_CLASS_SHORT_APDU: + return_value = CmdXfrBlockTPDU_T0(reader_index, + tx_length, tx_buffer, rx_length, rx_buffer); + break; + + case CCID_CLASS_EXTENDED_APDU: + return_value = CmdXfrBlockAPDU_extended(reader_index, + tx_length, tx_buffer, rx_length, rx_buffer); + break; + + case CCID_CLASS_CHARACTER: + if (protocol == T_0) + return_value = CmdXfrBlockCHAR_T0(reader_index, tx_length, + tx_buffer, rx_length, rx_buffer); + else + if (protocol == T_1) + return_value = CmdXfrBlockTPDU_T1(reader_index, tx_length, + tx_buffer, rx_length, rx_buffer); + else + return_value = IFD_PROTOCOL_NOT_SUPPORTED; + break; + + default: + return_value = IFD_COMMUNICATION_ERROR; + } + + return return_value; +} /* CmdXfrBlock */ + + +/***************************************************************************** + * + * CCID_Transmit + * + ****************************************************************************/ +RESPONSECODE CCID_Transmit(unsigned int reader_index, unsigned int tx_length, + const unsigned char tx_buffer[], unsigned short rx_length, unsigned char bBWI) +{ + unsigned char cmd[10+tx_length]; /* CCID + APDU buffer */ + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); + status_t ret; + +#ifndef TWIN_SERIAL + if (PROTOCOL_ICCD_A == ccid_descriptor->bInterfaceProtocol) + { + int r; + + /* Xfr Block */ + r = ControlUSB(reader_index, 0x21, 0x65, 0, + (unsigned char *)tx_buffer, tx_length); + + /* we got an error? */ + if (r < 0) + { + DEBUG_INFO2("ICC Xfr Block failed: %s", strerror(errno)); + return IFD_COMMUNICATION_ERROR; + } + + return IFD_SUCCESS; + } + + if (PROTOCOL_ICCD_B == ccid_descriptor->bInterfaceProtocol) + { + int r; + + /* nul block so we are chaining */ + if (NULL == tx_buffer) + rx_length = 0x10; /* bLevelParameter */ + + /* Xfr Block */ + DEBUG_COMM2("chain parameter: %d", rx_length); + r = ControlUSB(reader_index, 0x21, 0x65, rx_length << 8, + (unsigned char *)tx_buffer, tx_length); + + /* we got an error? */ + if (r < 0) + { + DEBUG_INFO2("ICC Xfr Block failed: %s", strerror(errno)); + return IFD_COMMUNICATION_ERROR; + } + + return IFD_SUCCESS; + } +#endif + + cmd[0] = 0x6F; /* XfrBlock */ + i2dw(tx_length, cmd+1); /* APDU length */ + cmd[5] = ccid_descriptor->bCurrentSlotIndex; /* slot number */ + cmd[6] = (*ccid_descriptor->pbSeq)++; + cmd[7] = bBWI; /* extend block waiting timeout */ + cmd[8] = rx_length & 0xFF; /* Expected length, in character mode only */ + cmd[9] = (rx_length >> 8) & 0xFF; + + memcpy(cmd+10, tx_buffer, tx_length); + + ret = WritePort(reader_index, 10+tx_length, cmd); + CHECK_STATUS(ret) + + return IFD_SUCCESS; +} /* CCID_Transmit */ + + +/***************************************************************************** + * + * CCID_Receive + * + ****************************************************************************/ +RESPONSECODE CCID_Receive(unsigned int reader_index, unsigned int *rx_length, + unsigned char rx_buffer[], unsigned char *chain_parameter) +{ + unsigned char cmd[10+CMD_BUF_SIZE]; /* CCID + APDU buffer */ + unsigned int length; + RESPONSECODE return_value = IFD_SUCCESS; + status_t ret; + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); + unsigned int old_timeout; + +#ifndef TWIN_SERIAL + if (PROTOCOL_ICCD_A == ccid_descriptor->bInterfaceProtocol) + { + unsigned char pcbuffer[SIZE_GET_SLOT_STATUS]; + int r; + + /* wait for ready */ + r = CmdGetSlotStatus(reader_index, pcbuffer); + if (r != IFD_SUCCESS) + return r; + + /* Data Block */ + r = ControlUSB(reader_index, 0xA1, 0x6F, 0, rx_buffer, *rx_length); + + /* we got an error? */ + if (r < 0) + { + DEBUG_INFO2("ICC Data Block failed: %s", strerror(errno)); + return IFD_COMMUNICATION_ERROR; + } + + /* we need to store returned value */ + *rx_length = r; + + return IFD_SUCCESS; + } + + if (PROTOCOL_ICCD_B == ccid_descriptor->bInterfaceProtocol) + { + int r; + unsigned char rx_tmp[4]; + unsigned char *old_rx_buffer = NULL; + int old_rx_length = 0; + + /* read a nul block. buffer need to be at least 4-bytes */ + if (NULL == rx_buffer) + { + rx_buffer = rx_tmp; + *rx_length = sizeof(rx_tmp); + } + + /* the buffer must be 4 bytes minimum for ICCD-B */ + if (*rx_length < 4) + { + old_rx_buffer = rx_buffer; + old_rx_length = *rx_length; + rx_buffer = rx_tmp; + *rx_length = sizeof(rx_tmp); + } + +time_request_ICCD_B: + /* Data Block */ + r = ControlUSB(reader_index, 0xA1, 0x6F, 0, rx_buffer, *rx_length); + + /* we got an error? */ + if (r < 0) + { + DEBUG_INFO2("ICC Data Block failed: %s", strerror(errno)); + return IFD_COMMUNICATION_ERROR; + } + + /* copy from the 4 bytes buffer if used */ + if (old_rx_buffer) + { + memcpy(old_rx_buffer, rx_buffer, min(r, old_rx_length)); + rx_buffer = old_rx_buffer; + } + + /* bResponseType */ + switch (rx_buffer[0]) + { + case 0x00: + /* the abData field contains the information created by the + * preceding request */ + break; + + case 0x40: + /* Status Information */ + ccid_error(PCSC_LOG_ERROR, rx_buffer[2], __FILE__, __LINE__, __FUNCTION__); + return IFD_COMMUNICATION_ERROR; + + case 0x80: + /* Polling */ + { + int delay; + + delay = (rx_buffer[2] << 8) + rx_buffer[1]; + DEBUG_COMM2("Pooling delay: %d", delay); + + if (0 == delay) + /* host select the delay */ + delay = 1; + (void)usleep(delay * 1000 * 10); + goto time_request_ICCD_B; + } + + case 0x01: + case 0x02: + case 0x03: + case 0x10: + /* Extended case + * Only valid for Data Block frames */ + if (chain_parameter) + *chain_parameter = rx_buffer[0]; + break; + + default: + DEBUG_CRITICAL2("Unknown bResponseType: 0x%02X", rx_buffer[0]); + return IFD_COMMUNICATION_ERROR; + } + + memmove(rx_buffer, rx_buffer+1, r-1); + *rx_length = r-1; + + return IFD_SUCCESS; + } +#endif + + /* store the original value of read timeout*/ + old_timeout = ccid_descriptor -> readTimeout; + +time_request: + length = sizeof(cmd); + ret = ReadPort(reader_index, &length, cmd); + + /* restore the original value of read timeout */ + ccid_descriptor -> readTimeout = old_timeout; + CHECK_STATUS(ret) + + if (length < STATUS_OFFSET+1) + { + DEBUG_CRITICAL2("Not enough data received: %d bytes", length); + return IFD_COMMUNICATION_ERROR; + } + + if (cmd[STATUS_OFFSET] & CCID_COMMAND_FAILED) + { + ccid_error(PCSC_LOG_ERROR, cmd[ERROR_OFFSET], __FILE__, __LINE__, __FUNCTION__); /* bError */ + switch (cmd[ERROR_OFFSET]) + { + case 0xEF: /* cancel */ + if (*rx_length < 2) + return IFD_ERROR_INSUFFICIENT_BUFFER; + rx_buffer[0]= 0x64; + rx_buffer[1]= 0x01; + *rx_length = 2; + return IFD_SUCCESS; + + case 0xF0: /* timeout */ + if (*rx_length < 2) + return IFD_ERROR_INSUFFICIENT_BUFFER; + rx_buffer[0]= 0x64; + rx_buffer[1]= 0x00; + *rx_length = 2; + return IFD_SUCCESS; + + case 0xFD: /* Parity error during exchange */ + return IFD_PARITY_ERROR; + + default: + return IFD_COMMUNICATION_ERROR; + } + } + + if (cmd[STATUS_OFFSET] & CCID_TIME_EXTENSION) + { + DEBUG_COMM2("Time extension requested: 0x%02X", cmd[ERROR_OFFSET]); + + /* compute the new value of read timeout */ + if (cmd[ERROR_OFFSET] > 0) + ccid_descriptor -> readTimeout *= cmd[ERROR_OFFSET]; + + DEBUG_COMM2("New timeout: %d ms", ccid_descriptor -> readTimeout); + goto time_request; + } + + /* we have read less (or more) data than the CCID frame says to contain */ + if (length-10 != dw2i(cmd, 1)) + { + DEBUG_CRITICAL3("Can't read all data (%d out of %d expected)", + length-10, dw2i(cmd, 1)); + return_value = IFD_COMMUNICATION_ERROR; + } + + length = dw2i(cmd, 1); + if (length <= *rx_length) + *rx_length = length; + else + { + DEBUG_CRITICAL2("overrun by %d bytes", length - *rx_length); + length = *rx_length; + return_value = IFD_ERROR_INSUFFICIENT_BUFFER; + } + + /* Kobil firmware bug. No support for chaining */ + if (length && (NULL == rx_buffer)) + { + DEBUG_CRITICAL2("Nul block expected but got %d bytes", length); + return_value = IFD_COMMUNICATION_ERROR; + } + else + memcpy(rx_buffer, cmd+10, length); + + /* Extended case? + * Only valid for RDR_to_PC_DataBlock frames */ + if (chain_parameter) + *chain_parameter = cmd[CHAIN_PARAMETER_OFFSET]; + + return return_value; +} /* CCID_Receive */ + + +/***************************************************************************** + * + * CmdXfrBlockAPDU_extended + * + ****************************************************************************/ +static RESPONSECODE CmdXfrBlockAPDU_extended(unsigned int reader_index, + unsigned int tx_length, unsigned char tx_buffer[], unsigned int *rx_length, + unsigned char rx_buffer[]) +{ + RESPONSECODE return_value; + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); + unsigned char chain_parameter; + unsigned int local_tx_length, sent_length; + unsigned int local_rx_length = 0, received_length; + int buffer_overflow = 0; + + if (PROTOCOL_ICCD_B == ccid_descriptor->bInterfaceProtocol) + { + /* length is on 16-bits only + * if a size > 0x1000 is used then usb_control_msg() fails with + * "Invalid argument" */ + if (*rx_length > 0x1000) + *rx_length = 0x1000; + } + + DEBUG_COMM2("T=0 (extended): %d bytes", tx_length); + + /* send the APDU */ + sent_length = 0; + + /* we suppose one command is enough */ + chain_parameter = 0x00; + + local_tx_length = tx_length - sent_length; + if (local_tx_length > CMD_BUF_SIZE) + { + local_tx_length = CMD_BUF_SIZE; + /* the command APDU begins with this command, and continue in the next + * PC_to_RDR_XfrBlock */ + chain_parameter = 0x01; + } + if (local_tx_length > ccid_descriptor->dwMaxCCIDMessageLength-10) + { + local_tx_length = ccid_descriptor->dwMaxCCIDMessageLength-10; + chain_parameter = 0x01; + } + +send_next_block: + return_value = CCID_Transmit(reader_index, local_tx_length, tx_buffer, + chain_parameter, 0); + if (return_value != IFD_SUCCESS) + return return_value; + + sent_length += local_tx_length; + tx_buffer += local_tx_length; + + /* we just sent the last block (0x02) or only one block was needded (0x00) */ + if ((0x02 == chain_parameter) || (0x00 == chain_parameter)) + goto receive_block; + + /* read a nul block */ + return_value = CCID_Receive(reader_index, &local_rx_length, NULL, NULL); + if (return_value != IFD_SUCCESS) + return return_value; + + /* size of the next block */ + if (tx_length - sent_length > local_tx_length) + { + /* the abData field continues a command APDU and + * another block is to follow */ + chain_parameter = 0x03; + } + else + { + /* this abData field continues a command APDU and ends + * the APDU command */ + chain_parameter = 0x02; + + /* last (smaller) block */ + local_tx_length = tx_length - sent_length; + } + + goto send_next_block; + +receive_block: + /* receive the APDU */ + received_length = 0; + +receive_next_block: + local_rx_length = *rx_length - received_length; + return_value = CCID_Receive(reader_index, &local_rx_length, rx_buffer, + &chain_parameter); + if (IFD_ERROR_INSUFFICIENT_BUFFER == return_value) + { + buffer_overflow = 1; + + /* we continue to read all the response APDU */ + return_value = IFD_SUCCESS; + } + + if (return_value != IFD_SUCCESS) + return return_value; + + /* advance in the reiceiving buffer */ + rx_buffer += local_rx_length; + received_length += local_rx_length; + + switch (chain_parameter) + { + /* the response APDU begins and ends in this command */ + case 0x00: + /* this abData field continues the response APDU and ends the response + * APDU */ + case 0x02: + break; + + /* the response APDU begins with this command and is to continue */ + case 0x01: + /* this abData field continues the response APDU and another block is + * to follow */ + case 0x03: + /* empty abData field, continuation of the command APDU is expected in + * next PC_to_RDR_XfrBlock command */ + case 0x10: + /* send a nul block */ + /* set wLevelParameter to 0010h: empty abData field, + * continuation of response APDU is + * expected in the next RDR_to_PC_DataBlock. */ + return_value = CCID_Transmit(reader_index, 0, NULL, 0x10, 0); + if (return_value != IFD_SUCCESS) + return return_value; + + goto receive_next_block; + } + + *rx_length = received_length; + + /* generate an overflow detected by pcscd */ + if (buffer_overflow) + (*rx_length)++; + + return IFD_SUCCESS; +} /* CmdXfrBlockAPDU_extended */ + + +/***************************************************************************** + * + * CmdXfrBlockTPDU_T0 + * + ****************************************************************************/ +static RESPONSECODE CmdXfrBlockTPDU_T0(unsigned int reader_index, + unsigned int tx_length, unsigned char tx_buffer[], unsigned int *rx_length, + unsigned char rx_buffer[]) +{ + RESPONSECODE return_value = IFD_SUCCESS; + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); + + DEBUG_COMM2("T=0: %d bytes", tx_length); + + /* command length too big for CCID reader? */ + if (tx_length > ccid_descriptor->dwMaxCCIDMessageLength-10) + { +#ifdef BOGUS_SCM_FIRMWARE_FOR_dwMaxCCIDMessageLength + if (263 == ccid_descriptor->dwMaxCCIDMessageLength) + { + DEBUG_INFO3("Command too long (%d bytes) for max: %d bytes." + " SCM reader with bogus firmware?", + tx_length, ccid_descriptor->dwMaxCCIDMessageLength-10); + } + else +#endif + { + DEBUG_CRITICAL3("Command too long (%d bytes) for max: %d bytes", + tx_length, ccid_descriptor->dwMaxCCIDMessageLength-10); + return IFD_COMMUNICATION_ERROR; + } + } + + /* command length too big for CCID driver? */ + if (tx_length > CMD_BUF_SIZE) + { + DEBUG_CRITICAL3("Command too long (%d bytes) for max: %d bytes", + tx_length, CMD_BUF_SIZE); + return IFD_COMMUNICATION_ERROR; + } + + return_value = CCID_Transmit(reader_index, tx_length, tx_buffer, 0, 0); + if (return_value != IFD_SUCCESS) + return return_value; + + return CCID_Receive(reader_index, rx_length, rx_buffer, NULL); +} /* CmdXfrBlockTPDU_T0 */ + + +/***************************************************************************** + * + * T0CmdParsing + * + ****************************************************************************/ +static RESPONSECODE T0CmdParsing(unsigned char *cmd, unsigned int cmd_len, + /*@out@*/ unsigned int *exp_len) +{ + *exp_len = 0; + + /* Ref: 7816-4 Annex A */ + switch (cmd_len) + { + case 4: /* Case 1 */ + *exp_len = 2; /* SW1 and SW2 only */ + break; + + case 5: /* Case 2 */ + if (cmd[4] != 0) + *exp_len = cmd[4] + 2; + else + *exp_len = 256 + 2; + break; + + default: /* Case 3 */ + if (cmd_len > 5 && cmd_len == (unsigned int)(cmd[4] + 5)) + *exp_len = 2; /* SW1 and SW2 only */ + else + return IFD_COMMUNICATION_ERROR; /* situation not supported */ + break; + } + + return IFD_SUCCESS; +} /* T0CmdParsing */ + + +/***************************************************************************** + * + * T0ProcACK + * + ****************************************************************************/ +static RESPONSECODE T0ProcACK(unsigned int reader_index, + unsigned char **snd_buf, unsigned int *snd_len, + unsigned char **rcv_buf, unsigned int *rcv_len, + unsigned char **in_buf, unsigned int *in_len, + unsigned int proc_len, int is_rcv) +{ + RESPONSECODE return_value; + unsigned int ret_len; + + DEBUG_COMM2("Enter, is_rcv = %d", is_rcv); + + if (is_rcv == 1) + { /* Receiving mode */ + unsigned int remain_len; + unsigned char tmp_buf[512]; + + if (*in_len > 0) + { /* There are still available data in our buffer */ + if (*in_len >= proc_len) + { + /* We only need to get the data from our buffer */ + memcpy(*rcv_buf, *in_buf, proc_len); + *rcv_buf += proc_len; + *in_buf += proc_len; + *rcv_len += proc_len; + *in_len -= proc_len; + + return IFD_SUCCESS; + } + else + { + /* Move all data in the input buffer to the reply buffer */ + remain_len = proc_len - *in_len; + memcpy(*rcv_buf, *in_buf, *in_len); + *rcv_buf += *in_len; + *in_buf += *in_len; + *rcv_len += *in_len; + *in_len = 0; + } + } + else + /* There is no data in our tmp_buf, + * we have to read all data we needed */ + remain_len = proc_len; + + /* Read the expected data from the smartcard */ + if (*in_len != 0) + { + DEBUG_CRITICAL("*in_len != 0"); + return IFD_COMMUNICATION_ERROR; + } + + memset(tmp_buf, 0, sizeof(tmp_buf)); + +#ifdef O2MICRO_OZ776_PATCH + if((0 != remain_len) && (0 == (remain_len + 10) % 64)) + { + /* special hack to avoid a command of size modulo 64 + * we send two commands instead */ + ret_len = 1; + return_value = CCID_Transmit(reader_index, 0, *snd_buf, ret_len, 0); + if (return_value != IFD_SUCCESS) + return return_value; + return_value = CCID_Receive(reader_index, &ret_len, tmp_buf, NULL); + if (return_value != IFD_SUCCESS) + return return_value; + + ret_len = remain_len - 1; + return_value = CCID_Transmit(reader_index, 0, *snd_buf, ret_len, 0); + if (return_value != IFD_SUCCESS) + return return_value; + return_value = CCID_Receive(reader_index, &ret_len, &tmp_buf[1], + NULL); + if (return_value != IFD_SUCCESS) + return return_value; + + ret_len += 1; + } + else +#endif + { + ret_len = remain_len; + return_value = CCID_Transmit(reader_index, 0, *snd_buf, ret_len, 0); + if (return_value != IFD_SUCCESS) + return return_value; + + return_value = CCID_Receive(reader_index, &ret_len, tmp_buf, NULL); + if (return_value != IFD_SUCCESS) + return return_value; + } + memcpy(*rcv_buf, tmp_buf, remain_len); + *rcv_buf += remain_len, *rcv_len += remain_len; + + /* If ret_len != remain_len, our logic is erroneous */ + if (ret_len != remain_len) + { + DEBUG_CRITICAL("ret_len != remain_len"); + return IFD_COMMUNICATION_ERROR; + } + } + else + { /* Sending mode */ + + return_value = CCID_Transmit(reader_index, proc_len, *snd_buf, 1, 0); + if (return_value != IFD_SUCCESS) + return return_value; + + *snd_len -= proc_len; + *snd_buf += proc_len; + } + + DEBUG_COMM("Exit"); + + return IFD_SUCCESS; +} /* T0ProcACK */ + + +/***************************************************************************** + * + * T0ProcSW1 + * + ****************************************************************************/ +static RESPONSECODE T0ProcSW1(unsigned int reader_index, + unsigned char *rcv_buf, unsigned int *rcv_len, + unsigned char *in_buf, unsigned int in_len) +{ + RESPONSECODE return_value = IFD_SUCCESS; + UCHAR tmp_buf[512]; + unsigned char sw1, sw2; + + /* store the SW1 */ + sw1 = *rcv_buf = *in_buf; + rcv_buf++; + in_buf++; + in_len--; + (*rcv_len)++; + + /* store the SW2 */ + if (0 == in_len) + { + return_value = CCID_Transmit(reader_index, 0, rcv_buf, 1, 0); + if (return_value != IFD_SUCCESS) + return return_value; + + in_len = 1; + + return_value = CCID_Receive(reader_index, &in_len, tmp_buf, NULL); + if (return_value != IFD_SUCCESS) + return return_value; + + in_buf = tmp_buf; + } + sw2 = *rcv_buf = *in_buf; + in_len--; + (*rcv_len)++; + + DEBUG_COMM3("Exit: SW=%02X %02X", sw1, sw2); + + return return_value; +} /* T0ProcSW1 */ + + +/***************************************************************************** + * + * CmdXfrBlockCHAR_T0 + * + ****************************************************************************/ +static RESPONSECODE CmdXfrBlockCHAR_T0(unsigned int reader_index, + unsigned int snd_len, unsigned char snd_buf[], unsigned int *rcv_len, + unsigned char rcv_buf[]) +{ + int is_rcv; + unsigned char cmd[5]; + unsigned char tmp_buf[512]; + unsigned int exp_len, in_len; + unsigned char ins, *in_buf; + RESPONSECODE return_value = IFD_SUCCESS; + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); + + DEBUG_COMM2("T=0: %d bytes", snd_len); + + if (PROTOCOL_ICCD_A == ccid_descriptor->bInterfaceProtocol) + { + unsigned char pcbuffer[SIZE_GET_SLOT_STATUS]; + unsigned int backup_len; + + /* length is on 16-bits only + * if a size > 0x1000 is used then usb_control_msg() fails with + * "Invalid argument" */ + if (*rcv_len > 0x1000) + *rcv_len = 0x1000; + + backup_len = *rcv_len; + + /* Command to send to the smart card (must be 5 bytes) */ + memset(cmd, 0, sizeof(cmd)); + if (snd_len == 4) + { + memcpy(cmd, snd_buf, 4); + snd_buf += 4; + snd_len -= 4; + } + else + { + memcpy(cmd, snd_buf, 5); + snd_buf += 5; + snd_len -= 5; + } + + /* at most 5 bytes */ + return_value = CCID_Transmit(reader_index, 5, cmd, 0, 0); + if (return_value != IFD_SUCCESS) + return return_value; + + /* wait for ready */ + pcbuffer[0] = 0; + return_value = CmdGetSlotStatus(reader_index, pcbuffer); + if (return_value != IFD_SUCCESS) + return return_value; + + if (0x10 == pcbuffer[0]) + { + if (snd_len > 0) + { + /* continue sending the APDU */ + return_value = CCID_Transmit(reader_index, snd_len, snd_buf, + 0, 0); + if (return_value != IFD_SUCCESS) + return return_value; + } + else + { + /* read apdu data */ + return_value = CCID_Receive(reader_index, rcv_len, rcv_buf, + NULL); + if (return_value != IFD_SUCCESS) + return return_value; + } + } + + return_value = CmdGetSlotStatus(reader_index, pcbuffer); + if (return_value != IFD_SUCCESS) + return return_value; + + /* SW1-SW2 available */ + if (0x20 == pcbuffer[0]) + { + /* backup apdu data length */ + /* if no data recieved before - backup length must be zero */ + backup_len = (backup_len == *rcv_len) ? 0 : *rcv_len; + + /* wait for 2 bytes (SW1-SW2) */ + *rcv_len = 2; + + return_value = CCID_Receive(reader_index, rcv_len, + rcv_buf + backup_len, NULL); + if (return_value != IFD_SUCCESS) + DEBUG_CRITICAL("CCID_Receive failed"); + + /* restore recieved length */ + *rcv_len += backup_len; + } + return return_value; + } + + in_buf = tmp_buf; + in_len = 0; + *rcv_len = 0; + + return_value = T0CmdParsing(snd_buf, snd_len, &exp_len); + if (return_value != IFD_SUCCESS) + { + DEBUG_CRITICAL("T0CmdParsing failed"); + return IFD_COMMUNICATION_ERROR; + } + + if (snd_len == 5 || snd_len == 4) + is_rcv = 1; + else + is_rcv = 0; + + /* Command to send to the smart card (must be 5 bytes, from 7816 p.15) */ + memset(cmd, 0, sizeof(cmd)); + if (snd_len == 4) + { + memcpy(cmd, snd_buf, 4); + snd_buf += 4; + snd_len -= 4; + } + else + { + memcpy(cmd, snd_buf, 5); + snd_buf += 5; + snd_len -= 5; + } + + /* Make sure this is a valid command by checking the INS field */ + ins = cmd[1]; + if ((ins & 0xF0) == 0x60 || /* 7816-3 8.3.2 */ + (ins & 0xF0) == 0x90) + { + DEBUG_CRITICAL2("fatal: INS (0x%02X) = 0x6X or 0x9X", ins); + return IFD_COMMUNICATION_ERROR; + } + + return_value = CCID_Transmit(reader_index, 5, cmd, 1, 0); + if (return_value != IFD_SUCCESS) + return return_value; + + while (1) + { + if (in_len == 0) + { + in_len = 1; + return_value = CCID_Receive(reader_index, &in_len, tmp_buf, NULL); + if (return_value != IFD_SUCCESS) + { + DEBUG_CRITICAL("CCID_Receive failed"); + return return_value; + } + in_buf = tmp_buf; + } + if (in_len == 0) + { + /* Suppose we should be able to get data. + * If not, error. Set the time-out error */ + DEBUG_CRITICAL("error: in_len = 0"); + return IFD_RESPONSE_TIMEOUT; + } + + /* Start to process the procedure bytes */ + if (*in_buf == 0x60) + { + in_len = 0; + return_value = CCID_Transmit(reader_index, 0, cmd, 1, 0); + + if (return_value != IFD_SUCCESS) + return return_value; + + continue; + } + else if (*in_buf == ins || *in_buf == (ins ^ 0x01)) + { + /* ACK => To transfer all remaining data bytes */ + in_buf++, in_len--; + if (is_rcv) + return_value = T0ProcACK(reader_index, &snd_buf, &snd_len, + &rcv_buf, rcv_len, &in_buf, &in_len, exp_len - *rcv_len, 1); + else + return_value = T0ProcACK(reader_index, &snd_buf, &snd_len, + &rcv_buf, rcv_len, &in_buf, &in_len, snd_len, 0); + + if (*rcv_len == exp_len) + return return_value; + + continue; + } + else if (*in_buf == (ins ^ 0xFF) || *in_buf == (ins ^ 0xFE)) + { + /* ACK => To transfer 1 remaining bytes */ + in_buf++, in_len--; + return_value = T0ProcACK(reader_index, &snd_buf, &snd_len, + &rcv_buf, rcv_len, &in_buf, &in_len, 1, is_rcv); + + if (return_value != IFD_SUCCESS) + return return_value; + + continue; + } + else if ((*in_buf & 0xF0) == 0x60 || (*in_buf & 0xF0) == 0x90) + /* SW1 */ + return T0ProcSW1(reader_index, rcv_buf, rcv_len, in_buf, in_len); + + /* Error, unrecognized situation found */ + DEBUG_CRITICAL2("Unrecognized Procedure byte (0x%02X) found!", *in_buf); + return_value = IFD_COMMUNICATION_ERROR; + return return_value; + } + + return return_value; +} /* CmdXfrBlockCHAR_T0 */ + + +/***************************************************************************** + * + * CmdXfrBlockTPDU_T1 + * + ****************************************************************************/ +static RESPONSECODE CmdXfrBlockTPDU_T1(unsigned int reader_index, + unsigned int tx_length, unsigned char tx_buffer[], unsigned int *rx_length, + unsigned char rx_buffer[]) +{ + RESPONSECODE return_value = IFD_SUCCESS; + int ret; + + DEBUG_COMM3("T=1: %d and %d bytes", tx_length, *rx_length); + + ret = t1_transceive(&((get_ccid_slot(reader_index)) -> t1), 0, + tx_buffer, tx_length, rx_buffer, *rx_length); + + if (ret < 0) + return_value = IFD_COMMUNICATION_ERROR; + else + *rx_length = ret; + + return return_value; +} /* CmdXfrBlockTPDU_T1 */ + + +/***************************************************************************** + * + * SetParameters + * + ****************************************************************************/ +RESPONSECODE SetParameters(unsigned int reader_index, char protocol, + unsigned int length, unsigned char buffer[]) +{ + unsigned char cmd[10+length]; /* CCID + APDU buffer */ + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); + status_t res; + + DEBUG_COMM2("length: %d bytes", length); + + cmd[0] = 0x61; /* SetParameters */ + i2dw(length, cmd+1); /* APDU length */ + cmd[5] = ccid_descriptor->bCurrentSlotIndex; /* slot number */ + cmd[6] = (*ccid_descriptor->pbSeq)++; + cmd[7] = protocol; /* bProtocolNum */ + cmd[8] = cmd[9] = 0; /* RFU */ + + memcpy(cmd+10, buffer, length); + + res = WritePort(reader_index, 10+length, cmd); + CHECK_STATUS(res) + + length = sizeof(cmd); + res = ReadPort(reader_index, &length, cmd); + CHECK_STATUS(res) + + if (length < STATUS_OFFSET+1) + { + DEBUG_CRITICAL2("Not enough data received: %d bytes", length); + return IFD_COMMUNICATION_ERROR; + } + + if (cmd[STATUS_OFFSET] & CCID_COMMAND_FAILED) + { + ccid_error(PCSC_LOG_ERROR, cmd[ERROR_OFFSET], __FILE__, __LINE__, __FUNCTION__); /* bError */ + if (0x00 == cmd[ERROR_OFFSET]) /* command not supported */ + return IFD_NOT_SUPPORTED; + else + if ((cmd[ERROR_OFFSET] >= 1) && (cmd[ERROR_OFFSET] <= 127)) + /* a parameter is not changeable */ + return IFD_SUCCESS; + else + return IFD_COMMUNICATION_ERROR; + } + + return IFD_SUCCESS; +} /* SetParameters */ + + +/***************************************************************************** + * + * isCharLevel + * + ****************************************************************************/ +int isCharLevel(int reader_index) +{ + return CCID_CLASS_CHARACTER == (get_ccid_descriptor(reader_index)->dwFeatures & CCID_CLASS_EXCHANGE_MASK); +} /* isCharLevel */ + + +/***************************************************************************** + * + * i2dw + * + ****************************************************************************/ +static void i2dw(int value, unsigned char buffer[]) +{ + buffer[0] = value & 0xFF; + buffer[1] = (value >> 8) & 0xFF; + buffer[2] = (value >> 16) & 0xFF; + buffer[3] = (value >> 24) & 0xFF; +} /* i2dw */ + +/***************************************************************************** +* +* bei2i (big endian integer to host order interger) +* +****************************************************************************/ + +static unsigned int bei2i(unsigned char buffer[]) +{ + return (buffer[0]<<24) + (buffer[1]<<16) + (buffer[2]<<8) + buffer[3]; +} diff --git a/src/commands.h b/src/commands.h new file mode 100644 index 0000000..308d784 --- /dev/null +++ b/src/commands.h @@ -0,0 +1,65 @@ +/* + commands.h: Commands sent to the card + Copyright (C) 2003-2009 Ludovic Rousseau + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#define SIZE_GET_SLOT_STATUS 10 +#define STATUS_OFFSET 7 +#define ERROR_OFFSET 8 +#define CHAIN_PARAMETER_OFFSET 9 + +RESPONSECODE CmdPowerOn(unsigned int reader_index, unsigned int * nlength, + /*@out@*/ unsigned char buffer[], int voltage); + +RESPONSECODE SecurePINVerify(unsigned int reader_index, + unsigned char TxBuffer[], unsigned int TxLength, + unsigned char RxBuffer[], unsigned int *RxLength); + +RESPONSECODE SecurePINModify(unsigned int reader_index, + unsigned char TxBuffer[], unsigned int TxLength, + unsigned char RxBuffer[], unsigned int *RxLength); + +RESPONSECODE CmdEscape(unsigned int reader_index, + const unsigned char TxBuffer[], unsigned int TxLength, + unsigned char RxBuffer[], unsigned int *RxLength, unsigned int timeout); + +RESPONSECODE CmdEscapeCheck(unsigned int reader_index, + const unsigned char TxBuffer[], unsigned int TxLength, + unsigned char RxBuffer[], unsigned int *RxLength, unsigned int timeout, + int mayfail); + +RESPONSECODE CmdPowerOff(unsigned int reader_index); + +RESPONSECODE CmdGetSlotStatus(unsigned int reader_index, + /*@out@*/ unsigned char buffer[]); + +RESPONSECODE CmdXfrBlock(unsigned int reader_index, unsigned int tx_length, + unsigned char tx_buffer[], unsigned int *rx_length, + unsigned char rx_buffer[], int protoccol); + +RESPONSECODE CCID_Transmit(unsigned int reader_index, unsigned int tx_length, + const unsigned char tx_buffer[], unsigned short rx_length, unsigned char bBWI); + +RESPONSECODE CCID_Receive(unsigned int reader_index, + /*@out@*/ unsigned int *rx_length, + /*@out@*/ unsigned char rx_buffer[], unsigned char *chain_parameter); + +RESPONSECODE SetParameters(unsigned int reader_index, char protocol, + unsigned int length, unsigned char buffer[]); + +int isCharLevel(int reader_index); + diff --git a/src/convert_version.pl b/src/convert_version.pl new file mode 100755 index 0000000..914fb76 --- /dev/null +++ b/src/convert_version.pl @@ -0,0 +1,32 @@ +#!/usr/bin/env perl + +# convert_version.pl: generate a version integer from a version text +# +# Copyright (C) 2006-2008 Ludovic Rousseau +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA. + +use warnings; +use strict; + +# convert "1.2.3-svn-xyz" in "0x01020003" +my ($major, $minor, $patch) = split /\./, $ARGV[0]; + +# remove the -svn-xyz part if any +$patch =~ s/-.*//; + +printf "0x%02X%02X%04X\n", $major, $minor, $patch; + diff --git a/src/create_Info_plist.pl b/src/create_Info_plist.pl new file mode 100755 index 0000000..a922d3d --- /dev/null +++ b/src/create_Info_plist.pl @@ -0,0 +1,111 @@ +#!/usr/bin/env perl + +# create_Info_plist.pl: generate Info.plist from a template and a +# list of supported readers +# +# Copyright (C) 2004-2009 Ludovic Rousseau +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA. + +use warnings; +use strict; +use Getopt::Long; + +my (@manuf, @product, @name); +my ($manuf, $product, $name); +my $target = "libccid.so"; +my $version = "1.0.0"; +my $class = "CFBundleName + CCIDCLASSDRIVER"; +my $noclass = 0; + +GetOptions( + "target=s" => \$target, + "version=s" => \$version, + "no-class" => \$noclass); + +if ($#ARGV < 1) +{ + print "usage: $0 supported_readers.txt Info.plist + --target=$target + --version=$version\n"; + exit; +} + +open IN, "< $ARGV[0]" or die "Can't open $ARGV[0]: $!"; +while () +{ + next if (m/^#/); + next if (m/^$/); + + chomp; + ($manuf, $product, $name) = split /:/; + # print "m: $manuf, p: $product, n: $name\n"; + push @manuf, $manuf; + push @product, $product; + $name =~ s/&/&/g; + push @name, $name +} +close IN; + +map { $_ = "\t\t$_\n" } @manuf; +map { $_ = "\t\t$_\n" } @product; +map { $_ = "\t\t$_\n" } @name; + +open IN, "< $ARGV[1]" or die "Can't open $ARGV[1]: $!"; + +while () +{ + if (m/MAGIC_VENDOR/) + { + print @manuf; + next; + } + if (m/MAGIC_PRODUCT/) + { + print @product; + next; + } + if (m/MAGIC_FRIENDLYNAME/) + { + print @name; + next; + } + if (m/MAGIC_TARGET/) + { + s/MAGIC_TARGET/$target/; + print; + next; + } + if (m/MAGIC_VERSION/) + { + s/MAGIC_VERSION/$version/; + print; + next; + } + if (m/MAGIC_CLASS/) + { + next if ($noclass); + + s/MAGIC_CLASS/$class/; + print; + next; + } + print; +} + +close IN; + diff --git a/src/debug.c b/src/debug.c new file mode 100644 index 0000000..10db0a0 --- /dev/null +++ b/src/debug.c @@ -0,0 +1,183 @@ +/* + debug.c: log (or not) messages + Copyright (C) 2003-2011 Ludovic Rousseau + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include "misc.h" +#include "debug.h" + +#include +#include +#include +#include +#include + +#ifdef USE_SYSLOG +#include +#endif + +#include "strlcpycat.h" + +#undef LOG_TO_STDERR + +#ifdef LOG_TO_STDERR +#define LOG_STREAM stderr +#else +#define LOG_STREAM stdout +#endif + +void log_msg(const int priority, const char *fmt, ...) +{ + char debug_buffer[3 * 80]; /* up to 3 lines of 80 characters */ + va_list argptr; + static struct timeval last_time = { 0, 0 }; + struct timeval new_time = { 0, 0 }; + struct timeval tmp; + int delta; +#ifdef USE_SYSLOG + int syslog_level; + + switch(priority) + { + case PCSC_LOG_CRITICAL: + syslog_level = LOG_CRIT; + break; + case PCSC_LOG_ERROR: + syslog_level = LOG_ERR; + break; + case PCSC_LOG_INFO: + syslog_level = LOG_INFO; + break; + default: + syslog_level = LOG_DEBUG; + } +#else + const char *color_pfx = "", *color_sfx = ""; + const char *time_pfx = "", *time_sfx = ""; + static int initialized = 0; + static int LogDoColor = 0; + + if (!initialized) + { + char *term; + + initialized = 1; + term = getenv("TERM"); + if (term) + { + const char *terms[] = { "linux", "xterm", "xterm-color", "Eterm", "rxvt", "rxvt-unicode", "xterm-256color" }; + unsigned int i; + + /* for each known color terminal */ + for (i = 0; i < COUNT_OF(terms); i++) + { + /* we found a supported term? */ + if (0 == strcmp(terms[i], term)) + { + LogDoColor = 1; + break; + } + } + } + } + + if (LogDoColor) + { + color_sfx = "\33[0m"; + time_sfx = color_sfx; + time_pfx = "\33[36m"; /* Cyan */ + + switch (priority) + { + case PCSC_LOG_CRITICAL: + color_pfx = "\33[01;31m"; /* bright + Red */ + break; + + case PCSC_LOG_ERROR: + color_pfx = "\33[35m"; /* Magenta */ + break; + + case PCSC_LOG_INFO: + color_pfx = "\33[34m"; /* Blue */ + break; + + case PCSC_LOG_DEBUG: + color_pfx = ""; /* normal (black) */ + color_sfx = ""; + break; + } + } +#endif + + gettimeofday(&new_time, NULL); + if (0 == last_time.tv_sec) + last_time = new_time; + + tmp.tv_sec = new_time.tv_sec - last_time.tv_sec; + tmp.tv_usec = new_time.tv_usec - last_time.tv_usec; + if (tmp.tv_usec < 0) + { + tmp.tv_sec--; + tmp.tv_usec += 1000000; + } + if (tmp.tv_sec < 100) + delta = tmp.tv_sec * 1000000 + tmp.tv_usec; + else + delta = 99999999; + + last_time = new_time; + + va_start(argptr, fmt); + (void)vsnprintf(debug_buffer, sizeof debug_buffer, fmt, argptr); + va_end(argptr); + +#ifdef USE_SYSLOG + syslog(syslog_level, "%.8d %s", delta, debug_buffer); +#else + (void)fprintf(LOG_STREAM, "%s%.8d%s %s%s%s\n", time_pfx, delta, time_sfx, + color_pfx, debug_buffer, color_sfx); + fflush(LOG_STREAM); +#endif +} /* log_msg */ + +void log_xxd(const int priority, const char *msg, const unsigned char *buffer, + const int len) +{ + int i; + char *c, debug_buffer[len*3 + strlen(msg) +1]; + size_t l; + + (void)priority; + + l = strlcpy(debug_buffer, msg, sizeof debug_buffer); + c = debug_buffer + l; + + for (i = 0; i < len; ++i) + { + /* 2 hex characters, 1 space, 1 NUL : total 4 characters */ + (void)snprintf(c, 4, "%02X ", buffer[i]); + c += 3; + } + +#ifdef USE_SYSLOG + syslog(LOG_DEBUG, "%s", debug_buffer); +#else + (void)fprintf(LOG_STREAM, "%s\n", debug_buffer); + fflush(LOG_STREAM); +#endif +} /* log_xxd */ diff --git a/src/debug.h b/src/debug.h new file mode 100644 index 0000000..6508196 --- /dev/null +++ b/src/debug.h @@ -0,0 +1,96 @@ +/* + debug.h: log (or not) messages using syslog + Copyright (C) 2003-2008 Ludovic Rousseau + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +/* + * DEBUG_CRITICAL("text"); + * log "text" if (LogLevel & DEBUG_LEVEL_CRITICAL) is TRUE + * + * DEBUG_CRITICAL2("text: %d", 1234); + * log "text: 1234" if (DEBUG_LEVEL_CRITICAL & DEBUG_LEVEL_CRITICAL) is TRUE + * the format string can be anything printf() can understand + * + * same thing for DEBUG_INFO, DEBUG_COMM and DEBUG_PERIODIC + * + * DEBUG_XXD(msg, buffer, size); + * log a dump of buffer if (LogLevel & DEBUG_LEVEL_COMM) is TRUE + * + */ + +#ifndef _GCDEBUG_H_ +#define _GCDEBUG_H_ + +/* You can't do #ifndef __FUNCTION__ */ +#if !defined(__GNUC__) && !defined(__IBMC__) +#define __FUNCTION__ "" +#endif + +extern int LogLevel; + +#define DEBUG_LEVEL_CRITICAL 1 +#define DEBUG_LEVEL_INFO 2 +#define DEBUG_LEVEL_COMM 4 +#define DEBUG_LEVEL_PERIODIC 8 + +#include /* from pcsc-lite */ + +/* DEBUG_CRITICAL */ +#define DEBUG_CRITICAL(fmt) if (LogLevel & DEBUG_LEVEL_CRITICAL) Log1(PCSC_LOG_CRITICAL, fmt) + +#define DEBUG_CRITICAL2(fmt, data) if (LogLevel & DEBUG_LEVEL_CRITICAL) Log2(PCSC_LOG_CRITICAL, fmt, data) + +#define DEBUG_CRITICAL3(fmt, data1, data2) if (LogLevel & DEBUG_LEVEL_CRITICAL) Log3(PCSC_LOG_CRITICAL, fmt, data1, data2) + +#define DEBUG_CRITICAL4(fmt, data1, data2, data3) if (LogLevel & DEBUG_LEVEL_CRITICAL) Log4(PCSC_LOG_CRITICAL, fmt, data1, data2, data3) + +#define DEBUG_CRITICAL5(fmt, data1, data2, data3, data4) if (LogLevel & DEBUG_LEVEL_CRITICAL) Log5(PCSC_LOG_CRITICAL, fmt, data1, data2, data3, data4) + +/* DEBUG_INFO */ +#define DEBUG_INFO1(fmt) if (LogLevel & DEBUG_LEVEL_INFO) Log1(PCSC_LOG_INFO, fmt) + +#define DEBUG_INFO2(fmt, data) if (LogLevel & DEBUG_LEVEL_INFO) Log2(PCSC_LOG_INFO, fmt, data) + +#define DEBUG_INFO3(fmt, data1, data2) if (LogLevel & DEBUG_LEVEL_INFO) Log3(PCSC_LOG_INFO, fmt, data1, data2) + +#define DEBUG_INFO4(fmt, data1, data2, data3) if (LogLevel & DEBUG_LEVEL_INFO) Log4(PCSC_LOG_INFO, fmt, data1, data2, data3) + +#define DEBUG_INFO5(fmt, data1, data2, data3, data4) if (LogLevel & DEBUG_LEVEL_INFO) Log5(PCSC_LOG_INFO, fmt, data1, data2, data3, data4) + +#define DEBUG_INFO_XXD(msg, buffer, size) if (LogLevel & DEBUG_LEVEL_INFO) LogXxd(PCSC_LOG_INFO, msg, buffer, size) + +/* DEBUG_PERIODIC */ +#define DEBUG_PERIODIC(fmt) if (LogLevel & DEBUG_LEVEL_PERIODIC) Log1(PCSC_LOG_DEBUG, fmt) + +#define DEBUG_PERIODIC2(fmt, data) if (LogLevel & DEBUG_LEVEL_PERIODIC) Log2(PCSC_LOG_DEBUG, fmt, data) + +#define DEBUG_PERIODIC3(fmt, data1, data2) if (LogLevel & DEBUG_LEVEL_PERIODIC) Log3(PCSC_LOG_DEBUG, fmt, data1, data2) + +/* DEBUG_COMM */ +#define DEBUG_COMM(fmt) if (LogLevel & DEBUG_LEVEL_COMM) Log1(PCSC_LOG_DEBUG, fmt) + +#define DEBUG_COMM2(fmt, data) if (LogLevel & DEBUG_LEVEL_COMM) Log2(PCSC_LOG_DEBUG, fmt, data) + +#define DEBUG_COMM3(fmt, data1, data2) if (LogLevel & DEBUG_LEVEL_COMM) Log3(PCSC_LOG_DEBUG, fmt, data1, data2) + +#define DEBUG_COMM4(fmt, data1, data2, data3) if (LogLevel & DEBUG_LEVEL_COMM) Log4(PCSC_LOG_DEBUG, fmt, data1, data2, data3) + +/* DEBUG_XXD */ +#define DEBUG_XXD(msg, buffer, size) if (LogLevel & DEBUG_LEVEL_COMM) LogXxd(PCSC_LOG_DEBUG, msg, buffer, size) + +#endif + diff --git a/src/defs.h b/src/defs.h new file mode 100644 index 0000000..6523de1 --- /dev/null +++ b/src/defs.h @@ -0,0 +1,111 @@ +/* + defs.h: + Copyright (C) 2003-2010 Ludovic Rousseau + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#define max( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) ) + +#include + +#include "openct/proto-t1.h" + +typedef struct CCID_DESC +{ + /* + * ATR + */ + int nATRLength; + unsigned char pcATRBuffer[MAX_ATR_SIZE]; + + /* + * Card state + */ + unsigned char bPowerFlags; + + /* + * T=1 Protocol context + */ + t1_state_t t1; + + /* reader name passed to IFDHCreateChannelByName() */ + char *readerName; +} CcidDesc; + +typedef enum { + STATUS_NO_SUCH_DEVICE = 0xF9, + STATUS_SUCCESS = 0xFA, + STATUS_UNSUCCESSFUL = 0xFB, + STATUS_COMM_ERROR = 0xFC, + STATUS_DEVICE_PROTOCOL_ERROR = 0xFD, + STATUS_COMM_NAK = 0xFE, + STATUS_SECONDARY_SLOT = 0xFF +} status_t; + +/* Powerflag (used to detect quick insertion removals unnoticed by the + * resource manager) */ +/* Initial value */ +#define POWERFLAGS_RAZ 0x00 +/* Flag set when a power up has been requested */ +#define MASK_POWERFLAGS_PUP 0x01 +/* Flag set when a power down is requested */ +#define MASK_POWERFLAGS_PDWN 0x02 + +/* Communication buffer size (max=adpu+Lc+data+Le) + * we use a 64kB for extended APDU on APDU mode readers */ +#define CMD_BUF_SIZE (4 +3 +64*1024 +3) + +/* Protocols */ +#define T_0 0 +#define T_1 1 + +/* Default communication read timeout in milliseconds */ +#define DEFAULT_COM_READ_TIMEOUT (3*1000) + +/* DWORD type formating */ +#ifdef __APPLE__ +/* Apple defines DWORD as uint32_t */ +#define DWORD_X "%X" +#define DWORD_D "%d" +#else +/* pcsc-lite defines DWORD as unsigned long */ +#define DWORD_X "%lX" +#define DWORD_D "%ld" +#endif + +/* + * communication ports abstraction + */ +#ifdef TWIN_SERIAL + +#define OpenPortByName OpenSerialByName +#define OpenPort OpenSerial +#define ClosePort CloseSerial +#define ReadPort ReadSerial +#define WritePort WriteSerial +#include "ccid_serial.h" + +#else + +#define OpenPortByName OpenUSBByName +#define OpenPort OpenUSB +#define ClosePort CloseUSB +#define ReadPort ReadUSB +#define WritePort WriteUSB +#include "ccid_usb.h" + +#endif + diff --git a/src/ifdhandler.c b/src/ifdhandler.c new file mode 100644 index 0000000..5f9ec41 --- /dev/null +++ b/src/ifdhandler.c @@ -0,0 +1,2194 @@ +/* + ifdhandler.c: IFDH API + Copyright (C) 2003-2010 Ludovic Rousseau + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include + +#ifdef HAVE_STDIO_H +#include +#endif +#ifdef HAVE_STRING_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif + +#include "misc.h" +#include +#include +#include + +#include "ccid.h" +#include "defs.h" +#include "ccid_ifdhandler.h" +#include "debug.h" +#include "utils.h" +#include "commands.h" +#include "towitoko/atr.h" +#include "towitoko/pps.h" +#include "parser.h" +#include "strlcpycat.h" + +#ifdef HAVE_PTHREAD +#include +#endif + +/* Array of structures to hold the ATR and other state value of each slot */ +static CcidDesc CcidSlots[CCID_DRIVER_MAX_READERS]; + +/* global mutex */ +#ifdef HAVE_PTHREAD +static pthread_mutex_t ifdh_context_mutex = PTHREAD_MUTEX_INITIALIZER; +#endif + +int LogLevel = DEBUG_LEVEL_CRITICAL | DEBUG_LEVEL_INFO; +int DriverOptions = 0; +int PowerOnVoltage = -1; +static int DebugInitialized = FALSE; + +/* local functions */ +static void init_driver(void); +static char find_baud_rate(unsigned int baudrate, unsigned int *list); +static unsigned int T0_card_timeout(double f, double d, int TC1, int TC2, + int clock_frequency); +static unsigned int T1_card_timeout(double f, double d, int TC1, int BWI, + int CWI, int clock_frequency); +static int get_IFSC(ATR_t *atr, int *i); + +static void FreeChannel(int reader_index) +{ +#ifdef HAVE_PTHREAD + (void)pthread_mutex_lock(&ifdh_context_mutex); +#endif + + (void)ClosePort(reader_index); + + free(CcidSlots[reader_index].readerName); + memset(&CcidSlots[reader_index], 0, sizeof(CcidSlots[reader_index])); + + ReleaseReaderIndex(reader_index); + +#ifdef HAVE_PTHREAD + (void)pthread_mutex_unlock(&ifdh_context_mutex); +#endif +} + +static RESPONSECODE CreateChannelByNameOrChannel(DWORD Lun, + LPSTR lpcDevice, DWORD Channel) +{ + RESPONSECODE return_value = IFD_SUCCESS; + int reader_index; + status_t ret; + + if (! DebugInitialized) + init_driver(); + + if (lpcDevice) + { + DEBUG_INFO3("Lun: " DWORD_X ", device: %s", Lun, lpcDevice); + } + else + { + DEBUG_INFO3("Lun: " DWORD_X ", Channel: " DWORD_X, Lun, Channel); + } + +#ifdef HAVE_PTHREAD + (void)pthread_mutex_lock(&ifdh_context_mutex); +#endif + + reader_index = GetNewReaderIndex(Lun); + +#ifdef HAVE_PTHREAD + (void)pthread_mutex_unlock(&ifdh_context_mutex); +#endif + + if (-1 == reader_index) + return IFD_COMMUNICATION_ERROR; + + /* Reset ATR buffer */ + CcidSlots[reader_index].nATRLength = 0; + *CcidSlots[reader_index].pcATRBuffer = '\0'; + + /* Reset PowerFlags */ + CcidSlots[reader_index].bPowerFlags = POWERFLAGS_RAZ; + + /* reader name */ + if (lpcDevice) + CcidSlots[reader_index].readerName = strdup(lpcDevice); + else + CcidSlots[reader_index].readerName = strdup("no name"); + + if (lpcDevice) + ret = OpenPortByName(reader_index, lpcDevice); + else + ret = OpenPort(reader_index, Channel); + + if (ret != STATUS_SUCCESS) + { + DEBUG_CRITICAL("failed"); + if (STATUS_NO_SUCH_DEVICE == ret) + return_value = IFD_NO_SUCH_DEVICE; + else + return_value = IFD_COMMUNICATION_ERROR; + + goto error; + } + else + { + unsigned char pcbuffer[SIZE_GET_SLOT_STATUS]; + unsigned int oldReadTimeout; + RESPONSECODE cmd_ret; + _ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index); + + /* Maybe we have a special treatment for this reader */ + (void)ccid_open_hack_pre(reader_index); + + /* Try to access the reader */ + /* This "warm up" sequence is sometimes needed when pcscd is + * restarted with the reader already connected. We get some + * "usb_bulk_read: Resource temporarily unavailable" on the first + * few tries. It is an empirical hack */ + + /* The reader may have to start here so give it some time */ + cmd_ret = CmdGetSlotStatus(reader_index, pcbuffer); + if (IFD_NO_SUCH_DEVICE == cmd_ret) + { + return_value = cmd_ret; + goto error; + } + + /* save the current read timeout computed from card capabilities */ + oldReadTimeout = ccid_descriptor->readTimeout; + + /* 100 ms just to resync the USB toggle bits */ + /* Do not use a fixed 100 ms value but compute it from the + * default timeout. It is now possible to use a different value + * by changing readTimeout in ccid_open_hack_pre() */ + ccid_descriptor->readTimeout = ccid_descriptor->readTimeout * 100.0 / DEFAULT_COM_READ_TIMEOUT; + + if ((IFD_COMMUNICATION_ERROR == CmdGetSlotStatus(reader_index, pcbuffer)) + && (IFD_COMMUNICATION_ERROR == CmdGetSlotStatus(reader_index, pcbuffer))) + { + DEBUG_CRITICAL("failed"); + return_value = IFD_COMMUNICATION_ERROR; + } + else + { + /* Maybe we have a special treatment for this reader */ + return_value = ccid_open_hack_post(reader_index); + if (return_value != IFD_SUCCESS) + { + DEBUG_CRITICAL("failed"); + } + } + + /* set back the old timeout */ + ccid_descriptor->readTimeout = oldReadTimeout; + } + +error: + if (return_value != IFD_SUCCESS) + { + /* release the allocated resources */ + FreeChannel(reader_index); + } + + return return_value; +} /* CreateChannelByNameOrChannel */ + + +EXTERNAL RESPONSECODE IFDHCreateChannelByName(DWORD Lun, LPSTR lpcDevice) +{ + return CreateChannelByNameOrChannel(Lun, lpcDevice, -1); +} + +EXTERNAL RESPONSECODE IFDHCreateChannel(DWORD Lun, DWORD Channel) +{ + /* + * Lun - Logical Unit Number, use this for multiple card slots or + * multiple readers. 0xXXXXYYYY - XXXX multiple readers, YYYY multiple + * slots. The resource manager will set these automatically. By + * default the resource manager loads a new instance of the driver so + * if your reader does not have more than one smartcard slot then + * ignore the Lun in all the functions. Future versions of PC/SC might + * support loading multiple readers through one instance of the driver + * in which XXXX would be important to implement if you want this. + */ + + /* + * Channel - Channel ID. This is denoted by the following: 0x000001 - + * /dev/pcsc/1 0x000002 - /dev/pcsc/2 0x000003 - /dev/pcsc/3 + * + * USB readers may choose to ignore this parameter and query the bus + * for the particular reader. + */ + + /* + * This function is required to open a communications channel to the + * port listed by Channel. For example, the first serial reader on + * COM1 would link to /dev/pcsc/1 which would be a sym link to + * /dev/ttyS0 on some machines This is used to help with intermachine + * independance. + * + * Once the channel is opened the reader must be in a state in which + * it is possible to query IFDHICCPresence() for card status. + * + * returns: + * + * IFD_SUCCESS IFD_COMMUNICATION_ERROR + */ + return CreateChannelByNameOrChannel(Lun, NULL, Channel); +} /* IFDHCreateChannel */ + + +EXTERNAL RESPONSECODE IFDHCloseChannel(DWORD Lun) +{ + /* + * This function should close the reader communication channel for the + * particular reader. Prior to closing the communication channel the + * reader should make sure the card is powered down and the terminal + * is also powered down. + * + * returns: + * + * IFD_SUCCESS IFD_COMMUNICATION_ERROR + */ + int reader_index; + + if (-1 == (reader_index = LunToReaderIndex(Lun))) + return IFD_COMMUNICATION_ERROR; + + DEBUG_INFO3("%s (lun: " DWORD_X ")", CcidSlots[reader_index].readerName, + Lun); + + /* Restore the default timeout + * No need to wait too long if the reader disapeared */ + get_ccid_descriptor(reader_index)->readTimeout = DEFAULT_COM_READ_TIMEOUT; + + (void)CmdPowerOff(reader_index); + /* No reader status check, if it failed, what can you do ? :) */ + + FreeChannel(reader_index); + + return IFD_SUCCESS; +} /* IFDHCloseChannel */ + + +#if !defined(TWIN_SERIAL) +static RESPONSECODE IFDHPolling(DWORD Lun, int timeout) +{ + int reader_index; + + if (-1 == (reader_index = LunToReaderIndex(Lun))) + return IFD_COMMUNICATION_ERROR; + + /* log only if DEBUG_LEVEL_PERIODIC is set */ + if (LogLevel & DEBUG_LEVEL_PERIODIC) + DEBUG_INFO4("%s (lun: " DWORD_X ") %d ms", + CcidSlots[reader_index].readerName, Lun, timeout); + + return InterruptRead(reader_index, timeout); +} + +/* on an ICCD device the card is always inserted + * so no card movement will ever happen: just do nothing */ +static RESPONSECODE IFDHSleep(DWORD Lun, int timeout) +{ + int reader_index; + + if (-1 == (reader_index = LunToReaderIndex(Lun))) + return IFD_COMMUNICATION_ERROR; + + DEBUG_INFO4("%s (lun: " DWORD_X ") %d ms", + CcidSlots[reader_index].readerName, Lun, timeout); + + /* just sleep for 5 seconds since the polling thread is NOT killable + * so pcscd event thread must loop to exit cleanly + * + * Once the driver (libusb in fact) will support + * TAG_IFD_POLLING_THREAD_KILLABLE then we could use a much longer delay + * and be killed before pcscd exits + */ + (void)usleep(timeout * 1000); + return IFD_SUCCESS; +} + +static RESPONSECODE IFDHStopPolling(DWORD Lun) +{ + int reader_index; + + if (-1 == (reader_index = LunToReaderIndex(Lun))) + return IFD_COMMUNICATION_ERROR; + + DEBUG_INFO3("%s (lun: " DWORD_X ")", + CcidSlots[reader_index].readerName, Lun); + + (void)InterruptStop(reader_index); + return IFD_SUCCESS; +} +#endif + + +EXTERNAL RESPONSECODE IFDHGetCapabilities(DWORD Lun, DWORD Tag, + PDWORD Length, PUCHAR Value) +{ + /* + * This function should get the slot/card capabilities for a + * particular slot/card specified by Lun. Again, if you have only 1 + * card slot and don't mind loading a new driver for each reader then + * ignore Lun. + * + * Tag - the tag for the information requested example: TAG_IFD_ATR - + * return the Atr and its size (required). these tags are defined in + * ifdhandler.h + * + * Length - the length of the returned data Value - the value of the + * data + * + * returns: + * + * IFD_SUCCESS IFD_ERROR_TAG + */ + int reader_index; + RESPONSECODE return_value = IFD_SUCCESS; + + if (-1 == (reader_index = LunToReaderIndex(Lun))) + return IFD_COMMUNICATION_ERROR; + + DEBUG_INFO4("tag: 0x" DWORD_X ", %s (lun: " DWORD_X ")", Tag, + CcidSlots[reader_index].readerName, Lun); + + switch (Tag) + { + case TAG_IFD_ATR: + case SCARD_ATTR_ATR_STRING: + /* If Length is not zero, powerICC has been performed. + * Otherwise, return NULL pointer + * Buffer size is stored in *Length */ + if ((int)*Length >= CcidSlots[reader_index].nATRLength) + { + *Length = CcidSlots[reader_index].nATRLength; + + memcpy(Value, CcidSlots[reader_index].pcATRBuffer, *Length); + } + else + return_value = IFD_ERROR_INSUFFICIENT_BUFFER; + break; + + case SCARD_ATTR_ICC_INTERFACE_STATUS: + *Length = 1; + if (IFD_ICC_PRESENT == IFDHICCPresence(Lun)) + /* nonzero if contact is active */ + *Value = 1; + else + /* smart card electrical contact is not active */ + *Value = 0; + break; + + case SCARD_ATTR_ICC_PRESENCE: + *Length = 1; + /* Single byte indicating smart card presence: + * 0 = not present + * 1 = card present but not swallowed (applies only if + * reader supports smart card swallowing) + * 2 = card present (and swallowed if reader supports smart + * card swallowing) + * 4 = card confiscated. */ + if (IFD_ICC_PRESENT == IFDHICCPresence(Lun)) + /* Card present */ + *Value = 2; + else + /* Not present */ + *Value = 0; + break; + +#ifdef HAVE_PTHREAD + case TAG_IFD_SIMULTANEOUS_ACCESS: + if (*Length >= 1) + { + *Length = 1; + *Value = CCID_DRIVER_MAX_READERS; + } + else + return_value = IFD_ERROR_INSUFFICIENT_BUFFER; + break; + + case TAG_IFD_THREAD_SAFE: + if (*Length >= 1) + { + *Length = 1; +#ifdef __APPLE__ + *Value = 0; /* Apple pcscd is bogus (rdar://problem/5697388) */ +#else + *Value = 1; /* Can talk to multiple readers at the same time */ +#endif + } + else + return_value = IFD_ERROR_INSUFFICIENT_BUFFER; + break; +#endif + + case TAG_IFD_SLOTS_NUMBER: + if (*Length >= 1) + { + *Length = 1; + *Value = 1 + get_ccid_descriptor(reader_index) -> bMaxSlotIndex; +#ifdef USE_COMPOSITE_AS_MULTISLOT + { + /* On MacOS X or Linux+libusb we can simulate a + * composite device with 2 CCID interfaces by a + * multi-slot reader */ + int readerID = get_ccid_descriptor(reader_index) -> readerID; + + /* 2 CCID interfaces */ + if ((GEMALTOPROXDU == readerID) + || (GEMALTOPROXSU == readerID) + || (HID_OMNIKEY_5422 == readerID)) + *Value = 2; + + /* 3 CCID interfaces */ + if (FEITIANR502DUAL == readerID) + *Value = 3; + } +#endif + DEBUG_INFO2("Reader supports %d slot(s)", *Value); + } + else + return_value = IFD_ERROR_INSUFFICIENT_BUFFER; + break; + + case TAG_IFD_SLOT_THREAD_SAFE: + if (*Length >= 1) + { + *Length = 1; + *Value = 0; /* Can NOT talk to multiple slots at the same time */ + } + else + return_value = IFD_ERROR_INSUFFICIENT_BUFFER; + break; + + case SCARD_ATTR_VENDOR_IFD_VERSION: + { + int IFD_bcdDevice = get_ccid_descriptor(reader_index)->IFD_bcdDevice; + + /* Vendor-supplied interface device version (DWORD in the form + * 0xMMmmbbbb where MM = major version, mm = minor version, and + * bbbb = build number). */ + *Length = 4; + if (Value) + *(uint32_t *)Value = IFD_bcdDevice << 16; + } + break; + + case SCARD_ATTR_VENDOR_NAME: + { + const char *sIFD_iManufacturer = get_ccid_descriptor(reader_index) -> sIFD_iManufacturer; + + if (sIFD_iManufacturer) + { + strlcpy((char *)Value, sIFD_iManufacturer, *Length); + *Length = strlen((char *)Value) +1; + } + else + { + /* not supported */ + *Length = 0; + } + } + break; + + case SCARD_ATTR_MAXINPUT: + *Length = sizeof(uint32_t); + if (Value) + *(uint32_t *)Value = get_ccid_descriptor(reader_index) -> dwMaxCCIDMessageLength -10; + break; + +#if !defined(TWIN_SERIAL) + case TAG_IFD_POLLING_THREAD_WITH_TIMEOUT: + { + _ccid_descriptor *ccid_desc; + + /* default value: not supported */ + *Length = 0; + + ccid_desc = get_ccid_descriptor(reader_index); + + /* CCID and not ICCD */ + if ((PROTOCOL_CCID == ccid_desc -> bInterfaceProtocol) + /* 3 end points */ + && (3 == ccid_desc -> bNumEndpoints)) + { + *Length = sizeof(void *); + if (Value) + *(void **)Value = IFDHPolling; + } + + if ((PROTOCOL_ICCD_A == ccid_desc->bInterfaceProtocol) + || (PROTOCOL_ICCD_B == ccid_desc->bInterfaceProtocol)) + { + *Length = sizeof(void *); + if (Value) + *(void **)Value = IFDHSleep; + } + } + break; + + case TAG_IFD_POLLING_THREAD_KILLABLE: + { + _ccid_descriptor *ccid_desc; + + /* default value: not supported */ + *Length = 0; + + ccid_desc = get_ccid_descriptor(reader_index); + if ((PROTOCOL_ICCD_A == ccid_desc->bInterfaceProtocol) + || (PROTOCOL_ICCD_B == ccid_desc->bInterfaceProtocol)) + { + *Length = 1; /* 1 char */ + if (Value) + *Value = 1; /* TRUE */ + } + } + break; + + case TAG_IFD_STOP_POLLING_THREAD: + { + _ccid_descriptor *ccid_desc; + + /* default value: not supported */ + *Length = 0; + + ccid_desc = get_ccid_descriptor(reader_index); + /* CCID and not ICCD */ + if ((PROTOCOL_CCID == ccid_desc -> bInterfaceProtocol) + /* 3 end points */ + && (3 == ccid_desc -> bNumEndpoints)) + { + *Length = sizeof(void *); + if (Value) + *(void **)Value = IFDHStopPolling; + } + } + break; +#endif + + case SCARD_ATTR_VENDOR_IFD_SERIAL_NO: + { + _ccid_descriptor *ccid_desc; + + ccid_desc = get_ccid_descriptor(reader_index); + if (ccid_desc->sIFD_serial_number) + { + strlcpy((char *)Value, ccid_desc->sIFD_serial_number, *Length); + *Length = strlen((char *)Value)+1; + } + else + { + /* not supported */ + *Length = 0; + } + } + break; + + default: + return_value = IFD_ERROR_TAG; + } + + return return_value; +} /* IFDHGetCapabilities */ + + +EXTERNAL RESPONSECODE IFDHSetCapabilities(DWORD Lun, DWORD Tag, + /*@unused@*/ DWORD Length, /*@unused@*/ PUCHAR Value) +{ + /* + * This function should set the slot/card capabilities for a + * particular slot/card specified by Lun. Again, if you have only 1 + * card slot and don't mind loading a new driver for each reader then + * ignore Lun. + * + * Tag - the tag for the information needing set + * + * Length - the length of the returned data Value - the value of the + * data + * + * returns: + * + * IFD_SUCCESS IFD_ERROR_TAG IFD_ERROR_SET_FAILURE + * IFD_ERROR_VALUE_READ_ONLY + */ + + (void)Length; + (void)Value; + + int reader_index; + + if (-1 == (reader_index = LunToReaderIndex(Lun))) + return IFD_COMMUNICATION_ERROR; + + DEBUG_INFO4("tag: 0x" DWORD_X ", %s (lun: " DWORD_X ")", Tag, + CcidSlots[reader_index].readerName, Lun); + + return IFD_NOT_SUPPORTED; +} /* IFDHSetCapabilities */ + + +EXTERNAL RESPONSECODE IFDHSetProtocolParameters(DWORD Lun, DWORD Protocol, + UCHAR Flags, UCHAR PTS1, UCHAR PTS2, UCHAR PTS3) +{ + /* + * This function should set the PTS of a particular card/slot using + * the three PTS parameters sent + * + * Protocol - SCARD_PROTOCOL_T0 or SCARD_PROTOCOL_T1 + * Flags - Logical OR of possible values: + * IFD_NEGOTIATE_PTS1 + * IFD_NEGOTIATE_PTS2 + * IFD_NEGOTIATE_PTS3 + * to determine which PTS values to negotiate. + * PTS1,PTS2,PTS3 - PTS Values. + * + * returns: + * IFD_SUCCESS + * IFD_ERROR_PTS_FAILURE + * IFD_COMMUNICATION_ERROR + * IFD_PROTOCOL_NOT_SUPPORTED + */ + + BYTE pps[PPS_MAX_LENGTH]; + ATR_t atr; + unsigned int len; + int convention; + int reader_index; + int atr_ret; + + /* Set ccid desc params */ + CcidDesc *ccid_slot; + _ccid_descriptor *ccid_desc; + + if (-1 == (reader_index = LunToReaderIndex(Lun))) + return IFD_COMMUNICATION_ERROR; + + DEBUG_INFO4("protocol T=" DWORD_D ", %s (lun: " DWORD_X ")", + Protocol-SCARD_PROTOCOL_T0, CcidSlots[reader_index].readerName, Lun); + + /* Set to zero buffer */ + memset(pps, 0, sizeof(pps)); + memset(&atr, 0, sizeof(atr)); + + /* Get ccid params */ + ccid_slot = get_ccid_slot(reader_index); + ccid_desc = get_ccid_descriptor(reader_index); + + /* Do not send CCID command SetParameters or PPS to the CCID + * The CCID will do this himself */ + if (ccid_desc->dwFeatures & CCID_CLASS_AUTO_PPS_PROP) + { + DEBUG_COMM2("Timeout: %d ms", ccid_desc->readTimeout); + goto end; + } + + /* Get ATR of the card */ + atr_ret = ATR_InitFromArray(&atr, ccid_slot->pcATRBuffer, + ccid_slot->nATRLength); + if (ATR_MALFORMED == atr_ret) + return IFD_PROTOCOL_NOT_SUPPORTED; + + if (SCARD_PROTOCOL_T0 == Protocol) + pps[1] |= ATR_PROTOCOL_TYPE_T0; + else + if (SCARD_PROTOCOL_T1 == Protocol) + pps[1] |= ATR_PROTOCOL_TYPE_T1; + else + return IFD_PROTOCOL_NOT_SUPPORTED; + + /* TA2 present -> specific mode */ + if (atr.ib[1][ATR_INTERFACE_BYTE_TA].present) + { + if (pps[1] != (atr.ib[1][ATR_INTERFACE_BYTE_TA].value & 0x0F)) + { + /* wrong protocol */ + DEBUG_COMM3("Specific mode in T=%d and T=%d requested", + atr.ib[1][ATR_INTERFACE_BYTE_TA].value & 0x0F, pps[1]); + + return IFD_PROTOCOL_NOT_SUPPORTED; + } + } + + /* TCi (i>2) indicates CRC instead of LRC */ + if (SCARD_PROTOCOL_T1 == Protocol) + { + t1_state_t *t1 = &(ccid_slot -> t1); + int i; + + /* TCi (i>2) present? */ + for (i=2; i2) must be used */ + break; + } + } + + /* PTS1? */ + if (Flags & IFD_NEGOTIATE_PTS1) + { + /* just use the value passed in argument */ + pps[1] |= 0x10; /* PTS1 presence */ + pps[2] = PTS1; + } + else + { + /* TA1 present */ + if (atr.ib[0][ATR_INTERFACE_BYTE_TA].present) + { + unsigned int card_baudrate; + unsigned int default_baudrate; + double f, d; + + (void)ATR_GetParameter(&atr, ATR_PARAMETER_D, &d); + (void)ATR_GetParameter(&atr, ATR_PARAMETER_F, &f); + + /* may happen with non ISO cards */ + if ((0 == f) || (0 == d)) + { + /* values for TA1=11 */ + f = 372; + d = 1; + } + + /* Baudrate = f x D/F */ + card_baudrate = (unsigned int) (1000 * ccid_desc->dwDefaultClock + * d / f); + + default_baudrate = (unsigned int) (1000 * ccid_desc->dwDefaultClock + * ATR_DEFAULT_D / ATR_DEFAULT_F); + + /* if the card does not try to lower the default speed */ + if ((card_baudrate > default_baudrate) + /* and the reader is fast enough */ + && (card_baudrate <= ccid_desc->dwMaxDataRate)) + { + /* the reader has no baud rates table */ + if ((NULL == ccid_desc->arrayOfSupportedDataRates) + /* or explicitely support it */ + || find_baud_rate(card_baudrate, + ccid_desc->arrayOfSupportedDataRates)) + { + pps[1] |= 0x10; /* PTS1 presence */ + pps[2] = atr.ib[0][ATR_INTERFACE_BYTE_TA].value; + + DEBUG_COMM2("Set speed to %d bauds", card_baudrate); + } + else + { + DEBUG_COMM2("Reader does not support %d bauds", + card_baudrate); + + /* TA2 present -> specific mode: the card is supporting + * only the baud rate specified in TA1 but reader does not + * support this value. Reject the card. */ + if (atr.ib[1][ATR_INTERFACE_BYTE_TA].present) + return IFD_COMMUNICATION_ERROR; + } + } + else + { + /* the card is too fast for the reader */ + if ((card_baudrate > ccid_desc->dwMaxDataRate +2) + /* but TA1 <= 97 */ + && (atr.ib[0][ATR_INTERFACE_BYTE_TA].value <= 0x97)) + { + unsigned char old_TA1; + + old_TA1 = atr.ib[0][ATR_INTERFACE_BYTE_TA].value; + while (atr.ib[0][ATR_INTERFACE_BYTE_TA].value > 0x94) + { + /* use a lower TA1 */ + atr.ib[0][ATR_INTERFACE_BYTE_TA].value--; + + (void)ATR_GetParameter(&atr, ATR_PARAMETER_D, &d); + (void)ATR_GetParameter(&atr, ATR_PARAMETER_F, &f); + + /* Baudrate = f x D/F */ + card_baudrate = (unsigned int) (1000 * + ccid_desc->dwDefaultClock * d / f); + + /* the reader has a baud rate table */ + if ((ccid_desc->arrayOfSupportedDataRates + /* and the baud rate is supported */ + && find_baud_rate(card_baudrate, + ccid_desc->arrayOfSupportedDataRates)) + /* or the reader has NO baud rate table */ + || ((NULL == ccid_desc->arrayOfSupportedDataRates) + /* and the baud rate is bellow the limit */ + && (card_baudrate <= ccid_desc->dwMaxDataRate))) + { + pps[1] |= 0x10; /* PTS1 presence */ + pps[2] = atr.ib[0][ATR_INTERFACE_BYTE_TA].value; + + DEBUG_COMM2("Set adapted speed to %d bauds", + card_baudrate); + + break; + } + } + + /* restore original TA1 value */ + atr.ib[0][ATR_INTERFACE_BYTE_TA].value = old_TA1; + } + } + } + } + + /* PTS2? */ + if (Flags & IFD_NEGOTIATE_PTS2) + { + pps[1] |= 0x20; /* PTS2 presence */ + pps[3] = PTS2; + } + + /* PTS3? */ + if (Flags & IFD_NEGOTIATE_PTS3) + { + pps[1] |= 0x40; /* PTS3 presence */ + pps[4] = PTS3; + } + + /* Generate PPS */ + pps[0] = 0xFF; + + /* Automatic PPS made by the ICC? */ + if ((! (ccid_desc->dwFeatures & CCID_CLASS_AUTO_PPS_CUR)) + /* TA2 absent: negociable mode */ + && (! atr.ib[1][ATR_INTERFACE_BYTE_TA].present)) + { + int default_protocol; + + ATR_GetDefaultProtocol(&atr, &default_protocol, NULL); + + /* if the requested protocol is not the default one + * or a TA1/PPS1 is present */ + if (((pps[1] & 0x0F) != default_protocol) || (PPS_HAS_PPS1(pps))) + { +#ifdef O2MICRO_OZ776_PATCH + if ((OZ776 == ccid_desc->readerID) + || (OZ776_7772 == ccid_desc->readerID)) + { + /* convert from ATR_PROTOCOL_TYPE_T? to SCARD_PROTOCOL_T? */ + Protocol = default_protocol + + (SCARD_PROTOCOL_T0 - ATR_PROTOCOL_TYPE_T0); + DEBUG_INFO2("PPS not supported on O2Micro readers. Using T=" DWORD_D, + Protocol - SCARD_PROTOCOL_T0); + } + else +#endif + if (PPS_Exchange(reader_index, pps, &len, &pps[2]) != PPS_OK) + { + DEBUG_INFO1("PPS_Exchange Failed"); + + return IFD_ERROR_PTS_FAILURE; + } + } + } + + /* Now we must set the reader parameters */ + (void)ATR_GetConvention(&atr, &convention); + + /* specific mode and implicit parameters? (b5 of TA2) */ + if (atr.ib[1][ATR_INTERFACE_BYTE_TA].present + && (atr.ib[1][ATR_INTERFACE_BYTE_TA].value & 0x10)) + return IFD_COMMUNICATION_ERROR; + + /* T=1 */ + if (SCARD_PROTOCOL_T1 == Protocol) + { + BYTE param[] = { + 0x11, /* Fi/Di */ + 0x10, /* TCCKS */ + 0x00, /* GuardTime */ + 0x4D, /* BWI/CWI */ + 0x00, /* ClockStop */ + 0x20, /* IFSC */ + 0x00 /* NADValue */ + }; + int i; + t1_state_t *t1 = &(ccid_slot -> t1); + RESPONSECODE ret; + double f, d; + int ifsc; + + /* TA1 is not default */ + if (PPS_HAS_PPS1(pps)) + param[0] = pps[2]; + + /* CRC checksum? */ + if (2 == t1->rc_bytes) + param[1] |= 0x01; + + /* the CCID should ignore this bit */ + if (ATR_CONVENTION_INVERSE == convention) + param[1] |= 0x02; + + /* get TC1 Extra guard time */ + if (atr.ib[0][ATR_INTERFACE_BYTE_TC].present) + param[2] = atr.ib[0][ATR_INTERFACE_BYTE_TC].value; + + /* TBi (i>2) present? BWI/CWI */ + for (i=2; ipcATRBuffer, openpgp_atr, + ccid_slot->nATRLength)) + /* change BWI from 4 to 7 to increase BWT from + * 1.4s to 11s and avoid a timeout during on + * board key generation (bogus card) */ + { + param[3] = 0x75; + DEBUG_COMM2("OpenPGP hack, using 0x%02X", param[3]); + } + } + + /* only the first TBi (i>2) must be used */ + break; + } + + /* compute communication timeout */ + (void)ATR_GetParameter(&atr, ATR_PARAMETER_F, &f); + (void)ATR_GetParameter(&atr, ATR_PARAMETER_D, &d); + ccid_desc->readTimeout = T1_card_timeout(f, d, param[2], + (param[3] & 0xF0) >> 4 /* BWI */, param[3] & 0x0F /* CWI */, + ccid_desc->dwDefaultClock); + + ifsc = get_IFSC(&atr, &i); + if (ifsc > 0) + { + DEBUG_COMM3("IFSC (TA%d) present: %d", i, ifsc); + param[5] = ifsc; + } + + DEBUG_COMM2("Timeout: %d ms", ccid_desc->readTimeout); + + ret = SetParameters(reader_index, 1, sizeof(param), param); + if (IFD_SUCCESS != ret) + return ret; + } + else + /* T=0 */ + { + BYTE param[] = { + 0x11, /* Fi/Di */ + 0x00, /* TCCKS */ + 0x00, /* GuardTime */ + 0x0A, /* WaitingInteger */ + 0x00 /* ClockStop */ + }; + RESPONSECODE ret; + double f, d; + + /* TA1 is not default */ + if (PPS_HAS_PPS1(pps)) + param[0] = pps[2]; + + if (ATR_CONVENTION_INVERSE == convention) + param[1] |= 0x02; + + /* get TC1 Extra guard time */ + if (atr.ib[0][ATR_INTERFACE_BYTE_TC].present) + param[2] = atr.ib[0][ATR_INTERFACE_BYTE_TC].value; + + /* TC2 WWT */ + if (atr.ib[1][ATR_INTERFACE_BYTE_TC].present) + param[3] = atr.ib[1][ATR_INTERFACE_BYTE_TC].value; + + /* compute communication timeout */ + (void)ATR_GetParameter(&atr, ATR_PARAMETER_F, &f); + (void)ATR_GetParameter(&atr, ATR_PARAMETER_D, &d); + + ccid_desc->readTimeout = T0_card_timeout(f, d, param[2] /* TC1 */, + param[3] /* TC2 */, ccid_desc->dwDefaultClock); + + DEBUG_COMM2("Communication timeout: %d ms", ccid_desc->readTimeout); + + ret = SetParameters(reader_index, 0, sizeof(param), param); + if (IFD_SUCCESS != ret) + return ret; + } + + /* set IFSC & IFSD in T=1 */ + if (SCARD_PROTOCOL_T1 == Protocol) + { + t1_state_t *t1 = &(ccid_slot -> t1); + int i, ifsc; + + ifsc = get_IFSC(&atr, &i); + if (ifsc > 0) + { + DEBUG_COMM3("IFSC (TA%d) present: %d", i, ifsc); + (void)t1_set_param(t1, IFD_PROTOCOL_T1_IFSC, ifsc); + } + + /* IFSD not negociated by the reader? */ + if (! (ccid_desc->dwFeatures & CCID_CLASS_AUTO_IFSD)) + { + DEBUG_COMM2("Negotiate IFSD at %d", ccid_desc -> dwMaxIFSD); + if (t1_negotiate_ifsd(t1, 0, ccid_desc -> dwMaxIFSD) < 0) + return IFD_COMMUNICATION_ERROR; + } + (void)t1_set_param(t1, IFD_PROTOCOL_T1_IFSD, ccid_desc -> dwMaxIFSD); + + DEBUG_COMM3("T=1: IFSC=%d, IFSD=%d", t1->ifsc, t1->ifsd); + } + +end: + /* store used protocol for use by the secure commands (verify/change PIN) */ + ccid_desc->cardProtocol = Protocol; + + return IFD_SUCCESS; +} /* IFDHSetProtocolParameters */ + + +EXTERNAL RESPONSECODE IFDHPowerICC(DWORD Lun, DWORD Action, + PUCHAR Atr, PDWORD AtrLength) +{ + /* + * This function controls the power and reset signals of the smartcard + * reader at the particular reader/slot specified by Lun. + * + * Action - Action to be taken on the card. + * + * IFD_POWER_UP - Power and reset the card if not done so (store the + * ATR and return it and its length). + * + * IFD_POWER_DOWN - Power down the card if not done already + * (Atr/AtrLength should be zero'd) + * + * IFD_RESET - Perform a quick reset on the card. If the card is not + * powered power up the card. (Store and return the Atr/Length) + * + * Atr - Answer to Reset of the card. The driver is responsible for + * caching this value in case IFDHGetCapabilities is called requesting + * the ATR and its length. This should not exceed MAX_ATR_SIZE. + * + * AtrLength - Length of the Atr. This should not exceed + * MAX_ATR_SIZE. + * + * Notes: + * + * Memory cards without an ATR should return IFD_SUCCESS on reset but + * the Atr should be zero'd and the length should be zero + * + * Reset errors should return zero for the AtrLength and return + * IFD_ERROR_POWER_ACTION. + * + * returns: + * + * IFD_SUCCESS IFD_ERROR_POWER_ACTION IFD_COMMUNICATION_ERROR + * IFD_NOT_SUPPORTED + */ + + unsigned int nlength; + RESPONSECODE return_value = IFD_SUCCESS; + unsigned char pcbuffer[10+MAX_ATR_SIZE]; + int reader_index; +#ifndef NO_LOG + const char *actions[] = { "PowerUp", "PowerDown", "Reset" }; +#endif + unsigned int oldReadTimeout; + _ccid_descriptor *ccid_descriptor; + + /* By default, assume it won't work :) */ + *AtrLength = 0; + + if (-1 == (reader_index = LunToReaderIndex(Lun))) + return IFD_COMMUNICATION_ERROR; + + DEBUG_INFO4("action: %s, %s (lun: " DWORD_X ")", + actions[Action-IFD_POWER_UP], CcidSlots[reader_index].readerName, Lun); + + switch (Action) + { + case IFD_POWER_DOWN: + /* Clear ATR buffer */ + CcidSlots[reader_index].nATRLength = 0; + *CcidSlots[reader_index].pcATRBuffer = '\0'; + + /* Memorise the request */ + CcidSlots[reader_index].bPowerFlags |= MASK_POWERFLAGS_PDWN; + + /* send the command */ + if (IFD_SUCCESS != CmdPowerOff(reader_index)) + { + DEBUG_CRITICAL("PowerDown failed"); + return_value = IFD_ERROR_POWER_ACTION; + goto end; + } + + /* clear T=1 context */ + t1_release(&(get_ccid_slot(reader_index) -> t1)); + break; + + case IFD_POWER_UP: + case IFD_RESET: + /* save the current read timeout computed from card capabilities */ + ccid_descriptor = get_ccid_descriptor(reader_index); + oldReadTimeout = ccid_descriptor->readTimeout; + + /* The German eID card is bogus and need to be powered off + * before a power on */ + if (KOBIL_IDTOKEN == ccid_descriptor -> readerID) + { + /* send the command */ + if (IFD_SUCCESS != CmdPowerOff(reader_index)) + { + DEBUG_CRITICAL("PowerDown failed"); + return_value = IFD_ERROR_POWER_ACTION; + goto end; + } + } + + /* use a very long timeout since the card can use up to + * (9600+12)*33 ETU in total + * 12 ETU per byte + * 9600 ETU max between each byte + * 33 bytes max for ATR + * 1 ETU = 372 cycles during ATR + * with a 4 MHz clock => 29 seconds + */ + ccid_descriptor->readTimeout = 60*1000; + + nlength = sizeof(pcbuffer); + return_value = CmdPowerOn(reader_index, &nlength, pcbuffer, + PowerOnVoltage); + + /* set back the old timeout */ + ccid_descriptor->readTimeout = oldReadTimeout; + + if (return_value != IFD_SUCCESS) + { + /* used by GemCore SIM PRO: no card is present */ + if (GEMCORESIMPRO == ccid_descriptor -> readerID) + get_ccid_descriptor(reader_index)->dwSlotStatus + = IFD_ICC_NOT_PRESENT; + + DEBUG_CRITICAL("PowerUp failed"); + return_value = IFD_ERROR_POWER_ACTION; + goto end; + } + + /* Power up successful, set state variable to memorise it */ + CcidSlots[reader_index].bPowerFlags |= MASK_POWERFLAGS_PUP; + CcidSlots[reader_index].bPowerFlags &= ~MASK_POWERFLAGS_PDWN; + + /* Reset is returned, even if TCK is wrong */ + CcidSlots[reader_index].nATRLength = *AtrLength = + (nlength < MAX_ATR_SIZE) ? nlength : MAX_ATR_SIZE; + memcpy(Atr, pcbuffer, *AtrLength); + memcpy(CcidSlots[reader_index].pcATRBuffer, pcbuffer, *AtrLength); + + /* initialise T=1 context */ + (void)t1_init(&(get_ccid_slot(reader_index) -> t1), reader_index); + break; + + default: + DEBUG_CRITICAL("Action not supported"); + return_value = IFD_NOT_SUPPORTED; + } +end: + + return return_value; +} /* IFDHPowerICC */ + + +EXTERNAL RESPONSECODE IFDHTransmitToICC(DWORD Lun, SCARD_IO_HEADER SendPci, + PUCHAR TxBuffer, DWORD TxLength, + PUCHAR RxBuffer, PDWORD RxLength, /*@unused@*/ PSCARD_IO_HEADER RecvPci) +{ + /* + * This function performs an APDU exchange with the card/slot + * specified by Lun. The driver is responsible for performing any + * protocol specific exchanges such as T=0/1 ... differences. Calling + * this function will abstract all protocol differences. + * + * SendPci Protocol - 0, 1, .... 14 Length - Not used. + * + * TxBuffer - Transmit APDU example (0x00 0xA4 0x00 0x00 0x02 0x3F + * 0x00) TxLength - Length of this buffer. RxBuffer - Receive APDU + * example (0x61 0x14) RxLength - Length of the received APDU. This + * function will be passed the size of the buffer of RxBuffer and this + * function is responsible for setting this to the length of the + * received APDU. This should be ZERO on all errors. The resource + * manager will take responsibility of zeroing out any temporary APDU + * buffers for security reasons. + * + * RecvPci Protocol - 0, 1, .... 14 Length - Not used. + * + * Notes: The driver is responsible for knowing what type of card it + * has. If the current slot/card contains a memory card then this + * command should ignore the Protocol and use the MCT style commands + * for support for these style cards and transmit them appropriately. + * If your reader does not support memory cards or you don't want to + * then ignore this. + * + * RxLength should be set to zero on error. + * + * returns: + * + * IFD_SUCCESS IFD_COMMUNICATION_ERROR IFD_RESPONSE_TIMEOUT + * IFD_ICC_NOT_PRESENT IFD_PROTOCOL_NOT_SUPPORTED + */ + + RESPONSECODE return_value; + unsigned int rx_length; + int reader_index; + int old_read_timeout; + int restore_timeout = FALSE; + _ccid_descriptor *ccid_descriptor; + + (void)RecvPci; + + if (-1 == (reader_index = LunToReaderIndex(Lun))) + return IFD_COMMUNICATION_ERROR; + + ccid_descriptor = get_ccid_descriptor(reader_index); + + DEBUG_INFO3("%s (lun: " DWORD_X ")", CcidSlots[reader_index].readerName, + Lun); + + /* special APDU for the Kobil IDToken (CLASS = 0xFF) */ + if (KOBIL_IDTOKEN == ccid_descriptor -> readerID) + { + char manufacturer[] = {0xFF, 0x9A, 0x01, 0x01, 0x00}; + char product_name[] = {0xFF, 0x9A, 0x01, 0x03, 0x00}; + char firmware_version[] = {0xFF, 0x9A, 0x01, 0x06, 0x00}; + char driver_version[] = {0xFF, 0x9A, 0x01, 0x07, 0x00}; + + if ((sizeof manufacturer == TxLength) + && (memcmp(TxBuffer, manufacturer, sizeof manufacturer) == 0)) + { + DEBUG_INFO1("IDToken: Manufacturer command"); + memcpy(RxBuffer, "KOBIL systems\220\0", 15); + *RxLength = 15; + return IFD_SUCCESS; + } + + if ((sizeof product_name == TxLength) + && (memcmp(TxBuffer, product_name, sizeof product_name) == 0)) + { + DEBUG_INFO1("IDToken: Product name command"); + memcpy(RxBuffer, "IDToken\220\0", 9); + *RxLength = 9; + return IFD_SUCCESS; + } + + if ((sizeof firmware_version == TxLength) + && (memcmp(TxBuffer, firmware_version, sizeof firmware_version) == 0)) + { + int IFD_bcdDevice = ccid_descriptor -> IFD_bcdDevice; + + DEBUG_INFO1("IDToken: Firmware version command"); + *RxLength = sprintf((char *)RxBuffer, "%X.%02X", + IFD_bcdDevice >> 8, IFD_bcdDevice & 0xFF); + RxBuffer[(*RxLength)++] = 0x90; + RxBuffer[(*RxLength)++] = 0x00; + return IFD_SUCCESS; + } + + if ((sizeof driver_version == TxLength) + && (memcmp(TxBuffer, driver_version, sizeof driver_version) == 0)) + { + DEBUG_INFO1("IDToken: Driver version command"); +#define DRIVER_VERSION "2012.2.7\220\0" + memcpy(RxBuffer, DRIVER_VERSION, sizeof DRIVER_VERSION -1); + *RxLength = sizeof DRIVER_VERSION -1; + return IFD_SUCCESS; + } + + } + + /* Pseudo-APDU as defined in PC/SC v2 part 10 supplement document + * CLA=0xFF, INS=0xC2, P1=0x01 */ + if (0 == memcmp(TxBuffer, "\xFF\xC2\x01", 3)) + { + /* Yes, use the same timeout as for SCardControl() */ + restore_timeout = TRUE; + old_read_timeout = ccid_descriptor -> readTimeout; + ccid_descriptor -> readTimeout = 90 * 1000; /* 90 seconds */ + } + + rx_length = *RxLength; + return_value = CmdXfrBlock(reader_index, TxLength, TxBuffer, &rx_length, + RxBuffer, SendPci.Protocol); + if (IFD_SUCCESS == return_value) + *RxLength = rx_length; + else + *RxLength = 0; + + /* restore timeout */ + if (restore_timeout) + ccid_descriptor -> readTimeout = old_read_timeout; + + return return_value; +} /* IFDHTransmitToICC */ + + +EXTERNAL RESPONSECODE IFDHControl(DWORD Lun, DWORD dwControlCode, + PUCHAR TxBuffer, DWORD TxLength, PUCHAR RxBuffer, DWORD RxLength, + PDWORD pdwBytesReturned) +{ + /* + * This function performs a data exchange with the reader (not the + * card) specified by Lun. Here XXXX will only be used. It is + * responsible for abstracting functionality such as PIN pads, + * biometrics, LCD panels, etc. You should follow the MCT, CTBCS + * specifications for a list of accepted commands to implement. + * + * TxBuffer - Transmit data TxLength - Length of this buffer. RxBuffer + * - Receive data RxLength - Length of the received data. This + * function will be passed the length of the buffer RxBuffer and it + * must set this to the length of the received data. + * + * Notes: RxLength should be zero on error. + */ + RESPONSECODE return_value = IFD_ERROR_NOT_SUPPORTED; + int reader_index; + _ccid_descriptor *ccid_descriptor; + + reader_index = LunToReaderIndex(Lun); + if ((-1 == reader_index) || (NULL == pdwBytesReturned)) + return IFD_COMMUNICATION_ERROR; + + ccid_descriptor = get_ccid_descriptor(reader_index); + + DEBUG_INFO4("ControlCode: 0x" DWORD_X ", %s (lun: " DWORD_X ")", + dwControlCode, CcidSlots[reader_index].readerName, Lun); + DEBUG_INFO_XXD("Control TxBuffer: ", TxBuffer, TxLength); + + /* Set the return length to 0 to avoid problems */ + *pdwBytesReturned = 0; + + if (IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE == dwControlCode) + { + int allowed = (DriverOptions & DRIVER_OPTION_CCID_EXCHANGE_AUTHORIZED); + int readerID = ccid_descriptor -> readerID; + + if (VENDOR_GEMALTO == GET_VENDOR(readerID)) + { + unsigned char switch_interface[] = { 0x52, 0xF8, 0x04, 0x01, 0x00 }; + + /* get firmware version escape command */ + if ((1 == TxLength) && (0x02 == TxBuffer[0])) + allowed = TRUE; + + /* switch interface escape command on the GemProx DU + * the next byte in the command is the interface: + * 0x01 switch to contactless interface + * 0x02 switch to contact interface + */ + if ((GEMALTOPROXDU == readerID) + && (6 == TxLength) + && (0 == memcmp(TxBuffer, switch_interface, sizeof(switch_interface)))) + allowed = TRUE; + } + + if (!allowed) + { + DEBUG_INFO1("ifd exchange (Escape command) not allowed"); + return_value = IFD_COMMUNICATION_ERROR; + } + else + { + unsigned int iBytesReturned; + + iBytesReturned = RxLength; + /* 30 seconds timeout for long commands */ + return_value = CmdEscape(reader_index, TxBuffer, TxLength, + RxBuffer, &iBytesReturned, 30*1000); + *pdwBytesReturned = iBytesReturned; + } + } + + /* Implement the PC/SC v2.02.07 Part 10 IOCTL mechanism */ + + /* Query for features */ + /* 0x313520 is the Windows value for SCARD_CTL_CODE(3400) + * This hack is needed for RDP applications */ + if ((CM_IOCTL_GET_FEATURE_REQUEST == dwControlCode) + || (0x313520 == dwControlCode)) + { + unsigned int iBytesReturned = 0; + PCSC_TLV_STRUCTURE *pcsc_tlv = (PCSC_TLV_STRUCTURE *)RxBuffer; + int readerID = ccid_descriptor -> readerID; + + /* we need room for up to six records */ + if (RxLength < 6 * sizeof(PCSC_TLV_STRUCTURE)) + return IFD_ERROR_INSUFFICIENT_BUFFER; + + /* We can only support direct verify and/or modify currently */ + if (ccid_descriptor -> bPINSupport & CCID_CLASS_PIN_VERIFY) + { + pcsc_tlv -> tag = FEATURE_VERIFY_PIN_DIRECT; + pcsc_tlv -> length = 0x04; /* always 0x04 */ + pcsc_tlv -> value = htonl(IOCTL_FEATURE_VERIFY_PIN_DIRECT); + + pcsc_tlv++; + iBytesReturned += sizeof(PCSC_TLV_STRUCTURE); + } + + if (ccid_descriptor -> bPINSupport & CCID_CLASS_PIN_MODIFY) + { + pcsc_tlv -> tag = FEATURE_MODIFY_PIN_DIRECT; + pcsc_tlv -> length = 0x04; /* always 0x04 */ + pcsc_tlv -> value = htonl(IOCTL_FEATURE_MODIFY_PIN_DIRECT); + + pcsc_tlv++; + iBytesReturned += sizeof(PCSC_TLV_STRUCTURE); + } + + /* Provide IFD_PIN_PROPERTIES only for pinpad readers */ + if (ccid_descriptor -> bPINSupport) + { + pcsc_tlv -> tag = FEATURE_IFD_PIN_PROPERTIES; + pcsc_tlv -> length = 0x04; /* always 0x04 */ + pcsc_tlv -> value = htonl(IOCTL_FEATURE_IFD_PIN_PROPERTIES); + + pcsc_tlv++; + iBytesReturned += sizeof(PCSC_TLV_STRUCTURE); + } + + if ((KOBIL_TRIBANK == readerID) + || (KOBIL_MIDENTITY_VISUAL == readerID)) + { + pcsc_tlv -> tag = FEATURE_MCT_READER_DIRECT; + pcsc_tlv -> length = 0x04; /* always 0x04 */ + pcsc_tlv -> value = htonl(IOCTL_FEATURE_MCT_READER_DIRECT); + + pcsc_tlv++; + iBytesReturned += sizeof(PCSC_TLV_STRUCTURE); + } + + pcsc_tlv -> tag = FEATURE_GET_TLV_PROPERTIES; + pcsc_tlv -> length = 0x04; /* always 0x04 */ + pcsc_tlv -> value = htonl(IOCTL_FEATURE_GET_TLV_PROPERTIES); + pcsc_tlv++; + iBytesReturned += sizeof(PCSC_TLV_STRUCTURE); + + /* IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE */ + if (DriverOptions & DRIVER_OPTION_CCID_EXCHANGE_AUTHORIZED) + { + pcsc_tlv -> tag = FEATURE_CCID_ESC_COMMAND; + pcsc_tlv -> length = 0x04; /* always 0x04 */ + pcsc_tlv -> value = htonl(IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE); + + pcsc_tlv++; + iBytesReturned += sizeof(PCSC_TLV_STRUCTURE); + } + + *pdwBytesReturned = iBytesReturned; + return_value = IFD_SUCCESS; + } + + /* Get PIN handling capabilities */ + if (IOCTL_FEATURE_IFD_PIN_PROPERTIES == dwControlCode) + { + PIN_PROPERTIES_STRUCTURE *caps = (PIN_PROPERTIES_STRUCTURE *)RxBuffer; + int validation; + + if (RxLength < sizeof(PIN_PROPERTIES_STRUCTURE)) + return IFD_ERROR_INSUFFICIENT_BUFFER; + + /* Only give the LCD size for now */ + caps -> wLcdLayout = ccid_descriptor -> wLcdLayout; + + /* Hardcoded special reader cases */ + switch (ccid_descriptor->readerID) + { + case GEMPCPINPAD: + case VEGAALPHA: + case CHERRYST2000: + validation = 0x02; /* Validation key pressed */ + break; + default: + validation = 0x07; /* Default */ + } + + /* Gemalto readers providing firmware features */ + if (ccid_descriptor -> gemalto_firmware_features) + validation = ccid_descriptor -> gemalto_firmware_features -> bEntryValidationCondition; + + caps -> bEntryValidationCondition = validation; + caps -> bTimeOut2 = 0x00; /* We do not distinguish bTimeOut from TimeOut2 */ + + *pdwBytesReturned = sizeof(*caps); + return_value = IFD_SUCCESS; + } + + /* Reader features */ + if (IOCTL_FEATURE_GET_TLV_PROPERTIES == dwControlCode) + { + int p = 0; + int tmp; + + /* wLcdLayout */ + RxBuffer[p++] = PCSCv2_PART10_PROPERTY_wLcdLayout; /* tag */ + RxBuffer[p++] = 2; /* length */ + tmp = ccid_descriptor -> wLcdLayout; + RxBuffer[p++] = tmp & 0xFF; /* value in little endian order */ + RxBuffer[p++] = (tmp >> 8) & 0xFF; + + /* only if the reader has a display */ + if (ccid_descriptor -> wLcdLayout) + { + /* wLcdMaxCharacters */ + RxBuffer[p++] = PCSCv2_PART10_PROPERTY_wLcdMaxCharacters; /* tag */ + RxBuffer[p++] = 2; /* length */ + tmp = ccid_descriptor -> wLcdLayout & 0xFF; + RxBuffer[p++] = tmp & 0xFF; /* value in little endian order */ + RxBuffer[p++] = (tmp >> 8) & 0xFF; + + /* wLcdMaxLines */ + RxBuffer[p++] = PCSCv2_PART10_PROPERTY_wLcdMaxLines; /* tag */ + RxBuffer[p++] = 2; /* length */ + tmp = ccid_descriptor -> wLcdLayout >> 8; + RxBuffer[p++] = tmp & 0xFF; /* value in little endian order */ + RxBuffer[p++] = (tmp >> 8) & 0xFF; + } + + /* bTimeOut2 */ + RxBuffer[p++] = PCSCv2_PART10_PROPERTY_bTimeOut2; + RxBuffer[p++] = 1; /* length */ + /* IFD does not distinguish bTimeOut from bTimeOut2 */ + RxBuffer[p++] = 0x00; + + /* sFirmwareID */ + if (VENDOR_GEMALTO == GET_VENDOR(ccid_descriptor -> readerID)) + { + unsigned char firmware[256]; + const unsigned char cmd[] = { 0x02 }; + RESPONSECODE ret; + unsigned int len; + + len = sizeof(firmware); + ret = CmdEscape(reader_index, cmd, sizeof(cmd), firmware, &len, 0); + + if (IFD_SUCCESS == ret) + { + RxBuffer[p++] = PCSCv2_PART10_PROPERTY_sFirmwareID; + RxBuffer[p++] = len; + memcpy(&RxBuffer[p], firmware, len); + p += len; + } + } + + /* Gemalto PC Pinpad V1 */ + if (((GEMPCPINPAD == ccid_descriptor -> readerID) + && (0x0100 == ccid_descriptor -> IFD_bcdDevice)) + /* Covadis Véga-Alpha */ + || (VEGAALPHA == ccid_descriptor->readerID)) + { + /* bMinPINSize */ + RxBuffer[p++] = PCSCv2_PART10_PROPERTY_bMinPINSize; + RxBuffer[p++] = 1; /* length */ + RxBuffer[p++] = 4; /* min PIN size */ + + /* bMaxPINSize */ + RxBuffer[p++] = PCSCv2_PART10_PROPERTY_bMaxPINSize; + RxBuffer[p++] = 1; /* length */ + RxBuffer[p++] = 8; /* max PIN size */ + + /* bEntryValidationCondition */ + RxBuffer[p++] = PCSCv2_PART10_PROPERTY_bEntryValidationCondition; + RxBuffer[p++] = 1; /* length */ + RxBuffer[p++] = 0x02; /* validation key pressed */ + } + + /* Cherry GmbH SmartTerminal ST-2xxx */ + if (CHERRYST2000 == ccid_descriptor -> readerID) + { + /* bMinPINSize */ + RxBuffer[p++] = PCSCv2_PART10_PROPERTY_bMinPINSize; + RxBuffer[p++] = 1; /* length */ + RxBuffer[p++] = 0; /* min PIN size */ + + /* bMaxPINSize */ + RxBuffer[p++] = PCSCv2_PART10_PROPERTY_bMaxPINSize; + RxBuffer[p++] = 1; /* length */ + RxBuffer[p++] = 25; /* max PIN size */ + + /* bEntryValidationCondition */ + RxBuffer[p++] = PCSCv2_PART10_PROPERTY_bEntryValidationCondition; + RxBuffer[p++] = 1; /* length */ + RxBuffer[p++] = 0x02; /* validation key pressed */ + } + + /* Gemalto readers providing firmware features */ + if (ccid_descriptor -> gemalto_firmware_features) + { + struct GEMALTO_FIRMWARE_FEATURES *features = ccid_descriptor -> gemalto_firmware_features; + + /* bMinPINSize */ + RxBuffer[p++] = PCSCv2_PART10_PROPERTY_bMinPINSize; + RxBuffer[p++] = 1; /* length */ + RxBuffer[p++] = features -> MinimumPINSize; /* min PIN size */ + + /* bMaxPINSize */ + RxBuffer[p++] = PCSCv2_PART10_PROPERTY_bMaxPINSize; + RxBuffer[p++] = 1; /* length */ + RxBuffer[p++] = features -> MaximumPINSize; /* max PIN size */ + + /* bEntryValidationCondition */ + RxBuffer[p++] = PCSCv2_PART10_PROPERTY_bEntryValidationCondition; + RxBuffer[p++] = 1; /* length */ + RxBuffer[p++] = features -> bEntryValidationCondition; /* validation key pressed */ + } + + /* bPPDUSupport */ + RxBuffer[p++] = PCSCv2_PART10_PROPERTY_bPPDUSupport; + RxBuffer[p++] = 1; /* length */ + RxBuffer[p++] = + (DriverOptions & DRIVER_OPTION_CCID_EXCHANGE_AUTHORIZED) ? 1 : 0; + /* bit0: PPDU is supported over SCardControl using + * FEATURE_CCID_ESC_COMMAND */ + + /* wIdVendor */ + { + int idVendor = ccid_descriptor -> readerID >> 16; + RxBuffer[p++] = PCSCv2_PART10_PROPERTY_wIdVendor; + RxBuffer[p++] = 2; /* length */ + RxBuffer[p++] = idVendor & 0xFF; + RxBuffer[p++] = idVendor >> 8; + } + + /* wIdProduct */ + { + int idProduct = ccid_descriptor -> readerID & 0xFFFF; + RxBuffer[p++] = PCSCv2_PART10_PROPERTY_wIdProduct; + RxBuffer[p++] = 2; /* length */ + RxBuffer[p++] = idProduct & 0xFF; + RxBuffer[p++] = idProduct >> 8; + } + + /* dwMaxAPDUDataSize */ + { + int MaxAPDUDataSize = 0; /* short APDU only by default */ + + /* reader is TPDU or extended APDU */ + if ((ccid_descriptor -> dwFeatures & CCID_CLASS_EXTENDED_APDU) + || (ccid_descriptor -> dwFeatures & CCID_CLASS_TPDU)) + MaxAPDUDataSize = 0x10000; + + RxBuffer[p++] = PCSCv2_PART10_PROPERTY_dwMaxAPDUDataSize; + RxBuffer[p++] = 4; /* length */ + RxBuffer[p++] = MaxAPDUDataSize & 0xFF; + RxBuffer[p++] = (MaxAPDUDataSize >> 8) & 0xFF; + RxBuffer[p++] = (MaxAPDUDataSize >> 16) & 0xFF; + RxBuffer[p++] = (MaxAPDUDataSize >> 24) & 0xFF; + } + + *pdwBytesReturned = p; + return_value = IFD_SUCCESS; + } + + /* Verify a PIN, plain CCID */ + if (IOCTL_FEATURE_VERIFY_PIN_DIRECT == dwControlCode) + { + unsigned int iBytesReturned; + + iBytesReturned = RxLength; + return_value = SecurePINVerify(reader_index, TxBuffer, TxLength, + RxBuffer, &iBytesReturned); + *pdwBytesReturned = iBytesReturned; + } + + /* Modify a PIN, plain CCID */ + if (IOCTL_FEATURE_MODIFY_PIN_DIRECT == dwControlCode) + { + unsigned int iBytesReturned; + + iBytesReturned = RxLength; + return_value = SecurePINModify(reader_index, TxBuffer, TxLength, + RxBuffer, &iBytesReturned); + *pdwBytesReturned = iBytesReturned; + } + + /* MCT: Multifunctional Card Terminal */ + if (IOCTL_FEATURE_MCT_READER_DIRECT == dwControlCode) + { + if ( (TxBuffer[0] != 0x20) /* CLA */ + || ((TxBuffer[1] & 0xF0) != 0x70) /* INS */ + /* valid INS are + * 0x70: SECODER INFO + * 0x71: SECODER SELECT APPLICATION + * 0x72: SECODER APPLICATION ACTIVE + * 0x73: SECODER DATA CONFIRMATION + * 0x74: SECODER PROCESS AUTHENTICATION TOKEN */ + || ((TxBuffer[1] & 0x0F) > 4) + || (TxBuffer[2] != 0x00) /* P1 */ + || (TxBuffer[3] != 0x00) /* P2 */ + || (TxBuffer[4] != 0x00) /* Lind */ + ) + { + DEBUG_INFO1("MCT Command refused by driver"); + return_value = IFD_COMMUNICATION_ERROR; + } + else + { + unsigned int iBytesReturned; + + /* we just transmit the buffer as a CCID Escape command */ + iBytesReturned = RxLength; + return_value = CmdEscape(reader_index, TxBuffer, TxLength, + RxBuffer, &iBytesReturned, 0); + *pdwBytesReturned = iBytesReturned; + } + } + + if (IFD_SUCCESS != return_value) + *pdwBytesReturned = 0; + + DEBUG_INFO_XXD("Control RxBuffer: ", RxBuffer, *pdwBytesReturned); + return return_value; +} /* IFDHControl */ + + +EXTERNAL RESPONSECODE IFDHICCPresence(DWORD Lun) +{ + /* + * This function returns the status of the card inserted in the + * reader/slot specified by Lun. It will return either: + * + * returns: IFD_ICC_PRESENT IFD_ICC_NOT_PRESENT + * IFD_COMMUNICATION_ERROR + */ + + unsigned char pcbuffer[SIZE_GET_SLOT_STATUS]; + RESPONSECODE return_value = IFD_COMMUNICATION_ERROR; + int oldLogLevel; + int reader_index; + _ccid_descriptor *ccid_descriptor; + unsigned int oldReadTimeout; + + if (-1 == (reader_index = LunToReaderIndex(Lun))) + return IFD_COMMUNICATION_ERROR; + + DEBUG_PERIODIC3("%s (lun: " DWORD_X ")", CcidSlots[reader_index].readerName, Lun); + + ccid_descriptor = get_ccid_descriptor(reader_index); + + if ((GEMCORESIMPRO == ccid_descriptor->readerID) + && (ccid_descriptor->IFD_bcdDevice < 0x0200)) + { + /* GemCore SIM Pro firmware 2.00 and up features + * a full independant second slot */ + return_value = ccid_descriptor->dwSlotStatus; + goto end; + } + + /* save the current read timeout computed from card capabilities */ + oldReadTimeout = ccid_descriptor->readTimeout; + + /* use default timeout since the reader may not be present anymore */ + ccid_descriptor->readTimeout = DEFAULT_COM_READ_TIMEOUT; + + /* if DEBUG_LEVEL_PERIODIC is not set we remove DEBUG_LEVEL_COMM */ + oldLogLevel = LogLevel; + if (! (LogLevel & DEBUG_LEVEL_PERIODIC)) + LogLevel &= ~DEBUG_LEVEL_COMM; + + return_value = CmdGetSlotStatus(reader_index, pcbuffer); + + /* set back the old timeout */ + ccid_descriptor->readTimeout = oldReadTimeout; + + /* set back the old LogLevel */ + LogLevel = oldLogLevel; + + if (return_value != IFD_SUCCESS) + return return_value; + + return_value = IFD_COMMUNICATION_ERROR; + switch (pcbuffer[7] & CCID_ICC_STATUS_MASK) /* bStatus */ + { + case CCID_ICC_PRESENT_ACTIVE: + return_value = IFD_ICC_PRESENT; + /* use default slot */ + break; + + case CCID_ICC_PRESENT_INACTIVE: + if ((CcidSlots[reader_index].bPowerFlags == POWERFLAGS_RAZ) + || (CcidSlots[reader_index].bPowerFlags & MASK_POWERFLAGS_PDWN)) + /* the card was previously absent */ + return_value = IFD_ICC_PRESENT; + else + { + /* the card was previously present but has been + * removed and inserted between two consecutive + * IFDHICCPresence() calls */ + CcidSlots[reader_index].bPowerFlags = POWERFLAGS_RAZ; + return_value = IFD_ICC_NOT_PRESENT; + } + break; + + case CCID_ICC_ABSENT: + /* Reset ATR buffer */ + CcidSlots[reader_index].nATRLength = 0; + *CcidSlots[reader_index].pcATRBuffer = '\0'; + + /* Reset PowerFlags */ + CcidSlots[reader_index].bPowerFlags = POWERFLAGS_RAZ; + + return_value = IFD_ICC_NOT_PRESENT; + break; + } + +#if 0 + /* SCR331-DI contactless reader */ + if (((SCR331DI == ccid_descriptor->readerID) + || (SDI010 == ccid_descriptor->readerID) + || (SCR331DINTTCOM == ccid_descriptor->readerID)) + && (ccid_descriptor->bCurrentSlotIndex > 0)) + { + unsigned char cmd[] = { 0x11 }; + /* command: 11 ?? + * response: 00 11 01 ?? no card + * 01 04 00 ?? card present */ + + unsigned char res[10]; + unsigned int length_res = sizeof(res); + RESPONSECODE ret; + + /* if DEBUG_LEVEL_PERIODIC is not set we remove DEBUG_LEVEL_COMM */ + oldLogLevel = LogLevel; + if (! (LogLevel & DEBUG_LEVEL_PERIODIC)) + LogLevel &= ~DEBUG_LEVEL_COMM; + + ret = CmdEscape(reader_index, cmd, sizeof(cmd), res, &length_res, 0); + + /* set back the old LogLevel */ + LogLevel = oldLogLevel; + + if (ret != IFD_SUCCESS) + { + DEBUG_INFO1("CmdEscape failed"); + /* simulate a card absent */ + res[0] = 0; + } + + if (0x01 == res[0]) + return_value = IFD_ICC_PRESENT; + else + { + /* Reset ATR buffer */ + CcidSlots[reader_index].nATRLength = 0; + *CcidSlots[reader_index].pcATRBuffer = '\0'; + + /* Reset PowerFlags */ + CcidSlots[reader_index].bPowerFlags = POWERFLAGS_RAZ; + + return_value = IFD_ICC_NOT_PRESENT; + } + } +#endif + +end: + DEBUG_PERIODIC2("Card %s", + IFD_ICC_PRESENT == return_value ? "present" : "absent"); + + return return_value; +} /* IFDHICCPresence */ + + +CcidDesc *get_ccid_slot(unsigned int reader_index) +{ + return &CcidSlots[reader_index]; +} /* get_ccid_slot */ + + +void init_driver(void) +{ + char infofile[FILENAME_MAX]; + char *e; + int rv; + list_t plist, *values; + + DEBUG_INFO1("Driver version: " VERSION); + + /* Info.plist full patch filename */ + (void)snprintf(infofile, sizeof(infofile), "%s/%s/Contents/Info.plist", + PCSCLITE_HP_DROPDIR, BUNDLE); + + rv = bundleParse(infofile, &plist); + if (0 == rv) + { + /* Log level */ + rv = LTPBundleFindValueWithKey(&plist, "ifdLogLevel", &values); + if (0 == rv) + { + /* convert from hex or dec or octal */ + LogLevel = strtoul(list_get_at(values, 0), NULL, 0); + + /* print the log level used */ + DEBUG_INFO2("LogLevel: 0x%.4X", LogLevel); + } + + /* Driver options */ + rv = LTPBundleFindValueWithKey(&plist, "ifdDriverOptions", &values); + if (0 == rv) + { + /* convert from hex or dec or octal */ + DriverOptions = strtoul(list_get_at(values, 0), NULL, 0); + + /* print the log level used */ + DEBUG_INFO2("DriverOptions: 0x%.4X", DriverOptions); + } + + bundleRelease(&plist); + } + + e = getenv("LIBCCID_ifdLogLevel"); + if (e) + { + /* convert from hex or dec or octal */ + LogLevel = strtoul(e, NULL, 0); + + /* print the log level used */ + DEBUG_INFO2("LogLevel from LIBCCID_ifdLogLevel: 0x%.4X", LogLevel); + } + + /* get the voltage parameter */ + switch ((DriverOptions >> 4) & 0x03) + { + case 0: + PowerOnVoltage = VOLTAGE_5V; + break; + + case 1: + PowerOnVoltage = VOLTAGE_3V; + break; + + case 2: + PowerOnVoltage = VOLTAGE_1_8V; + break; + + case 3: + PowerOnVoltage = VOLTAGE_AUTO; + break; + } + + /* initialise the Lun to reader_index mapping */ + InitReaderIndex(); + + DebugInitialized = TRUE; +} /* init_driver */ + + +static char find_baud_rate(unsigned int baudrate, unsigned int *list) +{ + int i; + + DEBUG_COMM2("Card baud rate: %d", baudrate); + + /* Does the reader support the announced smart card data speed? */ + for (i=0;; i++) + { + /* end of array marker */ + if (0 == list[i]) + break; + + DEBUG_COMM2("Reader can do: %d", list[i]); + + /* We must take into account that the card_baudrate integral value + * is an approximative result, computed from the d/f float result. + */ + if ((baudrate < list[i] + 2) && (baudrate > list[i] - 2)) + return TRUE; + } + + return FALSE; +} /* find_baud_rate */ + + +static unsigned int T0_card_timeout(double f, double d, int TC1, int TC2, + int clock_frequency) +{ + unsigned int timeout = DEFAULT_COM_READ_TIMEOUT; + double EGT, WWT; + unsigned int t; + + /* Timeout applied on ISO_IN or ISO_OUT card exchange + * we choose the maximum computed value. + * + * ISO_IN timeout is the sum of: + * Terminal: Smart card: + * 5 bytes header cmd -> + * <- Procedure byte + * 256 data bytes -> + * <- SW1-SW2 + * = 261 EGT + 3 WWT + 3 WWT + * + * ISO_OUT Timeout is the sum of: + * Terminal: Smart card: + * 5 bytes header cmd -> + * <- Procedure byte + 256 data bytes + SW1-SW2 + * = 5 EGT + 1 WWT + 259 WWT + */ + + /* clock_frequency is in kHz so the times are in milliseconds and not + * in seconds */ + + /* may happen with non ISO cards */ + if ((0 == f) || (0 == d) || (0 == clock_frequency)) + return 60 * 1000; /* 60 seconds */ + + /* EGT */ + /* see ch. 6.5.3 Extra Guard Time, page 12 of ISO 7816-3 */ + EGT = 12 * f / d / clock_frequency + (f / d) * TC1 / clock_frequency; + + /* card WWT */ + /* see ch. 8.2 Character level, page 15 of ISO 7816-3 */ + WWT = 960 * TC2 * f / clock_frequency; + + /* ISO in */ + t = 261 * EGT + (3 + 3) * WWT; + if (timeout < t) + timeout = t; + + /* ISO out */ + t = 5 * EGT + (1 + 259) * WWT; + if (timeout < t) + timeout = t; + + return timeout; +} /* T0_card_timeout */ + + +static unsigned int T1_card_timeout(double f, double d, int TC1, + int BWI, int CWI, int clock_frequency) +{ + double EGT, BWT, CWT, etu; + unsigned int timeout; + + /* Timeout applied on ISO in + ISO out card exchange + * + * Timeout is the sum of: + * - ISO in delay between leading edge of the first character sent by the + * interface device and the last one (NAD PCB LN APDU CKS) = 260 EGT, + * - delay between ISO in and ISO out = BWT, + * - ISO out delay between leading edge of the first character sent by the + * card and the last one (NAD PCB LN DATAS CKS) = 260 CWT. + */ + + /* clock_frequency is in kHz so the times are in milliseconds and not + * in seconds */ + + /* may happen with non ISO cards */ + if ((0 == f) || (0 == d) || (0 == clock_frequency)) + return 60 * 1000; /* 60 seconds */ + + /* see ch. 6.5.2 Transmission factors F and D, page 12 of ISO 7816-3 */ + etu = f / d / clock_frequency; + + /* EGT */ + /* see ch. 6.5.3 Extra Guard Time, page 12 of ISO 7816-3 */ + EGT = 12 * etu + (f / d) * TC1 / clock_frequency; + + /* card BWT */ + /* see ch. 9.5.3.2 Block Waiting Time, page 20 of ISO 7816-3 */ + BWT = 11 * etu + (1<2) present and protocol=1 => IFSC */ + if (i >= 2 && protocol == 1 + && atr->ib[i][ATR_INTERFACE_BYTE_TA].present) + { + ifsc = atr->ib[i][ATR_INTERFACE_BYTE_TA].value; + *idx = i+1; + /* only the first TAi (i>2) must be used */ + break; + } + + /* protocol T=? */ + if (atr->ib[i][ATR_INTERFACE_BYTE_TD].present) + protocol = atr->ib[i][ATR_INTERFACE_BYTE_TD].value & 0x0F; + } + + if (ifsc > 254) + { + /* 0xFF is not a valid value for IFSC */ + DEBUG_INFO2("Non ISO IFSC: 0x%X", ifsc); + ifsc = 254; + } + + return ifsc; +} /* get_IFSC */ + diff --git a/src/misc.h b/src/misc.h new file mode 100644 index 0000000..c455acd --- /dev/null +++ b/src/misc.h @@ -0,0 +1,85 @@ +/* + * This handles GCC attributes + * + * MUSCLE SmartCard Development ( http://pcsclite.alioth.debian.org/pcsclite.html ) + * + * Copyright (C) 2005-2010 + * Ludovic Rousseau + * +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. + */ + +#ifndef __misc_h__ +#define __misc_h__ + +/* + * Declare the function as internal to the library: the function name is + * not exported and can't be used by a program linked to the library + * + * see http://gcc.gnu.org/onlinedocs/gcc-3.3.5/gcc/Function-Attributes.html#Function-Attributes + * see http://www.nedprod.com/programs/gccvisibility.html + */ +#if defined(__GNUC__) && \ + (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) || \ + defined(__SUNPRO_C) && __SUNPRO_C >= 0x590 +#define INTERNAL __attribute__ ((visibility("hidden"))) +#define PCSC_API __attribute__ ((visibility("default"))) +#elif defined(__SUNPRO_C) && __SUNPRO_C >= 0x550 +/* http://wikis.sun.com/display/SunStudio/Macros+for+Shared+Library+Symbol+Visibility */ +#define INTERNAL __hidden +#define PCSC_API __global +#else +#define INTERNAL +#define PCSC_API +#endif +#define EXTERNAL PCSC_API + +#if defined __GNUC__ + +/* GNU Compiler Collection (GCC) */ +#define CONSTRUCTOR __attribute__ ((constructor)) +#define DESTRUCTOR __attribute__ ((destructor)) + +#else + +/* SUN C compiler does not use __attribute__ but #pragma init (function) + * We can't use a # inside a #define so it is not possible to use + * #define CONSTRUCTOR_DECLARATION(x) #pragma init (x) + * The #pragma is used directly where needed */ + +/* any other */ +#define CONSTRUCTOR +#define DESTRUCTOR + +#endif + +#ifndef min +#define min(a,b) (((a) < (b)) ? (a) : (b)) +#endif + +#ifndef COUNT_OF +#define COUNT_OF(arr) (sizeof(arr)/sizeof(arr[0])) +#endif + +#endif /* __misc_h__ */ diff --git a/src/openct/LICENSE b/src/openct/LICENSE new file mode 100644 index 0000000..2b5c118 --- /dev/null +++ b/src/openct/LICENSE @@ -0,0 +1,28 @@ +OpenCT, a middleware framework for smart card terminals. + +Copyright (c) 2003, Olaf Kirch +Copyright (c) 2003, Andreas Jellinghaus +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * 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. + * Neither the name of the authors nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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. diff --git a/src/openct/README b/src/openct/README new file mode 100644 index 0000000..3028a09 --- /dev/null +++ b/src/openct/README @@ -0,0 +1,5 @@ +The files buffer.[c|h], checksum.c and proto-t1.c comes from the OpenCT +project + +I (Ludovic Rousseau) greatly patched proto-t1.c to add all the needed +code to reach the quality level requested by the EMV standard. diff --git a/src/openct/buffer.c b/src/openct/buffer.c new file mode 100644 index 0000000..db98684 --- /dev/null +++ b/src/openct/buffer.c @@ -0,0 +1,73 @@ +/* + * Buffer handling functions + * + * Copyright (C) 2003, Olaf Kirch + */ + +#include + +#ifdef HAVE_STRING_H +#include +#endif + +#include + +void +ct_buf_init(ct_buf_t *bp, void *mem, size_t len) +{ + memset(bp, 0, sizeof(*bp)); + bp->base = (unsigned char *) mem; + bp->size = len; +} + +void +ct_buf_set(ct_buf_t *bp, void *mem, size_t len) +{ + ct_buf_init(bp, mem, len); + bp->tail = len; +} + +int +ct_buf_get(ct_buf_t *bp, void *mem, size_t len) +{ + if (len > bp->tail - bp->head) + return -1; + if (mem) + memcpy(mem, bp->base + bp->head, len); + bp->head += len; + return len; +} + +int +ct_buf_put(ct_buf_t *bp, const void *mem, size_t len) +{ + if (len > bp->size - bp->tail) { + bp->overrun = 1; + return -1; + } + if (mem) + memcpy(bp->base + bp->tail, mem, len); + bp->tail += len; + return len; +} + +int +ct_buf_putc(ct_buf_t *bp, int byte) +{ + unsigned char c = byte; + + return ct_buf_put(bp, &c, 1); +} + +unsigned int +ct_buf_avail(ct_buf_t *bp) +{ + return bp->tail - bp->head; +} + +void * +ct_buf_head(ct_buf_t *bp) +{ + return bp->base + bp->head; +} + diff --git a/src/openct/buffer.h b/src/openct/buffer.h new file mode 100644 index 0000000..c05e470 --- /dev/null +++ b/src/openct/buffer.h @@ -0,0 +1,36 @@ +/* + * Buffer handling functions of the IFD handler library + * + * Copyright (C) 2003, Olaf Kirch + */ + +#ifndef OPENCT_BUFFER_H +#define OPENCT_BUFFER_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef HAVE_SYS_TYPES_H +#include +#endif + +typedef struct ct_buf { + unsigned char * base; + unsigned int head, tail, size; + unsigned int overrun; +} ct_buf_t; + +extern void ct_buf_init(ct_buf_t *, void *, size_t); +extern void ct_buf_set(ct_buf_t *, void *, size_t); +extern int ct_buf_get(ct_buf_t *, void *, size_t); +extern int ct_buf_put(ct_buf_t *, const void *, size_t); +extern int ct_buf_putc(ct_buf_t *, int); +extern unsigned int ct_buf_avail(ct_buf_t *); +extern void * ct_buf_head(ct_buf_t *); + +#ifdef __cplusplus +} +#endif + +#endif /* OPENCT_BUFFER_H */ diff --git a/src/openct/checksum.c b/src/openct/checksum.c new file mode 100644 index 0000000..744d910 --- /dev/null +++ b/src/openct/checksum.c @@ -0,0 +1,95 @@ +/* + * Checksum handling + * + * Copyright Matthias Bruestle 1999-2002 + * For licensing, see the file LICENCE + */ + +#include +#ifdef HAVE_STDINT_H +#include +#endif +#include "checksum.h" + +#define min( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) ) + +/* ISO STD 3309 */ +/* From: medin@catbyte.b30.ingr.com (Dave Medin) + * Subject: CCITT checksums + * Newsgroups: sci.electronics + * Date: Mon, 7 Dec 1992 17:33:39 GMT + */ + +/* Correct Table? */ + +static unsigned short crctab[256] = { + 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, + 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, + 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, + 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, + 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, + 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, + 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, + 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, + 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, + 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, + 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, + 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, + 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, + 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, + 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, + 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, + 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, + 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, + 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, + 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, + 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, + 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, + 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, + 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, + 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, + 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, + 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, + 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, + 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, + 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, + 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, + 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 +}; + +/* + * Returns LRC of data. + */ +unsigned int +csum_lrc_compute(const uint8_t *in, size_t len, unsigned char *rc) +{ + unsigned char lrc = 0; + + while (len--) + lrc ^= *in++; + + if (rc) + *rc = lrc; + return 1; +} + +/* + * Compute CRC of data. + */ +unsigned int +csum_crc_compute(const uint8_t * data, size_t len, unsigned char *rc) +{ + unsigned short v = 0xFFFF; + + while (len--) { + v = ((v >> 8) & 0xFF) ^ crctab[(v ^ *data++) & 0xFF]; + } + + if (rc) { + rc[0] = (v >> 8) & 0xFF; + rc[1] = v & 0xFF; + } + + return 2; +} + diff --git a/src/openct/checksum.h b/src/openct/checksum.h new file mode 100644 index 0000000..50f05b1 --- /dev/null +++ b/src/openct/checksum.h @@ -0,0 +1,35 @@ +/* + checksum.h: header file checksum.c + Copyright (C) 2004 Ludovic Rousseau + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef __CHECKSUM_H__ +#define __CHECKSUM_H__ + +#include +#ifdef HAVE_STDINT_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif + +extern unsigned int csum_lrc_compute(const uint8_t *, size_t, unsigned char *); +extern unsigned int csum_crc_compute(const uint8_t *, size_t, unsigned char *); + +#endif + diff --git a/src/openct/proto-t1.c b/src/openct/proto-t1.c new file mode 100644 index 0000000..912a1b5 --- /dev/null +++ b/src/openct/proto-t1.c @@ -0,0 +1,800 @@ +/* + * Implementation of T=1 + * + * Copyright (C) 2003, Olaf Kirch + * + * improvements by: + * Copyright (C) 2004 Ludovic Rousseau + */ + +#include + +#include +#include +#include "commands.h" +#include "buffer.h" +#include "debug.h" +#include "proto-t1.h" +#include "checksum.h" + +#include "ccid.h" + +#ifdef HAVE_STRING_H +#include +#endif + +/* I block */ +#define T1_I_SEQ_SHIFT 6 + +/* R block */ +#define T1_IS_ERROR(pcb) ((pcb) & 0x0F) +#define T1_EDC_ERROR 0x01 +#define T1_OTHER_ERROR 0x02 +#define T1_R_SEQ_SHIFT 4 + +/* S block stuff */ +#define T1_S_IS_RESPONSE(pcb) ((pcb) & T1_S_RESPONSE) +#define T1_S_TYPE(pcb) ((pcb) & 0x0F) +#define T1_S_RESPONSE 0x20 +#define T1_S_RESYNC 0x00 +#define T1_S_IFS 0x01 +#define T1_S_ABORT 0x02 +#define T1_S_WTX 0x03 + +#define swap_nibbles(x) ( (x >> 4) | ((x & 0xF) << 4) ) + +#ifndef TRUE +#define TRUE 1 +#define FALSE 0 +#endif + +#define NAD 0 +#define PCB 1 +#define LEN 2 +#define DATA 3 + +/* internal state, do not mess with it. */ +/* should be != DEAD after reset/init */ +enum { + SENDING, RECEIVING, RESYNCH, DEAD +}; + +static void t1_set_checksum(t1_state_t *, int); +static unsigned int t1_block_type(unsigned char); +static unsigned int t1_seq(unsigned char); +static unsigned int t1_rebuild(t1_state_t *t1, unsigned char *block); +static unsigned int t1_compute_checksum(t1_state_t *, unsigned char *, size_t); +static int t1_verify_checksum(t1_state_t *, unsigned char *, size_t); +static int t1_xcv(t1_state_t *, unsigned char *, size_t, size_t); + +/* + * Set default T=1 protocol parameters + */ +static void t1_set_defaults(t1_state_t * t1) +{ + t1->retries = 3; + /* This timeout is rather insane, but we need this right now + * to support cryptoflex keygen */ + t1->ifsc = 32; + t1->ifsd = 32; + t1->nr = 0; + t1->ns = 0; + t1->wtx = 0; +} + +static void t1_set_checksum(t1_state_t * t1, int csum) +{ + switch (csum) { + case IFD_PROTOCOL_T1_CHECKSUM_LRC: + t1->rc_bytes = 1; + t1->checksum = csum_lrc_compute; + break; + case IFD_PROTOCOL_T1_CHECKSUM_CRC: + t1->rc_bytes = 2; + t1->checksum = csum_crc_compute; + break; + } +} + +/* + * Attach t1 protocol + */ +int t1_init(t1_state_t * t1, int lun) +{ + t1_set_defaults(t1); + t1_set_param(t1, IFD_PROTOCOL_T1_CHECKSUM_LRC, 0); + t1_set_param(t1, IFD_PROTOCOL_T1_STATE, SENDING); + t1_set_param(t1, IFD_PROTOCOL_T1_MORE, FALSE); + + t1->lun = lun; + + return 0; +} + +/* + * Detach t1 protocol + */ +void t1_release(/*@unused@*/ t1_state_t * t1) +{ + (void)t1; + /* NOP */ +} + +/* + * Get/set parmaters for T1 protocol + */ +int t1_set_param(t1_state_t * t1, int type, long value) +{ + switch (type) { + case IFD_PROTOCOL_T1_CHECKSUM_LRC: + case IFD_PROTOCOL_T1_CHECKSUM_CRC: + t1_set_checksum(t1, type); + break; + case IFD_PROTOCOL_T1_IFSC: + t1->ifsc = value; + break; + case IFD_PROTOCOL_T1_IFSD: + t1->ifsd = value; + break; + case IFD_PROTOCOL_T1_STATE: + t1->state = value; + break; + case IFD_PROTOCOL_T1_MORE: + t1->more = value; + break; + default: + DEBUG_INFO2("Unsupported parameter %d", type); + return -1; + } + + return 0; +} + +/* + * Send an APDU through T=1 + */ +int t1_transceive(t1_state_t * t1, unsigned int dad, + const void *snd_buf, size_t snd_len, + void *rcv_buf, size_t rcv_len) +{ + ct_buf_t sbuf, rbuf, tbuf; + unsigned char sdata[T1_BUFFER_SIZE], sblk[5]; + unsigned int slen, retries, resyncs; + size_t last_send = 0; + + if (snd_len == 0) + return -1; + + /* we can't talk to a dead card / reader. Reset it! */ + if (t1->state == DEAD) + { + DEBUG_CRITICAL("T=1 state machine is DEAD. Reset the card first."); + return -1; + } + + t1->state = SENDING; + retries = t1->retries; + resyncs = 3; + + /* Initialize send/recv buffer */ + ct_buf_set(&sbuf, (void *)snd_buf, snd_len); + ct_buf_init(&rbuf, rcv_buf, rcv_len); + + /* Send the first block */ + slen = t1_build(t1, sdata, dad, T1_I_BLOCK, &sbuf, &last_send); + + while (1) { + unsigned char pcb; + int n; + + retries--; + + n = t1_xcv(t1, sdata, slen, sizeof(sdata)); + if (-2 == n) + { + DEBUG_COMM("Parity error"); + /* ISO 7816-3 Rule 7.4.2 */ + if (retries <= 0) + goto resync; + + /* ISO 7816-3 Rule 7.2 */ + if (T1_R_BLOCK == t1_block_type(t1->previous_block[PCB])) + { + DEBUG_COMM("Rule 7.2"); + slen = t1_rebuild(t1, sdata); + continue; + } + + slen = t1_build(t1, sdata, + dad, T1_R_BLOCK | T1_EDC_ERROR, + NULL, NULL); + continue; + } + + if (n < 0) { + DEBUG_CRITICAL("fatal: transmit/receive failed"); + t1->state = DEAD; + goto error; + } + + if ((sdata[NAD] != swap_nibbles(dad)) /* wrong NAD */ + || (sdata[LEN] == 0xFF)) /* length == 0xFF (illegal) */ + { + DEBUG_COMM("R-BLOCK required"); + /* ISO 7816-3 Rule 7.4.2 */ + if (retries <= 0) + goto resync; + + /* ISO 7816-3 Rule 7.2 */ + if (T1_R_BLOCK == t1_block_type(t1->previous_block[PCB])) + { + DEBUG_COMM("Rule 7.2"); + slen = t1_rebuild(t1, sdata); + continue; + } + + slen = t1_build(t1, sdata, + dad, T1_R_BLOCK | T1_OTHER_ERROR, + NULL, NULL); + continue; + } + + if (!t1_verify_checksum(t1, sdata, n)) { + DEBUG_COMM("checksum failed"); + /* ISO 7816-3 Rule 7.4.2 */ + if (retries <= 0) + goto resync; + + /* ISO 7816-3 Rule 7.2 */ + if (T1_R_BLOCK == t1_block_type(t1->previous_block[PCB])) + { + DEBUG_COMM("Rule 7.2"); + slen = t1_rebuild(t1, sdata); + continue; + } + + slen = t1_build(t1, sdata, + dad, T1_R_BLOCK | T1_EDC_ERROR, + NULL, NULL); + continue; + } + + pcb = sdata[PCB]; + switch (t1_block_type(pcb)) { + case T1_R_BLOCK: + if ((sdata[LEN] != 0x00) /* length != 0x00 (illegal) */ + || (pcb & 0x20) /* b6 of pcb is set */ + ) + { + DEBUG_COMM("R-Block required"); + /* ISO 7816-3 Rule 7.4.2 */ + if (retries <= 0) + goto resync; + + /* ISO 7816-3 Rule 7.2 */ + if (T1_R_BLOCK == t1_block_type(t1->previous_block[1])) + { + DEBUG_COMM("Rule 7.2"); + slen = t1_rebuild(t1, sdata); + continue; + } + + slen = t1_build(t1, sdata, + dad, T1_R_BLOCK | T1_OTHER_ERROR, + NULL, NULL); + continue; + } + + if (((t1_seq(pcb) != t1->ns) /* wrong sequence number & no bit more */ + && ! t1->more) + ) + { + DEBUG_COMM4("received: %d, expected: %d, more: %d", + t1_seq(pcb), t1->ns, t1->more); + + /* ISO 7816-3 Rule 7.4.2 */ + if (retries <= 0) + goto resync; + + /* ISO 7816-3 Rule 7.2 */ + if (T1_R_BLOCK == t1_block_type(t1->previous_block[PCB])) + { + DEBUG_COMM("Rule 7.2"); + slen = t1_rebuild(t1, sdata); + continue; + } + + DEBUG_COMM("R-Block required"); + slen = t1_build(t1, sdata, + dad, T1_R_BLOCK | T1_OTHER_ERROR, + NULL, NULL); + continue; + } + + if (t1->state == RECEIVING) { + /* ISO 7816-3 Rule 7.2 */ + if (T1_R_BLOCK == t1_block_type(t1->previous_block[1])) + { + /* ISO 7816-3 Rule 7.4.2 */ + if (retries <= 0) + goto resync; + + DEBUG_COMM("Rule 7.2"); + slen = t1_rebuild(t1, sdata); + continue; + } + + DEBUG_COMM(""); + slen = t1_build(t1, sdata, + dad, T1_R_BLOCK, + NULL, NULL); + break; + } + + /* If the card terminal requests the next + * sequence number, it received the previous + * block successfully */ + if (t1_seq(pcb) != t1->ns) { + ct_buf_get(&sbuf, NULL, last_send); + last_send = 0; + t1->ns ^= 1; + } + + /* If there's no data available, the ICC + * shouldn't be asking for more */ + if (ct_buf_avail(&sbuf) == 0) + goto resync; + + slen = t1_build(t1, sdata, dad, T1_I_BLOCK, + &sbuf, &last_send); + break; + + case T1_I_BLOCK: + /* The first I-block sent by the ICC indicates + * the last block we sent was received successfully. */ + if (t1->state == SENDING) { + DEBUG_COMM(""); + ct_buf_get(&sbuf, NULL, last_send); + last_send = 0; + t1->ns ^= 1; + } + + t1->state = RECEIVING; + + /* If the block sent by the card doesn't match + * what we expected it to send, reply with + * an R block */ + if (t1_seq(pcb) != t1->nr) { + DEBUG_COMM("wrong nr"); + + /* ISO 7816-3 Rule 7.4.2 */ + if (retries <= 0) + goto resync; + + slen = t1_build(t1, sdata, dad, + T1_R_BLOCK | T1_OTHER_ERROR, + NULL, NULL); + continue; + } + + t1->nr ^= 1; + + if (ct_buf_put(&rbuf, sdata + 3, sdata[LEN]) < 0) + { + DEBUG_CRITICAL2("buffer overrun by %d bytes", sdata[LEN] - (rbuf.size - rbuf.tail)); + goto error; + } + + if ((pcb & T1_MORE_BLOCKS) == 0) + goto done; + + slen = t1_build(t1, sdata, dad, T1_R_BLOCK, NULL, NULL); + break; + + case T1_S_BLOCK: + if (T1_S_IS_RESPONSE(pcb) && t1->state == RESYNCH) { + /* ISO 7816-3 Rule 6.2 */ + DEBUG_COMM("S-Block answer received"); + /* ISO 7816-3 Rule 6.3 */ + t1->state = SENDING; + last_send = 0; + resyncs = 3; + retries = t1->retries; + ct_buf_init(&rbuf, rcv_buf, rcv_len); + slen = t1_build(t1, sdata, dad, T1_I_BLOCK, + &sbuf, &last_send); + continue; + } + + if (T1_S_IS_RESPONSE(pcb)) + { + /* ISO 7816-3 Rule 7.4.2 */ + if (retries <= 0) + goto resync; + + /* ISO 7816-3 Rule 7.2 */ + if (T1_R_BLOCK == t1_block_type(t1->previous_block[PCB])) + { + DEBUG_COMM("Rule 7.2"); + slen = t1_rebuild(t1, sdata); + continue; + } + + DEBUG_CRITICAL("wrong response S-BLOCK received"); + slen = t1_build(t1, sdata, + dad, T1_R_BLOCK | T1_OTHER_ERROR, + NULL, NULL); + continue; + } + + ct_buf_init(&tbuf, sblk, sizeof(sblk)); + + DEBUG_COMM("S-Block request received"); + switch (T1_S_TYPE(pcb)) { + case T1_S_RESYNC: + if (sdata[LEN] != 0) + { + DEBUG_COMM2("Wrong length: %d", sdata[LEN]); + slen = t1_build(t1, sdata, dad, + T1_R_BLOCK | T1_OTHER_ERROR, + NULL, NULL); + continue; + } + + DEBUG_COMM("Resync requested"); + /* the card is not allowed to send a resync. */ + goto resync; + + case T1_S_ABORT: + if (sdata[LEN] != 0) + { + DEBUG_COMM2("Wrong length: %d", sdata[LEN]); + slen = t1_build(t1, sdata, dad, + T1_R_BLOCK | T1_OTHER_ERROR, + NULL, NULL); + continue; + } + + /* ISO 7816-3 Rule 9 */ + DEBUG_CRITICAL("abort requested"); + break; + + case T1_S_IFS: + if (sdata[LEN] != 1) + { + DEBUG_COMM2("Wrong length: %d", sdata[LEN]); + slen = t1_build(t1, sdata, dad, + T1_R_BLOCK | T1_OTHER_ERROR, + NULL, NULL); + continue; + } + + DEBUG_CRITICAL2("CT sent S-block with ifs=%u", sdata[DATA]); + if (sdata[DATA] == 0) + goto resync; + t1->ifsc = sdata[DATA]; + ct_buf_putc(&tbuf, sdata[DATA]); + break; + + case T1_S_WTX: + if (sdata[LEN] != 1) + { + DEBUG_COMM2("Wrong length: %d", sdata[LEN]); + slen = t1_build(t1, sdata, dad, + T1_R_BLOCK | T1_OTHER_ERROR, + NULL, NULL); + continue; + } + + DEBUG_COMM2("CT sent S-block with wtx=%u", sdata[DATA]); + t1->wtx = sdata[DATA]; + ct_buf_putc(&tbuf, sdata[DATA]); + break; + + default: + DEBUG_CRITICAL2("T=1: Unknown S block type 0x%02x", T1_S_TYPE(pcb)); + goto resync; + } + + slen = t1_build(t1, sdata, dad, + T1_S_BLOCK | T1_S_RESPONSE | T1_S_TYPE(pcb), + &tbuf, NULL); + } + + /* Everything went just splendid */ + retries = t1->retries; + continue; + +resync: + /* the number or resyncs is limited, too */ + /* ISO 7816-3 Rule 6.4 */ + if (resyncs == 0) + goto error; + + /* ISO 7816-3 Rule 6 */ + resyncs--; + t1->ns = 0; + t1->nr = 0; + slen = t1_build(t1, sdata, dad, T1_S_BLOCK | T1_S_RESYNC, NULL, + NULL); + t1->state = RESYNCH; + t1->more = FALSE; + retries = 1; + continue; + } + +done: + return ct_buf_avail(&rbuf); + +error: + t1->state = DEAD; + return -1; +} + +static unsigned t1_block_type(unsigned char pcb) +{ + switch (pcb & 0xC0) { + case T1_R_BLOCK: + return T1_R_BLOCK; + case T1_S_BLOCK: + return T1_S_BLOCK; + default: + return T1_I_BLOCK; + } +} + +static unsigned int t1_seq(unsigned char pcb) +{ + switch (pcb & 0xC0) { + case T1_R_BLOCK: + return (pcb >> T1_R_SEQ_SHIFT) & 1; + case T1_S_BLOCK: + return 0; + default: + return (pcb >> T1_I_SEQ_SHIFT) & 1; + } +} + +unsigned int t1_build(t1_state_t * t1, unsigned char *block, + unsigned char dad, unsigned char pcb, + ct_buf_t *bp, size_t *lenp) +{ + unsigned int len; + char more = FALSE; + + len = bp ? ct_buf_avail(bp) : 0; + if (len > t1->ifsc) { + pcb |= T1_MORE_BLOCKS; + len = t1->ifsc; + more = TRUE; + } + + /* Add the sequence number */ + switch (t1_block_type(pcb)) { + case T1_R_BLOCK: + pcb |= t1->nr << T1_R_SEQ_SHIFT; + break; + case T1_I_BLOCK: + pcb |= t1->ns << T1_I_SEQ_SHIFT; + t1->more = more; + DEBUG_COMM2("more bit: %d", more); + break; + } + + block[0] = dad; + block[1] = pcb; + block[2] = len; + + if (len) + memcpy(block + 3, ct_buf_head(bp), len); + if (lenp) + *lenp = len; + + len = t1_compute_checksum(t1, block, len + 3); + + /* memorize the last sent block */ + /* only 4 bytes since we are only interesed in R-blocks */ + memcpy(t1->previous_block, block, 4); + + return len; +} + +static unsigned int +t1_rebuild(t1_state_t *t1, unsigned char *block) +{ + unsigned char pcb = t1 -> previous_block[1]; + + /* copy the last sent block */ + if (T1_R_BLOCK == t1_block_type(pcb)) + memcpy(block, t1 -> previous_block, 4); + else + { + DEBUG_CRITICAL2("previous block was not R-Block: %02X", pcb); + return 0; + } + + return 4; +} + +/* + * Build/verify checksum + */ +static unsigned int t1_compute_checksum(t1_state_t * t1, + unsigned char *data, size_t len) +{ + return len + t1->checksum(data, len, data + len); +} + +static int t1_verify_checksum(t1_state_t * t1, unsigned char *rbuf, + size_t len) +{ + unsigned char csum[2]; + int m, n; + + m = len - t1->rc_bytes; + n = t1->rc_bytes; + + if (m < 0) + return 0; + + t1->checksum(rbuf, m, csum); + if (!memcmp(rbuf + m, csum, n)) + return 1; + + return 0; +} + +/* + * Send/receive block + */ +static int t1_xcv(t1_state_t * t1, unsigned char *block, size_t slen, + size_t rmax) +{ + int n; + _ccid_descriptor *ccid_desc ; + int oldReadTimeout; + unsigned int rmax_int; + + DEBUG_XXD("sending: ", block, slen); + + ccid_desc = get_ccid_descriptor(t1->lun); + oldReadTimeout = ccid_desc->readTimeout; + + if (t1->wtx > 1) + { + /* set the new temporary timeout at WTX card request */ + ccid_desc->readTimeout *= t1->wtx; + DEBUG_INFO2("New timeout at WTX request: %d sec", + ccid_desc->readTimeout); + } + + if (isCharLevel(t1->lun)) + { + rmax = 3; + + n = CCID_Transmit(t1 -> lun, slen, block, rmax, t1->wtx); + if (n != IFD_SUCCESS) + return -1; + + /* the second argument of CCID_Receive() is (unsigned int *) + * so we can't use &rmax since &rmax is a (size_t *) and may not + * be the same on 64-bits architectures for example (iMac G5) */ + rmax_int = rmax; + n = CCID_Receive(t1 -> lun, &rmax_int, block, NULL); + + if (n == IFD_PARITY_ERROR) + return -2; + if (n != IFD_SUCCESS) + return -1; + + rmax = block[2] + 1; + + n = CCID_Transmit(t1 -> lun, 0, block, rmax, t1->wtx); + if (n != IFD_SUCCESS) + return -1; + + rmax_int = rmax; + n = CCID_Receive(t1 -> lun, &rmax_int, &block[3], NULL); + rmax = rmax_int; + if (n == IFD_PARITY_ERROR) + return -2; + if (n != IFD_SUCCESS) + return -1; + + n = rmax + 3; + } + else + { + n = CCID_Transmit(t1 -> lun, slen, block, 0, t1->wtx); + t1->wtx = 0; /* reset to default value */ + if (n != IFD_SUCCESS) + return -1; + + /* Get the response en bloc */ + rmax_int = rmax; + n = CCID_Receive(t1 -> lun, &rmax_int, block, NULL); + rmax = rmax_int; + if (n == IFD_PARITY_ERROR) + return -2; + if (n != IFD_SUCCESS) + return -1; + + n = rmax; + } + + if (n >= 0) + { + int m; + + m = block[2] + 3 + t1->rc_bytes; + if (m < n) + n = m; + } + + if (n >= 0) + DEBUG_XXD("received: ", block, n); + + /* Restore initial timeout */ + ccid_desc->readTimeout = oldReadTimeout; + + return n; +} + +int t1_negotiate_ifsd(t1_state_t * t1, unsigned int dad, int ifsd) +{ + ct_buf_t sbuf; + unsigned char sdata[T1_BUFFER_SIZE]; + unsigned int slen; + unsigned int retries; + size_t snd_len; + int n; + unsigned char snd_buf[1]; + + retries = t1->retries; + + /* S-block IFSD request */ + snd_buf[0] = ifsd; + snd_len = 1; + + /* Initialize send/recv buffer */ + ct_buf_set(&sbuf, (void *)snd_buf, snd_len); + + while (TRUE) + { + /* Build the block */ + slen = t1_build(t1, sdata, 0, T1_S_BLOCK | T1_S_IFS, &sbuf, NULL); + + /* Send the block */ + n = t1_xcv(t1, sdata, slen, sizeof(sdata)); + + retries--; + /* ISO 7816-3 Rule 7.4.2 */ + if (retries <= 0) + goto error; + + if (-1 == n) + { + DEBUG_CRITICAL("fatal: transmit/receive failed"); + goto error; + } + + if ((-2 == n) /* Parity error */ + || (sdata[DATA] != ifsd) /* Wrong ifsd received */ + || (sdata[NAD] != swap_nibbles(dad)) /* wrong NAD */ + || (!t1_verify_checksum(t1, sdata, n)) /* checksum failed */ + || (n != 4 + (int)t1->rc_bytes) /* wrong frame length */ + || (sdata[LEN] != 1) /* wrong data length */ + || (sdata[PCB] != (T1_S_BLOCK | T1_S_RESPONSE | T1_S_IFS))) /* wrong PCB */ + continue; + + /* no more error */ + goto done; + } + +done: + return n; + +error: + t1->state = DEAD; + return -1; +} diff --git a/src/openct/proto-t1.h b/src/openct/proto-t1.h new file mode 100644 index 0000000..0816745 --- /dev/null +++ b/src/openct/proto-t1.h @@ -0,0 +1,83 @@ +/* + proto-t1.h: header file for proto-t1.c + Copyright (C) 2004 Ludovic Rousseau + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef __PROTO_T1_H__ +#define __PROTO_T1_H__ + +#include +#ifdef HAVE_STDINT_H +#include +#endif + +#include "buffer.h" + +/* T=1 protocol constants */ +#define T1_I_BLOCK 0x00 +#define T1_R_BLOCK 0x80 +#define T1_S_BLOCK 0xC0 +#define T1_MORE_BLOCKS 0x20 + +enum { + IFD_PROTOCOL_RECV_TIMEOUT = 0x0000, + IFD_PROTOCOL_T1_BLOCKSIZE, + IFD_PROTOCOL_T1_CHECKSUM_CRC, + IFD_PROTOCOL_T1_CHECKSUM_LRC, + IFD_PROTOCOL_T1_IFSC, + IFD_PROTOCOL_T1_IFSD, + IFD_PROTOCOL_T1_STATE, + IFD_PROTOCOL_T1_MORE +}; + +#define T1_BUFFER_SIZE (3 + 254 + 2) + +/* see /usr/include/PCSC/ifdhandler.h for other values + * this one is for internal use only */ +#define IFD_PARITY_ERROR 699 + +typedef struct { + int lun; + int state; + + unsigned char ns; /* reader side */ + unsigned char nr; /* card side */ + unsigned int ifsc; + unsigned int ifsd; + + unsigned char wtx; + unsigned int retries; + unsigned int rc_bytes; + + unsigned int (*checksum)(const uint8_t *, size_t, unsigned char *); + + char more; /* more data bit */ + unsigned char previous_block[4]; /* to store the last R-block */ +} t1_state_t; + +int t1_transceive(t1_state_t *t1, unsigned int dad, + const void *snd_buf, size_t snd_len, + void *rcv_buf, size_t rcv_len); +int t1_init(t1_state_t *t1, int lun); +void t1_release(t1_state_t *t1); +int t1_set_param(t1_state_t *t1, int type, long value); +int t1_negotiate_ifsd(t1_state_t *t1, unsigned int dad, int ifsd); +unsigned int t1_build(t1_state_t *, unsigned char *, + unsigned char, unsigned char, ct_buf_t *, size_t *); + +#endif + diff --git a/src/parse.c b/src/parse.c new file mode 100644 index 0000000..fe1e457 --- /dev/null +++ b/src/parse.c @@ -0,0 +1,589 @@ +/* + parse.c: parse CCID structure + Copyright (C) 2003-2010 Ludovic Rousseau + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., 51 + Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include +#include +# ifdef S_SPLINT_S +# include +# endif +#include +#include + +#include "defs.h" +#include "ccid.h" + +/* define DISPLAY_EXTRA_VALUES to display the extra (invalid) values + * returned by bNumClockSupported and bNumDataRatesSupported */ +#undef DISPLAY_EXTRA_VALUES + +#ifndef TRUE +#define TRUE 1 +#define FALSE 0 +#endif + +#define BLUE "\33[34m" +#define RED "\33[31m" +#define BRIGHT_RED "\33[01;31m" +#define GREEN "\33[32m" +#define MAGENTA "\33[35m" +#define NORMAL "\33[0m" + +/* global variables used in ccid_usb.c but defined in ifdhandler.c */ +int LogLevel = 1+2+4+8; /* full debug */ +int DriverOptions = 0; + +static int ccid_parse_interface_descriptor(libusb_device_handle *handle, + struct libusb_device_descriptor desc, + struct libusb_config_descriptor *config_desc, + int num, + const struct libusb_interface *usb_interface); + + +/***************************************************************************** + * + * main + * + ****************************************************************************/ +int main(int argc, char *argv[]) +{ + libusb_device **devs, *dev; + int nb = 0, r, i; + unsigned char buffer[256]; + char class_ff = FALSE; + ssize_t cnt; + + if ((argc > 1) && (0 == strcmp(argv[1], "-p"))) + class_ff = TRUE; + + r = libusb_init(NULL); + if (r < 0) + { + (void)printf("libusb_init() failed\n"); + return r; + } + + cnt = libusb_get_device_list(NULL, &devs); + if (cnt < 0) + { + (void)printf("libusb_get_device_list() failed\n"); + return (int)cnt; + } + + /* for every device */ + i = 0; + while ((dev = devs[i++]) != NULL) + { + struct libusb_device_descriptor desc; + struct libusb_config_descriptor *config_desc; + struct libusb_device_handle *handle; + const struct libusb_interface *usb_interface = NULL; +#ifndef __APPLE__ + int interface; +#endif + int num = 0; + + r = libusb_open(dev, &handle); + if (r < 0) + { + (void)fprintf(stderr, "Can't libusb_open(): %s\n", strerror(errno)); + if (getuid()) + { + (void)fprintf(stderr, + BRIGHT_RED "Please, restart the command as root\n" NORMAL); + return 1; + } + continue; + } + + r = libusb_get_device_descriptor(dev, &desc); + if (r < 0) + { + (void)fprintf(stderr, + BRIGHT_RED "failed to get device descriptor" NORMAL); + return 1; + } + + (void)fprintf(stderr, + "Parsing USB bus/device: %04X:%04X (bus %d, device %d)\n", + desc.idVendor, desc.idProduct, + libusb_get_bus_number(dev), libusb_get_device_address(dev)); + + (void)fprintf(stderr, " idVendor: 0x%04X", desc.idVendor); + r = libusb_get_string_descriptor_ascii(handle, desc.iManufacturer, + buffer, sizeof(buffer)); + if (r < 0) + { + (void)fprintf(stderr, " Can't get iManufacturer string\n"); + if (getuid()) + { + (void)fprintf(stderr, + BRIGHT_RED "Please, restart the command as root\n" NORMAL); + return 1; + } + } + else + (void)fprintf(stderr, + " iManufacturer: " BLUE "%s\n" NORMAL, buffer); + + (void)fprintf(stderr, " idProduct: 0x%04X", desc.idProduct); + r = libusb_get_string_descriptor_ascii(handle, desc.iProduct, + buffer, sizeof(buffer)); + if (r < 0) + (void)fprintf(stderr, " Can't get iProduct string\n"); + else + (void)fprintf(stderr, " iProduct: " BLUE "%s\n" NORMAL, buffer); + +again: + /* check if the device has bInterfaceClass == 11 */ + r = libusb_get_active_config_descriptor(dev, &config_desc); + if (r < 0) + { + (void)fprintf(stderr, " Can't get config descriptor: %d\n", r); + (void)libusb_close(handle); + continue; + } + + usb_interface = get_ccid_usb_interface(config_desc, &num); + if (NULL == usb_interface) + { + (void)libusb_close(handle); + /* only if we found no CCID interface */ + if (0 == num) + (void)fprintf(stderr, RED " NOT a CCID/ICCD device\n" NORMAL); + continue; + } + if (!class_ff && (0xFF == usb_interface->altsetting->bInterfaceClass)) + { + (void)libusb_close(handle); + (void)fprintf(stderr, MAGENTA " Found a possibly CCID/ICCD device (bInterfaceClass = 0xFF). Use %s -p\n" NORMAL, argv[0]); + continue; + } + (void)fprintf(stderr, + GREEN " Found a CCID/ICCD device at interface %d\n" NORMAL, num); + + /* now we found a free reader and we try to use it */ +#if 0 + if (NULL == dev->config) + { + (void)libusb_close(handle); + (void)fprintf(stderr, "No dev->config found for %s/%s\n", + bus->dirname, dev->filename); + continue; + } +#endif + +#ifndef __APPLE__ + interface = usb_interface->altsetting->bInterfaceNumber; + r = libusb_claim_interface(handle, interface); + if (r < 0) + { + (void)fprintf(stderr, + "Can't claim interface (bus %d, device %d): %s\n", + libusb_get_bus_number(dev), libusb_get_device_address(dev), + strerror(errno)); + (void)libusb_close(handle); + + if (EBUSY == errno) + { + (void)fprintf(stderr, + BRIGHT_RED " Please, stop pcscd and retry\n\n" NORMAL); + + if (class_ff) + /* maybe the device with Class = 0xFF is NOT a CCID + * reader */ + continue; + else + return TRUE; + } + continue; + } +#endif + + (void)ccid_parse_interface_descriptor(handle, desc, config_desc, num, + usb_interface); + nb++; + +#ifndef __APPLE__ + (void)libusb_release_interface(handle, interface); +#endif + /* check for another CCID interface on the same device */ + num++; + goto again; + } + + if ((0 == nb) && (0 != geteuid())) + (void)fprintf(stderr, + "Can't find any CCID device.\nMaybe you must run parse as root?\n"); + + libusb_exit(NULL); + + return 0; +} /* main */ + + +/***************************************************************************** + * + * Parse a CCID USB Descriptor + * + ****************************************************************************/ +static int ccid_parse_interface_descriptor(libusb_device_handle *handle, + struct libusb_device_descriptor desc, + struct libusb_config_descriptor *config_desc, + int num, + const struct libusb_interface *usb_interface) +{ + const struct libusb_interface_descriptor *usb_interface_descriptor; + const unsigned char *device_descriptor; + unsigned char buffer[256*sizeof(int)]; /* maximum is 256 records */ + int r; + + /* + * Vendor/model name + */ + (void)printf(" idVendor: 0x%04X\n", desc.idVendor); + r = libusb_get_string_descriptor_ascii(handle, desc.iManufacturer, + buffer, sizeof(buffer)); + if (r < 0) + { + (void)printf(" Can't get iManufacturer string\n"); + if (getuid()) + { + (void)fprintf(stderr, + BRIGHT_RED "Please, restart the command as root\n\n" NORMAL); + return TRUE; + } + } + else + (void)printf(" iManufacturer: %s\n", buffer); + + (void)printf(" idProduct: 0x%04X\n", desc.idProduct); + r = libusb_get_string_descriptor_ascii(handle, desc.iProduct, + buffer, sizeof(buffer)); + if (r < 0) + (void)printf(" Can't get iProduct string\n"); + else + (void)printf(" iProduct: %s\n", buffer); + + (void)printf(" bcdDevice: %X.%02X (firmware release?)\n", + desc.bcdDevice >> 8, desc.bcdDevice & 0xFF); + + usb_interface_descriptor = get_ccid_usb_interface(config_desc, &num)->altsetting; + + (void)printf(" bLength: %d\n", usb_interface_descriptor->bLength); + + (void)printf(" bDescriptorType: %d\n", usb_interface_descriptor->bDescriptorType); + + (void)printf(" bInterfaceNumber: %d\n", usb_interface_descriptor->bInterfaceNumber); + + (void)printf(" bAlternateSetting: %d\n", usb_interface_descriptor->bAlternateSetting); + + (void)printf(" bNumEndpoints: %d\n", usb_interface_descriptor->bNumEndpoints); + switch (usb_interface_descriptor->bNumEndpoints) + { + case 0: + (void)printf(" Control only\n"); + break; + case 1: + (void)printf(" Interrupt-IN\n"); + break; + case 2: + (void)printf(" bulk-IN and bulk-OUT\n"); + break; + case 3: + (void)printf(" bulk-IN, bulk-OUT and Interrupt-IN\n"); + break; + default: + (void)printf(" UNKNOWN value\n"); + } + + (void)printf(" bInterfaceClass: 0x%02X", usb_interface_descriptor->bInterfaceClass); + if (usb_interface_descriptor->bInterfaceClass == 0x0b) + (void)printf(" [Chip Card Interface Device Class (CCID)]\n"); + else + { + (void)printf("\n NOT A CCID DEVICE\n"); + if (usb_interface_descriptor->bInterfaceClass != 0xFF) + return TRUE; + else + (void)printf(" Class is 0xFF (proprietary)\n"); + } + + (void)printf(" bInterfaceSubClass: %d\n", + usb_interface_descriptor->bInterfaceSubClass); + if (usb_interface_descriptor->bInterfaceSubClass) + (void)printf(" UNSUPPORTED SubClass\n"); + + (void)printf(" bInterfaceProtocol: %d\n", + usb_interface_descriptor->bInterfaceProtocol); + switch (usb_interface_descriptor->bInterfaceProtocol) + { + case 0: + (void)printf(" bulk transfer, optional interrupt-IN (CCID)\n"); + break; + case 1: + (void)printf(" ICCD Version A, Control transfers, (no interrupt-IN)\n"); + break; + case 2: + (void)printf(" ICCD Version B, Control transfers, (optional interrupt-IN)\n"); + break; + default: + (void)printf(" UNSUPPORTED InterfaceProtocol\n"); + } + + r = libusb_get_string_descriptor_ascii(handle, usb_interface_descriptor->iInterface, + buffer, sizeof(buffer)); + if (r < 0) + (void)printf(" Can't get iInterface string\n"); + else + (void)printf(" iInterface: %s\n", buffer); + + device_descriptor = get_ccid_device_descriptor(usb_interface); + if (NULL == device_descriptor) + { + (void)printf("\n NOT A CCID DEVICE\n"); + return TRUE; + } + + /* + * CCID Class Descriptor + */ + (void)printf(" CCID Class Descriptor\n"); + + (void)printf(" bLength: 0x%02X\n", device_descriptor[0]); + if (device_descriptor[0] != 0x36) + { + (void)printf(" UNSUPPORTED bLength\n"); + return TRUE; + } + + (void)printf(" bDescriptorType: 0x%02X\n", device_descriptor[1]); + if (device_descriptor[1] != 0x21) + { + if (0xFF == device_descriptor[1]) + (void)printf(" PROPRIETARY bDescriptorType\n"); + else + { + (void)printf(" UNSUPPORTED bDescriptorType\n"); + return TRUE; + } + } + + (void)printf(" bcdCCID: %X.%02X\n", device_descriptor[3], device_descriptor[2]); + (void)printf(" bMaxSlotIndex: 0x%02X\n", device_descriptor[4]); + (void)printf(" bVoltageSupport: 0x%02X\n", device_descriptor[5]); + if (device_descriptor[5] & 0x01) + (void)printf(" 5.0V\n"); + if (device_descriptor[5] & 0x02) + (void)printf(" 3.0V\n"); + if (device_descriptor[5] & 0x04) + (void)printf(" 1.8V\n"); + + (void)printf(" dwProtocols: 0x%02X%02X 0x%02X%02X\n", device_descriptor[9], device_descriptor[8], + device_descriptor[7], device_descriptor[6]); + if (device_descriptor[6] & 0x01) + (void)printf(" T=0\n"); + if (device_descriptor[6] & 0x02) + (void)printf(" T=1\n"); + + (void)printf(" dwDefaultClock: %.3f MHz\n", dw2i(device_descriptor, 10)/1000.0); + (void)printf(" dwMaximumClock: %.3f MHz\n", dw2i(device_descriptor, 14)/1000.0); + (void)printf(" bNumClockSupported: %d%s\n", device_descriptor[18], + device_descriptor[18] ? "" : " (will use whatever is returned)"); + { + int n; + + /* See CCID 3.7.2 page 25 */ + n = libusb_control_transfer(handle, + 0xA1, /* request type */ + 0x02, /* GET CLOCK FREQUENCIES */ + 0x00, /* value */ + usb_interface_descriptor->bInterfaceNumber, /* interface */ + buffer, + sizeof(buffer), + 2 * 1000); + + /* we got an error? */ + if (n <= 0) + { + (void)(void)printf(" IFD does not support GET CLOCK FREQUENCIES request: %s\n", strerror(errno)); + if (EBUSY == errno) + { + (void)fprintf(stderr, + BRIGHT_RED " Please, stop pcscd and retry\n\n" NORMAL); + return TRUE; + } + } + else + if (n % 4) /* not a multiple of 4 */ + (void)printf(" wrong size for GET CLOCK FREQUENCIES: %d\n", n); + else + { + int i; + + /* we do not get the expected number of data rates */ + if ((n != device_descriptor[18]*4) && device_descriptor[18]) + { + (void)printf(" Got %d clock frequencies but was expecting %d\n", + n/4, device_descriptor[18]); + + /* we got more data than expected */ +#ifndef DISPLAY_EXTRA_VALUES + if (n > device_descriptor[18]*4) + n = device_descriptor[18]*4; +#endif + } + + for (i=0; ibInterfaceNumber, /* interface */ + buffer, + sizeof(buffer), + 2 * 1000); + + /* we got an error? */ + if (n <= 0) + (void)printf(" IFD does not support GET_DATA_RATES request: %s\n", + strerror(errno)); + else + if (n % 4) /* not a multiple of 4 */ + (void)printf(" wrong size for GET_DATA_RATES: %d\n", n); + else + { + int i; + + /* we do not get the expected number of data rates */ + if ((n != device_descriptor[27]*4) && device_descriptor[27]) + { + (void)printf(" Got %d data rates but was expecting %d\n", n/4, + device_descriptor[27]); + + /* we got more data than expected */ +#ifndef DISPLAY_EXTRA_VALUES + if (n > device_descriptor[27]*4) + n = device_descriptor[27]*4; +#endif + } + + for (i=0; i + * Copyright (C) 2003-2009 + * Ludovic Rousseau + * +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 Reads lexical config files and updates database. + */ + +#ifndef __parser_h__ +#define __parser_h__ + +#include "simclist.h" + +struct bundleElt +{ + char *key; + list_t values; +}; + +int LTPBundleFindValueWithKey(list_t *l, const char *key, list_t **values); +int bundleParse(const char *fileName, list_t *l); +void bundleRelease(list_t *l); + +#endif diff --git a/src/reader.conf.in b/src/reader.conf.in new file mode 100644 index 0000000..7dbed28 --- /dev/null +++ b/src/reader.conf.in @@ -0,0 +1,14 @@ +# Gemalto reader with serial communication +# - n is the serial port to use n in [0..3] +# - reader is the reader name. It is needed for multi-slot readers. +# Possible reader values are: +# GemCorePOSPro +# GemCoreSIMPro +# GemCoreSIMPro2 +# GemPCPinPad +# GemPCTwin (default value) +# SEC1210 (Dual slot Reader) +# example: /dev/ttyS0:GemPCPinPad +#DEVICENAME /dev/ttySn[:reader] +#FRIENDLYNAME "GemPCTwin serial" +#LIBPATH TARGET diff --git a/src/simclist.c b/src/simclist.c new file mode 100644 index 0000000..c8d36f5 --- /dev/null +++ b/src/simclist.c @@ -0,0 +1,1525 @@ +/* + * Copyright (c) 2007,2008,2009,2010,2011 Mij + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + + +/* + * SimCList library. See http://mij.oltrelinux.com/devel/simclist + */ + +/* SimCList implementation, version 1.6 */ + +#include +#include +#include /* for setting errno */ +#include +#ifndef _WIN32 + /* not in Windows! */ +# include +# include +#endif +#ifndef SIMCLIST_NO_DUMPRESTORE + /* includes for dump/restore */ +# include +# include /* for READ_ERRCHECK() and write() */ +# include /* for open() etc */ +# ifndef _WIN32 +# include /* for htons() on UNIX */ +# else +# include /* for htons() on Windows */ +# endif +#endif + +/* disable asserts */ +#ifndef SIMCLIST_DEBUG +#define NDEBUG +#endif + +#include + + +#include /* for open()'s access modes S_IRUSR etc */ +#include + +#if defined(_MSC_VER) || defined(__MINGW32__) +/* provide gettimeofday() missing in Windows */ +int gettimeofday(struct timeval *tp, void *tzp) { + DWORD t; + + /* XSI says: "If tzp is not a null pointer, the behavior is unspecified" */ + assert(tzp == NULL); + + t = timeGetTime(); + tp->tv_sec = t / 1000; + tp->tv_usec = t % 1000; + return 0; +} +#endif + + +/* work around lack of inttypes.h support in broken Microsoft Visual Studio compilers */ +#if !defined(_WIN32) || !defined(_MSC_VER) +# include /* (u)int*_t */ +#else +# include +typedef UINT8 uint8_t; +typedef UINT16 uint16_t; +typedef ULONG32 uint32_t; +typedef UINT64 uint64_t; +typedef INT8 int8_t; +typedef INT16 int16_t; +typedef LONG32 int32_t; +typedef INT64 int64_t; +#endif + + +/* define some commodity macros for Dump/Restore functionality */ +#ifndef SIMCLIST_NO_DUMPRESTORE +/* write() decorated with error checking logic */ +#define WRITE_ERRCHECK(fd, msgbuf, msglen) do { \ + if (write(fd, msgbuf, msglen) < 0) return -1; \ + } while (0); +/* READ_ERRCHECK() decorated with error checking logic */ +#define READ_ERRCHECK(fd, msgbuf, msglen) do { \ + if (read(fd, msgbuf, msglen) != msglen) { \ + /*errno = EPROTO;*/ \ + return -1; \ + } \ + } while (0); + +/* convert 64bit integers from host to network format */ +#define hton64(x) (\ + htons(1) == 1 ? \ + (uint64_t)x /* big endian */ \ + : /* little endian */ \ + ((uint64_t)((((uint64_t)(x) & 0xff00000000000000ULL) >> 56) | \ + (((uint64_t)(x) & 0x00ff000000000000ULL) >> 40) | \ + (((uint64_t)(x) & 0x0000ff0000000000ULL) >> 24) | \ + (((uint64_t)(x) & 0x000000ff00000000ULL) >> 8) | \ + (((uint64_t)(x) & 0x00000000ff000000ULL) << 8) | \ + (((uint64_t)(x) & 0x0000000000ff0000ULL) << 24) | \ + (((uint64_t)(x) & 0x000000000000ff00ULL) << 40) | \ + (((uint64_t)(x) & 0x00000000000000ffULL) << 56))) \ + ) + +/* convert 64bit integers from network to host format */ +#define ntoh64(x) (hton64(x)) +#endif + +/* some OSes don't have EPROTO (eg OpenBSD) */ +#ifndef EPROTO +#define EPROTO EIO +#endif + +#ifdef SIMCLIST_WITH_THREADS +/* limit (approx) to the number of threads running + * for threaded operations. Only meant when + * SIMCLIST_WITH_THREADS is defined */ +#define SIMCLIST_MAXTHREADS 2 +#endif + +/* + * how many elems to keep as spare. During a deletion, an element + * can be saved in a "free-list", not free()d immediately. When + * latter insertions are performed, spare elems can be used instead + * of malloc()ing new elems. + * + * about this param, some values for appending + * 10 million elems into an empty list: + * (#, time[sec], gain[%], gain/no[%]) + * 0 2,164 0,00 0,00 <-- feature disabled + * 1 1,815 34,9 34,9 + * 2 1,446 71,8 35,9 <-- MAX gain/no + * 3 1,347 81,7 27,23 + * 5 1,213 95,1 19,02 + * 8 1,064 110,0 13,75 + * 10 1,015 114,9 11,49 <-- MAX gain w/ likely sol + * 15 1,019 114,5 7,63 + * 25 0,985 117,9 4,72 + * 50 1,088 107,6 2,15 + * 75 1,016 114,8 1,53 + * 100 0,988 117,6 1,18 + * 150 1,022 114,2 0,76 + * 200 0,939 122,5 0,61 <-- MIN time + */ +#ifndef SIMCLIST_MAX_SPARE_ELEMS +#define SIMCLIST_MAX_SPARE_ELEMS 5 +#endif + + +#ifdef SIMCLIST_WITH_THREADS +#include +#endif + +#include "simclist.h" + + +/* minumum number of elements for sorting with quicksort instead of insertion */ +#define SIMCLIST_MINQUICKSORTELS 24 + + +/* list dump declarations */ +#define SIMCLIST_DUMPFORMAT_VERSION 1 /* (short integer) version of fileformat managed by _dump* and _restore* functions */ + +#define SIMCLIST_DUMPFORMAT_HEADERLEN 30 /* length of the header */ + +/* header for a list dump */ +struct list_dump_header_s { + uint16_t ver; /* version */ + int32_t timestamp_sec; /* dump timestamp, seconds since UNIX Epoch */ + int32_t timestamp_usec; /* dump timestamp, microseconds since timestamp_sec */ + int32_t rndterm; /* random value terminator -- terminates the data sequence */ + + uint32_t totlistlen; /* sum of every element' size, bytes */ + uint32_t numels; /* number of elements */ + uint32_t elemlen; /* bytes length of an element, for constant-size lists, <= 0 otherwise */ + int32_t listhash; /* hash of the list at the time of dumping, or 0 if to be ignored */ +}; + + + +/* deletes tmp from list, with care wrt its position (head, tail, middle) */ +static int list_drop_elem(list_t *restrict l, struct list_entry_s *tmp, unsigned int pos); + +/* set default values for initialized lists */ +static int list_attributes_setdefaults(list_t *restrict l); + +#ifndef NDEBUG +/* check whether the list internal REPresentation is valid -- Costs O(n) */ +static int list_repOk(const list_t *restrict l); + +/* check whether the list attribute set is valid -- Costs O(1) */ +static int list_attrOk(const list_t *restrict l); +#endif + +/* do not inline, this is recursive */ +static void list_sort_quicksort(list_t *restrict l, int versus, + unsigned int first, struct list_entry_s *fel, + unsigned int last, struct list_entry_s *lel); + +static inline void list_sort_selectionsort(list_t *restrict l, int versus, + unsigned int first, struct list_entry_s *fel, + unsigned int last, struct list_entry_s *lel); + +static void *list_get_minmax(const list_t *restrict l, int versus); + +static inline struct list_entry_s *list_findpos(const list_t *restrict l, int posstart); + +/* + * Random Number Generator + * + * The user is expected to seed the RNG (ie call srand()) if + * SIMCLIST_SYSTEM_RNG is defined. + * + * Otherwise, a self-contained RNG based on LCG is used; see + * http://en.wikipedia.org/wiki/Linear_congruential_generator . + * + * Facts pro local RNG: + * 1. no need for the user to call srand() on his own + * 2. very fast, possibly faster than OS + * 3. avoid interference with user's RNG + * + * Facts pro system RNG: + * 1. may be more accurate (irrelevant for SimCList randno purposes) + * 2. why reinvent the wheel + * + * Default to local RNG for user's ease of use. + */ + +#ifdef SIMCLIST_SYSTEM_RNG +/* keep track whether we initialized already (non-0) or not (0) */ +static unsigned random_seed = 0; + +/* use local RNG */ +static inline void seed_random(void) { + if (random_seed == 0) + random_seed = (unsigned)getpid() ^ (unsigned)time(NULL); +} + +static inline long get_random(void) { + random_seed = (1664525 * random_seed + 1013904223); + return random_seed; +} + +#else +/* use OS's random generator */ +# define seed_random() +# define get_random() (rand()) +#endif + + +/* list initialization */ +int list_init(list_t *restrict l) { + if (l == NULL) return -1; + + seed_random(); + + l->numels = 0; + + /* head/tail sentinels and mid pointer */ + l->head_sentinel = (struct list_entry_s *)malloc(sizeof(struct list_entry_s)); + l->tail_sentinel = (struct list_entry_s *)malloc(sizeof(struct list_entry_s)); + l->head_sentinel->next = l->tail_sentinel; + l->tail_sentinel->prev = l->head_sentinel; + l->head_sentinel->prev = l->tail_sentinel->next = l->mid = NULL; + l->head_sentinel->data = l->tail_sentinel->data = NULL; + + /* iteration attributes */ + l->iter_active = 0; + l->iter_pos = 0; + l->iter_curentry = NULL; + + /* free-list attributes */ + l->spareels = (struct list_entry_s **)malloc(SIMCLIST_MAX_SPARE_ELEMS * sizeof(struct list_entry_s *)); + l->spareelsnum = 0; + +#ifdef SIMCLIST_WITH_THREADS + l->threadcount = 0; +#endif + + list_attributes_setdefaults(l); + + assert(list_repOk(l)); + assert(list_attrOk(l)); + + return 0; +} + +void list_destroy(list_t *restrict l) { + unsigned int i; + + list_clear(l); + for (i = 0; i < l->spareelsnum; i++) { + free(l->spareels[i]); + } + free(l->spareels); + free(l->head_sentinel); + free(l->tail_sentinel); +} + +int list_attributes_setdefaults(list_t *restrict l) { + l->attrs.comparator = NULL; + l->attrs.seeker = NULL; + + /* also free() element data when removing and element from the list */ + l->attrs.meter = NULL; + l->attrs.copy_data = 0; + + l->attrs.hasher = NULL; + + /* serializer/unserializer */ + l->attrs.serializer = NULL; + l->attrs.unserializer = NULL; + + assert(list_attrOk(l)); + + return 0; +} + +/* setting list properties */ +int list_attributes_comparator(list_t *restrict l, element_comparator comparator_fun) { + if (l == NULL) return -1; + + l->attrs.comparator = comparator_fun; + + assert(list_attrOk(l)); + + return 0; +} + +int list_attributes_seeker(list_t *restrict l, element_seeker seeker_fun) { + if (l == NULL) return -1; + + l->attrs.seeker = seeker_fun; + assert(list_attrOk(l)); + + return 0; +} + +int list_attributes_copy(list_t *restrict l, element_meter metric_fun, int copy_data) { + if (l == NULL || (metric_fun == NULL && copy_data != 0)) return -1; + + l->attrs.meter = metric_fun; + l->attrs.copy_data = copy_data; + + assert(list_attrOk(l)); + + return 0; +} + +int list_attributes_hash_computer(list_t *restrict l, element_hash_computer hash_computer_fun) { + if (l == NULL) return -1; + + l->attrs.hasher = hash_computer_fun; + assert(list_attrOk(l)); + return 0; +} + +int list_attributes_serializer(list_t *restrict l, element_serializer serializer_fun) { + if (l == NULL) return -1; + + l->attrs.serializer = serializer_fun; + assert(list_attrOk(l)); + return 0; +} + +int list_attributes_unserializer(list_t *restrict l, element_unserializer unserializer_fun) { + if (l == NULL) return -1; + + l->attrs.unserializer = unserializer_fun; + assert(list_attrOk(l)); + return 0; +} + +int list_append(list_t *restrict l, const void *data) { + return list_insert_at(l, data, l->numels); +} + +int list_prepend(list_t *restrict l, const void *data) { + return list_insert_at(l, data, 0); +} + +void *list_fetch(list_t *restrict l) { + return list_extract_at(l, 0); +} + +void *list_get_at(const list_t *restrict l, unsigned int pos) { + struct list_entry_s *tmp; + + tmp = list_findpos(l, pos); + + return (tmp != NULL ? tmp->data : NULL); +} + +void *list_get_max(const list_t *restrict l) { + return list_get_minmax(l, +1); +} + +void *list_get_min(const list_t *restrict l) { + return list_get_minmax(l, -1); +} + +/* REQUIRES {list->numels >= 1} + * return the min (versus < 0) or max value (v > 0) in l */ +static void *list_get_minmax(const list_t *restrict l, int versus) { + void *curminmax; + struct list_entry_s *s; + + if (l->attrs.comparator == NULL || l->numels == 0) + return NULL; + + curminmax = l->head_sentinel->next->data; + for (s = l->head_sentinel->next->next; s != l->tail_sentinel; s = s->next) { + if (l->attrs.comparator(curminmax, s->data) * versus > 0) + curminmax = s->data; + } + + return curminmax; +} + +/* set tmp to point to element at index posstart in l */ +static inline struct list_entry_s *list_findpos(const list_t *restrict l, int posstart) { + struct list_entry_s *ptr; + float x; + int i; + + /* accept 1 slot overflow for fetching head and tail sentinels */ + if (posstart < -1 || posstart > (int)l->numels) return NULL; + + x = (float)(posstart+1) / l->numels; + if (x <= 0.25) { + /* first quarter: get to posstart from head */ + for (i = -1, ptr = l->head_sentinel; i < posstart; ptr = ptr->next, i++); + } else if (x < 0.5) { + /* second quarter: get to posstart from mid */ + for (i = (l->numels-1)/2, ptr = l->mid; i > posstart; ptr = ptr->prev, i--); + } else if (x <= 0.75) { + /* third quarter: get to posstart from mid */ + for (i = (l->numels-1)/2, ptr = l->mid; i < posstart; ptr = ptr->next, i++); + } else { + /* fourth quarter: get to posstart from tail */ + for (i = l->numels, ptr = l->tail_sentinel; i > posstart; ptr = ptr->prev, i--); + } + + return ptr; +} + +void *list_extract_at(list_t *restrict l, unsigned int pos) { + struct list_entry_s *tmp; + void *data; + + if (l->iter_active || pos >= l->numels) return NULL; + + tmp = list_findpos(l, pos); + data = tmp->data; + + tmp->data = NULL; /* save data from list_drop_elem() free() */ + list_drop_elem(l, tmp, pos); + l->numels--; + + assert(list_repOk(l)); + + return data; +} + +int list_insert_at(list_t *restrict l, const void *data, unsigned int pos) { + struct list_entry_s *lent, *succ, *prec; + + if (l->iter_active || pos > l->numels) return -1; + + /* this code optimizes malloc() with a free-list */ + if (l->spareelsnum > 0) { + lent = l->spareels[l->spareelsnum-1]; + l->spareelsnum--; + } else { + lent = (struct list_entry_s *)malloc(sizeof(struct list_entry_s)); + if (lent == NULL) + return -1; + } + + if (l->attrs.copy_data) { + /* make room for user' data (has to be copied) */ + size_t datalen = l->attrs.meter(data); + lent->data = (struct list_entry_s *)malloc(datalen); + memcpy(lent->data, data, datalen); + } else { + lent->data = (void*)data; + } + + /* actually append element */ + prec = list_findpos(l, pos-1); + succ = prec->next; + + prec->next = lent; + lent->prev = prec; + lent->next = succ; + succ->prev = lent; + + l->numels++; + + /* fix mid pointer */ + if (l->numels == 1) { /* first element, set pointer */ + l->mid = lent; + } else if (l->numels % 2) { /* now odd */ + if (pos >= (l->numels-1)/2) l->mid = l->mid->next; + } else { /* now even */ + if (pos <= (l->numels-1)/2) l->mid = l->mid->prev; + } + + assert(list_repOk(l)); + + return 1; +} + +int list_delete(list_t *restrict l, const void *data) { + int pos, r; + + pos = list_locate(l, data); + if (pos < 0) + return -1; + + r = list_delete_at(l, pos); + if (r < 0) + return -1; + + assert(list_repOk(l)); + + return 0; +} + +int list_delete_at(list_t *restrict l, unsigned int pos) { + struct list_entry_s *delendo; + + + if (l->iter_active || pos >= l->numels) return -1; + + delendo = list_findpos(l, pos); + + list_drop_elem(l, delendo, pos); + + l->numels--; + + + assert(list_repOk(l)); + + return 0; +} + +int list_delete_range(list_t *restrict l, unsigned int posstart, unsigned int posend) { + struct list_entry_s *lastvalid, *tmp, *tmp2; + unsigned int numdel, midposafter, i; + int movedx; + + if (l->iter_active || posend < posstart || posend >= l->numels) return -1; + + numdel = posend - posstart + 1; + if (numdel == l->numels) return list_clear(l); + + tmp = list_findpos(l, posstart); /* first el to be deleted */ + lastvalid = tmp->prev; /* last valid element */ + + midposafter = (l->numels-1-numdel)/2; + + midposafter = midposafter < posstart ? midposafter : midposafter+numdel; + movedx = midposafter - (l->numels-1)/2; + + if (movedx > 0) { /* move right */ + for (i = 0; i < (unsigned int)movedx; l->mid = l->mid->next, i++); + } else { /* move left */ + movedx = -movedx; + for (i = 0; i < (unsigned int)movedx; l->mid = l->mid->prev, i++); + } + + assert(posstart == 0 || lastvalid != l->head_sentinel); + i = posstart; + if (l->attrs.copy_data) { + /* also free element data */ + for (; i <= posend; i++) { + tmp2 = tmp; + tmp = tmp->next; + if (tmp2->data != NULL) free(tmp2->data); + if (l->spareelsnum < SIMCLIST_MAX_SPARE_ELEMS) { + l->spareels[l->spareelsnum++] = tmp2; + } else { + free(tmp2); + } + } + } else { + /* only free containers */ + for (; i <= posend; i++) { + tmp2 = tmp; + tmp = tmp->next; + if (l->spareelsnum < SIMCLIST_MAX_SPARE_ELEMS) { + l->spareels[l->spareelsnum++] = tmp2; + } else { + free(tmp2); + } + } + } + assert(i == posend+1 && (posend != l->numels || tmp == l->tail_sentinel)); + + lastvalid->next = tmp; + tmp->prev = lastvalid; + + l->numels -= posend - posstart + 1; + + assert(list_repOk(l)); + + return numdel; +} + +int list_clear(list_t *restrict l) { + struct list_entry_s *s; + unsigned int numels; + + /* will be returned */ + numels = l->numels; + + if (l->iter_active) return -1; + + if (l->attrs.copy_data) { /* also free user data */ + /* spare a loop conditional with two loops: spareing elems and freeing elems */ + for (s = l->head_sentinel->next; l->spareelsnum < SIMCLIST_MAX_SPARE_ELEMS && s != l->tail_sentinel; s = s->next) { + /* move elements as spares as long as there is room */ + if (s->data != NULL) free(s->data); + l->spareels[l->spareelsnum++] = s; + } + while (s != l->tail_sentinel) { + /* free the remaining elems */ + if (s->data != NULL) free(s->data); + s = s->next; + free(s->prev); + } + l->head_sentinel->next = l->tail_sentinel; + l->tail_sentinel->prev = l->head_sentinel; + } else { /* only free element containers */ + /* spare a loop conditional with two loops: spareing elems and freeing elems */ + for (s = l->head_sentinel->next; l->spareelsnum < SIMCLIST_MAX_SPARE_ELEMS && s != l->tail_sentinel; s = s->next) { + /* move elements as spares as long as there is room */ + l->spareels[l->spareelsnum++] = s; + } + while (s != l->tail_sentinel) { + /* free the remaining elems */ + s = s->next; + free(s->prev); + } + l->head_sentinel->next = l->tail_sentinel; + l->tail_sentinel->prev = l->head_sentinel; + } + l->numels = 0; + l->mid = NULL; + + assert(list_repOk(l)); + + return numels; +} + +unsigned int list_size(const list_t *restrict l) { + return l->numels; +} + +int list_empty(const list_t *restrict l) { + return (l->numels == 0); +} + +int list_locate(const list_t *restrict l, const void *data) { + struct list_entry_s *el; + int pos = 0; + + if (l->attrs.comparator != NULL) { + /* use comparator */ + for (el = l->head_sentinel->next; el != l->tail_sentinel; el = el->next, pos++) { + if (l->attrs.comparator(data, el->data) == 0) break; + } + } else { + /* compare references */ + for (el = l->head_sentinel->next; el != l->tail_sentinel; el = el->next, pos++) { + if (el->data == data) break; + } + } + if (el == l->tail_sentinel) return -1; + + return pos; +} + +void *list_seek(list_t *restrict l, const void *indicator) { + const struct list_entry_s *iter; + + if (l->attrs.seeker == NULL) return NULL; + + for (iter = l->head_sentinel->next; iter != l->tail_sentinel; iter = iter->next) { + if (l->attrs.seeker(iter->data, indicator) != 0) return iter->data; + } + + return NULL; +} + +int list_contains(const list_t *restrict l, const void *data) { + return (list_locate(l, data) >= 0); +} + +int list_concat(const list_t *l1, const list_t *l2, list_t *restrict dest) { + struct list_entry_s *el, *srcel; + unsigned int cnt; + int err; + + + if (l1 == NULL || l2 == NULL || dest == NULL || l1 == dest || l2 == dest) + return -1; + + list_init(dest); + + dest->numels = l1->numels + l2->numels; + if (dest->numels == 0) + return 0; + + /* copy list1 */ + srcel = l1->head_sentinel->next; + el = dest->head_sentinel; + while (srcel != l1->tail_sentinel) { + el->next = (struct list_entry_s *)malloc(sizeof(struct list_entry_s)); + el->next->prev = el; + el = el->next; + el->data = srcel->data; + srcel = srcel->next; + } + dest->mid = el; /* approximate position (adjust later) */ + /* copy list 2 */ + srcel = l2->head_sentinel->next; + while (srcel != l2->tail_sentinel) { + el->next = (struct list_entry_s *)malloc(sizeof(struct list_entry_s)); + el->next->prev = el; + el = el->next; + el->data = srcel->data; + srcel = srcel->next; + } + el->next = dest->tail_sentinel; + dest->tail_sentinel->prev = el; + + /* fix mid pointer */ + err = l2->numels - l1->numels; + if ((err+1)/2 > 0) { /* correct pos RIGHT (err-1)/2 moves */ + err = (err+1)/2; + for (cnt = 0; cnt < (unsigned int)err; cnt++) dest->mid = dest->mid->next; + } else if (err/2 < 0) { /* correct pos LEFT (err/2)-1 moves */ + err = -err/2; + for (cnt = 0; cnt < (unsigned int)err; cnt++) dest->mid = dest->mid->prev; + } + + assert(!(list_repOk(l1) && list_repOk(l2)) || list_repOk(dest)); + + return 0; +} + +int list_sort(list_t *restrict l, int versus) { + if (l->iter_active || l->attrs.comparator == NULL) /* cannot modify list in the middle of an iteration */ + return -1; + + if (l->numels <= 1) + return 0; + list_sort_quicksort(l, versus, 0, l->head_sentinel->next, l->numels-1, l->tail_sentinel->prev); + assert(list_repOk(l)); + return 0; +} + +#ifdef SIMCLIST_WITH_THREADS +struct list_sort_wrappedparams { + list_t *restrict l; + int versus; + unsigned int first, last; + struct list_entry_s *fel, *lel; +}; + +static void *list_sort_quicksort_threadwrapper(void *wrapped_params) { + struct list_sort_wrappedparams *wp = (struct list_sort_wrappedparams *)wrapped_params; + list_sort_quicksort(wp->l, wp->versus, wp->first, wp->fel, wp->last, wp->lel); + free(wp); + pthread_exit(NULL); + return NULL; +} +#endif + +static inline void list_sort_selectionsort(list_t *restrict l, int versus, + unsigned int first, struct list_entry_s *fel, + unsigned int last, struct list_entry_s *lel) { + struct list_entry_s *cursor, *toswap, *firstunsorted; + void *tmpdata; + + if (last <= first) /* <= 1-element lists are always sorted */ + return; + + for (firstunsorted = fel; firstunsorted != lel; firstunsorted = firstunsorted->next) { + /* find min or max in the remainder of the list */ + for (toswap = firstunsorted, cursor = firstunsorted->next; cursor != lel->next; cursor = cursor->next) + if (l->attrs.comparator(toswap->data, cursor->data) * -versus > 0) toswap = cursor; + if (toswap != firstunsorted) { /* swap firstunsorted with toswap */ + tmpdata = firstunsorted->data; + firstunsorted->data = toswap->data; + toswap->data = tmpdata; + } + } +} + +static void list_sort_quicksort(list_t *restrict l, int versus, + unsigned int first, struct list_entry_s *fel, + unsigned int last, struct list_entry_s *lel) { + unsigned int pivotid; + unsigned int i; + register struct list_entry_s *pivot; + struct list_entry_s *left, *right; + void *tmpdata; +#ifdef SIMCLIST_WITH_THREADS + pthread_t tid; + int traised; +#endif + + + if (last <= first) /* <= 1-element lists are always sorted */ + return; + + if (last - first+1 <= SIMCLIST_MINQUICKSORTELS) { + list_sort_selectionsort(l, versus, first, fel, last, lel); + return; + } + + /* base of iteration: one element list */ + if (! (last > first)) return; + + pivotid = (get_random() % (last - first + 1)); + /* pivotid = (last - first + 1) / 2; */ + + /* find pivot */ + if (pivotid < (last - first + 1)/2) { + for (i = 0, pivot = fel; i < pivotid; pivot = pivot->next, i++); + } else { + for (i = last - first, pivot = lel; i > pivotid; pivot = pivot->prev, i--); + } + + /* smaller PIVOT bigger */ + left = fel; + right = lel; + /* iterate --- left ---> PIV <--- right --- */ + while (left != pivot && right != pivot) { + for (; left != pivot && (l->attrs.comparator(left->data, pivot->data) * -versus <= 0); left = left->next); + /* left points to a smaller element, or to pivot */ + for (; right != pivot && (l->attrs.comparator(right->data, pivot->data) * -versus >= 0); right = right->prev); + /* right points to a bigger element, or to pivot */ + if (left != pivot && right != pivot) { + /* swap, then move iterators */ + tmpdata = left->data; + left->data = right->data; + right->data = tmpdata; + + left = left->next; + right = right->prev; + } + } + + /* now either left points to pivot (end run), or right */ + if (right == pivot) { /* left part longer */ + while (left != pivot) { + if (l->attrs.comparator(left->data, pivot->data) * -versus > 0) { + tmpdata = left->data; + left->data = pivot->prev->data; + pivot->prev->data = pivot->data; + pivot->data = tmpdata; + pivot = pivot->prev; + pivotid--; + if (pivot == left) break; + } else { + left = left->next; + } + } + } else { /* right part longer */ + while (right != pivot) { + if (l->attrs.comparator(right->data, pivot->data) * -versus < 0) { + /* move current right before pivot */ + tmpdata = right->data; + right->data = pivot->next->data; + pivot->next->data = pivot->data; + pivot->data = tmpdata; + pivot = pivot->next; + pivotid++; + if (pivot == right) break; + } else { + right = right->prev; + } + } + } + + /* sort sublists A and B : |---A---| pivot |---B---| */ + +#ifdef SIMCLIST_WITH_THREADS + traised = 0; + if (pivotid > 0) { + /* prepare wrapped args, then start thread */ + if (l->threadcount < SIMCLIST_MAXTHREADS-1) { + struct list_sort_wrappedparams *wp = (struct list_sort_wrappedparams *)malloc(sizeof(struct list_sort_wrappedparams)); + l->threadcount++; + traised = 1; + wp->l = l; + wp->versus = versus; + wp->first = first; + wp->fel = fel; + wp->last = first+pivotid-1; + wp->lel = pivot->prev; + if (pthread_create(&tid, NULL, list_sort_quicksort_threadwrapper, wp) != 0) { + free(wp); + traised = 0; + list_sort_quicksort(l, versus, first, fel, first+pivotid-1, pivot->prev); + } + } else { + list_sort_quicksort(l, versus, first, fel, first+pivotid-1, pivot->prev); + } + } + if (first + pivotid < last) list_sort_quicksort(l, versus, first+pivotid+1, pivot->next, last, lel); + if (traised) { + pthread_join(tid, (void **)NULL); + l->threadcount--; + } +#else + if (pivotid > 0) list_sort_quicksort(l, versus, first, fel, first+pivotid-1, pivot->prev); + if (first + pivotid < last) list_sort_quicksort(l, versus, first+pivotid+1, pivot->next, last, lel); +#endif +} + +int list_iterator_start(list_t *restrict l) { + if (l->iter_active) return 0; + l->iter_pos = 0; + l->iter_active = 1; + l->iter_curentry = l->head_sentinel->next; + return 1; +} + +void *list_iterator_next(list_t *restrict l) { + void *toret; + + if (! l->iter_active) return NULL; + + toret = l->iter_curentry->data; + l->iter_curentry = l->iter_curentry->next; + l->iter_pos++; + + return toret; +} + +int list_iterator_hasnext(const list_t *restrict l) { + if (! l->iter_active) return 0; + return (l->iter_pos < l->numels); +} + +int list_iterator_stop(list_t *restrict l) { + if (! l->iter_active) return 0; + l->iter_pos = 0; + l->iter_active = 0; + return 1; +} + +int list_hash(const list_t *restrict l, list_hash_t *restrict hash) { + struct list_entry_s *x; + list_hash_t tmphash; + + assert(hash != NULL); + + tmphash = l->numels * 2 + 100; + if (l->attrs.hasher == NULL) { +#ifdef SIMCLIST_ALLOW_LOCATIONBASED_HASHES + /* ENABLE WITH CARE !! */ +#warning "Memlocation-based hash is consistent only for testing modification in the same program run." + int i; + + /* only use element references */ + for (x = l->head_sentinel->next; x != l->tail_sentinel; x = x->next) { + for (i = 0; i < sizeof(x->data); i++) { + tmphash += (tmphash ^ (uintptr_t)x->data); + } + tmphash += tmphash % l->numels; + } +#else + return -1; +#endif + } else { + /* hash each element with the user-given function */ + for (x = l->head_sentinel->next; x != l->tail_sentinel; x = x->next) { + tmphash += tmphash ^ l->attrs.hasher(x->data); + tmphash += tmphash % l->numels; + } + } + + *hash = tmphash; + + return 0; +} + +#ifndef SIMCLIST_NO_DUMPRESTORE +int list_dump_getinfo_filedescriptor(int fd, list_dump_info_t *restrict info) { + int32_t terminator_head, terminator_tail; + uint32_t elemlen; + off_t hop; + + + /* version */ + READ_ERRCHECK(fd, & info->version, sizeof(info->version)); + info->version = ntohs(info->version); + if (info->version > SIMCLIST_DUMPFORMAT_VERSION) { + errno = EILSEQ; + return -1; + } + + /* timestamp.tv_sec and timestamp.tv_usec */ + READ_ERRCHECK(fd, & info->timestamp.tv_sec, sizeof(info->timestamp.tv_sec)); + info->timestamp.tv_sec = ntohl(info->timestamp.tv_sec); + READ_ERRCHECK(fd, & info->timestamp.tv_usec, sizeof(info->timestamp.tv_usec)); + info->timestamp.tv_usec = ntohl(info->timestamp.tv_usec); + + /* list terminator (to check thereafter) */ + READ_ERRCHECK(fd, & terminator_head, sizeof(terminator_head)); + terminator_head = ntohl(terminator_head); + + /* list size */ + READ_ERRCHECK(fd, & info->list_size, sizeof(info->list_size)); + info->list_size = ntohl(info->list_size); + + /* number of elements */ + READ_ERRCHECK(fd, & info->list_numels, sizeof(info->list_numels)); + info->list_numels = ntohl(info->list_numels); + + /* length of each element (for checking for consistency) */ + READ_ERRCHECK(fd, & elemlen, sizeof(elemlen)); + elemlen = ntohl(elemlen); + + /* list hash */ + READ_ERRCHECK(fd, & info->list_hash, sizeof(info->list_hash)); + info->list_hash = ntohl(info->list_hash); + + /* check consistency */ + if (elemlen > 0) { + /* constant length, hop by size only */ + hop = info->list_size; + } else { + /* non-constant length, hop by size + all element length blocks */ + hop = info->list_size + elemlen*info->list_numels; + } + if (lseek(fd, hop, SEEK_CUR) == -1) { + return -1; + } + + /* read the trailing value and compare with terminator_head */ + READ_ERRCHECK(fd, & terminator_tail, sizeof(terminator_tail)); + terminator_tail = ntohl(terminator_tail); + + if (terminator_head == terminator_tail) + info->consistent = 1; + else + info->consistent = 0; + + return 0; +} + +int list_dump_getinfo_file(const char *restrict filename, list_dump_info_t *restrict info) { + int fd, ret; + + fd = open(filename, O_RDONLY, 0); + if (fd < 0) return -1; + + ret = list_dump_getinfo_filedescriptor(fd, info); + close(fd); + + return ret; +} + +int list_dump_filedescriptor(const list_t *restrict l, int fd, size_t *restrict len) { + struct list_entry_s *x; + void *ser_buf; + uint32_t bufsize; + struct timeval timeofday; + struct list_dump_header_s header; + + if (l->attrs.meter == NULL && l->attrs.serializer == NULL) { + errno = ENOTTY; + return -1; + } + + /**** DUMP FORMAT **** + + [ ver timestamp | totlen numels elemlen hash | DATA ] + + where DATA can be: + @ for constant-size list (element size is constant; elemlen > 0) + [ elem elem ... elem ] + @ for other lists (element size dictated by element_meter each time; elemlen <= 0) + [ size elem size elem ... size elem ] + + all integers are encoded in NETWORK BYTE FORMAT + *****/ + + + /* prepare HEADER */ + /* version */ + header.ver = htons( SIMCLIST_DUMPFORMAT_VERSION ); + + /* timestamp */ + gettimeofday(&timeofday, NULL); + header.timestamp_sec = htonl(timeofday.tv_sec); + header.timestamp_usec = htonl(timeofday.tv_usec); + + header.rndterm = htonl((int32_t)get_random()); + + /* total list size is postprocessed afterwards */ + + /* number of elements */ + header.numels = htonl(l->numels); + + /* include an hash, if possible */ + if (l->attrs.hasher != NULL) { + if (htonl(list_hash(l, & header.listhash)) != 0) { + /* could not compute list hash! */ + return -1; + } + } else { + header.listhash = htonl(0); + } + + header.totlistlen = header.elemlen = 0; + + /* leave room for the header at the beginning of the file */ + if (lseek(fd, SIMCLIST_DUMPFORMAT_HEADERLEN, SEEK_SET) < 0) { + /* errno set by lseek() */ + return -1; + } + + /* write CONTENT */ + if (l->numels > 0) { + /* SPECULATE that the list has constant element size */ + + if (l->attrs.serializer != NULL) { /* user user-specified serializer */ + /* get preliminary length of serialized element in header.elemlen */ + ser_buf = l->attrs.serializer(l->head_sentinel->next->data, & header.elemlen); + free(ser_buf); + /* request custom serialization of each element */ + for (x = l->head_sentinel->next; x != l->tail_sentinel; x = x->next) { + ser_buf = l->attrs.serializer(x->data, &bufsize); + header.totlistlen += bufsize; + if (header.elemlen != 0) { /* continue on speculation */ + if (header.elemlen != bufsize) { + free(ser_buf); + /* constant element length speculation broken! */ + header.elemlen = 0; + header.totlistlen = 0; + x = l->head_sentinel; + if (lseek(fd, SIMCLIST_DUMPFORMAT_HEADERLEN, SEEK_SET) < 0) { + /* errno set by lseek() */ + return -1; + } + /* restart from the beginning */ + continue; + } + /* speculation confirmed */ + WRITE_ERRCHECK(fd, ser_buf, bufsize); + } else { /* speculation found broken */ + WRITE_ERRCHECK(fd, & bufsize, sizeof(size_t)); + WRITE_ERRCHECK(fd, ser_buf, bufsize); + } + free(ser_buf); + } + } else if (l->attrs.meter != NULL) { + header.elemlen = (uint32_t)l->attrs.meter(l->head_sentinel->next->data); + + /* serialize the element straight from its data */ + for (x = l->head_sentinel->next; x != l->tail_sentinel; x = x->next) { + bufsize = l->attrs.meter(x->data); + header.totlistlen += bufsize; + if (header.elemlen != 0) { + if (header.elemlen != bufsize) { + /* constant element length speculation broken! */ + header.elemlen = 0; + header.totlistlen = 0; + x = l->head_sentinel; + /* restart from the beginning */ + continue; + } + WRITE_ERRCHECK(fd, x->data, bufsize); + } else { + WRITE_ERRCHECK(fd, &bufsize, sizeof(size_t)); + WRITE_ERRCHECK(fd, x->data, bufsize); + } + } + } + /* adjust endianness */ + header.elemlen = htonl(header.elemlen); + header.totlistlen = htonl(header.totlistlen); + } + + /* write random terminator */ + WRITE_ERRCHECK(fd, & header.rndterm, sizeof(header.rndterm)); /* list terminator */ + + + /* write header */ + lseek(fd, 0, SEEK_SET); + + WRITE_ERRCHECK(fd, & header.ver, sizeof(header.ver)); /* version */ + WRITE_ERRCHECK(fd, & header.timestamp_sec, sizeof(header.timestamp_sec)); /* timestamp seconds */ + WRITE_ERRCHECK(fd, & header.timestamp_usec, sizeof(header.timestamp_usec)); /* timestamp microseconds */ + WRITE_ERRCHECK(fd, & header.rndterm, sizeof(header.rndterm)); /* random terminator */ + + WRITE_ERRCHECK(fd, & header.totlistlen, sizeof(header.totlistlen)); /* total length of elements */ + WRITE_ERRCHECK(fd, & header.numels, sizeof(header.numels)); /* number of elements */ + WRITE_ERRCHECK(fd, & header.elemlen, sizeof(header.elemlen)); /* size of each element, or 0 for independent */ + WRITE_ERRCHECK(fd, & header.listhash, sizeof(header.listhash)); /* list hash, or 0 for "ignore" */ + + + /* possibly store total written length in "len" */ + if (len != NULL) { + *len = sizeof(header) + ntohl(header.totlistlen); + } + + return 0; +} + +int list_restore_filedescriptor(list_t *restrict l, int fd, size_t *restrict len) { + struct list_dump_header_s header; + unsigned long cnt; + void *buf; + uint32_t elsize, totreadlen, totmemorylen; + + memset(& header, 0, sizeof(header)); + + /* read header */ + + /* version */ + READ_ERRCHECK(fd, &header.ver, sizeof(header.ver)); + header.ver = ntohs(header.ver); + if (header.ver != SIMCLIST_DUMPFORMAT_VERSION) { + errno = EILSEQ; + return -1; + } + + /* timestamp */ + READ_ERRCHECK(fd, & header.timestamp_sec, sizeof(header.timestamp_sec)); + header.timestamp_sec = ntohl(header.timestamp_sec); + READ_ERRCHECK(fd, & header.timestamp_usec, sizeof(header.timestamp_usec)); + header.timestamp_usec = ntohl(header.timestamp_usec); + + /* list terminator */ + READ_ERRCHECK(fd, & header.rndterm, sizeof(header.rndterm)); + + header.rndterm = ntohl(header.rndterm); + + /* total list size */ + READ_ERRCHECK(fd, & header.totlistlen, sizeof(header.totlistlen)); + header.totlistlen = ntohl(header.totlistlen); + + /* number of elements */ + READ_ERRCHECK(fd, & header.numels, sizeof(header.numels)); + header.numels = ntohl(header.numels); + + /* length of every element, or '0' = variable */ + READ_ERRCHECK(fd, & header.elemlen, sizeof(header.elemlen)); + header.elemlen = ntohl(header.elemlen); + + /* list hash, or 0 = 'ignore' */ + READ_ERRCHECK(fd, & header.listhash, sizeof(header.listhash)); + header.listhash = ntohl(header.listhash); + + + /* read content */ + totreadlen = totmemorylen = 0; + if (header.elemlen > 0) { + /* elements have constant size = header.elemlen */ + if (l->attrs.unserializer != NULL) { + /* use unserializer */ + buf = malloc(header.elemlen); + for (cnt = 0; cnt < header.numels; cnt++) { + READ_ERRCHECK(fd, buf, header.elemlen); + list_append(l, l->attrs.unserializer(buf, & elsize)); + totmemorylen += elsize; + } + } else { + /* copy verbatim into memory */ + for (cnt = 0; cnt < header.numels; cnt++) { + buf = malloc(header.elemlen); + READ_ERRCHECK(fd, buf, header.elemlen); + list_append(l, buf); + } + totmemorylen = header.numels * header.elemlen; + } + totreadlen = header.numels * header.elemlen; + } else { + /* elements have variable size. Each element is preceded by its size */ + if (l->attrs.unserializer != NULL) { + /* use unserializer */ + for (cnt = 0; cnt < header.numels; cnt++) { + READ_ERRCHECK(fd, & elsize, sizeof(elsize)); + buf = malloc((size_t)elsize); + READ_ERRCHECK(fd, buf, elsize); + totreadlen += elsize; + list_append(l, l->attrs.unserializer(buf, & elsize)); + totmemorylen += elsize; + } + } else { + /* copy verbatim into memory */ + for (cnt = 0; cnt < header.numels; cnt++) { + READ_ERRCHECK(fd, & elsize, sizeof(elsize)); + buf = malloc(elsize); + READ_ERRCHECK(fd, buf, elsize); + totreadlen += elsize; + list_append(l, buf); + } + totmemorylen = totreadlen; + } + } + + READ_ERRCHECK(fd, &elsize, sizeof(elsize)); /* read list terminator */ + elsize = ntohl(elsize); + + /* possibly verify the list consistency */ + /* wrt hash */ + /* don't do that + if (header.listhash != 0 && header.listhash != list_hash(l)) { + errno = ECANCELED; + return -1; + } + */ + + /* wrt header */ + if (totreadlen != header.totlistlen && (int32_t)elsize == header.rndterm) { + errno = EPROTO; + return -1; + } + + /* wrt file */ + if (lseek(fd, 0, SEEK_CUR) != lseek(fd, 0, SEEK_END)) { + errno = EPROTO; + return -1; + } + + if (len != NULL) { + *len = totmemorylen; + } + + return 0; +} + +int list_dump_file(const list_t *restrict l, const char *restrict filename, size_t *restrict len) { + int fd, oflag, mode; + +#ifndef _WIN32 + oflag = O_RDWR | O_CREAT | O_TRUNC; + mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH; +#else + oflag = _O_RDWR | _O_CREAT | _O_TRUNC; + mode = _S_IRUSR | _S_IWUSR | _S_IRGRP | _S_IROTH; +#endif + fd = open(filename, oflag, mode); + if (fd < 0) return -1; + + list_dump_filedescriptor(l, fd, len); + close(fd); + + return 0; +} + +int list_restore_file(list_t *restrict l, const char *restrict filename, size_t *restrict len) { + int fd; + + fd = open(filename, O_RDONLY, 0); + if (fd < 0) return -1; + + list_restore_filedescriptor(l, fd, len); + close(fd); + + return 0; +} +#endif /* ifndef SIMCLIST_NO_DUMPRESTORE */ + + +static int list_drop_elem(list_t *restrict l, struct list_entry_s *tmp, unsigned int pos) { + if (tmp == NULL) return -1; + + /* fix mid pointer. This is wrt the PRE situation */ + if (l->numels % 2) { /* now odd */ + /* sort out the base case by hand */ + if (l->numels == 1) l->mid = NULL; + else if (pos >= l->numels/2) l->mid = l->mid->prev; + } else { /* now even */ + if (pos < l->numels/2) l->mid = l->mid->next; + } + + tmp->prev->next = tmp->next; + tmp->next->prev = tmp->prev; + + /* free what's to be freed */ + if (l->attrs.copy_data && tmp->data != NULL) + free(tmp->data); + + if (l->spareelsnum < SIMCLIST_MAX_SPARE_ELEMS) { + l->spareels[l->spareelsnum++] = tmp; + } else { + free(tmp); + } + + return 0; +} + +/* ready-made comparators and meters */ +#define SIMCLIST_NUMBER_COMPARATOR(type) int list_comparator_##type(const void *a, const void *b) { return( *(type *)a < *(type *)b) - (*(type *)a > *(type *)b); } + +SIMCLIST_NUMBER_COMPARATOR(int8_t) +SIMCLIST_NUMBER_COMPARATOR(int16_t) +SIMCLIST_NUMBER_COMPARATOR(int32_t) +SIMCLIST_NUMBER_COMPARATOR(int64_t) + +SIMCLIST_NUMBER_COMPARATOR(uint8_t) +SIMCLIST_NUMBER_COMPARATOR(uint16_t) +SIMCLIST_NUMBER_COMPARATOR(uint32_t) +SIMCLIST_NUMBER_COMPARATOR(uint64_t) + +SIMCLIST_NUMBER_COMPARATOR(float) +SIMCLIST_NUMBER_COMPARATOR(double) + +int list_comparator_string(const void *a, const void *b) { return strcmp((const char *)b, (const char *)a); } + +/* ready-made metric functions */ +#define SIMCLIST_METER(type) size_t list_meter_##type(const void *el) { if (el) { /* kill compiler whinge */ } return sizeof(type); } + +SIMCLIST_METER(int8_t) +SIMCLIST_METER(int16_t) +SIMCLIST_METER(int32_t) +SIMCLIST_METER(int64_t) + +SIMCLIST_METER(uint8_t) +SIMCLIST_METER(uint16_t) +SIMCLIST_METER(uint32_t) +SIMCLIST_METER(uint64_t) + +SIMCLIST_METER(float) +SIMCLIST_METER(double) + +size_t list_meter_string(const void *el) { return strlen((const char *)el) + 1; } + +/* ready-made hashing functions */ +#define SIMCLIST_HASHCOMPUTER(type) list_hash_t list_hashcomputer_##type(const void *el) { return (list_hash_t)(*(type *)el); } + +SIMCLIST_HASHCOMPUTER(int8_t) +SIMCLIST_HASHCOMPUTER(int16_t) +SIMCLIST_HASHCOMPUTER(int32_t) +SIMCLIST_HASHCOMPUTER(int64_t) + +SIMCLIST_HASHCOMPUTER(uint8_t) +SIMCLIST_HASHCOMPUTER(uint16_t) +SIMCLIST_HASHCOMPUTER(uint32_t) +SIMCLIST_HASHCOMPUTER(uint64_t) + +SIMCLIST_HASHCOMPUTER(float) +SIMCLIST_HASHCOMPUTER(double) + +list_hash_t list_hashcomputer_string(const void *el) { + size_t l; + list_hash_t hash = 123; + const char *str = (const char *)el; + char plus; + + for (l = 0; str[l] != '\0'; l++) { + if (l) plus = hash ^ str[l]; + else plus = hash ^ (str[l] - str[0]); + hash += (plus << (CHAR_BIT * (l % sizeof(list_hash_t)))); + } + + return hash; +} + + +#ifndef NDEBUG +static int list_repOk(const list_t *restrict l) { + int ok, i; + struct list_entry_s *s; + + ok = (l != NULL) && ( + /* head/tail checks */ + (l->head_sentinel != NULL && l->tail_sentinel != NULL) && + (l->head_sentinel != l->tail_sentinel) && (l->head_sentinel->prev == NULL && l->tail_sentinel->next == NULL) && + /* empty list */ + (l->numels > 0 || (l->mid == NULL && l->head_sentinel->next == l->tail_sentinel && l->tail_sentinel->prev == l->head_sentinel)) && + /* spare elements checks */ + l->spareelsnum <= SIMCLIST_MAX_SPARE_ELEMS + ); + + if (!ok) return 0; + + if (l->numels >= 1) { + /* correct referencing */ + for (i = -1, s = l->head_sentinel; i < (int)(l->numels-1)/2 && s->next != NULL; i++, s = s->next) { + if (s->next->prev != s) break; + } + ok = (i == (int)(l->numels-1)/2 && l->mid == s); + if (!ok) return 0; + for (; s->next != NULL; i++, s = s->next) { + if (s->next->prev != s) break; + } + ok = (i == (int)l->numels && s == l->tail_sentinel); + } + + return ok; +} + +static int list_attrOk(const list_t *restrict l) { + int ok; + + ok = (l->attrs.copy_data == 0 || l->attrs.meter != NULL); + return ok; +} + +#endif + diff --git a/src/simclist.h b/src/simclist.h new file mode 100644 index 0000000..2ce9d49 --- /dev/null +++ b/src/simclist.h @@ -0,0 +1,980 @@ +/* + * Copyright (c) 2007,2008 Mij + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + + +/* + * SimCList library. See http://mij.oltrelinux.com/devel/simclist + */ + + +#ifndef SIMCLIST_H +#define SIMCLIST_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#ifndef SIMCLIST_NO_DUMPRESTORE +# ifndef _WIN32 +# include /* list_dump_info_t's struct timeval */ +# else +# include +# endif +#endif + + +/* Be friend of both C90 and C99 compilers */ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + /* "inline" and "restrict" are keywords */ +#else +# define inline /* inline */ +# define restrict /* restrict */ +#endif + + +/** + * Type representing list hashes. + * + * This is a signed integer value. + */ +typedef int32_t list_hash_t; + +#ifndef SIMCLIST_NO_DUMPRESTORE +typedef struct { + uint16_t version; /* dump version */ + struct timeval timestamp; /* when the list has been dumped, seconds since UNIX epoch */ + uint32_t list_size; + uint32_t list_numels; + list_hash_t list_hash; /* hash of the list when dumped, or 0 if invalid */ + uint32_t dumpsize; + int consistent; /* 1 if the dump is verified complete/consistent; 0 otherwise */ +} list_dump_info_t; +#endif + +/** + * a comparator of elements. + * + * A comparator of elements is a function that: + * -# receives two references to elements a and b + * -# returns {<0, 0, >0} if (a > b), (a == b), (a < b) respectively + * + * It is responsability of the function to handle possible NULL values. + */ +typedef int (*element_comparator)(const void *a, const void *b); + +/** + * a seeker of elements. + * + * An element seeker is a function that: + * -# receives a reference to an element el + * -# receives a reference to some indicator data + * -# returns non-0 if the element matches the indicator, 0 otherwise + * + * It is responsability of the function to handle possible NULL values in any + * argument. + */ +typedef int (*element_seeker)(const void *el, const void *indicator); + +/** + * an element lenght meter. + * + * An element meter is a function that: + * -# receives the reference to an element el + * -# returns its size in bytes + * + * It is responsability of the function to handle possible NULL values. + */ +typedef size_t (*element_meter)(const void *el); + +/** + * a function computing the hash of elements. + * + * An hash computing function is a function that: + * -# receives the reference to an element el + * -# returns a hash value for el + * + * It is responsability of the function to handle possible NULL values. + */ +typedef list_hash_t (*element_hash_computer)(const void *el); + +/** + * a function for serializing an element. + * + * A serializer function is one that gets a reference to an element, + * and returns a reference to a buffer that contains its serialization + * along with the length of this buffer. + * It is responsability of the function to handle possible NULL values, + * returning a NULL buffer and a 0 buffer length. + * + * These functions have 3 goals: + * -# "freeze" and "flatten" the memory representation of the element + * -# provide a portable (wrt byte order, or type size) representation of the element, if the dump can be used on different sw/hw combinations + * -# possibly extract a compressed representation of the element + * + * @param el reference to the element data + * @param serialize_buffer reference to fill with the length of the buffer + * @return reference to the buffer with the serialized data + */ +typedef void *(*element_serializer)(const void *restrict el, uint32_t *restrict serializ_len); + +/** + * a function for un-serializing an element. + * + * An unserializer function accomplishes the inverse operation of the + * serializer function. An unserializer function is one that gets a + * serialized representation of an element and turns it backe to the original + * element. The serialized representation is passed as a reference to a buffer + * with its data, and the function allocates and returns the buffer containing + * the original element, and it sets the length of this buffer into the + * integer passed by reference. + * + * @param data reference to the buffer with the serialized representation of the element + * @param data_len reference to the location where to store the length of the data in the buffer returned + * @return reference to a buffer with the original, unserialized representation of the element + */ +typedef void *(*element_unserializer)(const void *restrict data, uint32_t *restrict data_len); + +/* [private-use] list entry -- olds actual user datum */ +struct list_entry_s { + void *data; + + /* doubly-linked list service references */ + struct list_entry_s *next; + struct list_entry_s *prev; +}; + +/* [private-use] list attributes */ +struct list_attributes_s { + /* user-set routine for comparing list elements */ + element_comparator comparator; + /* user-set routing for seeking elements */ + element_seeker seeker; + /* user-set routine for determining the length of an element */ + element_meter meter; + int copy_data; + /* user-set routine for computing the hash of an element */ + element_hash_computer hasher; + /* user-set routine for serializing an element */ + element_serializer serializer; + /* user-set routine for unserializing an element */ + element_unserializer unserializer; +}; + +/** list object */ +typedef struct { + struct list_entry_s *head_sentinel; + struct list_entry_s *tail_sentinel; + struct list_entry_s *mid; + + unsigned int numels; + + /* array of spare elements */ + struct list_entry_s **spareels; + unsigned int spareelsnum; + +#ifdef SIMCLIST_WITH_THREADS + /* how many threads are currently running */ + unsigned int threadcount; +#endif + + /* service variables for list iteration */ + int iter_active; + unsigned int iter_pos; + struct list_entry_s *iter_curentry; + + /* list attributes */ + struct list_attributes_s attrs; +} list_t; + +/** + * initialize a list object for use. + * + * @param l must point to a user-provided memory location + * @return 0 for success. -1 for failure + */ +int list_init(list_t *restrict l); + +/** + * completely remove the list from memory. + * + * This function is the inverse of list_init(). It is meant to be called when + * the list is no longer going to be used. Elements and possible memory taken + * for internal use are freed. + * + * @param l list to destroy + */ +void list_destroy(list_t *restrict l); + +/** + * set the comparator function for list elements. + * + * Comparator functions are used for searching and sorting. If NULL is passed + * as reference to the function, the comparator is disabled. + * + * @param l list to operate + * @param comparator_fun pointer to the actual comparator function + * @return 0 if the attribute was successfully set; -1 otherwise + * + * @see element_comparator() + */ +int list_attributes_comparator(list_t *restrict l, element_comparator comparator_fun); + +/** + * set a seeker function for list elements. + * + * Seeker functions are used for finding elements. If NULL is passed as reference + * to the function, the seeker is disabled. + * + * @param l list to operate + * @param seeker_fun pointer to the actual seeker function + * @return 0 if the attribute was successfully set; -1 otherwise + * + * @see element_seeker() + */ +int list_attributes_seeker(list_t *restrict l, element_seeker seeker_fun); + +/** + * require to free element data when list entry is removed (default: don't free). + * + * [ advanced preference ] + * + * By default, when an element is removed from the list, it disappears from + * the list by its actual data is not free()d. With this option, every + * deletion causes element data to be freed. + * + * It is responsability of this function to correctly handle NULL values, if + * NULL elements are inserted into the list. + * + * @param l list to operate + * @param metric_fun pointer to the actual metric function + * @param copy_data 0: do not free element data (default); non-0: do free + * @return 0 if the attribute was successfully set; -1 otherwise + * + * @see element_meter() + * @see list_meter_int8_t() + * @see list_meter_int16_t() + * @see list_meter_int32_t() + * @see list_meter_int64_t() + * @see list_meter_uint8_t() + * @see list_meter_uint16_t() + * @see list_meter_uint32_t() + * @see list_meter_uint64_t() + * @see list_meter_float() + * @see list_meter_double() + * @see list_meter_string() + */ +int list_attributes_copy(list_t *restrict l, element_meter metric_fun, int copy_data); + +/** + * set the element hash computing function for the list elements. + * + * [ advanced preference ] + * + * An hash can be requested depicting the list status at a given time. An hash + * only depends on the elements and their order. By default, the hash of an + * element is only computed on its reference. With this function, the user can + * set a custom function computing the hash of an element. If such function is + * provided, the list_hash() function automatically computes the list hash using + * the custom function instead of simply referring to element references. + * + * @param l list to operate + * @param hash_computer_fun pointer to the actual hash computing function + * @return 0 if the attribute was successfully set; -1 otherwise + * + * @see element_hash_computer() + */ +int list_attributes_hash_computer(list_t *restrict l, element_hash_computer hash_computer_fun); + +/** + * set the element serializer function for the list elements. + * + * [ advanced preference ] + * + * Serialize functions are used for dumping the list to some persistent + * storage. The serializer function is called for each element; it is passed + * a reference to the element and a reference to a size_t object. It will + * provide (and return) the buffer with the serialization of the element and + * fill the size_t object with the length of this serialization data. + * + * @param l list to operate + * @param serializer_fun pointer to the actual serializer function + * @return 0 if the attribute was successfully set; -1 otherwise + * + * @see element_serializer() + * @see list_dump_filedescriptor() + * @see list_restore_filedescriptor() + */ +int list_attributes_serializer(list_t *restrict l, element_serializer serializer_fun); + +/** + * set the element unserializer function for the list elements. + * + * [ advanced preference ] + * + * Unserialize functions are used for restoring the list from some persistent + * storage. The unserializer function is called for each element segment read + * from the storage; it is passed the segment and a reference to an integer. + * It shall allocate and return a buffer compiled with the resumed memory + * representation of the element, and set the integer value to the length of + * this buffer. + * + * @param l list to operate + * @param unserializer_fun pointer to the actual unserializer function + * @return 0 if the attribute was successfully set; -1 otherwise + * + * @see element_unserializer() + * @see list_dump_filedescriptor() + * @see list_restore_filedescriptor() + */ +int list_attributes_unserializer(list_t *restrict l, element_unserializer unserializer_fun); + +/** + * append data at the end of the list. + * + * This function is useful for adding elements with a FIFO/queue policy. + * + * @param l list to operate + * @param data pointer to user data to append + * + * @return 1 for success. < 0 for failure + */ +int list_append(list_t *restrict l, const void *data); + +/** + * insert data in the head of the list. + * + * This function is useful for adding elements with a LIFO/Stack policy. + * + * @param l list to operate + * @param data pointer to user data to append + * + * @return 1 for success. < 0 for failure + */ +int list_prepend(list_t *restrict l, const void *restrict data); + +/** + * extract the element in the top of the list. + * + * This function is for using a list with a FIFO/queue policy. + * + * @param l list to operate + * @return reference to user datum, or NULL on errors + */ +void *list_fetch(list_t *restrict l); + +/** + * retrieve an element at a given position. + * + * @param l list to operate + * @param pos [0,size-1] position index of the element wanted + * @return reference to user datum, or NULL on errors + */ +void *list_get_at(const list_t *restrict l, unsigned int pos); + +/** + * return the maximum element of the list. + * + * @warning Requires a comparator function to be set for the list. + * + * Returns the maximum element with respect to the comparator function output. + * + * @see list_attributes_comparator() + * + * @param l list to operate + * @return the reference to the element, or NULL + */ +void *list_get_max(const list_t *restrict l); + +/** + * return the minimum element of the list. + * + * @warning Requires a comparator function to be set for the list. + * + * Returns the minimum element with respect to the comparator function output. + * + * @see list_attributes_comparator() + * + * @param l list to operate + * @return the reference to the element, or NULL + */ +void *list_get_min(const list_t *restrict l); + +/** + * retrieve and remove from list an element at a given position. + * + * @param l list to operate + * @param pos [0,size-1] position index of the element wanted + * @return reference to user datum, or NULL on errors + */ +void *list_extract_at(list_t *restrict l, unsigned int pos); + +/** + * insert an element at a given position. + * + * @param l list to operate + * @param data reference to data to be inserted + * @param pos [0,size-1] position index to insert the element at + * @return positive value on success. Negative on failure + */ +int list_insert_at(list_t *restrict l, const void *data, unsigned int pos); + +/** + * expunge the first found given element from the list. + * + * Inspects the given list looking for the given element; if the element + * is found, it is removed. Only the first occurence is removed. + * If a comparator function was not set, elements are compared by reference. + * Otherwise, the comparator is used to match the element. + * + * @param l list to operate + * @param data reference of the element to search for + * @return 0 on success. Negative value on failure + * + * @see list_attributes_comparator() + * @see list_delete_at() + */ +int list_delete(list_t *restrict l, const void *data); + +/** + * expunge an element at a given position from the list. + * + * @param l list to operate + * @param pos [0,size-1] position index of the element to be deleted + * @return 0 on success. Negative value on failure + */ +int list_delete_at(list_t *restrict l, unsigned int pos); + +/** + * expunge an array of elements from the list, given their position range. + * + * @param l list to operate + * @param posstart [0,size-1] position index of the first element to be deleted + * @param posend [posstart,size-1] position of the last element to be deleted + * @return the number of elements successfully removed on success, <0 on error + */ +int list_delete_range(list_t *restrict l, unsigned int posstart, unsigned int posend); + +/** + * clear all the elements off of the list. + * + * The element datums will not be freed. + * + * @see list_delete_range() + * @see list_size() + * + * @param l list to operate + * @return the number of elements removed on success, <0 on error + */ +int list_clear(list_t *restrict l); + +/** + * inspect the number of elements in the list. + * + * @param l list to operate + * @return number of elements currently held by the list + */ +unsigned int list_size(const list_t *restrict l); + +/** + * inspect whether the list is empty. + * + * @param l list to operate + * @return 0 iff the list is not empty + * + * @see list_size() + */ +int list_empty(const list_t *restrict l); + +/** + * find the position of an element in a list. + * + * @warning Requires a comparator function to be set for the list. + * + * Inspects the given list looking for the given element; if the element + * is found, its position into the list is returned. + * Elements are inspected comparing references if a comparator has not been + * set. Otherwise, the comparator is used to find the element. + * + * @param l list to operate + * @param data reference of the element to search for + * @return position of element in the list, or <0 if not found + * + * @see list_attributes_comparator() + * @see list_get_at() + */ +int list_locate(const list_t *restrict l, const void *data); + +/** + * returns an element given an indicator. + * + * @warning Requires a seeker function to be set for the list. + * + * Inspect the given list looking with the seeker if an element matches + * an indicator. If such element is found, the reference to the element + * is returned. + * + * @param l list to operate + * @param indicator indicator data to pass to the seeker along with elements + * @return reference to the element accepted by the seeker, or NULL if none found + */ +void *list_seek(list_t *restrict l, const void *indicator); + +/** + * inspect whether some data is member of the list. + * + * @warning Requires a comparator function to be set for the list. + * + * By default, a per-reference comparison is accomplished. That is, + * the data is in list if any element of the list points to the same + * location of data. + * A "semantic" comparison is accomplished, otherwise, if a comparator + * function has been set previously, with list_attributes_comparator(); + * in which case, the given data reference is believed to be in list iff + * comparator_fun(elementdata, userdata) == 0 for any element in the list. + * + * @param l list to operate + * @param data reference to the data to search + * @return 0 iff the list does not contain data as an element + * + * @see list_attributes_comparator() + */ +int list_contains(const list_t *restrict l, const void *data); + +/** + * concatenate two lists + * + * Concatenates one list with another, and stores the result into a + * user-provided list object, which must be different from both the + * lists to concatenate. Attributes from the original lists are not + * cloned. + * The destination list referred is threated as virgin room: if it + * is an existing list containing elements, memory leaks will happen. + * It is OK to specify the same list twice as source, for "doubling" + * it in the destination. + * + * @param l1 base list + * @param l2 list to append to the base + * @param dest reference to the destination list + * @return 0 for success, -1 for errors + */ +int list_concat(const list_t *l1, const list_t *l2, list_t *restrict dest); + +/** + * sort list elements. + * + * @warning Requires a comparator function to be set for the list. + * + * Sorts the list in ascending or descending order as specified by the versus + * flag. The algorithm chooses autonomously what algorithm is best suited for + * sorting the list wrt its current status. + * + * @param l list to operate + * @param versus positive: order small to big; negative: order big to small + * @return 0 iff sorting was successful + * + * @see list_attributes_comparator() + */ +int list_sort(list_t *restrict l, int versus); + +/** + * start an iteration session. + * + * This function prepares the list to be iterated. + * + * @param l list to operate + * @return 0 if the list cannot be currently iterated. >0 otherwise + * + * @see list_iterator_stop() + */ +int list_iterator_start(list_t *restrict l); + +/** + * return the next element in the iteration session. + * + * @param l list to operate + * @return element datum, or NULL on errors + */ +void *list_iterator_next(list_t *restrict l); + +/** + * inspect whether more elements are available in the iteration session. + * + * @param l list to operate + * @return 0 iff no more elements are available. + */ +int list_iterator_hasnext(const list_t *restrict l); + +/** + * end an iteration session. + * + * @param l list to operate + * @return 0 iff the iteration session cannot be stopped + */ +int list_iterator_stop(list_t *restrict l); + +/** + * return the hash of the current status of the list. + * + * @param l list to operate + * @param hash where the resulting hash is put + * + * @return 0 for success; <0 for failure + */ +int list_hash(const list_t *restrict l, list_hash_t *restrict hash); + +#ifndef SIMCLIST_NO_DUMPRESTORE +/** + * get meta informations on a list dump on filedescriptor. + * + * [ advanced function ] + * + * Extracts the meta information from a SimCList dump located in a file + * descriptor. The file descriptor must be open and positioned at the + * beginning of the SimCList dump block. + * + * @param fd file descriptor to get metadata from + * @param info reference to a dump metainformation structure to fill + * @return 0 for success; <0 for failure + * + * @see list_dump_filedescriptor() + */ +int list_dump_getinfo_filedescriptor(int fd, list_dump_info_t *restrict info); + +/** + * get meta informations on a list dump on file. + * + * [ advanced function ] + * + * Extracts the meta information from a SimCList dump located in a file. + * + * @param filename filename of the file to fetch from + * @param info reference to a dump metainformation structure to fill + * @return 0 for success; <0 for failure + * + * @see list_dump_filedescriptor() + */ +int list_dump_getinfo_file(const char *restrict filename, list_dump_info_t *restrict info); + +/** + * dump the list into an open, writable file descriptor. + * + * This function "dumps" the list to a persistent storage so it can be + * preserved across process terminations. + * When called, the file descriptor must be open for writing and positioned + * where the serialized data must begin. It writes its serialization of the + * list in a form which is portable across different architectures. Dump can + * be safely performed on stream-only (non seekable) descriptors. The file + * descriptor is not closed at the end of the operations. + * + * To use dump functions, either of these conditions must be satisfied: + * -# a metric function has been specified with list_attributes_copy() + * -# a serializer function has been specified with list_attributes_serializer() + * + * If a metric function has been specified, each element of the list is dumped + * as-is from memory, copying it from its pointer for its length down to the + * file descriptor. This might have impacts on portability of the dump to + * different architectures. + * + * If a serializer function has been specified, its result for each element is + * dumped to the file descriptor. + * + * + * @param l list to operate + * @param fd file descriptor to write to + * @param len location to store the resulting length of the dump (bytes), or NULL + * + * @return 0 if successful; -1 otherwise + * + * @see element_serializer() + * @see list_attributes_copy() + * @see list_attributes_serializer() + */ +int list_dump_filedescriptor(const list_t *restrict l, int fd, size_t *restrict len); + +/** + * dump the list to a file name. + * + * This function creates a filename and dumps the current content of the list + * to it. If the file exists it is overwritten. The number of bytes written to + * the file can be returned in a specified argument. + * + * @param l list to operate + * @param filename filename to write to + * @param len location to store the resulting length of the dump (bytes), or NULL + * + * @return 0 if successful; -1 otherwise + * + * @see list_attributes_copy() + * @see element_serializer() + * @see list_attributes_serializer() + * @see list_dump_filedescriptor() + * @see list_restore_file() + * + * This function stores a representation of the list + */ +int list_dump_file(const list_t *restrict l, const char *restrict filename, size_t *restrict len); + +/** + * restore the list from an open, readable file descriptor to memory. + * + * This function is the "inverse" of list_dump_filedescriptor(). It restores + * the list content from a (open, read-ready) file descriptor to memory. An + * unserializer might be needed to restore elements from the persistent + * representation back into memory-consistent format. List attributes can not + * be restored and must be set manually. + * + * @see list_dump_filedescriptor() + * @see list_attributes_serializer() + * @see list_attributes_unserializer() + * + * @param l list to restore to + * @param fd file descriptor to read from. + * @param len location to store the length of the dump read (bytes), or NULL + * @return 0 if successful; -1 otherwise + */ +int list_restore_filedescriptor(list_t *restrict l, int fd, size_t *restrict len); + +/** + * restore the list from a file name. + * + * This function restores the content of a list from a file into memory. It is + * the inverse of list_dump_file(). + * + * @see element_unserializer() + * @see list_attributes_unserializer() + * @see list_dump_file() + * @see list_restore_filedescriptor() + * + * @param l list to restore to + * @param filename filename to read data from + * @param len location to store the length of the dump read (bytes), or NULL + * @return 0 if successful; -1 otherwise + */ +int list_restore_file(list_t *restrict l, const char *restrict filename, size_t *len); +#endif + +/* ready-made comparators, meters and hash computers */ + /* comparator functions */ +/** + * ready-made comparator for int8_t elements. + * @see list_attributes_comparator() + */ +int list_comparator_int8_t(const void *a, const void *b); + +/** + * ready-made comparator for int16_t elements. + * @see list_attributes_comparator() + */ +int list_comparator_int16_t(const void *a, const void *b); + +/** + * ready-made comparator for int32_t elements. + * @see list_attributes_comparator() + */ +int list_comparator_int32_t(const void *a, const void *b); + +/** + * ready-made comparator for int64_t elements. + * @see list_attributes_comparator() + */ +int list_comparator_int64_t(const void *a, const void *b); + +/** + * ready-made comparator for uint8_t elements. + * @see list_attributes_comparator() + */ +int list_comparator_uint8_t(const void *a, const void *b); + +/** + * ready-made comparator for uint16_t elements. + * @see list_attributes_comparator() + */ +int list_comparator_uint16_t(const void *a, const void *b); + +/** + * ready-made comparator for uint32_t elements. + * @see list_attributes_comparator() + */ +int list_comparator_uint32_t(const void *a, const void *b); + +/** + * ready-made comparator for uint64_t elements. + * @see list_attributes_comparator() + */ +int list_comparator_uint64_t(const void *a, const void *b); + +/** + * ready-made comparator for float elements. + * @see list_attributes_comparator() + */ +int list_comparator_float(const void *a, const void *b); + +/** + * ready-made comparator for double elements. + * @see list_attributes_comparator() + */ +int list_comparator_double(const void *a, const void *b); + +/** + * ready-made comparator for string elements. + * @see list_attributes_comparator() + */ +int list_comparator_string(const void *a, const void *b); + + /* metric functions */ +/** + * ready-made metric function for int8_t elements. + * @see list_attributes_copy() + */ +size_t list_meter_int8_t(const void *el); + +/** + * ready-made metric function for int16_t elements. + * @see list_attributes_copy() + */ +size_t list_meter_int16_t(const void *el); + +/** + * ready-made metric function for int32_t elements. + * @see list_attributes_copy() + */ +size_t list_meter_int32_t(const void *el); + +/** + * ready-made metric function for int64_t elements. + * @see list_attributes_copy() + */ +size_t list_meter_int64_t(const void *el); + +/** + * ready-made metric function for uint8_t elements. + * @see list_attributes_copy() + */ +size_t list_meter_uint8_t(const void *el); + +/** + * ready-made metric function for uint16_t elements. + * @see list_attributes_copy() + */ +size_t list_meter_uint16_t(const void *el); + +/** + * ready-made metric function for uint32_t elements. + * @see list_attributes_copy() + */ +size_t list_meter_uint32_t(const void *el); + +/** + * ready-made metric function for uint64_t elements. + * @see list_attributes_copy() + */ +size_t list_meter_uint64_t(const void *el); + +/** + * ready-made metric function for float elements. + * @see list_attributes_copy() + */ +size_t list_meter_float(const void *el); + +/** + * ready-made metric function for double elements. + * @see list_attributes_copy() + */ +size_t list_meter_double(const void *el); + +/** + * ready-made metric function for string elements. + * @see list_attributes_copy() + */ +size_t list_meter_string(const void *el); + + /* hash functions */ +/** + * ready-made hash function for int8_t elements. + * @see list_attributes_hash_computer() + */ +list_hash_t list_hashcomputer_int8_t(const void *el); + +/** + * ready-made hash function for int16_t elements. + * @see list_attributes_hash_computer() + */ +list_hash_t list_hashcomputer_int16_t(const void *el); + +/** + * ready-made hash function for int32_t elements. + * @see list_attributes_hash_computer() + */ +list_hash_t list_hashcomputer_int32_t(const void *el); + +/** + * ready-made hash function for int64_t elements. + * @see list_attributes_hash_computer() + */ +list_hash_t list_hashcomputer_int64_t(const void *el); + +/** + * ready-made hash function for uint8_t elements. + * @see list_attributes_hash_computer() + */ +list_hash_t list_hashcomputer_uint8_t(const void *el); + +/** + * ready-made hash function for uint16_t elements. + * @see list_attributes_hash_computer() + */ +list_hash_t list_hashcomputer_uint16_t(const void *el); + +/** + * ready-made hash function for uint32_t elements. + * @see list_attributes_hash_computer() + */ +list_hash_t list_hashcomputer_uint32_t(const void *el); + +/** + * ready-made hash function for uint64_t elements. + * @see list_attributes_hash_computer() + */ +list_hash_t list_hashcomputer_uint64_t(const void *el); + +/** + * ready-made hash function for float elements. + * @see list_attributes_hash_computer() + */ +list_hash_t list_hashcomputer_float(const void *el); + +/** + * ready-made hash function for double elements. + * @see list_attributes_hash_computer() + */ +list_hash_t list_hashcomputer_double(const void *el); + +/** + * ready-made hash function for string elements. + * @see list_attributes_hash_computer() + */ +list_hash_t list_hashcomputer_string(const void *el); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/src/strlcpy.c b/src/strlcpy.c new file mode 100644 index 0000000..437df6d --- /dev/null +++ b/src/strlcpy.c @@ -0,0 +1,60 @@ +/* $OpenBSD: strlcpy.c,v 1.10 2005/08/08 08:05:37 espie Exp $ */ + +/* + * Copyright (c) 1998 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifndef HAVE_STRLCPY + +#include +#include +#include "strlcpycat.h" + +/* + * Copy src to string dst of size siz. At most siz-1 characters + * will be copied. Always NUL terminates (unless siz == 0). + * Returns strlen(src); if retval >= siz, truncation occurred. + */ +size_t +strlcpy(char *dst, const char *src, size_t siz) +{ + char *d = dst; + const char *s = src; + size_t n = siz; + + /* Copy as many bytes as will fit */ + if (n != 0 && --n != 0) { + do { + if ((*d++ = *s++) == 0) + break; + } while (--n != 0); + } + + /* Not enough room in dst, add NUL and traverse rest of src */ + if (n == 0) { + if (siz != 0) + *d = '\0'; /* NUL-terminate dst */ + while (*s++) + ; + } + + return(s - src - 1); /* count does not include NUL */ +} + +#endif diff --git a/src/strlcpycat.h b/src/strlcpycat.h new file mode 100644 index 0000000..82c264a --- /dev/null +++ b/src/strlcpycat.h @@ -0,0 +1,45 @@ +/* + * MUSCLE SmartCard Development ( http://pcsclite.alioth.debian.org/pcsclite.html ) + * + * Copyright (C) 2004-2010 + * Ludovic Rousseau + * +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 prototypes of strlcpy()/strlcat() imported from OpenBSD + */ + +#ifdef HAVE_STRLCPY +#include +#else +size_t strlcpy(char *dst, const char *src, size_t siz); +#endif + +#ifndef HAVE_STRLCAT +size_t strlcat(char *dst, const char *src, size_t siz); +#endif + diff --git a/src/tokenparser.c b/src/tokenparser.c new file mode 100644 index 0000000..ddf75de --- /dev/null +++ b/src/tokenparser.c @@ -0,0 +1,2021 @@ + +#line 3 "tokenparser.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 1 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart(yyin ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +extern int yyleng; + +extern FILE *yyin, *yyout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + #define YY_LINENO_REWIND_TO(ptr) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, (yytext_ptr) ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* yy_hold_char holds the character lost when yytext is formed. */ +static char yy_hold_char; +static int yy_n_chars; /* number of characters read into yy_ch_buf */ +int yyleng; + +/* Points to current character in buffer. */ +static char *yy_c_buf_p = NULL; +static int yy_init = 0; /* whether we need to initialize */ +static int yy_start = 0; /* start state number */ + +/* Flag which is used to allow yywrap()'s to do buffer switches + * instead of setting up a fresh yyin. A bit of a hack ... + */ +static int yy_did_buffer_switch_on_eof; + +void yyrestart (FILE *input_file ); +void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); +void yy_delete_buffer (YY_BUFFER_STATE b ); +void yy_flush_buffer (YY_BUFFER_STATE b ); +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); +void yypop_buffer_state (void ); + +static void yyensure_buffer_stack (void ); +static void yy_load_buffer_state (void ); +static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); + +void *yyalloc (yy_size_t ); +void *yyrealloc (void *,yy_size_t ); +void yyfree (void * ); + +#define yy_new_buffer yy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define yywrap() (/*CONSTCOND*/1) +#define YY_SKIP_YYWRAP + +typedef unsigned char YY_CHAR; + +FILE *yyin = NULL, *yyout = NULL; + +typedef int yy_state_type; + +extern int yylineno; + +int yylineno = 1; + +extern char *yytext; +#ifdef yytext_ptr +#undef yytext_ptr +#endif +#define yytext_ptr yytext + +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yynoreturn yy_fatal_error (yyconst char* msg ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + yyleng = (int) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; + +#define YY_NUM_RULES 7 +#define YY_END_OF_BUFFER 8 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[39] = + { 0, + 0, 0, 8, 6, 4, 2, 1, 6, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, + 0, 0, 0, 0, 0, 0, 5, 0 + } ; + +static yyconst YY_CHAR yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 4, 4, 5, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 6, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 4, 4, 8, + 4, 9, 4, 4, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 4, 1, 4, 4, 4, 1, 11, 11, 11, 11, + + 12, 11, 13, 11, 14, 11, 15, 11, 11, 16, + 11, 11, 11, 17, 18, 19, 11, 11, 11, 11, + 20, 11, 1, 1, 1, 4, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst YY_CHAR yy_meta[21] = + { 0, + 1, 2, 3, 4, 4, 4, 2, 1, 1, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 + } ; + +static yyconst flex_uint16_t yy_base[43] = + { 0, + 0, 7, 49, 50, 50, 50, 0, 1, 0, 36, + 28, 26, 28, 35, 29, 0, 26, 33, 27, 33, + 29, 22, 0, 24, 27, 14, 27, 23, 13, 50, + 10, 9, 4, 1, 0, 2, 50, 50, 19, 23, + 2, 26 + } ; + +static yyconst flex_int16_t yy_def[43] = + { 0, + 39, 39, 38, 38, 38, 38, 40, 38, 40, 38, + 38, 38, 38, 38, 38, 41, 38, 41, 38, 38, + 38, 38, 42, 38, 42, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 0, 38, 38, + 38, 38 + } ; + +static yyconst flex_uint16_t yy_nxt[71] = + { 0, + 38, 5, 6, 18, 7, 38, 38, 8, 5, 6, + 37, 7, 36, 38, 8, 10, 35, 34, 11, 4, + 4, 4, 4, 9, 9, 33, 9, 25, 32, 25, + 31, 30, 29, 28, 27, 26, 24, 23, 22, 21, + 20, 19, 17, 16, 15, 14, 13, 12, 38, 3, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38 + } ; + +static yyconst flex_int16_t yy_chk[71] = + { 0, + 0, 1, 1, 41, 1, 0, 0, 1, 2, 2, + 36, 2, 35, 0, 2, 8, 34, 33, 8, 39, + 39, 39, 39, 40, 40, 32, 40, 42, 31, 42, + 29, 28, 27, 26, 25, 24, 22, 21, 20, 19, + 18, 17, 15, 14, 13, 12, 11, 10, 3, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38 + } ; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +extern int yy_flex_debug; +int yy_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +char *yytext; +#line 1 "tokenparser.l" +/* + * Reads lexical config files and updates database. + * + * MUSCLE SmartCard Development ( http://pcsclite.alioth.debian.org/pcsclite.html ) + * + * Copyright (C) 2001-2003 + * David Corcoran + * Copyright (C) 2003-2010 + * Ludovic Rousseau + * +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 provides parsing functions for Info.plist files + * platforms + */ +#line 42 "tokenparser.l" + +#include "config.h" +#include +#include +#include +#define NDEBUG +#include + +#include "simclist.h" +#include "debuglog.h" +#include "parser.h" + +static void eval_key(char *pcToken, list_t *list_key); +static void eval_value(char *pcToken, list_t *list_values); +void tperrorCheck (char *pcToken_error); + +static list_t *ListKeys; +static list_t *ListValues; + +#define YY_NO_INPUT 1 +#line 536 "tokenparser.c" + +#define INITIAL 0 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals (void ); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy (void ); + +int yyget_debug (void ); + +void yyset_debug (int debug_flag ); + +YY_EXTRA_TYPE yyget_extra (void ); + +void yyset_extra (YY_EXTRA_TYPE user_defined ); + +FILE *yyget_in (void ); + +void yyset_in (FILE * _in_str ); + +FILE *yyget_out (void ); + +void yyset_out (FILE * _out_str ); + + int yyget_leng (void ); + +char *yyget_text (void ); + +int yyget_lineno (void ); + +void yyset_lineno (int _line_number ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap (void ); +#else +extern int yywrap (void ); +#endif +#endif + +#ifndef YY_NO_UNPUT + +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (void ); +#else +static int input (void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + size_t n; \ + for ( n = 0; n < max_size && \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = (int) fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (void); + +#define YY_DECL int yylex (void) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer(yyin,YY_BUF_SIZE ); + } + + yy_load_buffer_state( ); + } + + { +#line 67 "tokenparser.l" + + +#line 755 "tokenparser.c" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of yytext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); +yy_match: + do + { + YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 39 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 50 ); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + if ( yy_act == 0 ) + { /* have to back up */ + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + yy_act = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = (yy_hold_char); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 69 "tokenparser.l" +{} + YY_BREAK +case 2: +/* rule 2 can match eol */ +YY_RULE_SETUP +#line 70 "tokenparser.l" +{} + YY_BREAK +case 3: +YY_RULE_SETUP +#line 71 "tokenparser.l" +{ eval_key(yytext, ListKeys); } + YY_BREAK +case 4: +YY_RULE_SETUP +#line 72 "tokenparser.l" +{} + YY_BREAK +case 5: +YY_RULE_SETUP +#line 73 "tokenparser.l" +{ eval_value(yytext, ListValues); } + YY_BREAK +case 6: +YY_RULE_SETUP +#line 74 "tokenparser.l" +{ tperrorCheck(yytext); } + YY_BREAK +case 7: +YY_RULE_SETUP +#line 75 "tokenparser.l" +ECHO; + YY_BREAK +#line 848 "tokenparser.c" +case YY_STATE_EOF(INITIAL): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_c_buf_p); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( yywrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (void) +{ + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = (yytext_ptr); + yy_size_t number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart(yyin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (void) +{ + yy_state_type yy_current_state; + char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 39 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + int yy_is_jam; + char *yy_cp = (yy_c_buf_p); + + YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 39 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; + yy_is_jam = (yy_current_state == 38); + + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT + +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + int offset = (yy_c_buf_p) - (yytext_ptr); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart(yyin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( ) ) + return 0; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve yytext */ + (yy_hold_char) = *++(yy_c_buf_p); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer(yyin,YY_BUF_SIZE ); + } + + yy_init_buffer(YY_CURRENT_BUFFER,input_file ); + yy_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + +static void yy_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = (yy_size_t)size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer(b,file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * + */ + void yy_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree((void *) b->yy_ch_buf ); + + yyfree((void *) b ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + yy_flush_buffer(b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void yy_flush_buffer (YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void yypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (void) +{ + int num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return NULL; + + b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = NULL; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer(b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) +{ + + return yy_scan_bytes(yystr,(int) strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + yy_size_t i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = (yy_size_t) _yybytes_len + 2; + buf = (char *) yyalloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer(buf,n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yynoreturn yy_fatal_error (yyconst char* msg ) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = (yy_hold_char); \ + (yy_c_buf_p) = yytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int yyget_lineno (void) +{ + + return yylineno; +} + +/** Get the input stream. + * + */ +FILE *yyget_in (void) +{ + return yyin; +} + +/** Get the output stream. + * + */ +FILE *yyget_out (void) +{ + return yyout; +} + +/** Get the length of the current token. + * + */ +int yyget_leng (void) +{ + return yyleng; +} + +/** Get the current token. + * + */ + +char *yyget_text (void) +{ + return yytext; +} + +/** Set the current line number. + * @param _line_number line number + * + */ +void yyset_lineno (int _line_number ) +{ + + yylineno = _line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param _in_str A readable stream. + * + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * _in_str ) +{ + yyin = _in_str ; +} + +void yyset_out (FILE * _out_str ) +{ + yyout = _out_str ; +} + +int yyget_debug (void) +{ + return yy_flex_debug; +} + +void yyset_debug (int _bdebug ) +{ + yy_flex_debug = _bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + (yy_buffer_stack) = NULL; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = NULL; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = NULL; + yyout = NULL; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(); + } + + /* Destroy the stack itself. */ + yyfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +{ + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s ) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size ) +{ + return malloc(size); +} + +void *yyrealloc (void * ptr, yy_size_t size ) +{ + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void yyfree (void * ptr ) +{ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 75 "tokenparser.l" + + + + +static void eval_key(char *pcToken, list_t *list_key) +{ + struct bundleElt *elt; + int r; + size_t len; + + /* create a new list element */ + elt = malloc(sizeof(*elt)); + assert(elt); + + /* foobar + * 012345 : 5 is the first key character index */ + + /* calculate the argument length */ + for (len=0; pcToken[len+5] != '<'; len++) + ; + len++; /* final NULL byte */ + + elt->key = malloc(len); + memcpy(elt->key, &pcToken[5], len-1); + elt->key[len-1] = '\0'; + + r = list_init(&elt->values); + assert(r >= 0); + (void)r; + + /* add the key/values */ + list_append(list_key, elt); + + /* set the list to store the values */ + ListValues = &elt->values; +} + +static void eval_value(char *pcToken, list_t *list_values) +{ + int r; + size_t len; + char *value; + char *amp; + + /* foobar + * 012345678 : 8 is the first string character index */ + + /* calculate the argument length */ + for (len=0; pcToken[len+8] != '<'; len++) + ; + len++; /* final NULL byte */ + + value = malloc(len); + assert(value); + + memcpy(value, &pcToken[8], len-1); + value[len-1] = '\0'; + + /* for all & in the string */ + amp = value; + while ((amp = strstr(amp, "&")) != NULL) + { + char *p; + + /* just skip "amp;" substring (4 letters) */ + for (p = amp+1; *(p+4); p++) + { + *p = *(p+4); + } + /* terminate the now shorter string */ + *p = '\0'; + + /* skip the & and continue */ + amp++; + } + + r = list_append(list_values, value); + assert(r >= 0); + (void)r; +} + +void tperrorCheck (char *token_error) +{ + (void)token_error; +} + +/** + * Find an optional key in a configuration file + * No error is logged if the key is not found + * + * @param l list generated by bundleParse() + * @param key searched key + * @param[out] values list of token value (if key found) + * @retval 0 OK + * @retval 1 key not found + */ +int LTPBundleFindValueWithKey(list_t *l, const char *key, list_t **values) +{ + unsigned int i; + int ret = 1; + + for (i=0; i < list_size(l); i++) + { + struct bundleElt *elt; + + elt = list_get_at(l, i); + assert(elt); + + if (0 == strcmp(elt->key, key)) + { + *values = &elt->values; + ret = 0; + } + } + + return ret; +} + + +/** + * Parse a Info.plist file and file a list + * + * @param fileName file name + * @param l list containing the results + * @retval -1 configuration file not found + * @retval 0 OK + */ +int bundleParse(const char *fileName, list_t *l) +{ + FILE *file = NULL; + int r; +#ifndef NDEBUG + int i; +#endif + + file = fopen(fileName, "r"); + if (!file) + { + Log3(PCSC_LOG_CRITICAL, "Could not open bundle file %s: %s", + fileName, strerror(errno)); + return 1; + } + + r = list_init(l); + assert(r >= 0); + (void)r; + + ListKeys = l; + yyin = file; + + do + { + (void)yylex(); + } while (!feof(file)); + yylex_destroy(); + + (void)fclose(file); + +#ifndef NDEBUG + printf("size: %d\n", list_size(l)); + for (i=0; i < list_size(l); i++) + { + struct bundleElt *elt; + unsigned int j; + + elt = list_get_at(l, i); + assert(elt); + printf("Key: %s\n", elt->key); + + for (j=0; jvalues); j++) + { + char *v = list_get_at(&elt->values, j); + printf(" value: %s\n", v); + } + } +#endif + + return 0; +} + +/** + * Free the list created by bundleParse() + * + * @param l list containing the results + */ +void bundleRelease(list_t *l) +{ + unsigned int i; + + for (i=0; i < list_size(l); i++) + { + struct bundleElt *elt; + unsigned int j; + + elt = list_get_at(l, i); + assert(elt); + + /* free all the values */ + for (j=0; jvalues); j++) + free(list_get_at(&elt->values, j)); + list_destroy(&elt->values); + + /* free the key */ + free(elt->key); + free(elt); + } + + list_destroy(l); +} + diff --git a/src/tokenparser.l b/src/tokenparser.l new file mode 100644 index 0000000..0dd47b4 --- /dev/null +++ b/src/tokenparser.l @@ -0,0 +1,282 @@ +/* + * Reads lexical config files and updates database. + * + * MUSCLE SmartCard Development ( http://pcsclite.alioth.debian.org/pcsclite.html ) + * + * Copyright (C) 2001-2003 + * David Corcoran + * Copyright (C) 2003-2010 + * Ludovic Rousseau + * +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 provides parsing functions for Info.plist files + * platforms + */ + +%{ + +#include "config.h" +#include +#include +#include +#define NDEBUG +#include + +#include "simclist.h" +#include "debuglog.h" +#include "parser.h" + +static void eval_key(char *pcToken, list_t *list_key); +static void eval_value(char *pcToken, list_t *list_values); +void tperrorCheck (char *pcToken_error); + +static list_t *ListKeys; +static list_t *ListValues; + +%} + +%option nounput +%option noinput +%option noyywrap + +%% + +#.* {} +"\n" {} +\([A-Z]|[a-z]|[0-9]|[ \t])+\<\/key\> { eval_key(yytext, ListKeys); } +[ \t] {} +\([A-Z]|[a-z]|[0-9]|[ \t]|[!@#$%^&*()\-+/_\:?.,=~'";\[\]])+\<\/string\> { eval_value(yytext, ListValues); } +. { tperrorCheck(yytext); } +%% + + +static void eval_key(char *pcToken, list_t *list_key) +{ + struct bundleElt *elt; + int r; + size_t len; + + /* create a new list element */ + elt = malloc(sizeof(*elt)); + assert(elt); + + /* foobar + * 012345 : 5 is the first key character index */ + + /* calculate the argument length */ + for (len=0; pcToken[len+5] != '<'; len++) + ; + len++; /* final NULL byte */ + + elt->key = malloc(len); + memcpy(elt->key, &pcToken[5], len-1); + elt->key[len-1] = '\0'; + + r = list_init(&elt->values); + assert(r >= 0); + (void)r; + + /* add the key/values */ + list_append(list_key, elt); + + /* set the list to store the values */ + ListValues = &elt->values; +} + +static void eval_value(char *pcToken, list_t *list_values) +{ + int r; + size_t len; + char *value; + char *amp; + + /* foobar + * 012345678 : 8 is the first string character index */ + + /* calculate the argument length */ + for (len=0; pcToken[len+8] != '<'; len++) + ; + len++; /* final NULL byte */ + + value = malloc(len); + assert(value); + + memcpy(value, &pcToken[8], len-1); + value[len-1] = '\0'; + + /* for all & in the string */ + amp = value; + while ((amp = strstr(amp, "&")) != NULL) + { + char *p; + + /* just skip "amp;" substring (4 letters) */ + for (p = amp+1; *(p+4); p++) + { + *p = *(p+4); + } + /* terminate the now shorter string */ + *p = '\0'; + + /* skip the & and continue */ + amp++; + } + + r = list_append(list_values, value); + assert(r >= 0); + (void)r; +} + +void tperrorCheck (char *token_error) +{ + (void)token_error; +} + +/** + * Find an optional key in a configuration file + * No error is logged if the key is not found + * + * @param l list generated by bundleParse() + * @param key searched key + * @param[out] values list of token value (if key found) + * @retval 0 OK + * @retval 1 key not found + */ +int LTPBundleFindValueWithKey(list_t *l, const char *key, list_t **values) +{ + unsigned int i; + int ret = 1; + + for (i=0; i < list_size(l); i++) + { + struct bundleElt *elt; + + elt = list_get_at(l, i); + assert(elt); + + if (0 == strcmp(elt->key, key)) + { + *values = &elt->values; + ret = 0; + } + } + + return ret; +} + + +/** + * Parse a Info.plist file and file a list + * + * @param fileName file name + * @param l list containing the results + * @retval -1 configuration file not found + * @retval 0 OK + */ +int bundleParse(const char *fileName, list_t *l) +{ + FILE *file = NULL; + int r; +#ifndef NDEBUG + int i; +#endif + + file = fopen(fileName, "r"); + if (!file) + { + Log3(PCSC_LOG_CRITICAL, "Could not open bundle file %s: %s", + fileName, strerror(errno)); + return 1; + } + + r = list_init(l); + assert(r >= 0); + (void)r; + + ListKeys = l; + yyin = file; + + do + { + (void)yylex(); + } while (!feof(file)); + yylex_destroy(); + + (void)fclose(file); + +#ifndef NDEBUG + printf("size: %d\n", list_size(l)); + for (i=0; i < list_size(l); i++) + { + struct bundleElt *elt; + unsigned int j; + + elt = list_get_at(l, i); + assert(elt); + printf("Key: %s\n", elt->key); + + for (j=0; jvalues); j++) + { + char *v = list_get_at(&elt->values, j); + printf(" value: %s\n", v); + } + } +#endif + + return 0; +} + +/** + * Free the list created by bundleParse() + * + * @param l list containing the results + */ +void bundleRelease(list_t *l) +{ + unsigned int i; + + for (i=0; i < list_size(l); i++) + { + struct bundleElt *elt; + unsigned int j; + + elt = list_get_at(l, i); + assert(elt); + + /* free all the values */ + for (j=0; jvalues); j++) + free(list_get_at(&elt->values, j)); + list_destroy(&elt->values); + + /* free the key */ + free(elt->key); + free(elt); + } + + list_destroy(l); +} diff --git a/src/towitoko/COPYING b/src/towitoko/COPYING new file mode 100644 index 0000000..68dc4c5 --- /dev/null +++ b/src/towitoko/COPYING @@ -0,0 +1,505 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/src/towitoko/README b/src/towitoko/README new file mode 100644 index 0000000..298e327 --- /dev/null +++ b/src/towitoko/README @@ -0,0 +1,12 @@ +All the files in the src/protocol_t1/ directory comes from Carlos +Prados Towitoko smartcard readers driver. + +I (Ludovic Rousseau) hacked the source files a bit to include them in my +CCID driver. So bugs are mine and not Carlos' fault. As indicated in +the source files headers this code is protected by the GNU Lesser +General Public License. + +I used version 2.0.7 of Carlos driver available at +http://www.geocities.com/cprados/ + +I added the function ATR_GetDefaultProtocol() in towitoko/atr.c diff --git a/src/towitoko/atr.c b/src/towitoko/atr.c new file mode 100644 index 0000000..6968a5c --- /dev/null +++ b/src/towitoko/atr.c @@ -0,0 +1,365 @@ +/* + atr.c + ISO 7816 ICC's answer to reset abstract data type implementation + + This file is part of the Unix driver for Towitoko smartcard readers + Copyright (C) 2000 Carlos Prados + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include + +#include "atr.h" +#ifdef HAVE_STRING_H +#include +#endif +#include "debug.h" + +/* + * Not exported variables definition + */ + +static unsigned +atr_num_ib_table[16] = +{ + 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 +}; + +/* + * Exported variables definition + */ + +static unsigned +atr_f_table[16] = +{ + 372, 372, 558, 744, 1116, 1488, 1860, 0, 0, 512, 768, 1024, 1536, 2048, 0, 0 +}; + +static unsigned +atr_d_table[16] = +{ + 0, 1, 2, 4, 8, 16, 32, 64, 12, 20, 0, 0, 0, 0, 0, 0 +}; + +static unsigned +atr_i_table[4] = +{ + 25, 50, 100, 0 +}; + +/* + * Exported functions definition + */ + +int +ATR_InitFromArray (ATR_t * atr, const BYTE atr_buffer[ATR_MAX_SIZE], unsigned length) +{ + BYTE TDi; + unsigned pointer = 0, pn = 0; + + /* Check size of buffer */ + if (length < 2) + return (ATR_MALFORMED); + + /* Store T0 and TS */ + atr->TS = atr_buffer[0]; + + atr->T0 = TDi = atr_buffer[1]; + pointer = 1; + + /* Store number of historical bytes */ + atr->hbn = TDi & 0x0F; + + /* TCK is not present by default */ + (atr->TCK).present = FALSE; + + /* Extract interface bytes */ + while (pointer < length) + { + /* Check buffer is long enought */ + if (pointer + atr_num_ib_table[(0xF0 & TDi) >> 4] >= length) + { + return (ATR_MALFORMED); + } + /* Check TAi is present */ + if ((TDi | 0xEF) == 0xFF) + { + pointer++; + atr->ib[pn][ATR_INTERFACE_BYTE_TA].value = atr_buffer[pointer]; + atr->ib[pn][ATR_INTERFACE_BYTE_TA].present = TRUE; + } + else + atr->ib[pn][ATR_INTERFACE_BYTE_TA].present = FALSE; + /* Check TBi is present */ + if ((TDi | 0xDF) == 0xFF) + { + pointer++; + atr->ib[pn][ATR_INTERFACE_BYTE_TB].value = atr_buffer[pointer]; + atr->ib[pn][ATR_INTERFACE_BYTE_TB].present = TRUE; + } + else + atr->ib[pn][ATR_INTERFACE_BYTE_TB].present = FALSE; + + /* Check TCi is present */ + if ((TDi | 0xBF) == 0xFF) + { + pointer++; + atr->ib[pn][ATR_INTERFACE_BYTE_TC].value = atr_buffer[pointer]; + atr->ib[pn][ATR_INTERFACE_BYTE_TC].present = TRUE; + } + else + atr->ib[pn][ATR_INTERFACE_BYTE_TC].present = FALSE; + + /* Read TDi if present */ + if ((TDi | 0x7F) == 0xFF) + { + pointer++; + TDi = atr->ib[pn][ATR_INTERFACE_BYTE_TD].value = atr_buffer[pointer]; + atr->ib[pn][ATR_INTERFACE_BYTE_TD].present = TRUE; + (atr->TCK).present = ((TDi & 0x0F) != ATR_PROTOCOL_TYPE_T0); + pn++; + if (pn >= ATR_MAX_PROTOCOLS) + return (ATR_MALFORMED); + } + else + { + atr->ib[pn][ATR_INTERFACE_BYTE_TD].present = FALSE; + break; + } + } + + /* Store number of protocols */ + atr->pn = pn + 1; + + /* Store historical bytes */ + if (pointer + atr->hbn >= length) + return (ATR_MALFORMED); + + memcpy (atr->hb, atr_buffer + pointer + 1, atr->hbn); + pointer += (atr->hbn); + + /* Store TCK */ + if ((atr->TCK).present) + { + + if (pointer + 1 >= length) + return (ATR_MALFORMED); + + pointer++; + + (atr->TCK).value = atr_buffer[pointer]; + } + + atr->length = pointer + 1; + return (ATR_OK); +} + +int +ATR_GetConvention (ATR_t * atr, int *convention) +{ + if (atr->TS == 0x3B) + (*convention) = ATR_CONVENTION_DIRECT; + else if (atr->TS == 0x3F) + (*convention) = ATR_CONVENTION_INVERSE; + else + return (ATR_MALFORMED); + return (ATR_OK); +} + +int +ATR_GetIntegerValue (ATR_t * atr, int name, BYTE * value) +{ + int ret; + + if (name == ATR_INTEGER_VALUE_FI) + { + if (atr->ib[0][ATR_INTERFACE_BYTE_TA].present) + { + (*value) = (atr->ib[0][ATR_INTERFACE_BYTE_TA].value & 0xF0) >> 4; + ret = ATR_OK; + } + else + ret = ATR_NOT_FOUND; + } + + else if (name == ATR_INTEGER_VALUE_DI) + { + if (atr->ib[0][ATR_INTERFACE_BYTE_TA].present) + { + (*value) = (atr->ib[0][ATR_INTERFACE_BYTE_TA].value & 0x0F); + ret = ATR_OK; + } + else + ret = ATR_NOT_FOUND; + } + + else if (name == ATR_INTEGER_VALUE_II) + { + if (atr->ib[0][ATR_INTERFACE_BYTE_TB].present) + { + (*value) = (atr->ib[0][ATR_INTERFACE_BYTE_TB].value & 0x60) >> 5; + ret = ATR_OK; + } + else + ret = ATR_NOT_FOUND; + } + + else if (name == ATR_INTEGER_VALUE_PI1) + { + if (atr->ib[0][ATR_INTERFACE_BYTE_TB].present) + { + (*value) = (atr->ib[0][ATR_INTERFACE_BYTE_TB].value & 0x1F); + ret = ATR_OK; + } + else + ret = ATR_NOT_FOUND; + } + + else if (name == ATR_INTEGER_VALUE_PI2) + { + if (atr->ib[1][ATR_INTERFACE_BYTE_TB].present) + { + (*value) = atr->ib[1][ATR_INTERFACE_BYTE_TB].value; + ret = ATR_OK; + } + else + ret = ATR_NOT_FOUND; + } + + else if (name == ATR_INTEGER_VALUE_N) + { + if (atr->ib[0][ATR_INTERFACE_BYTE_TC].present) + { + (*value) = atr->ib[0][ATR_INTERFACE_BYTE_TC].value; + ret = ATR_OK; + } + else + ret = ATR_NOT_FOUND; + } + else + ret = ATR_NOT_FOUND; + + return ret; +} + +int +ATR_GetParameter (ATR_t * atr, int name, double *parameter) +{ + BYTE FI, DI, II, PI1, PI2, N; + + if (name == ATR_PARAMETER_F) + { + if (ATR_GetIntegerValue (atr, ATR_INTEGER_VALUE_FI, &FI) == ATR_OK) + (*parameter) = (double) (atr_f_table[FI]); + else + (*parameter) = (double) ATR_DEFAULT_F; + return (ATR_OK); + } + + else if (name == ATR_PARAMETER_D) + { + if (ATR_GetIntegerValue (atr, ATR_INTEGER_VALUE_DI, &DI) == ATR_OK) + (*parameter) = (double) (atr_d_table[DI]); + else + (*parameter) = (double) ATR_DEFAULT_D; + return (ATR_OK); + } + + else if (name == ATR_PARAMETER_I) + { + if (ATR_GetIntegerValue (atr, ATR_INTEGER_VALUE_II, &II) == ATR_OK) + (*parameter) = (double) (atr_i_table[II]); + else + (*parameter) = ATR_DEFAULT_I; + return (ATR_OK); + } + + else if (name == ATR_PARAMETER_P) + { + if (ATR_GetIntegerValue (atr, ATR_INTEGER_VALUE_PI2, &PI2) == ATR_OK) + (*parameter) = (double) PI2; + else if (ATR_GetIntegerValue (atr, ATR_INTEGER_VALUE_PI1, &PI1) == ATR_OK) + (*parameter) = (double) PI1; + else + (*parameter) = (double) ATR_DEFAULT_P; + return (ATR_OK); + } + + else if (name == ATR_PARAMETER_N) + { + if (ATR_GetIntegerValue (atr, ATR_INTEGER_VALUE_N, &N) == ATR_OK) + (*parameter) = (double) N; + else + (*parameter) = (double) ATR_DEFAULT_N; + return (ATR_OK); + } + + return (ATR_NOT_FOUND); +} + +/* + * This function was greatly inspired by ATRDecodeAtr() and + * PHGetDefaultProtocol() from pcsc-lite + * + * It was rewritten by Ludovic Rousseau, 2004 + */ +#define PROTOCOL_UNSET -1 +int ATR_GetDefaultProtocol(ATR_t * atr, int *protocol, int *availableProtocols) +{ + int i; + + /* default value */ + *protocol = PROTOCOL_UNSET; + if (availableProtocols) + *availableProtocols = 0; + + for (i=0; iib[i][ATR_INTERFACE_BYTE_TD].present) + { + int T = atr->ib[i][ATR_INTERFACE_BYTE_TD].value & 0x0F; + + DEBUG_COMM2("T=%d Protocol Found", T); + if (availableProtocols) + *availableProtocols |= 1 << T; + + if (PROTOCOL_UNSET == *protocol) + { + /* set to the first protocol byte found */ + *protocol = T; + DEBUG_COMM2("default protocol: T=%d", *protocol); + } + } + + /* specific mode if TA2 present */ + if (atr->ib[1][ATR_INTERFACE_BYTE_TA].present) + { + *protocol = atr->ib[1][ATR_INTERFACE_BYTE_TA].value & 0x0F; + if (availableProtocols) + *availableProtocols = 1 << *protocol; + DEBUG_COMM2("specific mode found: T=%d", *protocol); + } + + if (PROTOCOL_UNSET == *protocol) + { + DEBUG_INFO1("no default protocol found in ATR. Using T=0"); + *protocol = ATR_PROTOCOL_TYPE_T0; + if (availableProtocols) + *availableProtocols = 1 << *protocol; + } + + return ATR_OK; +} + diff --git a/src/towitoko/atr.h b/src/towitoko/atr.h new file mode 100644 index 0000000..abe48c3 --- /dev/null +++ b/src/towitoko/atr.h @@ -0,0 +1,111 @@ +/* + atr.h + ISO 7816 ICC's answer to reset abstract data type definitions + + This file is part of the Unix driver for Towitoko smartcard readers + Copyright (C) 2000 Carlos Prados + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef _ATR_ +#define _ATR_ + +#include "defines.h" + +/* + * Exported constants definition + */ + +/* Return values */ +#define ATR_OK 0 /* ATR could be parsed and data returned */ +#define ATR_NOT_FOUND 1 /* Data not present in ATR */ +#define ATR_MALFORMED 2 /* ATR could not be parsed */ +#define ATR_IO_ERROR 3 /* I/O stream error */ + +/* Paramenters */ +#define ATR_MAX_SIZE 33 /* Maximum size of ATR byte array */ +#define ATR_MAX_HISTORICAL 15 /* Maximum number of historical bytes */ +#define ATR_MAX_PROTOCOLS 7 /* Maximun number of protocols */ +#define ATR_MAX_IB 4 /* Maximum number of interface bytes per protocol */ +#define ATR_CONVENTION_DIRECT 0 /* Direct convention */ +#define ATR_CONVENTION_INVERSE 1 /* Inverse convention */ +#define ATR_PROTOCOL_TYPE_T0 0 /* Protocol type T=0 */ +#define ATR_PROTOCOL_TYPE_T1 1 /* Protocol type T=1 */ +#define ATR_PROTOCOL_TYPE_T2 2 /* Protocol type T=2 */ +#define ATR_PROTOCOL_TYPE_T3 3 /* Protocol type T=3 */ +#define ATR_PROTOCOL_TYPE_T14 14 /* Protocol type T=14 */ +#define ATR_INTERFACE_BYTE_TA 0 /* Interface byte TAi */ +#define ATR_INTERFACE_BYTE_TB 1 /* Interface byte TBi */ +#define ATR_INTERFACE_BYTE_TC 2 /* Interface byte TCi */ +#define ATR_INTERFACE_BYTE_TD 3 /* Interface byte TDi */ +#define ATR_PARAMETER_F 0 /* Parameter F */ +#define ATR_PARAMETER_D 1 /* Parameter D */ +#define ATR_PARAMETER_I 2 /* Parameter I */ +#define ATR_PARAMETER_P 3 /* Parameter P */ +#define ATR_PARAMETER_N 4 /* Parameter N */ +#define ATR_INTEGER_VALUE_FI 0 /* Integer value FI */ +#define ATR_INTEGER_VALUE_DI 1 /* Integer value DI */ +#define ATR_INTEGER_VALUE_II 2 /* Integer value II */ +#define ATR_INTEGER_VALUE_PI1 3 /* Integer value PI1 */ +#define ATR_INTEGER_VALUE_N 4 /* Integer value N */ +#define ATR_INTEGER_VALUE_PI2 5 /* Integer value PI2 */ + +/* Default values for paramenters */ +#define ATR_DEFAULT_F 372 +#define ATR_DEFAULT_D 1 +#define ATR_DEFAULT_I 50 +#define ATR_DEFAULT_N 0 +#define ATR_DEFAULT_P 5 + +/* + * Exported data types definition + */ + +typedef struct +{ + unsigned length; + BYTE TS; + BYTE T0; + struct + { + BYTE value; + bool present; + } + ib[ATR_MAX_PROTOCOLS][ATR_MAX_IB], TCK; + unsigned pn; + BYTE hb[ATR_MAX_HISTORICAL]; + unsigned hbn; +} +ATR_t; + +/* + * Exported functions declaraton + */ + +/* Initialization */ +extern int ATR_InitFromArray(ATR_t * atr, const BYTE buffer[ATR_MAX_SIZE], + unsigned length); + +/* General smartcard characteristics */ +extern int ATR_GetConvention(ATR_t * atr, /*@out@*/ int *convention); +extern int ATR_GetDefaultProtocol(ATR_t * atr, /*@out@*/ int *protocol, int *availableProtocols); + +/* ATR parameters and integer values */ +extern int ATR_GetIntegerValue(ATR_t * atr, int name, BYTE * value); +extern int ATR_GetParameter(ATR_t * atr, int name, /*@out@*/ double *parameter); + +#endif /* _ATR_ */ + diff --git a/src/towitoko/defines.h b/src/towitoko/defines.h new file mode 100644 index 0000000..abd5dbe --- /dev/null +++ b/src/towitoko/defines.h @@ -0,0 +1,56 @@ +/* + defines.h + + This file is part of the Unix driver for Towitoko smartcard readers + Copyright (C) 2000 Carlos Prados + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef DEFINES_H +#define DEFINES_H + +/* + * Get configuration information + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* + * Boolean constants + */ + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +/* + * Type definitions + */ + +#include + +#ifndef __cplusplus +typedef int bool; +#endif + +#endif /* DEFINES_H */ + diff --git a/src/towitoko/pps.c b/src/towitoko/pps.c new file mode 100644 index 0000000..cfe8e8d --- /dev/null +++ b/src/towitoko/pps.c @@ -0,0 +1,136 @@ +/* + pps.c + Protocol Parameters Selection + + This file is part of the Unix driver for Towitoko smartcard readers + Copyright (C) 2000 2001 Carlos Prados + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "pps.h" +#include "atr.h" +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_STRING_H +#include +#endif +#include + +#include "commands.h" +#include "defs.h" +#include "debug.h" + +/* + * Not exported funtions declaration + */ + +static bool PPS_Match (BYTE * request, unsigned len_request, BYTE * reply, unsigned len_reply); + +static unsigned PPS_GetLength (BYTE * block); + +static BYTE PPS_GetPCK (BYTE * block, unsigned length); + +int +PPS_Exchange (int lun, BYTE * params, unsigned *length, unsigned char *pps1) +{ + BYTE confirm[PPS_MAX_LENGTH]; + unsigned len_request, len_confirm; + int ret; + + len_request = PPS_GetLength (params); + params[len_request - 1] = PPS_GetPCK(params, len_request - 1); + + DEBUG_XXD ("PPS: Sending request: ", params, len_request); + + /* Send PPS request */ + if (CCID_Transmit (lun, len_request, params, isCharLevel(lun) ? 4 : 0, 0) + != IFD_SUCCESS) + return PPS_ICC_ERROR; + + /* Get PPS confirm */ + len_confirm = sizeof(confirm); + if (CCID_Receive (lun, &len_confirm, confirm, NULL) != IFD_SUCCESS) + return PPS_ICC_ERROR; + + DEBUG_XXD ("PPS: Receiving confirm: ", confirm, len_confirm); + + if (!PPS_Match (params, len_request, confirm, len_confirm)) + ret = PPS_HANDSAKE_ERROR; + else + ret = PPS_OK; + + *pps1 = 0x11; /* default TA1 */ + + /* if PPS1 is echoed */ + if (PPS_HAS_PPS1 (params) && PPS_HAS_PPS1 (confirm)) + *pps1 = confirm[2]; + + /* Copy PPS handsake */ + memcpy (params, confirm, len_confirm); + (*length) = len_confirm; + + return ret; +} + +static bool +PPS_Match (BYTE * request, unsigned len_request, BYTE * confirm, unsigned len_confirm) +{ + /* See if the reply differs from request */ + if ((len_request == len_confirm) && /* same length */ + memcmp (request, confirm, len_request)) /* different contents */ + return FALSE; + + if (len_request < len_confirm) /* confirm longer than request */ + return FALSE; + + /* See if the card specifies other than default FI and D */ + if ((PPS_HAS_PPS1 (confirm)) && (confirm[2] != request[2])) + return FALSE; + + return TRUE; +} + +static unsigned +PPS_GetLength (BYTE * block) +{ + unsigned length = 3; + + if (PPS_HAS_PPS1 (block)) + length++; + + if (PPS_HAS_PPS2 (block)) + length++; + + if (PPS_HAS_PPS3 (block)) + length++; + + return length; +} + +static BYTE +PPS_GetPCK (BYTE * block, unsigned length) +{ + BYTE pck; + unsigned i; + + pck = block[0]; + for (i = 1; i < length; i++) + pck ^= block[i]; + + return pck; +} + diff --git a/src/towitoko/pps.h b/src/towitoko/pps.h new file mode 100644 index 0000000..d9c2ae6 --- /dev/null +++ b/src/towitoko/pps.h @@ -0,0 +1,71 @@ +/* + pps.h + Protocol Parameters Selection + + This file is part of the Unix driver for Towitoko smartcard readers + Copyright (C) 2000 2001 Carlos Prados + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef _PPS_ +#define _PPS_ + +#include "defines.h" + +/* + * Exported constants definition + */ + +#define PPS_OK 0 /* Negotiation OK */ +#define PPS_ICC_ERROR 1 /* Comunication error */ +#define PPS_HANDSAKE_ERROR 2 /* Agreement not reached */ +#define PPS_PROTOCOL_ERROR 3 /* Error starting protocol */ +#define PPS_MAX_LENGTH 6 + +#define PPS_HAS_PPS1(block) ((block[1] & 0x10) == 0x10) +#define PPS_HAS_PPS2(block) ((block[1] & 0x20) == 0x20) +#define PPS_HAS_PPS3(block) ((block[1] & 0x40) == 0x40) + +/* + * Exported data types definition + */ + +typedef struct +{ + double f; + double d; + double n; + BYTE t; +} +PPS_ProtocolParameters; + +typedef struct +{ + int icc; + void *protocol; + PPS_ProtocolParameters parameters; +} +PPS; + +/* + * Exported functions declaration + */ + +int PPS_Exchange (int lun, BYTE * params, /*@out@*/ unsigned *length, + unsigned char *pps1); + +#endif /* _PPS_ */ + diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 0000000..60291b7 --- /dev/null +++ b/src/utils.c @@ -0,0 +1,81 @@ +/* + utils.c: + Copyright (C) 2003-2008 Ludovic Rousseau + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include + +#include +#include "ccid.h" +#include "defs.h" +#include "ccid_ifdhandler.h" +#include "utils.h" +#include "debug.h" + +int ReaderIndex[CCID_DRIVER_MAX_READERS]; + +void InitReaderIndex(void) +{ + int i; + + for (i=0; i. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +get_dirname () +{ + case $1 in + */*|*\\*) printf '%s\n' "$1" | sed -e 's|\([\\/]\)[^\\/]*$|\1|';; + # Otherwise, we want the empty string (not "."). + esac +} + +# guard FILE +# ---------- +# The CPP macro used to guard inclusion of FILE. +guard () +{ + printf '%s\n' "$1" \ + | sed \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ + -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g' \ + -e 's/__*/_/g' +} + +# quote_for_sed [STRING] +# ---------------------- +# Return STRING (or stdin) quoted to be used as a sed pattern. +quote_for_sed () +{ + case $# in + 0) cat;; + 1) printf '%s\n' "$1";; + esac \ + | sed -e 's|[][\\.*]|\\&|g' +} + +case "$1" in + '') + echo "$0: No files given. Try '$0 --help' for more information." 1>&2 + exit 1 + ;; + --basedir) + basedir=$2 + shift 2 + ;; + -h|--h*) + cat <<\EOF +Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]... + +Wrapper for lex/yacc invocations, renaming files as desired. + + INPUT is the input file + OUTPUT is one file PROG generates + DESIRED is the file we actually want instead of OUTPUT + PROGRAM is program to run + ARGS are passed to PROG + +Any number of OUTPUT,DESIRED pairs may be used. + +Report bugs to . +EOF + exit $? + ;; + -v|--v*) + echo "ylwrap $scriptversion" + exit $? + ;; +esac + + +# The input. +input=$1 +shift +# We'll later need for a correct munging of "#line" directives. +input_sub_rx=`get_dirname "$input" | quote_for_sed` +case $input in + [\\/]* | ?:[\\/]*) + # Absolute path; do nothing. + ;; + *) + # Relative path. Make it absolute. + input=`pwd`/$input + ;; +esac +input_rx=`get_dirname "$input" | quote_for_sed` + +# Since DOS filename conventions don't allow two dots, +# the DOS version of Bison writes out y_tab.c instead of y.tab.c +# and y_tab.h instead of y.tab.h. Test to see if this is the case. +y_tab_nodot=false +if test -f y_tab.c || test -f y_tab.h; then + y_tab_nodot=true +fi + +# The parser itself, the first file, is the destination of the .y.c +# rule in the Makefile. +parser=$1 + +# A sed program to s/FROM/TO/g for all the FROM/TO so that, for +# instance, we rename #include "y.tab.h" into #include "parse.h" +# during the conversion from y.tab.c to parse.c. +sed_fix_filenames= + +# Also rename header guards, as Bison 2.7 for instance uses its header +# guard in its implementation file. +sed_fix_header_guards= + +while test $# -ne 0; do + if test x"$1" = x"--"; then + shift + break + fi + from=$1 + # Handle y_tab.c and y_tab.h output by DOS + if $y_tab_nodot; then + case $from in + "y.tab.c") from=y_tab.c;; + "y.tab.h") from=y_tab.h;; + esac + fi + shift + to=$1 + shift + sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;" + sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;" +done + +# The program to run. +prog=$1 +shift +# Make any relative path in $prog absolute. +case $prog in + [\\/]* | ?:[\\/]*) ;; + *[\\/]*) prog=`pwd`/$prog ;; +esac + +dirname=ylwrap$$ +do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret' +trap "ret=129; $do_exit" 1 +trap "ret=130; $do_exit" 2 +trap "ret=141; $do_exit" 13 +trap "ret=143; $do_exit" 15 +mkdir $dirname || exit 1 + +cd $dirname + +case $# in + 0) "$prog" "$input" ;; + *) "$prog" "$@" "$input" ;; +esac +ret=$? + +if test $ret -eq 0; then + for from in * + do + to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"` + if test -f "$from"; then + # If $2 is an absolute path name, then just use that, + # otherwise prepend '../'. + case $to in + [\\/]* | ?:[\\/]*) target=$to;; + *) target=../$to;; + esac + + # Do not overwrite unchanged header files to avoid useless + # recompilations. Always update the parser itself: it is the + # destination of the .y.c rule in the Makefile. Divert the + # output of all other files to a temporary file so we can + # compare them to existing versions. + if test $from != $parser; then + realtarget=$target + target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'` + fi + + # Munge "#line" or "#" directives. Don't let the resulting + # debug information point at an absolute srcdir. Use the real + # output file name, not yy.lex.c for instance. Adjust the + # include guards too. + sed -e "/^#/!b" \ + -e "s|$input_rx|$input_sub_rx|" \ + -e "$sed_fix_filenames" \ + -e "$sed_fix_header_guards" \ + "$from" >"$target" || ret=$? + + # Check whether files must be updated. + if test "$from" != "$parser"; then + if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then + echo "$to is unchanged" + rm -f "$target" + else + echo "updating $to" + mv -f "$target" "$realtarget" + fi + fi + else + # A missing file is only an error for the parser. This is a + # blatant hack to let us support using "yacc -d". If -d is not + # specified, don't fail when the header file is "missing". + if test "$from" = "$parser"; then + ret=1 + fi + fi + done +fi + +# Remove the directory. +cd .. +rm -rf $dirname + +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: