diff --git a/libusb-1.0.26/AUTHORS b/libusb-1.0.26/AUTHORS new file mode 100644 index 0000000000000000000000000000000000000000..8f91512a19d4b18e325e5bd882898ca1f3163138 --- /dev/null +++ b/libusb-1.0.26/AUTHORS @@ -0,0 +1,202 @@ +Copyright © 2001 Johannes Erdfelt +Copyright © 2007-2009 Daniel Drake +Copyright © 2010-2012 Peter Stuge +Copyright © 2008-2016 Nathan Hjelm +Copyright © 2009-2013 Pete Batard +Copyright © 2009-2013 Ludovic Rousseau +Copyright © 2010-2012 Michael Plante +Copyright © 2011-2013 Hans de Goede +Copyright © 2012-2013 Martin Pieuchot +Copyright © 2012-2013 Toby Gray +Copyright © 2013-2018 Chris Dickens + +Other contributors: +Aaron Luft +Adam Korcz +Adrian Bunk +Adrien Destugues +Akshay Jaggi +Alan Ott +Alan Stern +Aleksandr Mezin +Alexander Pyhalov +Alexander Schlarb +Alexander Stein +Alex Vatchenko +Andrew Aldridge +Andrew Fernandes +Andrew Goodney +Andy Chunyu +Andy McFadden +Angus Gratton +Anil Nair +Ankur Verma +Anthony Clay +Antonio Ospite +Artem Egorkine +Aurelien Jarno +Axel Gembe +Aymeric Vincent +Baruch Siach +Bastien Nocera +Bei Zhang +Bence Csokas +Benjamin Berg +Benjamin Dobell +Bohdan Tymkiv +Brent Rector +Bruno Harbulot +Carl Karsten +Christophe Zeitouny +Chris Zhu +Chunyu Xie +Colin Walters +Craig Hutchinson +Dave Camarillo +David Engraf +Davidlohr Bueso +David Moore +Dmitry Fleytman +Dmitry Kostjuchenko +Dmitry Zakablukov +Doug Johnston +Evan Hunter +Evan Miller +Fabrice Fontaine +Federico Manzan +Felipe Balbi +Florian Albrechtskirchinger +Francesco Montorsi +Francisco Facioni +Frank Li +Frederik Carlier +Freek Dijkstra +Gaurav Gupta +Graeme Gill +Greg Kroah-Hartman +Gustavo Zacarias +Haidong Zheng +Hans Ulrich Niedermann +Harry Mallon +Hector Martin +Hoi-Ho Chan +Ido Yariv +Igor Anokhin +Ihor Dutchak +Ilya Konstantinov +Jakub Klama +James Hanko +Jeffrey Nichols +Jie Zhang +Jim Chen +Johann Richard +John Keeping +John Sheu +Jonas Malaco +Jonathon Jongsma +Joost Muller +Josh Gao +Joshua Blake +Joshua Hou +Juan Cruz Viotti +Julian Scheel +Justin Bischoff +Karsten Koenig +Keith Ahluwalia +Kenjiro Tsuji +Kimura Masaru +Konrad Rzepecki +Kuangye Guo +Lars Kanis +Lars Wirzenius +Lei Chen +Léo Lam +Liang Yunwang +Luca Longinotti +Luz Paz +Mac Wang +Marco Trevisan (Treviño) +Marcus Meissner +Mark Kuo +Markus Heidelberg +Martin Ettl +Martin Koegler +Martin Ling +Martin Thierer +Mathias Hjärtström +Matthew Stapleton +Matthias Bolte +Michael Dickens +Michel Zou +Mike Frysinger +Mikhail Gusarov +Mikolaj Kucharski +Morgan Leborgne +Moritz Fischer +Nancy Li +Nia Alarie +Nicholas Corgan +Omri Iluz +Orin Eman +Ozkan Sezer +Patrick Stewart +Paul Cercueil +Paul Fertser +Paul Qureshi +Pekka Nikander +Philémon Favrod +Pino Toscano +Rob Walker +Romain Vimont +Roman Kalashnikov +Ryan Hileman +Ryan Schmidt +Saleem Rashid +Sameeh Jubran +Sean McBride +Sebastian Pipping +Sebastian von Ohr +Sergey Serb +Shawn Hoffman +Simon Haggett +Simon Newton +Slash Gordon +Stefan Agner +Stefan Tauner +Steinar H. Gunderson +Stephen Groat +Theo Buehler +Thomas Röfer +Tim Hutt +Tim Roberts +Tobias Klauser +Toby Peterson +Tormod Volden +Trygve Laugstøl +Uri Lublin +Uwe Bonnes +Vasily Khoruzhick +Vegard Storheil Eriksen +Venkatesh Shukla +Vianney le Clément de Saint-Marcq +Victor Toso +Vinicius Tinti +Vitali Lovich +Vladimir Beloborodov +William Orr +William Skellenger +Xiaofan Chen +Yegor Yefremov +Zhiqiang Liu +Zoltán Kovács +Сергей Валерьевич +Ларионов Даниил +Роман Донченко +jonner +orbitcowboy +osy +parafin +RipleyTom +Seneral +saur0n +winterrace diff --git a/libusb-1.0.26/COPYING b/libusb-1.0.26/COPYING new file mode 100644 index 0000000000000000000000000000000000000000..5ab7695ab8cabe0c5c8a814bb0ab1e8066578fbb --- /dev/null +++ b/libusb-1.0.26/COPYING @@ -0,0 +1,504 @@ + 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.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 + +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/libusb-1.0.26/ChangeLog b/libusb-1.0.26/ChangeLog new file mode 100644 index 0000000000000000000000000000000000000000..326a9b3e46feffa9a617a9296012c2150009783d --- /dev/null +++ b/libusb-1.0.26/ChangeLog @@ -0,0 +1,334 @@ +For detailed information about the changes below, please see the git log or +visit: http://log.libusb.info + +2022-04-10: v1.0.26 +* Fix regression with transfer free's after closing device +* Fix regression with destroyed context if API is misused +* Workaround for applications using missing default context +* Fix hotplog enumeration regression +* Fix Windows isochronous transfer regression since 1.0.24 +* Fix macOS exit crash in some multi-context cases +* Build fixes for various platforms and configurations +* Fix Windows HID multi-interface product string retrieval +* Update isochronous OUT packet actual lengths on Windows +* Add interface bound checking for broken devices +* Add umockdev tests on Linux + +2022-01-31: v1.0.25 +* Linux: Fix regression with some particular devices +* Linux: Fix regression with libusb_handle_events_timeout_completed() +* Linux: Fix regression with cpu usage in libusb_bulk_transfer +* Darwin (macOS): Add support for detaching kernel drivers with authorization. +* Darwin (macOS): Do not drop partial data on timeout. +* Darwin (macOS): Silence pipe error in set_interface_alt_setting(). +* Windows: Fix HID backend missing byte +* Windows: Fix segfault with libusbk driver +* Windows: Fix regression when using libusb0 driver +* Windows: Support LIBUSB_TRANSFER_ADD_ZERO_PACKET on winusb +* New NO_DEVICE_DISCOVERY option replaces WEAK_AUTHORITY option +* Various other bug fixes and improvements + +2020-12-09: v1.0.24 +* Add new platform abstraction (#252) +* Add Null POSIX backend +* Add support for eventfd +* Add support for thread IDs on Haiku, NetBSD and Solaris +* New API libusb_hotplug_get_user_data() +* Darwin (macOS): Fix race condition that results in segmentation fault (#701) +* Darwin (macOS): Fix stale descriptor information post reset (#733) +* Darwin (macOS): use IOUSBDevice as darwin_device_class explicitly (#693) +* Linux: Drop support for kernel older than 2.6.32 +* Linux: Provide an event thread name (#689) +* Linux: Wait until all URBs have been reaped before freeing them (#607) +* NetBSD: Recognize device timeouts (#710) +* OpenBSD: Allow opening ugen devices multiple times (#763) +* OpenBSD: Support libusb_get_port_number() (#764) +* SunOS: Fix a memory leak (#756) +* SunOS: Various fixes (#627, #628, #629) +* Windows: Add Visual Studio 2019 support +* Windows: Drop support for WinCE and Visual Studio older than 2013 +* Windows: Drop support for Windows XP +* Windows: Support building all examples using Visual Studio (#151) +* Documentation fixes and improvements +* Various other bug fixes and improvements + +2019-08-28: v1.0.23 +* Add German translation (#446) +* Add Hungarian translation (#493) +* Android: Improved support for Android +* BSD: Remove infinite recursion in OpenBSD backend +* configure.ac: Fix detection of clock_gettime library (#439) +* Core: abandon synchronous transfers when device closure is detected. +* Core: fix error in handling the removal of file descriptors while handling + events. +* Darwin(macOS): Switch from using ResetDevice to USBDeviceReEnumerate (#455) +* Darwin(macOS): Remove code that changed the device class used (#428) +* Darwin(macOS): Reduce hotplug timeout to 1ms (from 5s) +* New API libusb_set_log_cb() to redirect global and per context log + messages to the provided log handling function +* New API libusb_wrap_sys_device to allow the user to specify the + usb device to use. +* Solaris: Break infinite recursion in backend clock_gettime +* Solaris: Enable timerfd on sunos when available +* Windows: Add support for isochronous transfers with WinUSB +* Various other bug fixes and improvements + +2018-03-24: v1.0.22 +* New libusb_set_option() API +* Fix transfer timeout not being cleared upon resubmission +* Report super speed plus devices on modern Linux and macOS +* Darwin: Improve support for macOS Sierra and High Sierra +* Darwin: SDK fixes and improvements +* Linux: Let initialization succeed when no devices are present +* Linux: Mark internal file descriptors with CLOEXEC flag +* Solaris: Add support for attach/detach kernel driver +* Windows: Add dynamic UsbDk backend selection +* Windows: Add isochronous transfer support via libusbK +* Windows: Add Visual Studio 2017 support +* Windows: Fix enumeration problems on Windows 8 and later +* Windows: Major rework of poll() emulation +* Windows: Numerous HID API fixes +* Windows: Support cancellation of individual transfers (Vista and later) +* Various other bug fixes and improvements + +2016-10-01: v1.0.21 +* Core: Refactor code related to transfer flags and timeout handling +* Darwin: Ignore root hub simulation devices +* Darwin: Improved support for OS X El Capitan +* Darwin: Work around devices with buggy endpoint descriptors +* Darwin: Do not use objc_registerThreadWithCollector after its deprecation +* Darwin: Use C11 atomics on 10.12+ as the OS atomics are now deprecated +* Linux: Support preallocating kernel memory for zerocopy USB +* Linux: Deal with receiving POLLERR before all transfers have completed +* Solaris: Add solaris backend +* Windows: Add Visual Studio 2015 support +* Windows: Add usbdk backend +* Prevent attempts to recursively handle events +* Fix race condition in handle_timeout() +* Allow transferred argument to be optional in bulk APIs +* Various other bug fixes and improvements + +2015-09-13: v1.0.20 +* Add Haiku support +* Fix multiple memory and resource leaks (#16, #52, #76, #81) +* Fix possible deadlock when executing transfer callback +* New libusb_free_pollfds() API +* Darwin: Fix devices not being detected on OS X 10.8 (#48) +* Linux: Allow larger isochronous transfer submission (#23) +* Windows: Fix broken builds Cygwin/MinGW builds and compiler warnings +* Windows: Fix broken bus number lookup +* Windows: Improve submission of control requests for composite devices +* Examples: Add two-stage load support to fxload (#12) +* Correctly report cancellations due to timeouts +* Improve efficiency of event handling +* Improve speed of transfer submission in multi-threaded environments +* Various other bug fixes and improvements +The (#xx) numbers are libusb issue numbers, see ie: +https://github.com/libusb/libusb/issues/16 + +2014-05-30: v1.0.19 +* Add support for USB bulk streams on Linux and Mac OS X (#11) +* Windows: Add AMD and Intel USB-3.0 root hub support +* Windows: Fix USB 3.0 speed detection on Windows 8 or later (#10) +* Added Russian translation for libusb_strerror strings +* All: Various small fixes and cleanups + +2014-01-25: v1.0.18 +* Fix multiple memory leaks +* Fix a crash when HID transfers return no data on Windows +* Ensure all pending events are consumed +* Improve Android and ucLinux support +* Multiple Windows improvements (error logging, VS2013, VIA xHCI support) +* Multiple OS X improvements (broken compilation, SIGFPE, 64bit support) + +2013-09-06: v1.0.17 +* Hotplug callbacks now always get passed a libusb_context, even if it is + the default context. Previously NULL would be passed for the default context, + but since the first context created is the default context, and most apps + use only 1 context, this meant that apps explicitly creating a context would + still get passed NULL +* Android: Add .mk files to build with the Android NDK +* Darwin: Add Xcode project +* Darwin: Fix crash on unplug (#121) +* Linux: Fix hang (deadlock) on libusb_exit +* Linux: Fix libusb build failure with --disable-udev (#124) +* Linux: Fix libusb_get_device_list() hang with --disable-udev (#130) +* OpenBSD: Update OpenBSD backend with support for control transfers to + non-ugen(4) devices and make get_configuration() no longer generate I/O. + Note that using this libusb version on OpenBSD requires using + OpenBSD 5.3-current or later. Users of older OpenBSD versions are advised + to stay with the libusb shipped with OpenBSD (mpi) +* Windows: fix libusb_dll_2010.vcxproj link errors (#129) +* Various other bug fixes and improvements + +2013-07-11: v1.0.16 +* Add hotplug support for Darwin and Linux (#9) +* Add superspeed endpoint companion descriptor support (#15) +* Add BOS descriptor support (#15) +* Make descriptor parsing code more robust +* New libusb_get_port_numbers API, this is libusb_get_port_path without + the unnecessary context parameter, libusb_get_port_path is now deprecated +* New libusb_strerror API (#14) +* New libusb_set_auto_detach_kernel_driver API (#17) +* Improve topology API docs (#95) +* Logging now use a single write call per log-message, avoiding log-message + "interlacing" when using multiple threads. +* Android: use Android logging when building on Android (#101) +* Darwin: make libusb_reset reenumerate device on descriptors change (#89) +* Darwin: add support for the LIBUSB_TRANSFER_ADD_ZERO_PACKET flag (#91) +* Darwin: add a device cache (#112, #114) +* Examples: Add sam3u_benchmark isochronous example by Harald Welte (#109) +* Many other bug fixes and improvements +The (#xx) numbers are libusbx issue numbers, see ie: +https://github.com/libusbx/libusbx/issues/9 + +2013-04-15: v1.0.15 +* Improve transfer cancellation and avoid short read failures on broken descriptors +* Filter out 8-bit characters in libusb_get_string_descriptor_ascii() +* Add WinCE support +* Add library stress tests +* Add Cypress FX3 firmware upload support for fxload sample +* Add HID and kernel driver detach support capabilities detection +* Add SuperSpeed detection on OS X +* Fix bInterval value interpretation on OS X +* Fix issues with autoclaim, composite HID devices, interface autoclaim and + early abort in libusb_close() on Windows. Also add VS2012 solution files. +* Improve fd event handling on Linux +* Other bug fixes and improvements + +2012-09-26: v1.0.14 +* Reverts the previous API change with regards to bMaxPower. + If this doesn't matter to you, you are encouraged to keep using v1.0.13, + as it will use the same attribute as v2.0, to be released soon. +* Note that LIBUSB_API_VERSION is *decreased* to 0x010000FF and the previous + guidelines with regards to concurrent use of MaxPower/bMaxPower still apply. + +2012-09-20: v1.0.13 +* [MAJOR] Fix a typo in the API with struct libusb_config_descriptor where + MaxPower was used instead of bMaxPower, as defined in the specs. If your + application was accessing the MaxPower attribute, and you need to maintain + compatibility with libusb or older versions, see APPENDIX A below. +* Fix broken support for the 0.1 -> 1.0 libusb-compat layer +* Fix unwanted cancellation of pending timeouts as well as major timeout related bugs +* Fix handling of HID and composite devices on Windows +* Introduce LIBUSB_API_VERSION macro +* Add Cypress FX/FX2 firmware upload sample, based on fxload from + http://linux-hotplug.sourceforge.net +* Add libusb0 (libusb-win32) and libusbK driver support on Windows. Note that while + the drivers allow it, isochronous transfers are not supported yet in libusb. Also + not supported yet is the use of libusb-win32 filter drivers on composite interfaces +* Add support for the new get_capabilities ioctl on Linux and avoid unnecessary + splitting of bulk transfers +* Improve support for newer Intel and Renesas USB 3.0 controllers on Windows +* Harmonize the device number for root hubs across platforms +* Other bug fixes and improvements + +2012-06-15: v1.0.12 +* Fix a potential major regression with pthread on Linux +* Fix missing thread ID from debug log output on cygwin +* Fix possible crash when using longjmp and MinGW's gcc 4.6 +* Add topology calls: libusb_get_port_number(), libusb_get_parent() & libusb_get_port_path() +* Add toggleable debug, using libusb_set_debug() or the LIBUSB_DEBUG environment variable +* Define log levels in libusb.h and set timestamp origin to first libusb_init() call +* All logging is now sent to to stderr (info was sent to stdout previously) +* Update log messages severity and avoid polluting log output on OS-X +* Add HID driver support on Windows +* Enable interchangeability of MSVC and MinGW DLLs +* Additional bug fixes and improvements + +2012-05-08: v1.0.11 +* Revert removal of critical Windows event handling that was introduced in 1.0.10 +* Fix a possible deadlock in Windows when submitting transfers +* Add timestamped logging +* Add NetBSD support (experimental) and BSD libusb_get_device_speed() data +* Add bootstrap.sh alongside autogen.sh (bootstrap.sh doesn't invoke configure) +* Search for device nodes in /dev for Android support +* Other bug fixes + +2012-04-17: v1.0.10 +* Public release +* Add libusb_get_version +* Add Visual Studio 2010 project files +* Some Windows code cleanup +* Fix xusb sample warnings + +2012-04-02: v1.0.9 +* First libusbx release +* Add libusb_get_device_speed (all, except BSD) and libusb_error_name +* Add Windows support (WinUSB driver only) +* Add OpenBSD support +* Add xusb sample +* Tons of bug fixes + +2010-05-07: v1.0.8 +* Bug fixes + +2010-04-19: v1.0.7 +* Bug fixes and documentation tweaks +* Add more interface class definitions + +2009-11-22: v1.0.6 +* Bug fixes +* Increase libusb_handle_events() timeout to 60s for powersaving + +2009-11-15: v1.0.5 + * Use timerfd when available for timer management + * Small fixes/updates + +2009-11-06: v1.0.4 release + * Bug fixes including transfer locking to fix some potential threading races + * More flexibility with clock types on Linux + * Use new bulk continuation tracking in Linux 2.6.32 for improved handling + of short/failed transfers + +2009-08-27: v1.0.3 release + * Bug fixes + * Add libusb_get_max_iso_packet_size() + +2009-06-13: v1.0.2 release + * Bug fixes + +2009-05-12: v1.0.1 release + * Bug fixes + * Darwin backend + +2008-12-13: v1.0.0 release + * Bug fixes + +2008-11-21: v0.9.4 release + * Bug fixes + * Add libusb_attach_kernel_driver() + +2008-08-23: v0.9.3 release + * Bug fixes + +2008-07-19: v0.9.2 release + * Bug fixes + +2008-06-28: v0.9.1 release + * Bug fixes + * Introduce contexts to the API + * Compatibility with new Linux kernel features + +2008-05-25: v0.9.0 release + * First libusb-1.0 beta release + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +APPENDIX A - How to maintain code compatibility with versions of libusb and +libusb that use MaxPower: + +If you must to maintain compatibility with versions of the library that aren't +using the bMaxPower attribute in struct libusb_config_descriptor, the +recommended way is to use the new LIBUSB_API_VERSION macro with an #ifdef. +For instance, if your code was written as follows: + + if (dev->config[0].MaxPower < 250) + +Then you should modify it to have: + +#if defined(LIBUSB_API_VERSION) && (LIBUSB_API_VERSION >= 0x01000100) + if (dev->config[0].bMaxPower < 250) +#else + if (dev->config[0].MaxPower < 250) +#endif diff --git a/libusb-1.0.26/INSTALL_WIN.txt b/libusb-1.0.26/INSTALL_WIN.txt new file mode 100644 index 0000000000000000000000000000000000000000..3ee364d25fa5e2ee122e88a46c9c09479570feb2 --- /dev/null +++ b/libusb-1.0.26/INSTALL_WIN.txt @@ -0,0 +1,51 @@ +Installation Instructions for Windows +************************************* + +If you are compiling for MinGW or cygwin, please refer to the INSTALL file, +which is automatically generated by autotools (e.g. running bootstrap.sh). + +If you are using Microsoft Visual Studio: +- Open the relevant solution file in /msvc: + libusb_2013.sln for Visual Studio 2013, + libusb_2015.sln for Visual Studio 2015, + libusb_2017.sln for Visual Studio 2017, + libusb_2019.sln for Visual Studio 2019 or later. +- If you want to debug the library, uncomment the ENABLE_DEBUG_LOGGING define + in msvc\config.h +- Select your configuration and compile the project + +Installing and building libusb via vcpkg +**************************************** + +You can download and install libusb using the vcpkg dependency manager: + + git clone https://github.com/Microsoft/vcpkg.git + cd vcpkg + ./bootstrap-vcpkg.bat + ./vcpkg integrate install + vcpkg install libusb + +The libusb port in vcpkg is kept up to date by Microsoft team members and +community contributors. If the version is out of date, please create an issue +or pull request (https://github.com/Microsoft/vcpkg) on the vcpkg repository. + +Destination directories +*********************** + +The 32-bit binaries are placed in a Win32\ directory at the root of the +library. +The 64-bit binaries are placed in a x64\ directory. + +Troubleshooting +*************** + +If the compilation process complains about missing libraries, ensure that the +default library paths for your project points to the relevant directories. +If needed, these libraries can be obtained by installing the latest Windows +SDK. + +Links +***** + +Additional information related to the Windows backend: + http://windows.libusb.info diff --git a/libusb-1.0.26/Makefile.am b/libusb-1.0.26/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..09d7cf528980c5ba0c304fd1627c1713607d4e07 --- /dev/null +++ b/libusb-1.0.26/Makefile.am @@ -0,0 +1,50 @@ +AUTOMAKE_OPTIONS = dist-bzip2 no-dist-gzip +ACLOCAL_AMFLAGS = -I m4 +EXTRA_DIST = INSTALL_WIN.txt PORTING doc/libusb.png \ + android msvc Xcode +SUBDIRS = libusb + +if BUILD_EXAMPLES +SUBDIRS += examples +endif + +if BUILD_TESTS +SUBDIRS += tests +endif + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libusb-1.0.pc + +# The package name is libusb-1.0, but we want the distribution +# to be created as libusb-x.y.z instead of libusb-1.0-x.y.z +distdir = libusb-$(VERSION) + +# Ensure any generated docs are cleaned out +# We need this here because make does not recurse into doc/ +clean-local: + rm -rf doc/$(DOXYGEN_HTMLDIR) + +# Use dist-hook to accomplish the following things for the dist recipe: +# 1) Remove the GitHub Markdown from the README file +# 2) Remove the .gitattributes file from the msvc directory +dist-hook: + chmod u+w $(distdir)/README $(distdir)/msvc + $(SED) -i.orig -e '/Build Status/d' $(distdir)/README + $(SED) -i.orig -e '/^$$/N;/^\n$$/D' $(distdir)/README + $(SED) -i.orig -e 's/\[\([A-Z]*\)\](\1)/\1/' $(distdir)/README + rm -f $(distdir)/README.orig + rm -f $(distdir)/msvc/.gitattributes + +reldir = .release/$(distdir) +sfurl = frs.sourceforge.net:/home/frs/project/libusb/libusb-1.0 +.PHONY: dist-upload +dist-upload: dist + rm -rf $(reldir) + mkdir -p $(reldir) + cp $(distdir).tar.bz2 $(reldir) + if [ -z "$$SF_USER" ]; then \ + rsync -rv $(reldir) $(sfurl); \ + else \ + rsync -rv $(reldir) $$SF_USER@$(sfurl); \ + fi + rm -rf $(reldir) diff --git a/libusb-1.0.26/NEWS b/libusb-1.0.26/NEWS new file mode 100644 index 0000000000000000000000000000000000000000..07695abc1e7c7edc22da0274f80e81d3e33b633f --- /dev/null +++ b/libusb-1.0.26/NEWS @@ -0,0 +1,2 @@ +For the latest libusb news, please refer to the ChangeLog file, or visit: +http://libusb.info diff --git a/libusb-1.0.26/PORTING b/libusb-1.0.26/PORTING new file mode 100644 index 0000000000000000000000000000000000000000..fa9ec1e58dc2191c234ba2d0b6faf9a444f70fd4 --- /dev/null +++ b/libusb-1.0.26/PORTING @@ -0,0 +1,94 @@ +PORTING LIBUSB TO OTHER PLATFORMS + +Introduction +============ + +This document is aimed at developers wishing to port libusb to unsupported +platforms. I believe the libusb API is OS-independent, so by supporting +multiple operating systems we pave the way for cross-platform USB device +drivers. + +Implementation-wise, the basic idea is that you provide an interface to +libusb's internal "backend" API, which performs the appropriate operations on +your target platform. + +In terms of USB I/O, your backend provides functionality to submit +asynchronous transfers (synchronous transfers are implemented in the higher +layers, based on the async interface). Your backend must also provide +functionality to cancel those transfers. + +Your backend must also provide an event handling function to "reap" ongoing +transfers and process their results. + +The backend must also provide standard functions for other USB operations, +e.g. setting configuration, obtaining descriptors, etc. + + +File descriptors for I/O polling +================================ + +For libusb to work, your event handling function obviously needs to be called +at various points in time. Your backend must provide a set of file descriptors +which libusb and its users can pass to poll() or select() to determine when +it is time to call the event handling function. + +On Linux, this is easy: the usbfs kernel interface exposes a file descriptor +which can be passed to poll(). If something similar is not true for your +platform, you can emulate this using an internal library thread to reap I/O as +necessary, and a pipe() with the main library to raise events. The file +descriptor of the pipe can then be provided to libusb as an event source. + + +Interface semantics and documentation +===================================== + +Documentation of the backend interface can be found in libusbi.h inside the +usbi_os_backend structure definition. + +Your implementations of these functions will need to call various internal +libusb functions, prefixed with "usbi_". Documentation for these functions +can be found in the .c files where they are implemented. + +You probably want to skim over *all* the documentation before starting your +implementation. For example, you probably need to allocate and store private +OS-specific data for device handles, but the documentation for the mechanism +for doing so is probably not the first thing you will see. + +The Linux backend acts as a good example - view it as a reference +implementation which you should try to match the behaviour of. + + +Getting started +=============== + +1. Modify configure.ac to detect your platform appropriately (see the OS_LINUX +stuff for an example). + +2. Implement your backend in the libusb/os/ directory, modifying +libusb/os/Makefile.am appropriately. + +3. Add preprocessor logic to the top of libusb/core.c to statically assign the +right usbi_backend for your platform. + +4. Produce and test your implementation. + +5. Send your implementation to libusb-devel mailing list. + + +Implementation difficulties? Questions? +======================================= + +If you encounter difficulties porting libusb to your platform, please raise +these issues on the libusb-devel mailing list. Where possible and sensible, I +am interested in solving problems preventing libusb from operating on other +platforms. + +The libusb-devel mailing list is also a good place to ask questions and +make suggestions about the internal API. Hopefully we can produce some +better documentation based on your questions and other input. + +You are encouraged to get involved in the process; if the library needs +some infrastructure additions/modifications to better support your platform, +you are encouraged to make such changes (in cleanly distinct patch +submissions). Even if you do not make such changes yourself, please do raise +the issues on the mailing list at the very minimum. diff --git a/libusb-1.0.26/README b/libusb-1.0.26/README new file mode 100644 index 0000000000000000000000000000000000000000..f72faae32d8da1ab29aad5560b4546cefe2cac38 --- /dev/null +++ b/libusb-1.0.26/README @@ -0,0 +1,28 @@ +# libusb + +libusb is a library for USB device access from Linux, macOS, +Windows, OpenBSD/NetBSD, Haiku and Solaris userspace. +It is written in C (Haiku backend in C++) and licensed under the GNU +Lesser General Public License version 2.1 or, at your option, any later +version (see COPYING). + +libusb is abstracted internally in such a way that it can hopefully +be ported to other operating systems. Please see the PORTING +file for more information. + +libusb homepage: +http://libusb.info/ + +Developers will wish to consult the API documentation: +http://api.libusb.info + +Use the mailing list for questions, comments, etc: +http://mailing-list.libusb.info + +- Hans de Goede +- Xiaofan Chen +- Ludovic Rousseau +- Nathan Hjelm +- Chris Dickens + +(Please use the mailing list rather than mailing developers directly) diff --git a/libusb-1.0.26/TODO b/libusb-1.0.26/TODO new file mode 100644 index 0000000000000000000000000000000000000000..1e13760efe80b570ad69f22edf055d318fceefc7 --- /dev/null +++ b/libusb-1.0.26/TODO @@ -0,0 +1,2 @@ +Please see the libusb roadmap by visiting: +https://github.com/libusb/libusb/milestones?direction=asc&sort=due_date&state=open diff --git a/libusb-1.0.26/Xcode/common.xcconfig b/libusb-1.0.26/Xcode/common.xcconfig new file mode 100644 index 0000000000000000000000000000000000000000..54e7fb20af19ee0e5ba47371858814a692ec0ca3 --- /dev/null +++ b/libusb-1.0.26/Xcode/common.xcconfig @@ -0,0 +1,65 @@ +// +// libusb Xcode configuration file +// Copyright © 2012 Pete Batard +// For more information, please visit: +// +// 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 + +// Use GNU11 dialect. +GCC_C_LANGUAGE_STANDARD = gnu11 + +// Don't search user paths with <> style #includes. +ALWAYS_SEARCH_USER_PATHS = NO + +// Enable weak references for Objective-C +CLANG_ENABLE_OBJC_WEAK = YES + +// Compiler errors. +GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES + +// Compiler warnings. +GCC_WARN_64_TO_32_BIT_CONVERSION = YES +GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES +GCC_WARN_ABOUT_MISSING_NEWLINE = YES +GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES +GCC_WARN_ABOUT_RETURN_TYPE = YES +GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES +GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES +GCC_WARN_SHADOW = YES +GCC_WARN_UNINITIALIZED_AUTOS = YES +GCC_WARN_UNKNOWN_PRAGMAS = YES +GCC_WARN_UNUSED_FUNCTION = YES +GCC_WARN_UNUSED_LABEL = YES +GCC_WARN_UNUSED_PARAMETER = YES +GCC_WARN_UNUSED_VARIABLE = YES +CLANG_WARN_ASSIGN_ENUM = YES +CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES +CLANG_WARN_BOOL_CONVERSION = YES +CLANG_WARN_COMMA = YES +CLANG_WARN_CONSTANT_CONVERSION = YES +CLANG_WARN_DOCUMENTATION_COMMENTS = YES +CLANG_WARN_EMPTY_BODY = YES +CLANG_WARN_ENUM_CONVERSION = YES +CLANG_WARN_FLOAT_CONVERSION = YES +CLANG_WARN_INFINITE_RECURSION = YES +CLANG_WARN_INT_CONVERSION = YES +CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES + +// Static analyzer warnings. +CLANG_ANALYZER_NONNULL = YES +CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES +CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES diff --git a/libusb-1.0.26/Xcode/debug.xcconfig b/libusb-1.0.26/Xcode/debug.xcconfig new file mode 100644 index 0000000000000000000000000000000000000000..e910ee8a9f9c318d11a4042bba04b22f8a59226c --- /dev/null +++ b/libusb-1.0.26/Xcode/debug.xcconfig @@ -0,0 +1,29 @@ +// +// libusb Xcode configuration file +// Copyright © 2012 Pete Batard +// For more information, please visit: +// +// 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 "common.xcconfig" + +// Embed debug symbols in binary itself. +DEBUG_INFORMATION_FORMAT = dwarf + +// No optimizations in debug. +GCC_OPTIMIZATION_LEVEL = 0 + +// +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) DEBUG=1 diff --git a/libusb-1.0.26/Xcode/libusb.xcconfig b/libusb-1.0.26/Xcode/libusb.xcconfig new file mode 100644 index 0000000000000000000000000000000000000000..12f0c464615ee76af3c6369124a4d82a3b31b00d --- /dev/null +++ b/libusb-1.0.26/Xcode/libusb.xcconfig @@ -0,0 +1,21 @@ +// +// libusb Xcode configuration file +// Copyright © 2012 Pete Batard +// For more information, please visit: +// +// 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 + +PRODUCT_NAME = libusb-1.0.0 +LD_DYLIB_INSTALL_NAME = @rpath/libusb-1.0.0.dylib diff --git a/libusb-1.0.26/Xcode/libusb.xcodeproj/project.pbxproj b/libusb-1.0.26/Xcode/libusb.xcodeproj/project.pbxproj new file mode 100644 index 0000000000000000000000000000000000000000..759a102562653ac0e1ab198c3e0fd77473ddad11 --- /dev/null +++ b/libusb-1.0.26/Xcode/libusb.xcodeproj/project.pbxproj @@ -0,0 +1,1361 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 45; + objects = { + +/* Begin PBXAggregateTarget section */ + 008FC0321628BC9400BC5BE2 /* all */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 008FC0331628BC9400BC5BE2 /* Build configuration list for PBXAggregateTarget "all" */; + buildPhases = ( + ); + dependencies = ( + 008FC0371628BC9A00BC5BE2 /* PBXTargetDependency */, + 008FC03B1628BC9A00BC5BE2 /* PBXTargetDependency */, + 008FC03D1628BC9A00BC5BE2 /* PBXTargetDependency */, + 008FC03F1628BC9A00BC5BE2 /* PBXTargetDependency */, + 006AD4281C8C5BBC007F8C6A /* PBXTargetDependency */, + 008FC0411628BC9A00BC5BE2 /* PBXTargetDependency */, + 20468D8E24329E3800650534 /* PBXTargetDependency */, + 008A23DE236C8619004854AA /* PBXTargetDependency */, + 20468D9024329E3F00650534 /* PBXTargetDependency */, + 008FC0391628BC9A00BC5BE2 /* PBXTargetDependency */, + ); + name = all; + productName = all; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 006AD4251C8C5AC4007F8C6A /* hotplugtest.c in Sources */ = {isa = PBXBuildFile; fileRef = 006AD4231C8C5AAE007F8C6A /* hotplugtest.c */; }; + 006AD4261C8C5AD9007F8C6A /* libusb-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 008FBF311628B79300BC5BE2 /* libusb-1.0.0.dylib */; }; + 008A23DA236C85AF004854AA /* stress.c in Sources */ = {isa = PBXBuildFile; fileRef = 008A23C6236C8445004854AA /* stress.c */; }; + 008A23DB236C85AF004854AA /* testlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 008A23CB236C849A004854AA /* testlib.c */; }; + 008FBF861628B7E800BC5BE2 /* core.c in Sources */ = {isa = PBXBuildFile; fileRef = 008FBF541628B7E800BC5BE2 /* core.c */; }; + 008FBF871628B7E800BC5BE2 /* descriptor.c in Sources */ = {isa = PBXBuildFile; fileRef = 008FBF551628B7E800BC5BE2 /* descriptor.c */; }; + 008FBF881628B7E800BC5BE2 /* io.c in Sources */ = {isa = PBXBuildFile; fileRef = 008FBF561628B7E800BC5BE2 /* io.c */; }; + 008FBF891628B7E800BC5BE2 /* libusb.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBF5A1628B7E800BC5BE2 /* libusb.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 008FBF901628B7E800BC5BE2 /* libusbi.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBF671628B7E800BC5BE2 /* libusbi.h */; }; + 008FBF921628B7E800BC5BE2 /* darwin_usb.c in Sources */ = {isa = PBXBuildFile; fileRef = 008FBF6C1628B7E800BC5BE2 /* darwin_usb.c */; }; + 008FBF931628B7E800BC5BE2 /* darwin_usb.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBF6D1628B7E800BC5BE2 /* darwin_usb.h */; }; + 008FBF9A1628B7E800BC5BE2 /* threads_posix.c in Sources */ = {isa = PBXBuildFile; fileRef = 008FBF741628B7E800BC5BE2 /* threads_posix.c */; }; + 008FBF9B1628B7E800BC5BE2 /* threads_posix.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBF751628B7E800BC5BE2 /* threads_posix.h */; }; + 008FBFA01628B7E800BC5BE2 /* sync.c in Sources */ = {isa = PBXBuildFile; fileRef = 008FBF7A1628B7E800BC5BE2 /* sync.c */; }; + 008FBFA11628B7E800BC5BE2 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBF7B1628B7E800BC5BE2 /* version.h */; }; + 008FBFA21628B7E800BC5BE2 /* version_nano.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBF7C1628B7E800BC5BE2 /* version_nano.h */; }; + 008FBFA51628B84200BC5BE2 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBFA41628B84200BC5BE2 /* config.h */; }; + 008FBFA71628B87000BC5BE2 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 008FBFA61628B87000BC5BE2 /* CoreFoundation.framework */; }; + 008FBFA91628B88000BC5BE2 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 008FBFA81628B88000BC5BE2 /* IOKit.framework */; }; + 008FBFAB1628B8CB00BC5BE2 /* libobjc.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 008FBFAA1628B8CB00BC5BE2 /* libobjc.dylib */; }; + 008FBFEF1628BA3500BC5BE2 /* xusb.c in Sources */ = {isa = PBXBuildFile; fileRef = 008FBFED1628BA0E00BC5BE2 /* xusb.c */; }; + 008FBFFF1628BB9600BC5BE2 /* dpfp.c in Sources */ = {isa = PBXBuildFile; fileRef = 008FBFD71628BA0E00BC5BE2 /* dpfp.c */; }; + 008FC01F1628BC1500BC5BE2 /* fxload.c in Sources */ = {isa = PBXBuildFile; fileRef = 008FBFE11628BA0E00BC5BE2 /* fxload.c */; }; + 008FC0211628BC5200BC5BE2 /* ezusb.c in Sources */ = {isa = PBXBuildFile; fileRef = 008FBFDC1628BA0E00BC5BE2 /* ezusb.c */; }; + 008FC0301628BC7400BC5BE2 /* listdevs.c in Sources */ = {isa = PBXBuildFile; fileRef = 008FBFE71628BA0E00BC5BE2 /* listdevs.c */; }; + 1438D77A17A2ED9F00166101 /* hotplug.c in Sources */ = {isa = PBXBuildFile; fileRef = 1438D77817A2ED9F00166101 /* hotplug.c */; }; + 1438D77F17A2F0EA00166101 /* strerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 1438D77E17A2F0EA00166101 /* strerror.c */; }; + 2018D95F24E453BA001589B2 /* events_posix.c in Sources */ = {isa = PBXBuildFile; fileRef = 2018D95E24E453BA001589B2 /* events_posix.c */; }; + 2018D96124E453D0001589B2 /* events_posix.h in Headers */ = {isa = PBXBuildFile; fileRef = 2018D96024E453D0001589B2 /* events_posix.h */; }; + 20468D70243298C100650534 /* sam3u_benchmark.c in Sources */ = {isa = PBXBuildFile; fileRef = 20468D6E243298C100650534 /* sam3u_benchmark.c */; }; + 20468D7E2432990100650534 /* testlibusb.c in Sources */ = {isa = PBXBuildFile; fileRef = 20468D7C2432990000650534 /* testlibusb.c */; }; + 20951C0325630F5F00ED6351 /* dpfp.c in Sources */ = {isa = PBXBuildFile; fileRef = 008FBFD71628BA0E00BC5BE2 /* dpfp.c */; settings = {COMPILER_FLAGS = "-DDPFP_THREADED"; }; }; + 20951C0625630F8F00ED6351 /* ezusb.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBFDD1628BA0E00BC5BE2 /* ezusb.h */; }; + 20951C0F25630FD300ED6351 /* libusb_testlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 008A23CA236C849A004854AA /* libusb_testlib.h */; }; + 20951C152563125200ED6351 /* libusb.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBF5A1628B7E800BC5BE2 /* libusb.h */; }; + CEA0F5EF26321FAA00ADF3EC /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBFA41628B84200BC5BE2 /* config.h */; }; + CEA0F5F026321FAA00ADF3EC /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBFA41628B84200BC5BE2 /* config.h */; }; + CEA0F5F126321FAA00ADF3EC /* libusb.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBF5A1628B7E800BC5BE2 /* libusb.h */; }; + CEA0F5F226321FAA00ADF3EC /* libusb-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 008FBF311628B79300BC5BE2 /* libusb-1.0.0.dylib */; }; + CEA0F5F326321FAA00ADF3EC /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBFA41628B84200BC5BE2 /* config.h */; }; + CEA0F5F426321FAA00ADF3EC /* libusb.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBF5A1628B7E800BC5BE2 /* libusb.h */; }; + CEA0F5F526321FAA00ADF3EC /* libusb-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 008FBF311628B79300BC5BE2 /* libusb-1.0.0.dylib */; }; + CEA0F5F626321FAA00ADF3EC /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBFA41628B84200BC5BE2 /* config.h */; }; + CEA0F5F726321FAA00ADF3EC /* libusb.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBF5A1628B7E800BC5BE2 /* libusb.h */; }; + CEA0F5F826321FAA00ADF3EC /* libusb-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 008FBF311628B79300BC5BE2 /* libusb-1.0.0.dylib */; }; + CEA0F5F926321FAA00ADF3EC /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBFA41628B84200BC5BE2 /* config.h */; }; + CEA0F5FA26321FAA00ADF3EC /* libusb.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBF5A1628B7E800BC5BE2 /* libusb.h */; }; + CEA0F5FB26321FAA00ADF3EC /* libusb-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 008FBF311628B79300BC5BE2 /* libusb-1.0.0.dylib */; }; + CEA0F5FC26321FAA00ADF3EC /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBFA41628B84200BC5BE2 /* config.h */; }; + CEA0F5FD26321FAA00ADF3EC /* libusb.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBF5A1628B7E800BC5BE2 /* libusb.h */; }; + CEA0F5FE26321FAA00ADF3EC /* libusb-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 008FBF311628B79300BC5BE2 /* libusb-1.0.0.dylib */; }; + CEA0F5FF26321FAA00ADF3EC /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBFA41628B84200BC5BE2 /* config.h */; }; + CEA0F60026321FAA00ADF3EC /* libusb.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBF5A1628B7E800BC5BE2 /* libusb.h */; }; + CEA0F60126321FAA00ADF3EC /* libusb-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 008FBF311628B79300BC5BE2 /* libusb-1.0.0.dylib */; }; + CEA0F60226321FAA00ADF3EC /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBFA41628B84200BC5BE2 /* config.h */; }; + CEA0F60326321FAA00ADF3EC /* libusb.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBF5A1628B7E800BC5BE2 /* libusb.h */; }; + CEA0F60426321FAA00ADF3EC /* libusb-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 008FBF311628B79300BC5BE2 /* libusb-1.0.0.dylib */; }; + CEA0F60526321FAA00ADF3EC /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBFA41628B84200BC5BE2 /* config.h */; }; + CEA0F60626321FAA00ADF3EC /* libusb.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBF5A1628B7E800BC5BE2 /* libusb.h */; }; + CEA0F60726321FAA00ADF3EC /* libusb-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 008FBF311628B79300BC5BE2 /* libusb-1.0.0.dylib */; }; + CEA45DFB2634CDFA002FA97D /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEDCEA6E2632200A00F7AA49 /* Security.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 006AD4271C8C5BBC007F8C6A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 006AD41B1C8C5A90007F8C6A; + remoteInfo = hotplugtest; + }; + 008A23DD236C8619004854AA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 008A23D2236C8594004854AA; + remoteInfo = stress; + }; + 008FC0361628BC9A00BC5BE2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 008FBF301628B79300BC5BE2; + remoteInfo = libusb; + }; + 008FC0381628BC9A00BC5BE2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 008FBFBC1628B9FE00BC5BE2; + remoteInfo = xusb; + }; + 008FC03A1628BC9A00BC5BE2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 008FBFF41628BB8B00BC5BE2; + remoteInfo = dpfp; + }; + 008FC03C1628BC9A00BC5BE2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 008FC0041628BBDB00BC5BE2; + remoteInfo = dpfp_threaded; + }; + 008FC03E1628BC9A00BC5BE2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 008FC0141628BC0300BC5BE2; + remoteInfo = fxload; + }; + 008FC0401628BC9A00BC5BE2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 008FC0251628BC6B00BC5BE2; + remoteInfo = listdevs; + }; + 1443EE8B1641926D007E0579 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 008FBF301628B79300BC5BE2; + remoteInfo = libusb; + }; + 1443EE8D16419273007E0579 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 008FBF301628B79300BC5BE2; + remoteInfo = libusb; + }; + 1443EE8F16419276007E0579 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 008FBF301628B79300BC5BE2; + remoteInfo = libusb; + }; + 1443EE911641927A007E0579 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 008FBF301628B79300BC5BE2; + remoteInfo = libusb; + }; + 1443EE931641927D007E0579 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 008FBF301628B79300BC5BE2; + remoteInfo = libusb; + }; + 20468D812432999C00650534 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 008FBF301628B79300BC5BE2; + remoteInfo = libusb; + }; + 20468D83243299A900650534 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 008FBF301628B79300BC5BE2; + remoteInfo = libusb; + }; + 20468D85243299B200650534 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 008FBF301628B79300BC5BE2; + remoteInfo = libusb; + }; + 20468D87243299BA00650534 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 008FBF301628B79300BC5BE2; + remoteInfo = libusb; + }; + 20468D8D24329E3800650534 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 20468D66243298AE00650534; + remoteInfo = sam3u_benchmark; + }; + 20468D8F24329E3F00650534 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 20468D74243298D300650534; + remoteInfo = testlibusb; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 006AD41C1C8C5A90007F8C6A /* hotplugtest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = hotplugtest; sourceTree = BUILT_PRODUCTS_DIR; }; + 006AD4231C8C5AAE007F8C6A /* hotplugtest.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = hotplugtest.c; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008A23C6236C8445004854AA /* stress.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stress.c; sourceTree = ""; usesTabs = 1; }; + 008A23CA236C849A004854AA /* libusb_testlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libusb_testlib.h; sourceTree = ""; usesTabs = 1; }; + 008A23CB236C849A004854AA /* testlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testlib.c; sourceTree = ""; usesTabs = 1; }; + 008A23D3236C8594004854AA /* stress */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = stress; sourceTree = BUILT_PRODUCTS_DIR; }; + 008FBF311628B79300BC5BE2 /* libusb-1.0.0.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = "libusb-1.0.0.dylib"; sourceTree = BUILT_PRODUCTS_DIR; }; + 008FBF541628B7E800BC5BE2 /* core.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = core.c; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBF551628B7E800BC5BE2 /* descriptor.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = descriptor.c; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBF561628B7E800BC5BE2 /* io.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = io.c; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBF5A1628B7E800BC5BE2 /* libusb.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = libusb.h; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBF671628B7E800BC5BE2 /* libusbi.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = libusbi.h; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBF6C1628B7E800BC5BE2 /* darwin_usb.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.c; path = darwin_usb.c; sourceTree = ""; tabWidth = 2; usesTabs = 0; }; + 008FBF6D1628B7E800BC5BE2 /* darwin_usb.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.h; path = darwin_usb.h; sourceTree = ""; tabWidth = 2; usesTabs = 0; }; + 008FBF741628B7E800BC5BE2 /* threads_posix.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = threads_posix.c; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBF751628B7E800BC5BE2 /* threads_posix.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = threads_posix.h; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBF7A1628B7E800BC5BE2 /* sync.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = sync.c; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBF7B1628B7E800BC5BE2 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBF7C1628B7E800BC5BE2 /* version_nano.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = version_nano.h; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBFA41628B84200BC5BE2 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBFA61628B87000BC5BE2 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 008FBFA81628B88000BC5BE2 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; + 008FBFAA1628B8CB00BC5BE2 /* libobjc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libobjc.dylib; path = usr/lib/libobjc.dylib; sourceTree = SDKROOT; }; + 008FBFBD1628B9FE00BC5BE2 /* xusb */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = xusb; sourceTree = BUILT_PRODUCTS_DIR; }; + 008FBFD71628BA0E00BC5BE2 /* dpfp.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = dpfp.c; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBFDC1628BA0E00BC5BE2 /* ezusb.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = ezusb.c; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBFDD1628BA0E00BC5BE2 /* ezusb.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = ezusb.h; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBFE11628BA0E00BC5BE2 /* fxload.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = fxload.c; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBFE71628BA0E00BC5BE2 /* listdevs.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = listdevs.c; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBFED1628BA0E00BC5BE2 /* xusb.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = xusb.c; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBFF51628BB8B00BC5BE2 /* dpfp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dpfp; sourceTree = BUILT_PRODUCTS_DIR; }; + 008FC0051628BBDB00BC5BE2 /* dpfp_threaded */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dpfp_threaded; sourceTree = BUILT_PRODUCTS_DIR; }; + 008FC0151628BC0300BC5BE2 /* fxload */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = fxload; sourceTree = BUILT_PRODUCTS_DIR; }; + 008FC0261628BC6B00BC5BE2 /* listdevs */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = listdevs; sourceTree = BUILT_PRODUCTS_DIR; }; + 1438D77817A2ED9F00166101 /* hotplug.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = hotplug.c; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 1438D77E17A2F0EA00166101 /* strerror.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = strerror.c; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 1443EE8416417E63007E0579 /* common.xcconfig */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = text.xcconfig; path = common.xcconfig; sourceTree = SOURCE_ROOT; tabWidth = 4; usesTabs = 1; }; + 1443EE8516417E63007E0579 /* debug.xcconfig */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = text.xcconfig; path = debug.xcconfig; sourceTree = SOURCE_ROOT; tabWidth = 4; usesTabs = 1; }; + 1443EE8616417E63007E0579 /* libusb_debug.xcconfig */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = text.xcconfig; path = libusb_debug.xcconfig; sourceTree = SOURCE_ROOT; tabWidth = 4; usesTabs = 1; }; + 1443EE8716417E63007E0579 /* libusb.xcconfig */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = text.xcconfig; path = libusb.xcconfig; sourceTree = SOURCE_ROOT; tabWidth = 4; usesTabs = 1; }; + 1443EE8816417E63007E0579 /* release.xcconfig */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = text.xcconfig; path = release.xcconfig; sourceTree = SOURCE_ROOT; tabWidth = 4; usesTabs = 1; }; + 1443EE8916417EA6007E0579 /* libusb_release.xcconfig */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = text.xcconfig; path = libusb_release.xcconfig; sourceTree = SOURCE_ROOT; tabWidth = 4; usesTabs = 1; }; + 2018D95E24E453BA001589B2 /* events_posix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = events_posix.c; sourceTree = ""; }; + 2018D96024E453D0001589B2 /* events_posix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = events_posix.h; sourceTree = ""; }; + 20468D67243298AE00650534 /* sam3u_benchmark */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = sam3u_benchmark; sourceTree = BUILT_PRODUCTS_DIR; }; + 20468D6E243298C100650534 /* sam3u_benchmark.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sam3u_benchmark.c; sourceTree = ""; usesTabs = 1; }; + 20468D75243298D300650534 /* testlibusb */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testlibusb; sourceTree = BUILT_PRODUCTS_DIR; }; + 20468D7C2432990000650534 /* testlibusb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = testlibusb.c; sourceTree = ""; usesTabs = 1; }; + CEDCEA6E2632200A00F7AA49 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 006AD4191C8C5A90007F8C6A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CEA0F5F826321FAA00ADF3EC /* libusb-1.0.0.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008A23D0236C8594004854AA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CEA0F60126321FAA00ADF3EC /* libusb-1.0.0.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008FBF2E1628B79300BC5BE2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 008FBFAB1628B8CB00BC5BE2 /* libobjc.dylib in Frameworks */, + 008FBFA91628B88000BC5BE2 /* IOKit.framework in Frameworks */, + CEA45DFB2634CDFA002FA97D /* Security.framework in Frameworks */, + 008FBFA71628B87000BC5BE2 /* CoreFoundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008FBFBA1628B9FE00BC5BE2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CEA0F60726321FAA00ADF3EC /* libusb-1.0.0.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008FBFF21628BB8B00BC5BE2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 006AD4261C8C5AD9007F8C6A /* libusb-1.0.0.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008FC0021628BBDB00BC5BE2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CEA0F5F226321FAA00ADF3EC /* libusb-1.0.0.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008FC0121628BC0300BC5BE2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CEA0F5F526321FAA00ADF3EC /* libusb-1.0.0.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008FC0231628BC6B00BC5BE2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CEA0F5FB26321FAA00ADF3EC /* libusb-1.0.0.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 20468D64243298AE00650534 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CEA0F5FE26321FAA00ADF3EC /* libusb-1.0.0.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 20468D72243298D300650534 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CEA0F60426321FAA00ADF3EC /* libusb-1.0.0.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 001B1F09236C836000F231DC /* tests */ = { + isa = PBXGroup; + children = ( + 008A23CA236C849A004854AA /* libusb_testlib.h */, + 008A23C6236C8445004854AA /* stress.c */, + 008A23CB236C849A004854AA /* testlib.c */, + ); + name = tests; + path = ../tests; + sourceTree = ""; + }; + 008FBF261628B79300BC5BE2 = { + isa = PBXGroup; + children = ( + 1443EE8316417DE3007E0579 /* xcconfig */, + 008FBFA41628B84200BC5BE2 /* config.h */, + 008FBF3B1628B7E800BC5BE2 /* libusb */, + 008FBFC81628BA0E00BC5BE2 /* examples */, + 001B1F09236C836000F231DC /* tests */, + 1443EE8A16419057007E0579 /* Apple */, + 008FBF321628B79300BC5BE2 /* Products */, + ); + sourceTree = ""; + }; + 008FBF321628B79300BC5BE2 /* Products */ = { + isa = PBXGroup; + children = ( + 008FBF311628B79300BC5BE2 /* libusb-1.0.0.dylib */, + 008FBFF51628BB8B00BC5BE2 /* dpfp */, + 008FC0051628BBDB00BC5BE2 /* dpfp_threaded */, + 008FC0151628BC0300BC5BE2 /* fxload */, + 008FC0261628BC6B00BC5BE2 /* listdevs */, + 006AD41C1C8C5A90007F8C6A /* hotplugtest */, + 008A23D3236C8594004854AA /* stress */, + 20468D67243298AE00650534 /* sam3u_benchmark */, + 20468D75243298D300650534 /* testlibusb */, + 008FBFBD1628B9FE00BC5BE2 /* xusb */, + ); + name = Products; + sourceTree = ""; + }; + 008FBF3B1628B7E800BC5BE2 /* libusb */ = { + isa = PBXGroup; + children = ( + 008FBF541628B7E800BC5BE2 /* core.c */, + 008FBF551628B7E800BC5BE2 /* descriptor.c */, + 1438D77817A2ED9F00166101 /* hotplug.c */, + 008FBF561628B7E800BC5BE2 /* io.c */, + 008FBF5A1628B7E800BC5BE2 /* libusb.h */, + 008FBF671628B7E800BC5BE2 /* libusbi.h */, + 008FBF6B1628B7E800BC5BE2 /* os */, + 1438D77E17A2F0EA00166101 /* strerror.c */, + 008FBF7A1628B7E800BC5BE2 /* sync.c */, + 008FBF7B1628B7E800BC5BE2 /* version.h */, + 008FBF7C1628B7E800BC5BE2 /* version_nano.h */, + ); + name = libusb; + path = ../libusb; + sourceTree = ""; + }; + 008FBF6B1628B7E800BC5BE2 /* os */ = { + isa = PBXGroup; + children = ( + 008FBF6C1628B7E800BC5BE2 /* darwin_usb.c */, + 008FBF6D1628B7E800BC5BE2 /* darwin_usb.h */, + 2018D95E24E453BA001589B2 /* events_posix.c */, + 2018D96024E453D0001589B2 /* events_posix.h */, + 008FBF741628B7E800BC5BE2 /* threads_posix.c */, + 008FBF751628B7E800BC5BE2 /* threads_posix.h */, + ); + path = os; + sourceTree = ""; + }; + 008FBFC81628BA0E00BC5BE2 /* examples */ = { + isa = PBXGroup; + children = ( + 008FBFD71628BA0E00BC5BE2 /* dpfp.c */, + 008FBFDC1628BA0E00BC5BE2 /* ezusb.c */, + 008FBFDD1628BA0E00BC5BE2 /* ezusb.h */, + 008FBFE11628BA0E00BC5BE2 /* fxload.c */, + 006AD4231C8C5AAE007F8C6A /* hotplugtest.c */, + 008FBFE71628BA0E00BC5BE2 /* listdevs.c */, + 20468D6E243298C100650534 /* sam3u_benchmark.c */, + 20468D7C2432990000650534 /* testlibusb.c */, + 008FBFED1628BA0E00BC5BE2 /* xusb.c */, + ); + name = examples; + path = ../examples; + sourceTree = ""; + }; + 1443EE8316417DE3007E0579 /* xcconfig */ = { + isa = PBXGroup; + children = ( + 1443EE8416417E63007E0579 /* common.xcconfig */, + 1443EE8516417E63007E0579 /* debug.xcconfig */, + 1443EE8816417E63007E0579 /* release.xcconfig */, + 1443EE8716417E63007E0579 /* libusb.xcconfig */, + 1443EE8616417E63007E0579 /* libusb_debug.xcconfig */, + 1443EE8916417EA6007E0579 /* libusb_release.xcconfig */, + ); + name = xcconfig; + path = ../libusb; + sourceTree = ""; + }; + 1443EE8A16419057007E0579 /* Apple */ = { + isa = PBXGroup; + children = ( + 008FBFAA1628B8CB00BC5BE2 /* libobjc.dylib */, + 008FBFA81628B88000BC5BE2 /* IOKit.framework */, + 008FBFA61628B87000BC5BE2 /* CoreFoundation.framework */, + CEDCEA6E2632200A00F7AA49 /* Security.framework */, + ); + name = Apple; + path = ../libusb; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 008FBF2F1628B79300BC5BE2 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 008FBF891628B7E800BC5BE2 /* libusb.h in Headers */, + 008FBFA51628B84200BC5BE2 /* config.h in Headers */, + 008FBF931628B7E800BC5BE2 /* darwin_usb.h in Headers */, + 2018D96124E453D0001589B2 /* events_posix.h in Headers */, + 008FBF901628B7E800BC5BE2 /* libusbi.h in Headers */, + 008FBF9B1628B7E800BC5BE2 /* threads_posix.h in Headers */, + 008FBFA11628B7E800BC5BE2 /* version.h in Headers */, + 008FBFA21628B7E800BC5BE2 /* version_nano.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 20951BFF25630EBE00ED6351 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + CEA0F5EF26321FAA00ADF3EC /* config.h in Headers */, + 20951C152563125200ED6351 /* libusb.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 20951C0125630F4100ED6351 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + CEA0F5F026321FAA00ADF3EC /* config.h in Headers */, + CEA0F5F126321FAA00ADF3EC /* libusb.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 20951C0425630F7600ED6351 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + CEA0F5F326321FAA00ADF3EC /* config.h in Headers */, + 20951C0625630F8F00ED6351 /* ezusb.h in Headers */, + CEA0F5F426321FAA00ADF3EC /* libusb.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 20951C0725630F9D00ED6351 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + CEA0F5F626321FAA00ADF3EC /* config.h in Headers */, + CEA0F5F726321FAA00ADF3EC /* libusb.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 20951C0925630FA900ED6351 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + CEA0F5F926321FAA00ADF3EC /* config.h in Headers */, + CEA0F5FA26321FAA00ADF3EC /* libusb.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 20951C0B25630FB400ED6351 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + CEA0F5FC26321FAA00ADF3EC /* config.h in Headers */, + CEA0F5FD26321FAA00ADF3EC /* libusb.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 20951C0D25630FC000ED6351 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + CEA0F5FF26321FAA00ADF3EC /* config.h in Headers */, + 20951C0F25630FD300ED6351 /* libusb_testlib.h in Headers */, + CEA0F60026321FAA00ADF3EC /* libusb.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 20951C1025630FE300ED6351 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + CEA0F60226321FAA00ADF3EC /* config.h in Headers */, + CEA0F60326321FAA00ADF3EC /* libusb.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 20951C1225630FEE00ED6351 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + CEA0F60526321FAA00ADF3EC /* config.h in Headers */, + CEA0F60626321FAA00ADF3EC /* libusb.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 006AD41B1C8C5A90007F8C6A /* hotplugtest */ = { + isa = PBXNativeTarget; + buildConfigurationList = 006AD4221C8C5A90007F8C6A /* Build configuration list for PBXNativeTarget "hotplugtest" */; + buildPhases = ( + 20951C0725630F9D00ED6351 /* Headers */, + 006AD4181C8C5A90007F8C6A /* Sources */, + 006AD4191C8C5A90007F8C6A /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 20468D822432999C00650534 /* PBXTargetDependency */, + ); + name = hotplugtest; + productName = hotplugtest; + productReference = 006AD41C1C8C5A90007F8C6A /* hotplugtest */; + productType = "com.apple.product-type.tool"; + }; + 008A23D2236C8594004854AA /* stress */ = { + isa = PBXNativeTarget; + buildConfigurationList = 008A23D7236C8594004854AA /* Build configuration list for PBXNativeTarget "stress" */; + buildPhases = ( + 20951C0D25630FC000ED6351 /* Headers */, + 008A23CF236C8594004854AA /* Sources */, + 008A23D0236C8594004854AA /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 20468D86243299B200650534 /* PBXTargetDependency */, + ); + name = stress; + productName = stress; + productReference = 008A23D3236C8594004854AA /* stress */; + productType = "com.apple.product-type.tool"; + }; + 008FBF301628B79300BC5BE2 /* libusb */ = { + isa = PBXNativeTarget; + buildConfigurationList = 008FBF351628B79300BC5BE2 /* Build configuration list for PBXNativeTarget "libusb" */; + buildPhases = ( + 008FBF2F1628B79300BC5BE2 /* Headers */, + 008FBF2D1628B79300BC5BE2 /* Sources */, + 008FBF2E1628B79300BC5BE2 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = libusb; + productName = libusb; + productReference = 008FBF311628B79300BC5BE2 /* libusb-1.0.0.dylib */; + productType = "com.apple.product-type.library.dynamic"; + }; + 008FBFBC1628B9FE00BC5BE2 /* xusb */ = { + isa = PBXNativeTarget; + buildConfigurationList = 008FBFC61628B9FE00BC5BE2 /* Build configuration list for PBXNativeTarget "xusb" */; + buildPhases = ( + 20951C1225630FEE00ED6351 /* Headers */, + 008FBFB91628B9FE00BC5BE2 /* Sources */, + 008FBFBA1628B9FE00BC5BE2 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 1443EE941641927D007E0579 /* PBXTargetDependency */, + ); + name = xusb; + productName = xusb; + productReference = 008FBFBD1628B9FE00BC5BE2 /* xusb */; + productType = "com.apple.product-type.tool"; + }; + 008FBFF41628BB8B00BC5BE2 /* dpfp */ = { + isa = PBXNativeTarget; + buildConfigurationList = 008FBFFC1628BB8C00BC5BE2 /* Build configuration list for PBXNativeTarget "dpfp" */; + buildPhases = ( + 20951BFF25630EBE00ED6351 /* Headers */, + 008FBFF11628BB8B00BC5BE2 /* Sources */, + 008FBFF21628BB8B00BC5BE2 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 1443EE921641927A007E0579 /* PBXTargetDependency */, + ); + name = dpfp; + productName = dpfp; + productReference = 008FBFF51628BB8B00BC5BE2 /* dpfp */; + productType = "com.apple.product-type.tool"; + }; + 008FC0041628BBDB00BC5BE2 /* dpfp_threaded */ = { + isa = PBXNativeTarget; + buildConfigurationList = 008FC00C1628BBDB00BC5BE2 /* Build configuration list for PBXNativeTarget "dpfp_threaded" */; + buildPhases = ( + 20951C0125630F4100ED6351 /* Headers */, + 008FC0011628BBDB00BC5BE2 /* Sources */, + 008FC0021628BBDB00BC5BE2 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 1443EE9016419276007E0579 /* PBXTargetDependency */, + ); + name = dpfp_threaded; + productName = dpfp_threaded; + productReference = 008FC0051628BBDB00BC5BE2 /* dpfp_threaded */; + productType = "com.apple.product-type.tool"; + }; + 008FC0141628BC0300BC5BE2 /* fxload */ = { + isa = PBXNativeTarget; + buildConfigurationList = 008FC01C1628BC0300BC5BE2 /* Build configuration list for PBXNativeTarget "fxload" */; + buildPhases = ( + 20951C0425630F7600ED6351 /* Headers */, + 008FC0111628BC0300BC5BE2 /* Sources */, + 008FC0121628BC0300BC5BE2 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 1443EE8E16419273007E0579 /* PBXTargetDependency */, + ); + name = fxload; + productName = fxload; + productReference = 008FC0151628BC0300BC5BE2 /* fxload */; + productType = "com.apple.product-type.tool"; + }; + 008FC0251628BC6B00BC5BE2 /* listdevs */ = { + isa = PBXNativeTarget; + buildConfigurationList = 008FC02D1628BC6B00BC5BE2 /* Build configuration list for PBXNativeTarget "listdevs" */; + buildPhases = ( + 20951C0925630FA900ED6351 /* Headers */, + 008FC0221628BC6B00BC5BE2 /* Sources */, + 008FC0231628BC6B00BC5BE2 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 1443EE8C1641926D007E0579 /* PBXTargetDependency */, + ); + name = listdevs; + productName = listdevs; + productReference = 008FC0261628BC6B00BC5BE2 /* listdevs */; + productType = "com.apple.product-type.tool"; + }; + 20468D66243298AE00650534 /* sam3u_benchmark */ = { + isa = PBXNativeTarget; + buildConfigurationList = 20468D6B243298AE00650534 /* Build configuration list for PBXNativeTarget "sam3u_benchmark" */; + buildPhases = ( + 20951C0B25630FB400ED6351 /* Headers */, + 20468D63243298AE00650534 /* Sources */, + 20468D64243298AE00650534 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 20468D84243299A900650534 /* PBXTargetDependency */, + ); + name = sam3u_benchmark; + productName = sam3u_benchmark; + productReference = 20468D67243298AE00650534 /* sam3u_benchmark */; + productType = "com.apple.product-type.tool"; + }; + 20468D74243298D300650534 /* testlibusb */ = { + isa = PBXNativeTarget; + buildConfigurationList = 20468D79243298D300650534 /* Build configuration list for PBXNativeTarget "testlibusb" */; + buildPhases = ( + 20951C1025630FE300ED6351 /* Headers */, + 20468D71243298D300650534 /* Sources */, + 20468D72243298D300650534 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 20468D88243299BA00650534 /* PBXTargetDependency */, + ); + name = testlibusb; + productName = testlibusb; + productReference = 20468D75243298D300650534 /* testlibusb */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 008FBF281628B79300BC5BE2 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1120; + ORGANIZATIONNAME = libusb; + TargetAttributes = { + 006AD41B1C8C5A90007F8C6A = { + CreatedOnToolsVersion = 7.2.1; + }; + 008A23D2236C8594004854AA = { + CreatedOnToolsVersion = 11.2; + }; + 20468D66243298AE00650534 = { + CreatedOnToolsVersion = 10.1; + }; + 20468D74243298D300650534 = { + CreatedOnToolsVersion = 10.1; + }; + }; + }; + buildConfigurationList = 008FBF2B1628B79300BC5BE2 /* Build configuration list for PBXProject "libusb" */; + compatibilityVersion = "Xcode 3.1"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 008FBF261628B79300BC5BE2; + productRefGroup = 008FBF321628B79300BC5BE2 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 008FBF301628B79300BC5BE2 /* libusb */, + 008FBFF41628BB8B00BC5BE2 /* dpfp */, + 008FC0041628BBDB00BC5BE2 /* dpfp_threaded */, + 008FC0141628BC0300BC5BE2 /* fxload */, + 006AD41B1C8C5A90007F8C6A /* hotplugtest */, + 008FC0251628BC6B00BC5BE2 /* listdevs */, + 20468D66243298AE00650534 /* sam3u_benchmark */, + 008A23D2236C8594004854AA /* stress */, + 20468D74243298D300650534 /* testlibusb */, + 008FBFBC1628B9FE00BC5BE2 /* xusb */, + 008FC0321628BC9400BC5BE2 /* all */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 006AD4181C8C5A90007F8C6A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 006AD4251C8C5AC4007F8C6A /* hotplugtest.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008A23CF236C8594004854AA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 008A23DA236C85AF004854AA /* stress.c in Sources */, + 008A23DB236C85AF004854AA /* testlib.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008FBF2D1628B79300BC5BE2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 008FBF861628B7E800BC5BE2 /* core.c in Sources */, + 008FBF921628B7E800BC5BE2 /* darwin_usb.c in Sources */, + 008FBF871628B7E800BC5BE2 /* descriptor.c in Sources */, + 2018D95F24E453BA001589B2 /* events_posix.c in Sources */, + 1438D77A17A2ED9F00166101 /* hotplug.c in Sources */, + 008FBF881628B7E800BC5BE2 /* io.c in Sources */, + 1438D77F17A2F0EA00166101 /* strerror.c in Sources */, + 008FBFA01628B7E800BC5BE2 /* sync.c in Sources */, + 008FBF9A1628B7E800BC5BE2 /* threads_posix.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008FBFB91628B9FE00BC5BE2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 008FBFEF1628BA3500BC5BE2 /* xusb.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008FBFF11628BB8B00BC5BE2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 008FBFFF1628BB9600BC5BE2 /* dpfp.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008FC0011628BBDB00BC5BE2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 20951C0325630F5F00ED6351 /* dpfp.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008FC0111628BC0300BC5BE2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 008FC0211628BC5200BC5BE2 /* ezusb.c in Sources */, + 008FC01F1628BC1500BC5BE2 /* fxload.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008FC0221628BC6B00BC5BE2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 008FC0301628BC7400BC5BE2 /* listdevs.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 20468D63243298AE00650534 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 20468D70243298C100650534 /* sam3u_benchmark.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 20468D71243298D300650534 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 20468D7E2432990100650534 /* testlibusb.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 006AD4281C8C5BBC007F8C6A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 006AD41B1C8C5A90007F8C6A /* hotplugtest */; + targetProxy = 006AD4271C8C5BBC007F8C6A /* PBXContainerItemProxy */; + }; + 008A23DE236C8619004854AA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 008A23D2236C8594004854AA /* stress */; + targetProxy = 008A23DD236C8619004854AA /* PBXContainerItemProxy */; + }; + 008FC0371628BC9A00BC5BE2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 008FBF301628B79300BC5BE2 /* libusb */; + targetProxy = 008FC0361628BC9A00BC5BE2 /* PBXContainerItemProxy */; + }; + 008FC0391628BC9A00BC5BE2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 008FBFBC1628B9FE00BC5BE2 /* xusb */; + targetProxy = 008FC0381628BC9A00BC5BE2 /* PBXContainerItemProxy */; + }; + 008FC03B1628BC9A00BC5BE2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 008FBFF41628BB8B00BC5BE2 /* dpfp */; + targetProxy = 008FC03A1628BC9A00BC5BE2 /* PBXContainerItemProxy */; + }; + 008FC03D1628BC9A00BC5BE2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 008FC0041628BBDB00BC5BE2 /* dpfp_threaded */; + targetProxy = 008FC03C1628BC9A00BC5BE2 /* PBXContainerItemProxy */; + }; + 008FC03F1628BC9A00BC5BE2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 008FC0141628BC0300BC5BE2 /* fxload */; + targetProxy = 008FC03E1628BC9A00BC5BE2 /* PBXContainerItemProxy */; + }; + 008FC0411628BC9A00BC5BE2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 008FC0251628BC6B00BC5BE2 /* listdevs */; + targetProxy = 008FC0401628BC9A00BC5BE2 /* PBXContainerItemProxy */; + }; + 1443EE8C1641926D007E0579 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 008FBF301628B79300BC5BE2 /* libusb */; + targetProxy = 1443EE8B1641926D007E0579 /* PBXContainerItemProxy */; + }; + 1443EE8E16419273007E0579 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 008FBF301628B79300BC5BE2 /* libusb */; + targetProxy = 1443EE8D16419273007E0579 /* PBXContainerItemProxy */; + }; + 1443EE9016419276007E0579 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 008FBF301628B79300BC5BE2 /* libusb */; + targetProxy = 1443EE8F16419276007E0579 /* PBXContainerItemProxy */; + }; + 1443EE921641927A007E0579 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 008FBF301628B79300BC5BE2 /* libusb */; + targetProxy = 1443EE911641927A007E0579 /* PBXContainerItemProxy */; + }; + 1443EE941641927D007E0579 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 008FBF301628B79300BC5BE2 /* libusb */; + targetProxy = 1443EE931641927D007E0579 /* PBXContainerItemProxy */; + }; + 20468D822432999C00650534 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 008FBF301628B79300BC5BE2 /* libusb */; + targetProxy = 20468D812432999C00650534 /* PBXContainerItemProxy */; + }; + 20468D84243299A900650534 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 008FBF301628B79300BC5BE2 /* libusb */; + targetProxy = 20468D83243299A900650534 /* PBXContainerItemProxy */; + }; + 20468D86243299B200650534 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 008FBF301628B79300BC5BE2 /* libusb */; + targetProxy = 20468D85243299B200650534 /* PBXContainerItemProxy */; + }; + 20468D88243299BA00650534 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 008FBF301628B79300BC5BE2 /* libusb */; + targetProxy = 20468D87243299BA00650534 /* PBXContainerItemProxy */; + }; + 20468D8E24329E3800650534 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 20468D66243298AE00650534 /* sam3u_benchmark */; + targetProxy = 20468D8D24329E3800650534 /* PBXContainerItemProxy */; + }; + 20468D9024329E3F00650534 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 20468D74243298D300650534 /* testlibusb */; + targetProxy = 20468D8F24329E3F00650534 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 006AD4201C8C5A90007F8C6A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8516417E63007E0579 /* debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 006AD4211C8C5A90007F8C6A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8816417E63007E0579 /* release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 008A23D8236C8594004854AA /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8516417E63007E0579 /* debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 008A23D9236C8594004854AA /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8816417E63007E0579 /* release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 008FBF331628B79300BC5BE2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8516417E63007E0579 /* debug.xcconfig */; + buildSettings = { + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + ONLY_ACTIVE_ARCH = YES; + }; + name = Debug; + }; + 008FBF341628B79300BC5BE2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8816417E63007E0579 /* release.xcconfig */; + buildSettings = { + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + }; + name = Release; + }; + 008FBF361628B79300BC5BE2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8616417E63007E0579 /* libusb_debug.xcconfig */; + buildSettings = { + OTHER_CFLAGS = ( + "-fvisibility=hidden", + "-pthread", + ); + }; + name = Debug; + }; + 008FBF371628B79300BC5BE2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8916417EA6007E0579 /* libusb_release.xcconfig */; + buildSettings = { + OTHER_CFLAGS = ( + "-fvisibility=hidden", + "-pthread", + ); + }; + name = Release; + }; + 008FBFC41628B9FE00BC5BE2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8516417E63007E0579 /* debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 008FBFC51628B9FE00BC5BE2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8816417E63007E0579 /* release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 008FBFFD1628BB8C00BC5BE2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8516417E63007E0579 /* debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 008FBFFE1628BB8C00BC5BE2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8816417E63007E0579 /* release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 008FC00D1628BBDB00BC5BE2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8516417E63007E0579 /* debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + OTHER_CFLAGS = "-pthread"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 008FC00E1628BBDB00BC5BE2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8816417E63007E0579 /* release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + OTHER_CFLAGS = "-pthread"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 008FC01D1628BC0300BC5BE2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8516417E63007E0579 /* debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 008FC01E1628BC0300BC5BE2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8816417E63007E0579 /* release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 008FC02E1628BC6B00BC5BE2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8516417E63007E0579 /* debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 008FC02F1628BC6B00BC5BE2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8816417E63007E0579 /* release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 008FC0341628BC9400BC5BE2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Debug; + }; + 008FC0351628BC9400BC5BE2 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Release; + }; + 20468D6C243298AE00650534 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8516417E63007E0579 /* debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 20468D6D243298AE00650534 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8816417E63007E0579 /* release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 20468D7A243298D300650534 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8516417E63007E0579 /* debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 20468D7B243298D300650534 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8816417E63007E0579 /* release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 006AD4221C8C5A90007F8C6A /* Build configuration list for PBXNativeTarget "hotplugtest" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 006AD4201C8C5A90007F8C6A /* Debug */, + 006AD4211C8C5A90007F8C6A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 008A23D7236C8594004854AA /* Build configuration list for PBXNativeTarget "stress" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 008A23D8236C8594004854AA /* Debug */, + 008A23D9236C8594004854AA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 008FBF2B1628B79300BC5BE2 /* Build configuration list for PBXProject "libusb" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 008FBF331628B79300BC5BE2 /* Debug */, + 008FBF341628B79300BC5BE2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 008FBF351628B79300BC5BE2 /* Build configuration list for PBXNativeTarget "libusb" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 008FBF361628B79300BC5BE2 /* Debug */, + 008FBF371628B79300BC5BE2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 008FBFC61628B9FE00BC5BE2 /* Build configuration list for PBXNativeTarget "xusb" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 008FBFC41628B9FE00BC5BE2 /* Debug */, + 008FBFC51628B9FE00BC5BE2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 008FBFFC1628BB8C00BC5BE2 /* Build configuration list for PBXNativeTarget "dpfp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 008FBFFD1628BB8C00BC5BE2 /* Debug */, + 008FBFFE1628BB8C00BC5BE2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 008FC00C1628BBDB00BC5BE2 /* Build configuration list for PBXNativeTarget "dpfp_threaded" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 008FC00D1628BBDB00BC5BE2 /* Debug */, + 008FC00E1628BBDB00BC5BE2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 008FC01C1628BC0300BC5BE2 /* Build configuration list for PBXNativeTarget "fxload" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 008FC01D1628BC0300BC5BE2 /* Debug */, + 008FC01E1628BC0300BC5BE2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 008FC02D1628BC6B00BC5BE2 /* Build configuration list for PBXNativeTarget "listdevs" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 008FC02E1628BC6B00BC5BE2 /* Debug */, + 008FC02F1628BC6B00BC5BE2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 008FC0331628BC9400BC5BE2 /* Build configuration list for PBXAggregateTarget "all" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 008FC0341628BC9400BC5BE2 /* Debug */, + 008FC0351628BC9400BC5BE2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 20468D6B243298AE00650534 /* Build configuration list for PBXNativeTarget "sam3u_benchmark" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 20468D6C243298AE00650534 /* Debug */, + 20468D6D243298AE00650534 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 20468D79243298D300650534 /* Build configuration list for PBXNativeTarget "testlibusb" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 20468D7A243298D300650534 /* Debug */, + 20468D7B243298D300650534 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 008FBF281628B79300BC5BE2 /* Project object */; +} diff --git a/libusb-1.0.26/Xcode/libusb_debug.xcconfig b/libusb-1.0.26/Xcode/libusb_debug.xcconfig new file mode 100644 index 0000000000000000000000000000000000000000..11bc4c3b32f750905b5737020a834161cbc64269 --- /dev/null +++ b/libusb-1.0.26/Xcode/libusb_debug.xcconfig @@ -0,0 +1,21 @@ +// +// libusb Xcode configuration file +// Copyright © 2012 Pete Batard +// For more information, please visit: +// +// 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 "debug.xcconfig" +#include "libusb.xcconfig" diff --git a/libusb-1.0.26/Xcode/libusb_release.xcconfig b/libusb-1.0.26/Xcode/libusb_release.xcconfig new file mode 100644 index 0000000000000000000000000000000000000000..3bd47bb28a48ae16d9469b2a19db341badef410a --- /dev/null +++ b/libusb-1.0.26/Xcode/libusb_release.xcconfig @@ -0,0 +1,21 @@ +// +// libusb Xcode configuration file +// Copyright © 2012 Pete Batard +// For more information, please visit: +// +// 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 "release.xcconfig" +#include "libusb.xcconfig" diff --git a/libusb-1.0.26/Xcode/release.xcconfig b/libusb-1.0.26/Xcode/release.xcconfig new file mode 100644 index 0000000000000000000000000000000000000000..ead284a7d2831812df99fbd82e0026f1ba07ab11 --- /dev/null +++ b/libusb-1.0.26/Xcode/release.xcconfig @@ -0,0 +1,30 @@ +// +// libusb Xcode configuration file +// Copyright © 2012 Pete Batard +// For more information, please visit: +// +// 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 "common.xcconfig" + +// Put debug symbols in separate .dym file. +DEBUG_INFORMATION_FORMAT = dwarf-with-dsym + +// Optimizations in release. +GCC_OPTIMIZATION_LEVEL = s +LLVM_LTO = YES + +// Define NDEBUG so asserts go away in release. +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) NDEBUG=1 diff --git a/libusb-1.0.26/android/README b/libusb-1.0.26/android/README new file mode 100644 index 0000000000000000000000000000000000000000..4af4c3d4b26d1859478941b8e0f1ac198adcb940 --- /dev/null +++ b/libusb-1.0.26/android/README @@ -0,0 +1,152 @@ +libusb for Android +================== + +Building: +--------- + +To build libusb for Android do the following: + + 1. Download the latest NDK from: + http://developer.android.com/tools/sdk/ndk/index.html + + 2. Extract the NDK. + + 3. Open a shell and make sure there exist an NDK global variable + set to the directory where you extracted the NDK. + + 4. Change directory to libusb's "android/jni" + + 5. Run "$NDK/ndk-build". + +The libusb library, examples and tests can then be found in: + "android/libs/$ARCH" + +Where $ARCH is one of: + armeabi + armeabi-v7a + mips + mips64 + x86 + x86_64 + +Installing: +----------- + +If you wish to use libusb from native code in own Android application +then you should add the following line to your Android.mk file: + + include $(PATH_TO_LIBUSB_SRC)/android/jni/libusb.mk + +You will then need to add the following lines to the build +configuration for each native binary which uses libusb: + + LOCAL_C_INCLUDES += $(LIBUSB_ROOT_ABS) + LOCAL_SHARED_LIBRARIES += libusb1.0 + +The Android build system will then correctly include libusb in the +application package (APK) file, provided ndk-build is invoked before +the package is built. + + +Runtime Permissions: +-------------------- + +The Runtime Permissions on Android can be transferred from Java to Native +over the following approach: + + JAVA: + + --> Obtain USB permissions over the android.hardware.usb.UsbManager class + + usbManager = (UsbManager) getSystemService(Context.USB_SERVICE); + HashMap deviceList = usbManager.getDeviceList(); + for (UsbDevice usbDevice : deviceList.values()) { + usbManager.requestPermission(usbDevice, mPermissionIntent); + } + + --> Get the native FileDescriptor of the UsbDevice and transfer it to + Native over JNI or JNA + + UsbDeviceConnection usbDeviceConnection = usbManager.openDevice(camDevice); + int fileDescriptor = usbDeviceConnection.getFileDescriptor(); + + --> JNA sample method: + + JNA.INSTANCE.set_the_native_Descriptor(fileDescriptor); + + NATIVE: + + --> Initialize libusb on Android + + set_the_native_Descriptor(int fileDescriptor) { + libusb_context *ctx; + libusb_device_handle *devh; + libusb_set_option(&ctx, LIBUSB_OPTION_NO_DEVICE_DISCOVERY, NULL); + libusb_init(&ctx); + libusb_wrap_sys_device(NULL, (intptr_t)fileDescriptor, &devh); + } + /* From this point you can regularly use all libusb functions as usual */ + + About LIBUSB_OPTION_NO_DEVICE_DISCOVERY: + + The method libusb_set_option(&ctx, LIBUSB_OPTION_NO_DEVICE_DISCOVERY, NULL) + does not affect the ctx. + It allows initializing libusb on unrooted Android devices by skipping + the device enumeration. + +Rooted Devices: +--------------- + + For rooted devices the code using libusb could be executed as root + using the "su" command. An alternative would be to use the "su" command + to change the permissions on the appropriate /dev/bus/usb/ files. + + Users have reported success in using android.hardware.usb.UsbManager + to request permission to use the UsbDevice and then opening the + device. The difficulties in this method is that there is no guarantee + that it will continue to work in the future Android versions, it + requires invoking Java APIs and running code to match each + android.hardware.usb.UsbDevice to a libusb_device. + + For a rooted device it is possible to install libusb into the system + image of a running device: + + 1. Enable ADB on the device. + + 2. Connect the device to a machine running ADB. + + 3. Execute the following commands on the machine + running ADB: + + # Make the system partition writable + adb shell su -c "mount -o remount,rw /system" + + # Install libusb + adb push obj/local/armeabi/libusb1.0.so /sdcard/ + adb shell su -c "cat > /system/lib/libusb1.0.so < /sdcard/libusb1.0.so" + adb shell rm /sdcard/libusb1.0.so + + # Install the samples and tests + for B in listdevs fxload xusb sam3u_benchmark hotplugtest stress + do + adb push "obj/local/armeabi/$B" /sdcard/ + adb shell su -c "cat > /system/bin/$B < /sdcard/$B" + adb shell su -c "chmod 0755 /system/bin/$B" + adb shell rm "/sdcard/$B" + done + + # Make the system partition read only again + adb shell su -c "mount -o remount,ro /system" + + # Run listdevs to + adb shell su -c "listdevs" + + 4. If your device only has a single OTG port then ADB can generally + be switched to using Wifi with the following commands when connected + via USB: + + adb shell netcfg + # Note the wifi IP address of the phone + adb tcpip 5555 + # Use the IP address from netcfg + adb connect 192.168.1.123:5555 diff --git a/libusb-1.0.26/android/examples/unrooted_android.c b/libusb-1.0.26/android/examples/unrooted_android.c new file mode 100644 index 0000000000000000000000000000000000000000..33793c7f4b137c956d0c74c8e55daaf5583e0822 --- /dev/null +++ b/libusb-1.0.26/android/examples/unrooted_android.c @@ -0,0 +1,300 @@ +/* + * libusb example program for reading out USB descriptors on unrooted Android + * (based on testlibusb.c) + * + * Copyright 2020-2021 Peter Stoiber + * + * 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 + * + * Please contact the author if you need another license. + * This Repository is provided "as is", without warranties of any kind. +*/ + +/* + * This example creates a shared object which can be accessed over JNA or JNI from Java or Kotlin in Android. + * Hint: If you are using Android Studio, set the "Debug type" to "Java Only" to receive debug messages. + */ + +/* + * Usage: + * First, you have to connect your USB device from the Java side. + * Use the android.hardware.usb class to find the USB device, claim the interfaces, and open the usb_device_connection + * Obtain the native File Descriptor --> usb_device_connection.getFileDescriptor() + * Pass the received int value to the unrooted_usb_description method of this code (over JNA) + */ + +/* + * libusb can only be included in Android projects using NDK for now. (CMake is not supported at the moment) + * Clone the libusb git repo into your Android project and include the Android.mk file in your build.gradle. + */ + +/* + Example JNA Approach: + public interface unrooted_sample extends Library { + public static final unrooted_sample INSTANCE = Native.load("unrooted_android", unrooted_sample.class); + public int unrooted_usb_description (int fileDescriptor); + } + unrooted_sample.INSTANCE.unrooted_usb_description( usbDeviceConnection.getFileDescriptor()); + */ + +#include +#include +#include "unrooted_android.h" +#include "libusb.h" +#include +#define LOG_TAG "LibUsb" +#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) + +int verbose = 0; + +static void print_endpoint_comp(const struct libusb_ss_endpoint_companion_descriptor *ep_comp) +{ + LOGD(" USB 3.0 Endpoint Companion:\n"); + LOGD(" bMaxBurst: %u\n", ep_comp->bMaxBurst); + LOGD(" bmAttributes: %02xh\n", ep_comp->bmAttributes); + LOGD(" wBytesPerInterval: %u\n", ep_comp->wBytesPerInterval); +} + +static void print_endpoint(const struct libusb_endpoint_descriptor *endpoint) +{ + int i, ret; + + LOGD(" Endpoint:\n"); + LOGD(" bEndpointAddress: %02xh\n", endpoint->bEndpointAddress); + LOGD(" bmAttributes: %02xh\n", endpoint->bmAttributes); + LOGD(" wMaxPacketSize: %u\n", endpoint->wMaxPacketSize); + LOGD(" bInterval: %u\n", endpoint->bInterval); + LOGD(" bRefresh: %u\n", endpoint->bRefresh); + LOGD(" bSynchAddress: %u\n", endpoint->bSynchAddress); + + for (i = 0; i < endpoint->extra_length;) { + if (LIBUSB_DT_SS_ENDPOINT_COMPANION == endpoint->extra[i + 1]) { + struct libusb_ss_endpoint_companion_descriptor *ep_comp; + + ret = libusb_get_ss_endpoint_companion_descriptor(NULL, endpoint, &ep_comp); + if (LIBUSB_SUCCESS != ret) + continue; + + print_endpoint_comp(ep_comp); + + libusb_free_ss_endpoint_companion_descriptor(ep_comp); + } + + i += endpoint->extra[i]; + } +} + +static void print_altsetting(const struct libusb_interface_descriptor *interface) +{ + uint8_t i; + + LOGD(" Interface:\n"); + LOGD(" bInterfaceNumber: %u\n", interface->bInterfaceNumber); + LOGD(" bAlternateSetting: %u\n", interface->bAlternateSetting); + LOGD(" bNumEndpoints: %u\n", interface->bNumEndpoints); + LOGD(" bInterfaceClass: %u\n", interface->bInterfaceClass); + LOGD(" bInterfaceSubClass: %u\n", interface->bInterfaceSubClass); + LOGD(" bInterfaceProtocol: %u\n", interface->bInterfaceProtocol); + LOGD(" iInterface: %u\n", interface->iInterface); + + for (i = 0; i < interface->bNumEndpoints; i++) + print_endpoint(&interface->endpoint[i]); +} + +static void print_2_0_ext_cap(struct libusb_usb_2_0_extension_descriptor *usb_2_0_ext_cap) +{ + LOGD(" USB 2.0 Extension Capabilities:\n"); + LOGD(" bDevCapabilityType: %u\n", usb_2_0_ext_cap->bDevCapabilityType); + LOGD(" bmAttributes: %08xh\n", usb_2_0_ext_cap->bmAttributes); +} + +static void print_ss_usb_cap(struct libusb_ss_usb_device_capability_descriptor *ss_usb_cap) +{ + LOGD(" USB 3.0 Capabilities:\n"); + LOGD(" bDevCapabilityType: %u\n", ss_usb_cap->bDevCapabilityType); + LOGD(" bmAttributes: %02xh\n", ss_usb_cap->bmAttributes); + LOGD(" wSpeedSupported: %u\n", ss_usb_cap->wSpeedSupported); + LOGD(" bFunctionalitySupport: %u\n", ss_usb_cap->bFunctionalitySupport); + LOGD(" bU1devExitLat: %u\n", ss_usb_cap->bU1DevExitLat); + LOGD(" bU2devExitLat: %u\n", ss_usb_cap->bU2DevExitLat); +} + +static void print_bos(libusb_device_handle *handle) +{ + struct libusb_bos_descriptor *bos; + uint8_t i; + int ret; + + ret = libusb_get_bos_descriptor(handle, &bos); + if (ret < 0) + return; + + LOGD(" Binary Object Store (BOS):\n"); + LOGD(" wTotalLength: %u\n", bos->wTotalLength); + LOGD(" bNumDeviceCaps: %u\n", bos->bNumDeviceCaps); + + for (i = 0; i < bos->bNumDeviceCaps; i++) { + struct libusb_bos_dev_capability_descriptor *dev_cap = bos->dev_capability[i]; + + if (dev_cap->bDevCapabilityType == LIBUSB_BT_USB_2_0_EXTENSION) { + struct libusb_usb_2_0_extension_descriptor *usb_2_0_extension; + + ret = libusb_get_usb_2_0_extension_descriptor(NULL, dev_cap, &usb_2_0_extension); + if (ret < 0) + return; + + print_2_0_ext_cap(usb_2_0_extension); + libusb_free_usb_2_0_extension_descriptor(usb_2_0_extension); + } else if (dev_cap->bDevCapabilityType == LIBUSB_BT_SS_USB_DEVICE_CAPABILITY) { + struct libusb_ss_usb_device_capability_descriptor *ss_dev_cap; + + ret = libusb_get_ss_usb_device_capability_descriptor(NULL, dev_cap, &ss_dev_cap); + if (ret < 0) + return; + + print_ss_usb_cap(ss_dev_cap); + libusb_free_ss_usb_device_capability_descriptor(ss_dev_cap); + } + } + + libusb_free_bos_descriptor(bos); +} + +static void print_interface(const struct libusb_interface *interface) +{ + int i; + + for (i = 0; i < interface->num_altsetting; i++) + print_altsetting(&interface->altsetting[i]); +} + +static void print_configuration(struct libusb_config_descriptor *config) +{ + uint8_t i; + + LOGD(" Configuration:\n"); + LOGD(" wTotalLength: %u\n", config->wTotalLength); + LOGD(" bNumInterfaces: %u\n", config->bNumInterfaces); + LOGD(" bConfigurationValue: %u\n", config->bConfigurationValue); + LOGD(" iConfiguration: %u\n", config->iConfiguration); + LOGD(" bmAttributes: %02xh\n", config->bmAttributes); + LOGD(" MaxPower: %u\n", config->MaxPower); + + for (i = 0; i < config->bNumInterfaces; i++) + print_interface(&config->interface[i]); +} + +static void print_device(libusb_device *dev, libusb_device_handle *handle) +{ + struct libusb_device_descriptor desc; + unsigned char string[256]; + const char *speed; + int ret; + uint8_t i; + + switch (libusb_get_device_speed(dev)) { + case LIBUSB_SPEED_LOW: speed = "1.5M"; break; + case LIBUSB_SPEED_FULL: speed = "12M"; break; + case LIBUSB_SPEED_HIGH: speed = "480M"; break; + case LIBUSB_SPEED_SUPER: speed = "5G"; break; + case LIBUSB_SPEED_SUPER_PLUS: speed = "10G"; break; + default: speed = "Unknown"; + } + + ret = libusb_get_device_descriptor(dev, &desc); + if (ret < 0) { + LOGD("failed to get device descriptor"); + return; + } + + LOGD("Dev (bus %u, device %u): %04X - %04X speed: %s\n", + libusb_get_bus_number(dev), libusb_get_device_address(dev), + desc.idVendor, desc.idProduct, speed); + + if (!handle) + libusb_open(dev, &handle); + + if (handle) { + if (desc.iManufacturer) { + ret = libusb_get_string_descriptor_ascii(handle, desc.iManufacturer, string, sizeof(string)); + if (ret > 0) + LOGD(" Manufacturer: %s\n", (char *)string); + } + + if (desc.iProduct) { + ret = libusb_get_string_descriptor_ascii(handle, desc.iProduct, string, sizeof(string)); + if (ret > 0) + LOGD(" Product: %s\n", (char *)string); + } + + if (desc.iSerialNumber && verbose) { + ret = libusb_get_string_descriptor_ascii(handle, desc.iSerialNumber, string, sizeof(string)); + if (ret > 0) + LOGD(" Serial Number: %s\n", (char *)string); + } + } + + if (verbose) { + for (i = 0; i < desc.bNumConfigurations; i++) { + struct libusb_config_descriptor *config; + + ret = libusb_get_config_descriptor(dev, i, &config); + if (LIBUSB_SUCCESS != ret) { + LOGD(" Couldn't retrieve descriptors\n"); + continue; + } + + print_configuration(config); + + libusb_free_config_descriptor(config); + } + + if (handle && desc.bcdUSB >= 0x0201) + print_bos(handle); + } + + if (handle) + libusb_close(handle); +} + + +/* fileDescriptor = the native file descriptor obtained in Java and transferred to native over JNA, for example */ +int unrooted_usb_description(int fileDescriptor) +{ + libusb_context *ctx = NULL; + libusb_device_handle *devh = NULL; + int r = 0; + verbose = 1; + r = libusb_set_option(NULL, LIBUSB_OPTION_NO_DEVICE_DISCOVERY, NULL); + if (r != LIBUSB_SUCCESS) { + LOGD("libusb_set_option failed: %d\n", r); + return -1; + } + r = libusb_init(&ctx); + if (r < 0) { + LOGD("libusb_init failed: %d\n", r); + return r; + } + r = libusb_wrap_sys_device(ctx, (intptr_t)fileDescriptor, &devh); + if (r < 0) { + LOGD("libusb_wrap_sys_device failed: %d\n", r); + return r; + } else if (devh == NULL) { + LOGD("libusb_wrap_sys_device returned invalid handle\n"); + return r; + } + print_device(libusb_get_device(devh), devh); + return r; +} diff --git a/libusb-1.0.26/android/examples/unrooted_android.h b/libusb-1.0.26/android/examples/unrooted_android.h new file mode 100644 index 0000000000000000000000000000000000000000..7ccd4089a49cd03038afb9c18c4e25db2fd67677 --- /dev/null +++ b/libusb-1.0.26/android/examples/unrooted_android.h @@ -0,0 +1,36 @@ +/* + * Copyright 2021 Peter Stoiber + * + * 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 + * + * Please contact the author if you need another license. + * This Repository is provided "as is", without warranties of any kind. +*/ + +#ifndef unrooted_android_H +#define unrooted_android_H + +#ifdef __cplusplus +extern "C" { +#endif + +extern int unrooted_usb_description(int fileDescriptor); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/libusb-1.0.26/android/jni/Android.mk b/libusb-1.0.26/android/jni/Android.mk new file mode 100644 index 0000000000000000000000000000000000000000..29146b2982e2fd4f9f39566a1d593bc03d0984a7 --- /dev/null +++ b/libusb-1.0.26/android/jni/Android.mk @@ -0,0 +1,23 @@ +# Android build config for libusb, examples and tests +# Copyright © 2012-2013 RealVNC Ltd. +# +# 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 +# + +LOCAL_PATH := $(call my-dir) + +include $(LOCAL_PATH)/libusb.mk +include $(LOCAL_PATH)/examples.mk +include $(LOCAL_PATH)/tests.mk diff --git a/libusb-1.0.26/android/jni/Application.mk b/libusb-1.0.26/android/jni/Application.mk new file mode 100644 index 0000000000000000000000000000000000000000..c113726328feb458d2c94e406a46728e795313e8 --- /dev/null +++ b/libusb-1.0.26/android/jni/Application.mk @@ -0,0 +1,40 @@ +# Android application build config for libusb +# Copyright © 2012-2013 RealVNC Ltd. +# +# 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 +# + +APP_ABI := all + +APP_CFLAGS := \ + -std=gnu11 \ + -Wall \ + -Wextra \ + -Wshadow \ + -Wunused \ + -Wwrite-strings \ + -Werror=format-security \ + -Werror=implicit-function-declaration \ + -Werror=implicit-int \ + -Werror=init-self \ + -Werror=missing-prototypes \ + -Werror=strict-prototypes \ + -Werror=undef \ + -Werror=uninitialized + +# Workaround for MIPS toolchain linker being unable to find liblog dependency +# of shared object in NDK versions at least up to r9. +# +APP_LDFLAGS := -llog diff --git a/libusb-1.0.26/android/jni/examples.mk b/libusb-1.0.26/android/jni/examples.mk new file mode 100644 index 0000000000000000000000000000000000000000..9e41d7755906caef5adb095ef6de2e22560077b7 --- /dev/null +++ b/libusb-1.0.26/android/jni/examples.mk @@ -0,0 +1,168 @@ +# Android build config for libusb examples +# Copyright © 2012-2013 RealVNC Ltd. +# +# 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 +# + +LOCAL_PATH := $(call my-dir) +LIBUSB_ROOT_REL := ../.. +LIBUSB_ROOT_ABS := $(LOCAL_PATH)/../.. + +ifeq ($(USE_PC_NAME),1) + LIBUSB_MODULE := usb-1.0 +else + LIBUSB_MODULE := libusb1.0 +endif + +# dpfp + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/examples/dpfp.c + +LOCAL_C_INCLUDES += \ + $(LOCAL_PATH)/.. \ + $(LIBUSB_ROOT_ABS) + +LOCAL_SHARED_LIBRARIES += $(LIBUSB_MODULE) + +LOCAL_MODULE := dpfp + +include $(BUILD_EXECUTABLE) + +# dpfp_threaded + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/examples/dpfp.c + +LOCAL_C_INCLUDES += \ + $(LOCAL_PATH)/.. \ + $(LIBUSB_ROOT_ABS) + +LOCAL_CFLAGS := -DDPFP_THREADED -pthread + +LOCAL_SHARED_LIBRARIES += $(LIBUSB_MODULE) + +LOCAL_MODULE := dpfp_threaded + +include $(BUILD_EXECUTABLE) + +# fxload + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/examples/ezusb.c \ + $(LIBUSB_ROOT_REL)/examples/fxload.c + +LOCAL_C_INCLUDES += \ + $(LOCAL_PATH)/.. \ + $(LIBUSB_ROOT_ABS) + +LOCAL_SHARED_LIBRARIES += $(LIBUSB_MODULE) + +LOCAL_MODULE := fxload + +include $(BUILD_EXECUTABLE) + +# hotplugtest + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/examples/hotplugtest.c + +LOCAL_C_INCLUDES += \ + $(LOCAL_PATH)/.. \ + $(LIBUSB_ROOT_ABS) + +LOCAL_SHARED_LIBRARIES += $(LIBUSB_MODULE) + +LOCAL_MODULE := hotplugtest + +include $(BUILD_EXECUTABLE) + +# listdevs + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/examples/listdevs.c + +LOCAL_C_INCLUDES += \ + $(LOCAL_PATH)/.. \ + $(LIBUSB_ROOT_ABS) + +LOCAL_SHARED_LIBRARIES += $(LIBUSB_MODULE) + +LOCAL_MODULE := listdevs + +include $(BUILD_EXECUTABLE) + +# sam3u_benchmark + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/examples/sam3u_benchmark.c + +LOCAL_C_INCLUDES += \ + $(LOCAL_PATH)/.. \ + $(LIBUSB_ROOT_ABS) + +LOCAL_SHARED_LIBRARIES += $(LIBUSB_MODULE) + +LOCAL_MODULE := sam3u_benchmark + +include $(BUILD_EXECUTABLE) + +# xusb + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/examples/xusb.c + +LOCAL_C_INCLUDES += \ + $(LOCAL_PATH)/.. \ + $(LIBUSB_ROOT_ABS) + +LOCAL_SHARED_LIBRARIES += $(LIBUSB_MODULE) + +LOCAL_MODULE := xusb + +include $(BUILD_EXECUTABLE) + +# unrooted_android + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/android/examples/unrooted_android.c + +LOCAL_C_INCLUDES += \ + $(LOCAL_PATH)/.. \ + $(LIBUSB_ROOT_ABS) + +LOCAL_SHARED_LIBRARIES += libusb1.0 + +LOCAL_LDLIBS += -llog + +LOCAL_MODULE := unrooted_android + +include $(BUILD_SHARED_LIBRARY) diff --git a/libusb-1.0.26/android/jni/libusb.mk b/libusb-1.0.26/android/jni/libusb.mk new file mode 100644 index 0000000000000000000000000000000000000000..8786626eb88718bd55e7de9df77903317ff8f133 --- /dev/null +++ b/libusb-1.0.26/android/jni/libusb.mk @@ -0,0 +1,60 @@ +# Android build config for libusb +# Copyright © 2012-2013 RealVNC Ltd. +# +# 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 +# + +LOCAL_PATH := $(call my-dir) +LIBUSB_ROOT_REL := ../.. +LIBUSB_ROOT_ABS := $(LOCAL_PATH)/../.. + +# libusb + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/libusb/core.c \ + $(LIBUSB_ROOT_REL)/libusb/descriptor.c \ + $(LIBUSB_ROOT_REL)/libusb/hotplug.c \ + $(LIBUSB_ROOT_REL)/libusb/io.c \ + $(LIBUSB_ROOT_REL)/libusb/sync.c \ + $(LIBUSB_ROOT_REL)/libusb/strerror.c \ + $(LIBUSB_ROOT_REL)/libusb/os/linux_usbfs.c \ + $(LIBUSB_ROOT_REL)/libusb/os/events_posix.c \ + $(LIBUSB_ROOT_REL)/libusb/os/threads_posix.c \ + $(LIBUSB_ROOT_REL)/libusb/os/linux_netlink.c + +LOCAL_C_INCLUDES += \ + $(LOCAL_PATH)/.. \ + $(LIBUSB_ROOT_ABS)/libusb \ + $(LIBUSB_ROOT_ABS)/libusb/os + +LOCAL_EXPORT_C_INCLUDES := \ + $(LIBUSB_ROOT_ABS)/libusb + +LOCAL_CFLAGS := -fvisibility=hidden -pthread + +LOCAL_LDLIBS := -llog + +ifeq ($(USE_PC_NAME),1) + LOCAL_MODULE := usb-1.0 +else + LOCAL_MODULE := libusb1.0 + $(warning Building to legacy library name libusb1.0, which differs from pkg-config.) + $(warning Use ndk-build USE_PC_NAME=1 to change the module name to the compatible usb-1.0.) + $(warning USE_PC_NAME=1 may be the default in the future.) +endif + +include $(BUILD_SHARED_LIBRARY) diff --git a/libusb-1.0.26/android/jni/tests.mk b/libusb-1.0.26/android/jni/tests.mk new file mode 100644 index 0000000000000000000000000000000000000000..a32942a09783fe8c52b2f5dc9b7e2c8ca1274458 --- /dev/null +++ b/libusb-1.0.26/android/jni/tests.mk @@ -0,0 +1,45 @@ +# Android build config for libusb tests +# Copyright © 2012-2013 RealVNC Ltd. +# +# 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 +# + +LOCAL_PATH := $(call my-dir) +LIBUSB_ROOT_REL := ../.. +LIBUSB_ROOT_ABS := $(LOCAL_PATH)/../.. + +ifeq ($(USE_PC_NAME),1) + LIBUSB_MODULE := usb-1.0 +else + LIBUSB_MODULE := libusb1.0 +endif + +# stress + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/tests/stress.c \ + $(LIBUSB_ROOT_REL)/tests/testlib.c + +LOCAL_C_INCLUDES += \ + $(LOCAL_PATH)/.. \ + $(LIBUSB_ROOT_ABS) + +LOCAL_SHARED_LIBRARIES += $(LIBUSB_MODULE) + +LOCAL_MODULE := stress + +include $(BUILD_EXECUTABLE) diff --git a/libusb-1.0.26/configure.ac b/libusb-1.0.26/configure.ac new file mode 100644 index 0000000000000000000000000000000000000000..d4f1251034863f574c675e3770b62263167c258b --- /dev/null +++ b/libusb-1.0.26/configure.ac @@ -0,0 +1,419 @@ +dnl These m4 macros are whitespace sensitive and break if moved around much. +m4_define([LU_VERSION_H], m4_include([libusb/version.h])) +m4_define([LU_DEFINE_VERSION_ATOM], + [m4_define([$1], m4_bregexp(LU_VERSION_H, + [^#define\s*$1\s*\([0-9]*\).*], [\1]))]) +m4_define([LU_DEFINE_VERSION_RC_ATOM], + [m4_define([$1], m4_bregexp(LU_VERSION_H, + [^#define\s*$1\s*"\(-rc[0-9]*\)".*], [\1]))]) +dnl The m4_bregexp() returns (only) the numbers following the #define named +dnl in the first macro parameter. m4_define() then defines the name for use +dnl in AC_INIT. + +LU_DEFINE_VERSION_ATOM([LIBUSB_MAJOR]) +LU_DEFINE_VERSION_ATOM([LIBUSB_MINOR]) +LU_DEFINE_VERSION_ATOM([LIBUSB_MICRO]) +LU_DEFINE_VERSION_RC_ATOM([LIBUSB_RC]) + +AC_PREREQ([2.69]) +AC_INIT([libusb-1.0], [LIBUSB_MAJOR[.]LIBUSB_MINOR[.]LIBUSB_MICRO[]LIBUSB_RC], [libusb-devel@lists.sourceforge.net], [libusb-1.0], [http://libusb.info]) +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_SRCDIR([libusb/core.c]) +AC_CONFIG_MACRO_DIR([m4]) +AC_PROG_CC +AC_PROG_CXX +AC_C_INLINE +AM_INIT_AUTOMAKE +LT_INIT +LT_LANG([Windows Resource]) + +dnl Library versioning +dnl These numbers should be tweaked on every release. Read carefully: +dnl http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html +dnl http://sourceware.org/autobook/autobook/autobook_91.html +lt_current=3 +lt_revision=0 +lt_age=3 +LT_LDFLAGS="-version-info ${lt_current}:${lt_revision}:${lt_age} -no-undefined" + +m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) + +EXTRA_CPPFLAGS= +EXTRA_CFLAGS= + +dnl check for -std=gnu11 compiler support (optional) +dnl note that we don't just check if the compiler accepts '-std=x11' +dnl but also that it supports the _Thread_local keyword because some compilers +dnl (e.g. gcc 4.8) accept the command line option but do not implement TLS +saved_CFLAGS="${CFLAGS}" +CFLAGS="-std=gnu11" +AC_MSG_CHECKING([if $CC supports -std=gnu11]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([_Thread_local int x;], [x = 42;])], + [AC_MSG_RESULT([yes]) + c_dialect=gnu], + [AC_MSG_RESULT([no]) + c_dialect=]) +if test "x$c_dialect" != xgnu; then + dnl fallback check for -std=c11 compiler support (required) + CFLAGS="-std=c11" + AC_MSG_CHECKING([if $CC supports -std=c11]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([_Thread_local int x;], [x = 42;])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([compiler with C11 support is required to build libusb])]) + c_dialect=c +fi +CFLAGS="${saved_CFLAGS}" + +AC_DEFINE([_GNU_SOURCE], [1], [Enable GNU extensions.]) +AC_DEFINE([DEFAULT_VISIBILITY], [__attribute__ ((visibility ("default")))], [Define to the attribute for default visibility.]) +AC_DEFINE([PRINTF_FORMAT(a, b)], [__attribute__ ((__format__ (__printf__, a, b)))], [Define to the attribute for enabling parameter checks on printf-like functions.]) + +create_import_lib= +is_android_linux= +AC_MSG_CHECKING([operating system]) +case $host in +*-darwin*) + AC_MSG_RESULT([Darwin/Mac OS X]) + backend=darwin + platform=posix + ;; +*-haiku*) + AC_MSG_RESULT([Haiku]) + backend=haiku + platform=posix + ;; +*-linux* | *-uclinux*) + dnl on Android Linux, some functions are in different places + case $host in + *-linux-android*) + AC_MSG_RESULT([Android Linux]) + is_android_linux=yes + ;; + *) + AC_MSG_RESULT([Linux]) + ;; + esac + backend=linux + platform=posix + ;; +*-netbsd*) + AC_MSG_RESULT([NetBSD]) + backend=netbsd + platform=posix + ;; +*-openbsd*) + AC_MSG_RESULT([OpenBSD]) + backend=openbsd + platform=posix + ;; +*-solaris*) + AC_MSG_RESULT([SunOS]) + backend=sunos + platform=posix + ;; +*-cygwin*) + AC_MSG_RESULT([Windows (using Cygwin)]) + backend=windows + platform=windows + EXTRA_CFLAGS="-mwin32" + ;; +*-mingw* | *msys*) + AC_MSG_RESULT([Windows]) + backend=windows + platform=windows + test "x$enable_shared" = xyes && create_import_lib=yes + EXTRA_CFLAGS="-mwin32 -fno-omit-frame-pointer" + EXTRA_LDFLAGS="-static-libgcc" + ;; +*) + AC_MSG_RESULT([Null]) + AC_MSG_WARN([The host being compiled for is not supported.]) + AC_MSG_WARN([The library may compile but will not function in any useful manner.]) + backend=null + platform=posix + ;; +esac + +if test "x$platform" = xposix; then + AC_DEFINE([PLATFORM_POSIX], [1], [Define to 1 if compiling for a POSIX platform.]) + AC_CHECK_TYPES([nfds_t], [], [], [[#include ]]) + AC_CHECK_FUNCS([pipe2]) + dnl Some compilers do not support the '-pthread' option so check for it here + saved_CFLAGS="${CFLAGS}" + CFLAGS="-Wall -Werror -pthread" + AC_MSG_CHECKING([if $CC recognizes -pthread]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], + [AC_MSG_RESULT([yes]) + AC_SUBST(THREAD_CFLAGS, [-pthread])], + [AC_MSG_RESULT([no])]) + CFLAGS="${saved_CFLAGS}" + dnl Android Linux and Darwin provide pthread functions directly in libc + dnl glibc also provides some pthread functions directly, so search for a thread-specific function + AC_SEARCH_LIBS([pthread_create], [pthread], + [test "x$ac_cv_search_pthread_create" != "xnone required" && AC_SUBST(THREAD_LIBS, [-lpthread])], + [], []) + AC_SEARCH_LIBS([__atomic_fetch_add_4], [atomic]) +elif test "x$platform" = xwindows; then + AC_DEFINE([PLATFORM_WINDOWS], [1], [Define to 1 if compiling for a Windows platform.]) +else + AC_MSG_ERROR([Unknown platform]) +fi + +case $backend in +darwin) + AC_CHECK_FUNCS([pthread_threadid_np]) + LIBS="${LIBS} -lobjc -Wl,-framework,IOKit -Wl,-framework,CoreFoundation -Wl,-framework,Security" + AC_CHECK_HEADERS([IOKit/usb/IOUSBHostFamilyDefinitions.h]) + ;; +haiku) + LIBS="${LIBS} -lbe" + ;; +linux) + AC_SEARCH_LIBS([clock_gettime], [rt], [], [], []) + AC_CHECK_FUNCS([pthread_setname_np]) + AC_ARG_ENABLE([udev], + [AS_HELP_STRING([--enable-udev], [use udev for device enumeration and hotplug support (recommended) [default=yes]])], + [use_udev=$enableval], [use_udev=yes]) + if test "x$use_udev" = xyes; then + dnl system has udev. use it or fail! + AC_CHECK_HEADER([libudev.h], [], [AC_MSG_ERROR([udev support requested but libudev header not installed])]) + AC_CHECK_LIB([udev], [udev_new], [], [AC_MSG_ERROR([udev support requested but libudev not installed])]) + + # We can build umockdev tests (if available) + PKG_PROG_PKG_CONFIG + PKG_CHECK_MODULES(UMOCKDEV, umockdev-1.0 >= 0.16.0, ac_have_umockdev=yes, ac_have_umockdev=no) + PKG_CHECK_MODULES(UMOCKDEV_HOTPLUG, umockdev-1.0 >= 0.17.7, ac_umockdev_hotplug=yes, ac_umockdev_hotplug=no) + if test "x$ac_umockdev_hotplug" = xyes; then + AC_DEFINE([UMOCKDEV_HOTPLUG], [1], [UMockdev hotplug code is not racy]) + fi + else + AC_CHECK_HEADERS([asm/types.h]) + AC_CHECK_HEADER([linux/netlink.h], [], [AC_MSG_ERROR([Linux netlink header not found])]) + AC_CHECK_HEADER([sys/socket.h], [], [AC_MSG_ERROR([Linux socket header not found])]) + fi + ;; +sunos) + LIBS="${LIBS} -ldevinfo" + ;; +windows) + AC_CHECK_TYPES([struct timespec], [], [], [[#include ]]) + AC_DEFINE([_WIN32_WINNT], [_WIN32_WINNT_VISTA], [Define to the oldest supported Windows version.]) + LT_LDFLAGS="${LT_LDFLAGS} -avoid-version -Wl,--add-stdcall-alias" + ;; +*) + dnl no special handling required + ;; +esac + +dnl headers not available on all platforms but required on others +AC_CHECK_HEADERS([sys/time.h]) + +if test "x$platform" = xposix; then + dnl check availability of clock_gettime() + if test "x$backend" = xdarwin; then + dnl need to verify that OS X target is 10.12 or later for clock_gettime() + AC_MSG_CHECKING([whether OS X target version is 10.12 or later]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ + #include + #if MAC_OS_X_VERSION_MIN_REQUIRED < 101200 + # error "Target OS X version is too old" + #endif + ], [])], + [AC_MSG_RESULT([yes]) + osx_10_12_or_later=yes], + [AC_MSG_RESULT([no]) + osx_10_12_or_later=]) + if test "x$osx_10_12_or_later" = xyes; then + AC_CHECK_FUNCS([clock_gettime], [have_clock_gettime=yes], [have_clock_gettime=]) + else + AC_MSG_NOTICE([clock_gettime() is not available on target OS X version]) + fi + else + AC_CHECK_FUNCS([clock_gettime], [have_clock_gettime=yes], [AC_MSG_ERROR([clock_gettime() is required on this platform])]) + fi + + if test "x$have_clock_gettime" = xyes; then + dnl the clock_gettime() function needs certain clock IDs defined + AC_CHECK_DECL([CLOCK_MONOTONIC], [], [AC_MSG_ERROR([C library headers missing definition for CLOCK_MONOTONIC])], [[#include ]]) + dnl use the monotonic clock for condition variable timed waits if possible + AC_CHECK_FUNCS([pthread_condattr_setclock], [need_clock_realtime=], [need_clock_realtime=yes]) + if test "x$need_clock_realtime" = xyes; then + AC_CHECK_DECL([CLOCK_REALTIME], [], [AC_MSG_ERROR([C library headers missing definition for CLOCK_REALTIME])], [[#include ]]) + fi + fi +fi + +dnl eventfd support +if test "x$backend" = xlinux || test "x$backend" = xsunos; then + AC_ARG_ENABLE([eventfd], + [AS_HELP_STRING([--enable-eventfd], [use eventfd for signalling [default=auto]])], + [use_eventfd=$enableval], + [use_eventfd=auto]) + if test "x$use_eventfd" != xno; then + AC_CHECK_HEADER([sys/eventfd.h], [eventfd_h=yes], [eventfd_h=]) + if test "x$eventfd_h" = xyes; then + AC_CHECK_DECLS([EFD_NONBLOCK, EFD_CLOEXEC], [eventfd_h_ok=yes], [eventfd_h_ok=], [[#include ]]) + if test "x$eventfd_h_ok" = xyes; then + AC_CHECK_FUNC([eventfd], [eventfd_ok=yes], [eventfd_ok=]) + if test "x$eventfd_ok" = xyes; then + AC_DEFINE([HAVE_EVENTFD], [1], [Define to 1 if the system has eventfd functionality.]) + elif test "x$use_eventfd" = xyes; then + AC_MSG_ERROR([eventfd() function not found; glibc 2.9+ required]) + fi + elif test "x$use_eventfd" = xyes; then + AC_MSG_ERROR([eventfd header not usable; glibc 2.9+ required]) + fi + elif test "x$use_eventfd" = xyes; then + AC_MSG_ERROR([eventfd header not available; glibc 2.9+ required]) + fi + fi + AC_MSG_CHECKING([whether to use eventfd for signalling]) + if test "x$use_eventfd" = xno; then + AC_MSG_RESULT([no (disabled by user)]) + elif test "x$eventfd_h" != xyes; then + AC_MSG_RESULT([no (header not available)]) + elif test "x$eventfd_h_ok" != xyes; then + AC_MSG_RESULT([no (header not usable)]) + elif test "x$eventfd_ok" != xyes; then + AC_MSG_RESULT([no (functions not available)]) + else + AC_MSG_RESULT([yes]) + fi +fi + +dnl timerfd support +if test "x$backend" = xlinux || test "x$backend" = xsunos; then + AC_ARG_ENABLE([timerfd], + [AS_HELP_STRING([--enable-timerfd], [use timerfd for timing [default=auto]])], + [use_timerfd=$enableval], + [use_timerfd=auto]) + if test "x$use_timerfd" != xno; then + AC_CHECK_HEADER([sys/timerfd.h], [timerfd_h=yes], [timerfd_h=]) + if test "x$timerfd_h" = xyes; then + AC_CHECK_DECLS([TFD_NONBLOCK, TFD_CLOEXEC], [timerfd_h_ok=yes], [timerfd_h_ok=], [[#include ]]) + if test "x$timerfd_h_ok" = xyes; then + AC_CHECK_FUNC([timerfd_create], [timerfd_ok=yes], [timerfd_ok=]) + if test "x$timerfd_ok" = xyes; then + AC_DEFINE([HAVE_TIMERFD], [1], [Define to 1 if the system has timerfd functionality.]) + elif test "x$use_timerfd" = xyes; then + AC_MSG_ERROR([timerfd_create() function not found; glibc 2.9+ required]) + fi + elif test "x$use_timerfd" = xyes; then + AC_MSG_ERROR([timerfd header not usable; glibc 2.9+ required]) + fi + elif test "x$use_timerfd" = xyes; then + AC_MSG_ERROR([timerfd header not available; glibc 2.9+ required]) + fi + fi + AC_MSG_CHECKING([whether to use timerfd for timing]) + if test "x$use_timerfd" = xno; then + AC_MSG_RESULT([no (disabled by user)]) + elif test "x$timerfd_h" != xyes; then + AC_MSG_RESULT([no (header not available)]) + elif test "x$timerfd_h_ok" != xyes; then + AC_MSG_RESULT([no (header not usable)]) + elif test "x$timerfd_ok" != xyes; then + AC_MSG_RESULT([no (functions not available)]) + else + AC_MSG_RESULT([yes]) + fi +fi + +dnl Message logging +AC_ARG_ENABLE([log], + [AS_HELP_STRING([--disable-log], [disable all logging])], + [log_enabled=$enableval], + [log_enabled=yes]) +if test "x$log_enabled" != xno; then + AC_DEFINE([ENABLE_LOGGING], [1], [Define to 1 to enable message logging.]) +fi + +AC_ARG_ENABLE([debug-log], + [AS_HELP_STRING([--enable-debug-log], [start with debug message logging enabled [default=no]])], + [debug_log_enabled=$enableval], + [debug_log_enabled=no]) +if test "x$debug_log_enabled" != xno; then + AC_DEFINE([ENABLE_DEBUG_LOGGING], [1], [Define to 1 to start with debug message logging enabled.]) +fi + +AC_ARG_ENABLE([system-log], + [AS_HELP_STRING([--enable-system-log], [output logging messages to the systemwide log, if supported by the OS [default=no]])], + [system_log_enabled=$enableval], + [system_log_enabled=no]) +if test "x$system_log_enabled" != xno; then + AC_DEFINE([USE_SYSTEM_LOGGING_FACILITY], [1], [Define to 1 to output logging messages to the systemwide log.]) + if test "x$backend" != xwindows && test "x$is_android_linux" != xyes; then + dnl Check if syslog is available in standard C library + AC_CHECK_HEADER([syslog.h], [syslog_h=yes], [syslog_h=]) + if test "x$syslog_h" = xyes; then + AC_CHECK_FUNCS([syslog]) + fi + fi +fi + +dnl Examples build +AC_ARG_ENABLE([examples-build], + [AS_HELP_STRING([--enable-examples-build], [build example applications [default=no]])], + [build_examples=$enableval], + [build_examples=no]) + +dnl Tests build +AC_ARG_ENABLE([tests-build], + [AS_HELP_STRING([--enable-tests-build], [build test applications [default=no]])], + [build_tests=$enableval], + [build_tests=no]) + +AM_CONDITIONAL([BUILD_EXAMPLES], [test "x$build_examples" != xno]) +AM_CONDITIONAL([BUILD_TESTS], [test "x$build_tests" != xno]) +AM_CONDITIONAL([BUILD_UMOCKDEV_TEST], [test "x$ac_have_umockdev" = xyes -a "x$log_enabled" != xno]) +AM_CONDITIONAL([CREATE_IMPORT_LIB], [test "x$create_import_lib" = xyes]) +AM_CONDITIONAL([OS_DARWIN], [test "x$backend" = xdarwin]) +AM_CONDITIONAL([OS_HAIKU], [test "x$backend" = xhaiku]) +AM_CONDITIONAL([OS_LINUX], [test "x$backend" = xlinux]) +AM_CONDITIONAL([OS_NETBSD], [test "x$backend" = xnetbsd]) +AM_CONDITIONAL([OS_NULL], [test "x$backend" = xnull]) +AM_CONDITIONAL([OS_OPENBSD], [test "x$backend" = xopenbsd]) +AM_CONDITIONAL([OS_SUNOS], [test "x$backend" = xsunos]) +AM_CONDITIONAL([OS_WINDOWS], [test "x$backend" = xwindows]) +AM_CONDITIONAL([PLATFORM_POSIX], [test "x$platform" = xposix]) +AM_CONDITIONAL([PLATFORM_WINDOWS], [test "x$platform" = xwindows]) +AM_CONDITIONAL([USE_UDEV], [test "x$use_udev" = xyes]) + +dnl The -Wcast-function-type warning causes a flurry of warnings when compiling +dnl Windows with GCC 8 or later because of dynamically loaded functions +if test "x$backend" = xwindows; then + saved_CFLAGS="${CFLAGS}" + CFLAGS="-Werror -Wcast-function-type" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], + [EXTRA_CFLAGS="${EXTRA_CFLAGS} -Wno-cast-function-type"], + []) + CFLAGS="${saved_CFLAGS}" +fi + +SHARED_CFLAGS="-Wall -Wextra -Wshadow -Wunused -Wwrite-strings -Werror=format-security -Werror=implicit-function-declaration -Werror=implicit-int -Werror=init-self -Werror=missing-prototypes -Werror=strict-prototypes -Werror=undef -Werror=uninitialized" + +AM_CPPFLAGS="${EXTRA_CPPFLAGS}" +AC_SUBST(AM_CPPFLAGS) + +AM_CFLAGS="-std=${c_dialect}11 ${EXTRA_CFLAGS} ${SHARED_CFLAGS}" +AC_SUBST(AM_CFLAGS) + +AM_CXXFLAGS="-std=${c_dialect}++11 ${EXTRA_CFLAGS} ${SHARED_CFLAGS} -Wmissing-declarations" +AC_SUBST(AM_CXXFLAGS) + +AC_SUBST(LT_LDFLAGS) + +AC_SUBST([EXTRA_LDFLAGS]) + +dnl set name of html output directory for doxygen +AC_SUBST(DOXYGEN_HTMLDIR, [api-1.0]) + +AC_CONFIG_FILES([libusb-1.0.pc]) +AC_CONFIG_FILES([Makefile]) +AC_CONFIG_FILES([libusb/Makefile]) +AC_CONFIG_FILES([examples/Makefile]) +AC_CONFIG_FILES([tests/Makefile]) +AC_CONFIG_FILES([doc/Makefile]) +AC_CONFIG_FILES([doc/doxygen.cfg]) +AC_OUTPUT diff --git a/libusb-1.0.26/doc/doxygen.cfg.in b/libusb-1.0.26/doc/doxygen.cfg.in new file mode 100644 index 0000000000000000000000000000000000000000..b6e6219cd814cf1f6809215e0f3697983a6f71e0 --- /dev/null +++ b/libusb-1.0.26/doc/doxygen.cfg.in @@ -0,0 +1,2571 @@ +# Doxyfile 1.9.0 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the configuration +# file that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# https://www.gnu.org/software/libiconv/ for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = libusb + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = @PACKAGE_VERSION@ + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "A cross-platform user library to access USB devices" + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = @top_srcdir@/doc/libusb.png + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all generated output in the proper direction. +# Possible values are: None, LTR, RTL and Context. +# The default value is: None. + +OUTPUT_TEXT_DIRECTION = None + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = NO + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = YES + +# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# By default Python docstrings are displayed as preformatted text and doxygen's +# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the +# doxygen's special commands can be used and the contents of the docstring +# documentation blocks is shown as doxygen documentation. +# The default value is: YES. + +PYTHON_DOCSTRING = YES + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines (in the resulting output). You can put ^^ in the value part of an +# alias to insert a newline as if a physical newline was in the original file. +# When you need a literal { or } or , in the value part of an alias you have to +# escape them by means of a backslash (\), this can lead to conflicts with the +# commands \{ and \} for these it is advised to use the version @{ and @} or use +# a double escape (\\{ and \\}) + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice +# sources only. Doxygen will then generate output that is more tailored for that +# language. For instance, namespaces will be presented as modules, types will be +# separated into more groups, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_SLICE = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL, +# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files). For instance to make doxygen treat .inc files +# as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. When specifying no_extension you should add +# * to the FILE_PATTERNS. +# +# Note see also the list of default file extension mappings. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See https://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 5. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 5 + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use +# during processing. When set to 0 doxygen will based this on the number of +# cores available in the system. You can set it explicitly to a value larger +# than 0 to get more control over the balance between CPU load and processing +# speed. At this moment only the input processing can be done using multiple +# threads. Since this is still an experimental feature the default is set to 1, +# which efficively disables parallel processing. Please report any issues you +# encounter. Generating dot graphs in parallel is controlled by the +# DOT_NUM_THREADS setting. +# Minimum value: 0, maximum value: 32, default value: 1. + +NUM_PROC_THREADS = 1 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If this flag is set to YES, the name of an unnamed parameter in a declaration +# will be determined by the corresponding definition. By default unnamed +# parameters remain unnamed in the output. +# The default value is: YES. + +RESOLVE_UNNAMED_PARAMS = YES + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# declarations. If set to NO, these declarations will be included in the +# documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# With the correct setting of option CASE_SENSE_NAMES doxygen will better be +# able to match the capabilities of the underlying filesystem. In case the +# filesystem is case sensitive (i.e. it supports files in the same directory +# whose names only differ in casing), the option must be set to YES to properly +# deal with such files in case they appear in the input. For filesystems that +# are not case sensitive the option should be be set to NO to properly deal with +# output files written for symbols that only differ in casing, such as for two +# classes, one named CLASS and the other named Class, and to also support +# references to files without having to specify the exact matching casing. On +# Windows (including Cygwin) and MacOS, users should typically set this option +# to NO, whereas on Linux or other Unix flavors it should typically be set to +# YES. +# The default value is: system dependent. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. If +# EXTRACT_ALL is set to YES then this flag will automatically be disabled. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS +# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but +# at the end of the doxygen process doxygen will return with a non-zero status. +# Possible values are: NO, YES and FAIL_ON_WARNINGS. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = @top_srcdir@/libusb + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: +# https://www.gnu.org/software/libiconv/) for the list of possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# Note the list of default checked file patterns might differ from the list of +# default file extension mappings. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), +# *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, *.vhdl, +# *.ucf, *.qsf and *.ice. + +FILE_PATTERNS = *.c \ + *.h + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = @top_srcdir@/libusb/libusbi.h \ + @top_srcdir@/libusb/version.h \ + @top_srcdir@/libusb/version_nano.h \ + @top_srcdir@/libusb/os + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# entity all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see https://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = @DOXYGEN_HTMLDIR@ + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via JavaScript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have JavaScript, +# like the Qt help browser. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_MENUS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = YES + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: +# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To +# create a documentation set, doxygen will generate a Makefile in the HTML +# output directory. Running make will produce the docset in that directory and +# running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy +# genXcode/_index.html for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: +# https://www.microsoft.com/en-us/download/details.aspx?id=21138) on Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the main .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location (absolute path +# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to +# run qhelpgenerator on the generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg +# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see +# https://inkscape.org) to generate formulas as SVG images instead of PNGs for +# the HTML output. These images will generally look nicer at scaled resolutions. +# Possible values are: png (the default) and svg (looks nicer but requires the +# pdf2svg or inkscape tool). +# The default value is: png. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FORMULA_FORMAT = png + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANSPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands +# to create new LaTeX commands to be used in formulas as building blocks. See +# the section "Including formulas" for details. + +FORMULA_MACROFILE = + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# https://www.mathjax.org) which uses client side JavaScript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from https://www.mathjax.org before deployment. +# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /