From b0a15315eed51732697cbfb25e7dcec3b3c798a0 Mon Sep 17 00:00:00 2001 From: Packit Service Date: Dec 09 2020 20:44:59 +0000 Subject: libusbx-1.0.23 base --- diff --git a/.private/README.txt b/.private/README.txt new file mode 100644 index 0000000..7f63479 --- /dev/null +++ b/.private/README.txt @@ -0,0 +1,5 @@ +This directory contains private internal scripts used by the libusb +project maintainers. + +These scripts are not intended for general usage and will not be +exported when producing release archives. diff --git a/.private/bd.cmd b/.private/bd.cmd new file mode 100644 index 0000000..d02ce23 --- /dev/null +++ b/.private/bd.cmd @@ -0,0 +1,89 @@ +@echo off +rem produce the DDK binary files for snapshots +rem !!!THIS SCRIPT IS FOR INTERNAL DEVELOPER USE ONLY!!! + +if NOT x%DDK_TARGET_OS%==xWinXP goto usage + +set IWD=%~dp0 +cd .. +mkdir E:\dailies\%DATE% +for %%A in (MS32 MS64) do mkdir E:\dailies\%DATE%\%%A +for %%A in (MS32 MS64) do mkdir E:\dailies\%DATE%\%%A\static +for %%A in (MS32 MS64) do mkdir E:\dailies\%DATE%\%%A\dll +for %%A in (source bin32 bin64) do mkdir E:\dailies\%DATE%\examples\%%A +copy examples\listdevs.c E:\dailies\%DATE%\examples\source +copy examples\xusb.c E:\dailies\%DATE%\examples\source +copy examples\ezusb.? E:\dailies\%DATE%\examples\source +copy examples\fxload.c E:\dailies\%DATE%\examples\source +copy msvc\stdint.h E:\dailies\%DATE%\examples\source +copy .private\wbs.txt E:\dailies\%DATE%\README.txt + +set ORG_BUILD_ALT_DIR=%BUILD_ALT_DIR% +set ORG_BUILDARCH=%_BUILDARCH% +set ORG_PATH=%PATH% +set ORG_BUILD_DEFAULT_TARGETS=%BUILD_DEFAULT_TARGETS% + +set 386=1 +set AMD64= +set BUILD_DEFAULT_TARGETS=-386 +set _AMD64bit= +set _BUILDARCH=x86 +set PATH=%BASEDIR%\bin\x86;%BASEDIR%\bin\x86\x86 + +cd msvc +call ddk_build +cd .. + +@echo off +copy Win32\Release\lib\libusb-1.0.lib E:\dailies\%DATE%\MS32\static +copy Win32\Release\examples\listdevs.exe E:\dailies\%DATE%\examples\bin32 +copy Win32\Release\examples\xusb.exe E:\dailies\%DATE%\examples\bin32 +copy Win32\Release\examples\fxload.exe E:\dailies\%DATE%\examples\bin32 + +cd msvc +call ddk_build DLL +cd .. + +@echo off +copy Win32\Release\lib\libusb-1.0.lib E:\dailies\%DATE%\MS32\dll +copy Win32\Release\dll\libusb-1.0.dll E:\dailies\%DATE%\MS32\dll +copy Win32\Release\dll\libusb-1.0.pdb E:\dailies\%DATE%\MS32\dll + +set 386= +set AMD64=1 +set BUILD_DEFAULT_TARGETS=-amd64 +set _AMD64bit=true +set _BUILDARCH=AMD64 +set PATH=%BASEDIR%\bin\x86\amd64;%BASEDIR%\bin\x86 + +cd msvc +call ddk_build +cd .. + +@echo off +copy x64\Release\lib\libusb-1.0.lib E:\dailies\%DATE%\MS64\static +copy x64\Release\examples\listdevs.exe E:\dailies\%DATE%\examples\bin64 +copy x64\Release\examples\xusb.exe E:\dailies\%DATE%\examples\bin64 +copy x64\Release\examples\fxload.exe E:\dailies\%DATE%\examples\bin64 + +cd msvc +call ddk_build DLL +cd .. + +@echo off +copy x64\Release\lib\libusb-1.0.lib E:\dailies\%DATE%\MS64\dll +copy x64\Release\dll\libusb-1.0.dll E:\dailies\%DATE%\MS64\dll +copy x64\Release\dll\libusb-1.0.pdb E:\dailies\%DATE%\MS64\dll + +set BUILD_ALT_DIR=%ORG_BUILD_ALT_DIR% +set _BUILDARCH=%ORG_BUILDARCH% +set PATH=%ORG_PATH% +set BUILD_DEFAULT_TARGETS=%ORG_BUILD_DEFAULT_TARGETS% + +goto done + +:usage +echo must be run in a WXP build environment! + +:done +cd %IWD% \ No newline at end of file diff --git a/.private/bm.sh b/.private/bm.sh new file mode 100644 index 0000000..520c3a5 --- /dev/null +++ b/.private/bm.sh @@ -0,0 +1,54 @@ +#!/bin/sh +# produce the MinGW binary files for snapshots +# !!!THIS SCRIPT IS FOR INTERNAL DEVELOPER USE ONLY!!! + +PWD=`pwd` +cd .. +date=`date +%Y.%m.%d` +target=e:/dailies/$date +mkdir -p $target/include/libusb-1.0 +cp -v libusb/libusb-1.0.def $target +cp -v libusb/libusb.h $target/include/libusb-1.0 + +# +# 32 bit binaries +# +target=e:/dailies/$date/MinGW32 +git clean -fdx +# Not using debug (-g) in CFLAGS DRAMATICALLY reduces the size of the binaries +export CFLAGS="-O2 -m32" +export LDFLAGS="-m32" +export RCFLAGS="--target=pe-i386" +export DLLTOOLFLAGS="-m i386 -f --32" +echo `pwd` +(glibtoolize --version) < /dev/null > /dev/null 2>&1 && LIBTOOLIZE=glibtoolize || LIBTOOLIZE=libtoolize +$LIBTOOLIZE --copy --force || exit 1 +aclocal || exit 1 +autoheader || exit 1 +autoconf || exit 1 +automake -a -c || exit 1 +./configure +make -j2 +mkdir -p $target/static +mkdir -p $target/dll +cp -v libusb/.libs/libusb-1.0.a $target/static +cp -v libusb/.libs/libusb-1.0.dll $target/dll +cp -v libusb/.libs/libusb-1.0.dll.a $target/dll +make clean -j2 + +# +# 64 bit binaries +# +target=e:/dailies/$date/MinGW64 +export CFLAGS="-O2" +export LDFLAGS="" +export RCFLAGS="" +export DLLTOOLFLAGS="" +./configure +make -j2 +mkdir -p $target/static +mkdir -p $target/dll +cp -v libusb/.libs/libusb-1.0.a $target/static +cp -v libusb/.libs/libusb-1.0.dll $target/dll +cp -v libusb/.libs/libusb-1.0.dll.a $target/dll +cd $PWD \ No newline at end of file diff --git a/.private/bwince.cmd b/.private/bwince.cmd new file mode 100755 index 0000000..0cc7477 --- /dev/null +++ b/.private/bwince.cmd @@ -0,0 +1,57 @@ +@echo off +rem produce the Win CE binary files for snapshots +rem !!!THIS SCRIPT IS FOR INTERNAL DEVELOPER USE ONLY!!! + +if "x%VSINSTALLDIR%"=="x" goto usage + +if "x%WINCE_TARGET_DIR_BASE%"=="x" set WINCE_TARGET_DIR_BASE=E:\dailies +if "x%WINCE_TARGET_ARCHES%"=="x" set WINCE_TARGET_ARCHES=ARMV4I MIPSII MIPSII_FP MIPSIV MIPSIV_FP SH4 x86 + + +set WINCE_TARGET_DIR=%WINCE_TARGET_DIR_BASE%\%DATE:/=-% +set MSBUILD_CMD=msbuild.exe +set MSBUILD_TARGET=Rebuild +set MSBUILD_CONFIGURATION=Release +set WINCE_SLN=msvc\libusb_wince.sln +set PLATFORM_PREFIX=STANDARDSDK_500 ( +set PLATFORM_POSTFIX=) + + +set PWD=%~dp0 +cd .. + +mkdir %WINCE_TARGET_DIR% +mkdir %WINCE_TARGET_DIR%\include\libusb-1.0 +copy libusb\libusb-1.0.def %WINCE_TARGET_DIR% +copy libusb\libusb.h %WINCE_TARGET_DIR%\include\libusb-1.0 +for %%A in (%WINCE_TARGET_ARCHES%) do mkdir %WINCE_TARGET_DIR%\%%A +for %%A in (%WINCE_TARGET_ARCHES%) do mkdir %WINCE_TARGET_DIR%\%%A\static +for %%A in (%WINCE_TARGET_ARCHES%) do mkdir %WINCE_TARGET_DIR%\%%A\dll +for %%A in (%WINCE_TARGET_ARCHES%) do mkdir %WINCE_TARGET_DIR%\examples\%%A +mkdir %WINCE_TARGET_DIR%\examples\source +copy examples\listdevs.c %WINCE_TARGET_DIR%\examples\source +copy examples\xusb.c %WINCE_TARGET_DIR%\examples\source +copy msvc\stdint.h %WINCE_TARGET_DIR%\examples\source +copy .private\wbs_wince.txt %WINCE_TARGET_DIR%\README.txt +copy COPYING %WINCE_TARGET_DIR%\COPYING + +rem Perform the rebuild +for %%A in (%WINCE_TARGET_ARCHES%) do %MSBUILD_CMD% %WINCE_SLN% /property:Platform="%PLATFORM_PREFIX%%%A%PLATFORM_POSTFIX%" /property:Configuration=%MSBUILD_CONFIGURATION% /target:%MSBUILD_TARGET%" + + +rem Copy across the binaries +for %%A in (%WINCE_TARGET_ARCHES%) do ( + copy %%A\%MSBUILD_CONFIGURATION%\lib\libusb-1.0.lib %WINCE_TARGET_DIR%\%%A\static + copy %%A\%MSBUILD_CONFIGURATION%\examples\listdevs.exe %WINCE_TARGET_DIR%\examples\%%A + copy %%A\%MSBUILD_CONFIGURATION%\examples\xusb.exe %WINCE_TARGET_DIR%\examples\%%A + copy %%A\%MSBUILD_CONFIGURATION%\dll\libusb-1.0.lib %WINCE_TARGET_DIR%\%%A\dll + copy %%A\%MSBUILD_CONFIGURATION%\dll\libusb-1.0.dll %WINCE_TARGET_DIR%\%%A\dll + copy %%A\%MSBUILD_CONFIGURATION%\dll\libusb-1.0.pdb %WINCE_TARGET_DIR%\%%A\dll ) + +goto done + +:usage +echo must be run in a Visual Studio 2005 build environment! + +:done +cd %PWD% \ No newline at end of file diff --git a/.private/post-rewrite.sh b/.private/post-rewrite.sh new file mode 100755 index 0000000..0ac4847 --- /dev/null +++ b/.private/post-rewrite.sh @@ -0,0 +1,28 @@ +#!/bin/sh +# +# Detect amended commits and warn user if .amend is missing +# +# To have git run this script on commit, create a "post-rewrite" text file in +# .git/hooks/ with the following content: +# #!/bin/sh +# if [ -x .private/post-rewrite.sh ]; then +# source .private/post-rewrite.sh +# fi +# +# NOTE: These versioning hooks are intended to be used *INTERNALLY* by the +# libusb development team and are NOT intended to solve versioning for any +# derivative branch, such as one you would create for private development. +# + +case "$1" in + amend) + # Check if a .amend exists. If none, create one and warn user to re-commit. + if [ -f .amend ]; then + rm .amend + else + echo "Amend commit detected, but no .amend file - One has now been created." + echo "Please re-commit as is (amend), so that the version number is correct." + touch .amend + fi ;; + *) ;; +esac diff --git a/.private/pre-commit.sh b/.private/pre-commit.sh new file mode 100755 index 0000000..346d48a --- /dev/null +++ b/.private/pre-commit.sh @@ -0,0 +1,48 @@ +#!/bin/sh +# +# Sets the nano version according to the number of commits on this branch, as +# well as the branch offset. +# +# To have git run this script on commit, first make sure you change +# BRANCH_OFFSET to 60000 or higher, then create a "pre-commit" text file in +# .git/hooks/ with the following content: +# #!/bin/sh +# if [ -x .private/pre-commit.sh ]; then +# source .private/pre-commit.sh +# fi +# +# NOTE: These versioning hooks are intended to be used *INTERNALLY* by the +# libusb development team and are NOT intended to solve versioning for any +# derivative branch, such as one you would create for private development. +# +# Should you wish to reuse these scripts for your own versioning, in your own +# private branch, we kindly ask you to first set BRANCH_OFFSET to 60000, or +# higher, as any offset below below 60000 is *RESERVED* for libusb official +# usage. + +################################################################################ +## YOU *MUST* SET THE FOLLOWING TO 60000 OR HIGHER IF YOU REUSE THIS SCRIPT ## +################################################################################ +BRANCH_OFFSET=10000 +################################################################################ + +if [ "$BASH_VERSION" = '' ]; then + TYPE_CMD="type git >/dev/null 2>&1" +else + TYPE_CMD="type -P git &>/dev/null" +fi + +eval $TYPE_CMD || { echo "git command not found. Aborting." >&2; exit 1; } + +NANO=`git log --oneline | wc -l` +NANO=`expr $NANO + $BRANCH_OFFSET` +# Amended commits need to have the nano corrected. Current versions of git hooks +# only allow detection of amending post commit, so we require a .amend file, +# which will be created post commit with a user warning if none exists when an +# amend is detected. +if [ -f .amend ]; then + NANO=`expr $NANO - 1` +fi +echo "setting nano to $NANO" +echo "#define LIBUSB_NANO $NANO" > libusb/version_nano.h +git add libusb/version_nano.h diff --git a/.private/wbs.txt b/.private/wbs.txt new file mode 100644 index 0000000..2ad8395 --- /dev/null +++ b/.private/wbs.txt @@ -0,0 +1,61 @@ + libusb 1.0 Windows binary snapshot - README + + ********************************************************************* + * The latest version of this snapshot can always be downloaded at: * + * https://sourceforge.net/projects/libusb/files/ * + ********************************************************************* + +o Visual Studio: + - Open existing or create a new project for your application + - Copy libusb.h, from the include\libusb-1.0\ directory, into your project and + make sure that the location where the file reside appears in the 'Additional + Include Directories' section (Configuration Properties -> C/C++ -> General). + - Copy the relevant .lib file from MS32\ or MS64\ and add 'libusb-1.0.lib' to + your 'Additional Dependencies' (Configuration Properties -> Linker -> Input) + Also make sure that the directory where libusb-1.0.lib resides is added to + 'Additional Library Directories' (Configuration Properties -> Linker + -> General) + - If you use the static version of the libusb library, make sure that + 'Runtime Library' is set to 'Multi-threaded DLL (/MD)' (Configuration + Properties -> C/C++ -> Code Generation). + NB: If your application requires /MT (Multi-threaded/libCMT), you need to + recompile a static libusb 1.0 library from source. + - Compile and run your application. If you use the DLL version of libusb-1.0, + remember that you need to have a copy of the DLL either in the runtime + directory or in system32 + +o WDK/DDK: + - The following is an example of a sources files that you can use to compile + a libusb 1.0 based console application. In this sample ..\libusb\ is the + directory where you would have copied libusb.h as well as the relevant + libusb-1.0.lib + + TARGETNAME=your_app + TARGETTYPE=PROGRAM + USE_MSVCRT=1 + UMTYPE=console + INCLUDES=..\libusb;$(DDK_INC_PATH) + TARGETLIBS=..\libusb\libusb-1.0.lib + SOURCES=your_app.c + + - Note that if you plan to use libCMT instead of MSVCRT (USE_LIBCMT=1 instead + of USE_MSVCRT=1), you will need to recompile libusb to use libCMT. This can + easily be achieved, in the DDK environment, by running 'ddk_build /MT' + +o MinGW/cygwin + - Copy libusb.h, from include/libusb-1.0/ to your default include directory, + and copy the MinGW32/ or MinGW64/ .a files to your default library directory. + Or, if you don't want to use the default locations, make sure that you feed + the relevant -I and -L options to the compiler. + - Add the '-lusb-1.0' linker option when compiling. + +o Additional information: + - The libusb 1.0 API documentation can be accessed at: + http://api.libusb.info + - For some libusb samples (including source), please have a look in examples/ + - For additional information on the libusb 1.0 Windows backend please visit: + http://windows.libusb.info + - The MinGW and MS generated DLLs are fully interchangeable, provided that you + use the import libs provided or generate one from the .def also provided. + - If you find any issue, please visit http://libusb.info/ and check the + Support section diff --git a/.private/wbs_wince.txt b/.private/wbs_wince.txt new file mode 100755 index 0000000..5b5e3cb --- /dev/null +++ b/.private/wbs_wince.txt @@ -0,0 +1,42 @@ + libusb 1.0 Windows CE binary snapshot - README + + ********************************************************************* + * The latest version of this snapshot can always be downloaded at: * + * https://sourceforge.net/projects/libusb/files/ * + ********************************************************************* + +The binaries contained in this snapshot are licensed under the +GNU Lesser General Public License version 2.1 or, at your option, any later +version (see COPYING for further details). The source code for these binaries +is available for download at the same location as this binary snapshot. + +o Visual Studio: + - Open existing or create a new project for your application + - Copy libusb.h, from the include\libusb-1.0\ directory, into your project and + make sure that the location where the file reside appears in the 'Additional + Include Directories' section (Configuration Properties -> C/C++ -> General). + - Copy the relevant .lib file from ARMV4I, MIPSII, MIPSII_FP, MIPSIV, MIPSIV_FP, + SH4 or x86 and add 'libusb-1.0.lib' to your 'Additional Dependencies' + (Configuration Properties -> Linker -> Input). Also make sure that the + directory where libusb-1.0.lib resides is added to 'Additional Library + Directories' (Configuration Properties -> Linker -> General) + - If you use the static version of the libusb library, make sure that + 'Runtime Library' is set to 'Multi-threaded DLL (/MD)' (Configuration + Properties -> C/C++ -> Code Generation). + NB: If your application requires /MT (Multi-threaded/libCMT), you need to + recompile a static libusb 1.0 library from source. + - Compile and run your application. If you use the DLL version of libusb-1.0, + remember that you need to have a copy of the DLL either in the runtime + directory or in system32 + +o Additional information: + - The libusb 1.0 API documentation can be accessed at: + http://api.libusb.info + - For some libusb samples (including source), please have a look in examples/ + - For additional information on the libusb 1.0 Windows backend please visit: + http://windows.libusb.info + - It is necessary to install the CE USB Kernel Wrapper driver for libusb to + function on a device. This is obtainable from: + https://github.com/RealVNC/CEUSBKWrapper + - If you find any issue, please visit http://libusb.info/ and check the + Support section diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..f5d194a --- /dev/null +++ b/.travis.yml @@ -0,0 +1,49 @@ +language: c + +matrix: + include: + - os: linux + dist: trusty + sudo: required + compiler: gcc + - os: linux + dist: trusty + sudo: required + compiler: clang + - os: osx + osx_image: xcode8 + compiler: gcc + - os: osx + osx_image: xcode8 + compiler: clang + - os: osx + osx_image: xcode7.1 + compiler: gcc + - os: osx + osx_image: xcode7.1 + compiler: clang + - os: osx + osx_image: beta-xcode6.2 + compiler: gcc + - os: osx + osx_image: beta-xcode6.2 + compiler: clang + +addons: + homebrew: + update: true + brewfile: true + apt: + packages: + - autoconf + - automake + - libtool + - m4 + - libudev-dev + sources: + - ubuntu-toolchain-r-test + +script: + - ./autogen.sh && make clean && make + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./travis-autogen.sh --disable-udev && make clean && make ; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then cd Xcode && xcodebuild -project libusb.xcodeproj ; fi diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..e90ad9b --- /dev/null +++ b/AUTHORS @@ -0,0 +1,119 @@ +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: +Adrian Bunk +Akshay Jaggi +Alan Ott +Alan Stern +Alex Vatchenko +Andrew Fernandes +Andy Chunyu +Andy McFadden +Angus Gratton +Anil Nair +Anthony Clay +Antonio Ospite +Artem Egorkine +Aurelien Jarno +Bastien Nocera +Bei Zhang +Benjamin Dobell +Brent Rector +Carl Karsten +Christophe Zeitouny +Colin Walters +Dave Camarillo +David Engraf +David Moore +Davidlohr Bueso +Dmitry Fleytman +Doug Johnston +Evan Hunter +Federico Manzan +Felipe Balbi +Florian Albrechtskirchinger +Francesco Montorsi +Francisco Facioni +Gaurav Gupta +Graeme Gill +Gustavo Zacarias +Hans Ulrich Niedermann +Hector Martin +Hoi-Ho Chan +Ilya Konstantinov +Jakub Klama +James Hanko +Jeffrey Nichols +Johann Richard +John Sheu +Jonathon Jongsma +Joost Muller +Josh Gao +Joshua Blake +Justin Bischoff +KIMURA Masaru +Karsten Koenig +Konrad Rzepecki +Kuangye Guo +Lars Kanis +Lars Wirzenius +Lei Chen +Luca Longinotti +Marcus Meissner +Markus Heidelberg +Martin Ettl +Martin Koegler +Matthew Stapleton +Matthias Bolte +Michel Zou +Mike Frysinger +Mikhail Gusarov +Morgan Leborgne +Moritz Fischer +Ларионов Даниил +Nicholas Corgan +Omri Iluz +Orin Eman +Paul Fertser +Pekka Nikander +Rob Walker +Romain Vimont +Roman Kalashnikov +Sameeh Jubran +Sean McBride +Sebastian Pipping +Sergey Serb +Simon Haggett +Simon Newton +Stefan Agner +Stefan Tauner +Steinar H. Gunderson +Thomas Röfer +Tim Hutt +Tim Roberts +Tobias Klauser +Toby Peterson +Tormod Volden +Trygve Laugstøl +Uri Lublin +Vasily Khoruzhick +Vegard Storheil Eriksen +Venkatesh Shukla +Vianney le Clément de Saint-Marcq +Victor Toso +Vitali Lovich +William Skellenger +Xiaofan Chen +Zoltán Kovács +Роман Донченко +parafin diff --git a/Brewfile b/Brewfile new file mode 100644 index 0000000..c028148 --- /dev/null +++ b/Brewfile @@ -0,0 +1,4 @@ +brew 'automake' +brew 'libtool' +brew 'autoconf' +brew 'm4' diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..5ab7695 --- /dev/null +++ b/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/ChangeLog b/ChangeLog new file mode 100644 index 0000000..0999d07 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,283 @@ +For detailed information about the changes below, please see the git log or +visit: http://log.libusb.info + +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 cancelation 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/INSTALL_WIN.txt b/INSTALL_WIN.txt new file mode 100644 index 0000000..a37d643 --- /dev/null +++ b/INSTALL_WIN.txt @@ -0,0 +1,73 @@ +Installation Instructions for Windows +************************************* + +If you are compiling for MinGW or cygwin, please refer to the INSTALL file. + +If you are using Microsoft Visual Studio: +- Open the relevant solution file in /msvc: + libusb.dsw for MSVC6, libusb_2005.sln for Visual Studio 2005 or 2008, + libusb_2010.sln for Visual Studio 2010, + libusb_2012.sln for Visual Studio 2012 or later, + libusb_wince.sln for Windows CE support in Visual Studio 2005. +- If you want to debug the library, uncomment the ENABLE_DEBUG_LOGGING define + in msvc\config.h +- Select your configuration and compile the project + +Note that if you are using Visual Studio Express, you may have to install the +Windows SDK to be able to compile the 64 bit version of the library. + +If you are using the freely available Windows DDK/WDK (Driver Development Kit) +- If you want to debug the library, uncomment the ENABLE_DEBUG_LOGGING define + in msvc\config.h +- Open one of the relevant Free Build or Checked Build prompt for your target + platform +- Navigate to the msvc\ directory where the ddk_build.cmd file is located, and + run 'ddk_build' +- To produce a DLL rather than a static library, use: 'ddk_build DLL' +- To produce a static library that uses LIBCMT[d] instead of MSVCRT[d] (/MT[d] + vs /MD[d] in Visual Studio) use: 'ddk_build /MT' + +Note that using the Windows DDK, it is possible to compile both the 32 and 64 +bit versions of the library. + +If you are building for Windows CE then you will need the Windows CE Standard 5.00 SDK. + +Destination directories +*********************** + +The 32 bit binaries compiled either from Visual Studio or the DDK are placed in +a Win32\ directory at the root of the library +The 64 bit binaries are placed in an x64\ directory +Windows CE binaries are placed in one of the following directories, depending +on the target processor: ARMV4I, MIPSII, MIPSII_FP, MIPSIV, MIPSIV_FP, SH4 or x86. + + +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 either the latest +Windows SDK or the DDK (Links provided at the end of this file). + +For Windows CE it is necessary to install the CE USB Kernel Wrapper driver for +libusb to function on a device. + +Links +***** + +Additional information related to the Windows backend: + http://windows.libusb.info + +Latest Windows Driver (Development) Kit (WDK): + http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=36a2630f-5d56-43b5-b996-7633f2ec14ff + +Latest Microsoft Windows SDK: + http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505 + +Windows CE Standard 5.00 SDK: + http://www.microsoft.com/en-gb/download/details.aspx?id=17310 + +Windows CE USB Kernel Wrapper Driver: + https://github.com/RealVNC/CEUSBKWrapper + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..0155625 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,28 @@ +AUTOMAKE_OPTIONS = dist-bzip2 no-dist-gzip +ACLOCAL_AMFLAGS = -I m4 +DISTCLEANFILES = libusb-1.0.pc +EXTRA_DIST = TODO PORTING msvc libusb/libusb-1.0.def libusb/version_nano.h \ + examples/getopt/getopt.c examples/getopt/getopt1.c examples/getopt/getopt.h \ + android Xcode +SUBDIRS = libusb doc + +if BUILD_EXAMPLES +SUBDIRS += examples +endif + +if BUILD_TESTS +SUBDIRS += tests +endif + +pkgconfigdir=$(libdir)/pkgconfig +pkgconfig_DATA=libusb-1.0.pc + +.PHONY: dist-up + +reldir = .release/$(distdir) +dist-up: dist + rm -rf $(reldir) + mkdir -p $(reldir) + cp $(distdir).tar.bz2 $(reldir) + rsync -rv $(reldir) frs.sourceforge.net:/home/frs/project/l/li/libusb/libusb-1.0/ + rm -rf $(reldir) diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..07695ab --- /dev/null +++ b/NEWS @@ -0,0 +1,2 @@ +For the latest libusb news, please refer to the ChangeLog file, or visit: +http://libusb.info diff --git a/PORTING b/PORTING new file mode 100644 index 0000000..fa9ec1e --- /dev/null +++ b/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/README b/README new file mode 120000 index 0000000..42061c0 --- /dev/null +++ b/README @@ -0,0 +1 @@ +README.md \ No newline at end of file diff --git a/README.git b/README.git new file mode 100644 index 0000000..eab938c --- /dev/null +++ b/README.git @@ -0,0 +1,41 @@ +Notes related to git compilation: +-------------------------------- + +If you retrieved the libusb repository from git and are using a gcc based +toolchain, be mindful that you should have the autotools installed (autoconf, +automake) and will need to run either ./autogen.sh or ./bootstrap.sh to produce +the configure file. + +The difference between autogen.sh and bootstrap.sh is that the former invokes +configure with a default set of options, and will therefore generate a Makefile, +whereas the latter does not invoke configure at all. If using autogen.sh, note +that you can also append options, that will be passed as is to configure. + +OS X-specific notes: +------------------- + +Starting with Xcode 4.3, neither Xcode.app nor the Xcode 'command line tools' +includes autotools and so running either autogen.sh or bootstrap.sh will result +in the message: + +libtoolize or glibtoolize was not found! Please install libtool. + +To proceed, you must find and install it from somewhere. + +Alternatively, you can use the Xcode project at Xcode/libusb.xcodeproj. + +Notes related to submitting new developments: +-------------------------------------------- + +If you submit a new development to libusb (eg: new backend), that is unlikely +to fit in a couple of small patches, we would kindly suggest that you create a +public account on github, if you don't have one already, and then fork a new +libusb repository under this account from https://github.com/libusb/libusb. + +Then you can create a git branch for your work, that we will be able to better +reference and test. + +We also suggest that, if you are planning to bring in a large development, you +try to involve the libusb community early by letting the mailing list know, as +you may find that other people might be eager to help you out. +See http://mailing-list.libusb.info for details on how to join the mailing list. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..0e7228a --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +# libusb + +[![Build Status](https://travis-ci.org/libusb/libusb.svg?branch=master)](https://travis-ci.org/libusb/libusb) +[![Build status](https://ci.appveyor.com/api/projects/status/xvrfam94jii4a6lw?svg=true)](https://ci.appveyor.com/project/LudovicRousseau/libusb) +[![Coverity Scan Build Status](https://scan.coverity.com/projects/2180/badge.svg)](https://scan.coverity.com/projects/libusb-libusb) + +libusb is a library for USB device access from Linux, macOS, +Windows, OpenBSD/NetBSD and Haiku 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](COPYING)). + +libusb is abstracted internally in such a way that it can hopefully +be ported to other operating systems. Please see the [PORTING](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/TODO b/TODO new file mode 100644 index 0000000..1e13760 --- /dev/null +++ b/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/Xcode/common.xcconfig b/Xcode/common.xcconfig new file mode 100644 index 0000000..2c7ff3c --- /dev/null +++ b/Xcode/common.xcconfig @@ -0,0 +1,61 @@ +// +// 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 + +// libusb does not follow C99 strict aliasing rules, so disable it. +GCC_STRICT_ALIASING = NO + +// Use C99 dialect. +GCC_C_LANGUAGE_STANDARD = c99 + +// Don't search user paths with <> style #includes. +ALWAYS_SEARCH_USER_PATHS = NO + +// Compiler warnings. +GCC_WARN_64_TO_32_BIT_CONVERSION = YES +GCC_WARN_ABOUT_RETURN_TYPE = YES +GCC_WARN_UNINITIALIZED_AUTOS = YES +GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES +GCC_WARN_SHADOW = YES +GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES +GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES +GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES +GCC_WARN_ABOUT_MISSING_NEWLINE = YES +GCC_WARN_UNKNOWN_PRAGMAS = YES +GCC_WARN_UNUSED_FUNCTION = YES +GCC_WARN_UNUSED_LABEL = YES +GCC_WARN_UNUSED_VARIABLE = YES +GCC_WARN_UNUSED_PARAMETER = YES +CLANG_WARN_EMPTY_BODY = YES +CLANG_WARN_CONSTANT_CONVERSION = YES +CLANG_WARN_ENUM_CONVERSION = YES +CLANG_WARN_INT_CONVERSION = YES +CLANG_WARN_DOCUMENTATION_COMMENTS = YES +CLANG_WARN_BOOL_CONVERSION = YES +CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES +CLANG_WARN_FLOAT_CONVERSION = YES +CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES +CLANG_WARN_INFINITE_RECURSION = YES +CLANG_WARN_ASSIGN_ENUM = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES + +// Static analyzer warnings. +CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES +CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES diff --git a/Xcode/config.h b/Xcode/config.h new file mode 100644 index 0000000..14d1527 --- /dev/null +++ b/Xcode/config.h @@ -0,0 +1,25 @@ +/* config.h. Manually generated for Xcode. */ + +/* Default visibility */ +#define DEFAULT_VISIBILITY /**/ + +/* Message logging */ +#define ENABLE_LOGGING 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_POLL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Darwin backend */ +#define OS_DARWIN 1 + +/* type of second poll() argument */ +#define POLL_NFDS_TYPE nfds_t + +/* Use POSIX Threads */ +#define THREADS_POSIX 1 + +/* Use GNU extensions */ +#define _GNU_SOURCE 1 diff --git a/Xcode/debug.xcconfig b/Xcode/debug.xcconfig new file mode 100644 index 0000000..e910ee8 --- /dev/null +++ b/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/Xcode/libusb.xcconfig b/Xcode/libusb.xcconfig new file mode 100644 index 0000000..12f0c46 --- /dev/null +++ b/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/Xcode/libusb.xcodeproj/project.pbxproj b/Xcode/libusb.xcodeproj/project.pbxproj new file mode 100644 index 0000000..25dfd64 --- /dev/null +++ b/Xcode/libusb.xcodeproj/project.pbxproj @@ -0,0 +1,959 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 45; + objects = { + +/* Begin PBXAggregateTarget section */ + 008FC0321628BC9400BC5BE2 /* all */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 008FC0331628BC9400BC5BE2 /* Build configuration list for PBXAggregateTarget "all" */; + buildPhases = ( + ); + dependencies = ( + 006AD4281C8C5BBC007F8C6A /* PBXTargetDependency */, + 008FC0371628BC9A00BC5BE2 /* PBXTargetDependency */, + 008FC0391628BC9A00BC5BE2 /* PBXTargetDependency */, + 008FC03B1628BC9A00BC5BE2 /* PBXTargetDependency */, + 008FC03D1628BC9A00BC5BE2 /* PBXTargetDependency */, + 008FC03F1628BC9A00BC5BE2 /* PBXTargetDependency */, + 008FC0411628BC9A00BC5BE2 /* PBXTargetDependency */, + ); + name = all; + productName = all; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 006AD4241C8C5AAE007F8C6A /* hotplugtest.c in Sources */ = {isa = PBXBuildFile; fileRef = 006AD4231C8C5AAE007F8C6A /* hotplugtest.c */; }; + 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 */; }; + 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 */; }; + 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 */; }; + 008FBF971628B7E800BC5BE2 /* poll_posix.h in Headers */ = {isa = PBXBuildFile; fileRef = 008FBF711628B7E800BC5BE2 /* poll_posix.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 */; }; + 008FBFF01628BA3A00BC5BE2 /* libusb-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 008FBF311628B79300BC5BE2 /* libusb-1.0.0.dylib */; }; + 008FBFFF1628BB9600BC5BE2 /* dpfp.c in Sources */ = {isa = PBXBuildFile; fileRef = 008FBFD71628BA0E00BC5BE2 /* dpfp.c */; }; + 008FC0001628BBCD00BC5BE2 /* libusb-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 008FBF311628B79300BC5BE2 /* libusb-1.0.0.dylib */; }; + 008FC00F1628BBE400BC5BE2 /* dpfp_threaded.c in Sources */ = {isa = PBXBuildFile; fileRef = 008FBFDB1628BA0E00BC5BE2 /* dpfp_threaded.c */; }; + 008FC0101628BBE900BC5BE2 /* libusb-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 008FBF311628B79300BC5BE2 /* libusb-1.0.0.dylib */; }; + 008FC01F1628BC1500BC5BE2 /* fxload.c in Sources */ = {isa = PBXBuildFile; fileRef = 008FBFE11628BA0E00BC5BE2 /* fxload.c */; }; + 008FC0201628BC1B00BC5BE2 /* libusb-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 008FBF311628B79300BC5BE2 /* libusb-1.0.0.dylib */; }; + 008FC0211628BC5200BC5BE2 /* ezusb.c in Sources */ = {isa = PBXBuildFile; fileRef = 008FBFDC1628BA0E00BC5BE2 /* ezusb.c */; }; + 008FC0301628BC7400BC5BE2 /* listdevs.c in Sources */ = {isa = PBXBuildFile; fileRef = 008FBFE71628BA0E00BC5BE2 /* listdevs.c */; }; + 008FC0311628BC7800BC5BE2 /* libusb-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 008FBF311628B79300BC5BE2 /* libusb-1.0.0.dylib */; }; + 1438D77A17A2ED9F00166101 /* hotplug.c in Sources */ = {isa = PBXBuildFile; fileRef = 1438D77817A2ED9F00166101 /* hotplug.c */; }; + 1438D77B17A2ED9F00166101 /* hotplug.h in Headers */ = {isa = PBXBuildFile; fileRef = 1438D77917A2ED9F00166101 /* hotplug.h */; }; + 1438D77D17A2EDCD00166101 /* poll_posix.c in Sources */ = {isa = PBXBuildFile; fileRef = 1438D77C17A2EDCD00166101 /* poll_posix.c */; }; + 1438D77F17A2F0EA00166101 /* strerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 1438D77E17A2F0EA00166101 /* strerror.c */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 006AD4271C8C5BBC007F8C6A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 008FBF281628B79300BC5BE2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 006AD41B1C8C5A90007F8C6A; + remoteInfo = hotplugtest; + }; + 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; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 006AD41A1C8C5A90007F8C6A /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; + 008FBFBB1628B9FE00BC5BE2 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; + 008FBFF31628BB8B00BC5BE2 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; + 008FC0031628BBDB00BC5BE2 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; + 008FC0131628BC0300BC5BE2 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; + 008FC0241628BC6B00BC5BE2 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase 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; }; + 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; }; + 008FBF711628B7E800BC5BE2 /* poll_posix.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = poll_posix.h; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 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; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = dpfp.c; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBFDB1628BA0E00BC5BE2 /* dpfp_threaded.c */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = dpfp_threaded.c; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBFDC1628BA0E00BC5BE2 /* ezusb.c */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = ezusb.c; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBFDD1628BA0E00BC5BE2 /* ezusb.h */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = ezusb.h; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBFE11628BA0E00BC5BE2 /* fxload.c */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = fxload.c; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBFE71628BA0E00BC5BE2 /* listdevs.c */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = listdevs.c; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 008FBFED1628BA0E00BC5BE2 /* xusb.c */ = {isa = PBXFileReference; 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; }; + 1438D77917A2ED9F00166101 /* hotplug.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = hotplug.h; sourceTree = ""; tabWidth = 4; usesTabs = 1; }; + 1438D77C17A2EDCD00166101 /* poll_posix.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.c; path = poll_posix.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; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 006AD4191C8C5A90007F8C6A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 006AD4261C8C5AD9007F8C6A /* 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 */, + 008FBFA71628B87000BC5BE2 /* CoreFoundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008FBFBA1628B9FE00BC5BE2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 008FBFF01628BA3A00BC5BE2 /* libusb-1.0.0.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008FBFF21628BB8B00BC5BE2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 008FC0001628BBCD00BC5BE2 /* libusb-1.0.0.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008FC0021628BBDB00BC5BE2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 008FC0101628BBE900BC5BE2 /* libusb-1.0.0.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008FC0121628BC0300BC5BE2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 008FC0201628BC1B00BC5BE2 /* libusb-1.0.0.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008FC0231628BC6B00BC5BE2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 008FC0311628BC7800BC5BE2 /* libusb-1.0.0.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 008FBF261628B79300BC5BE2 = { + isa = PBXGroup; + children = ( + 1443EE8316417DE3007E0579 /* xcconfig */, + 008FBFA41628B84200BC5BE2 /* config.h */, + 008FBF3B1628B7E800BC5BE2 /* libusb */, + 008FBFC81628BA0E00BC5BE2 /* examples */, + 1443EE8A16419057007E0579 /* Apple */, + 008FBF321628B79300BC5BE2 /* Products */, + ); + sourceTree = ""; + }; + 008FBF321628B79300BC5BE2 /* Products */ = { + isa = PBXGroup; + children = ( + 008FBF311628B79300BC5BE2 /* libusb-1.0.0.dylib */, + 008FBFBD1628B9FE00BC5BE2 /* xusb */, + 008FBFF51628BB8B00BC5BE2 /* dpfp */, + 008FC0051628BBDB00BC5BE2 /* dpfp_threaded */, + 008FC0151628BC0300BC5BE2 /* fxload */, + 008FC0261628BC6B00BC5BE2 /* listdevs */, + 006AD41C1C8C5A90007F8C6A /* hotplugtest */, + ); + name = Products; + sourceTree = ""; + }; + 008FBF3B1628B7E800BC5BE2 /* libusb */ = { + isa = PBXGroup; + children = ( + 008FBF541628B7E800BC5BE2 /* core.c */, + 008FBF551628B7E800BC5BE2 /* descriptor.c */, + 1438D77817A2ED9F00166101 /* hotplug.c */, + 1438D77917A2ED9F00166101 /* hotplug.h */, + 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 */, + 1438D77C17A2EDCD00166101 /* poll_posix.c */, + 008FBF711628B7E800BC5BE2 /* poll_posix.h */, + 008FBF741628B7E800BC5BE2 /* threads_posix.c */, + 008FBF751628B7E800BC5BE2 /* threads_posix.h */, + ); + path = os; + sourceTree = ""; + }; + 008FBFC81628BA0E00BC5BE2 /* examples */ = { + isa = PBXGroup; + children = ( + 008FBFDB1628BA0E00BC5BE2 /* dpfp_threaded.c */, + 008FBFD71628BA0E00BC5BE2 /* dpfp.c */, + 008FBFDC1628BA0E00BC5BE2 /* ezusb.c */, + 008FBFDD1628BA0E00BC5BE2 /* ezusb.h */, + 008FBFE11628BA0E00BC5BE2 /* fxload.c */, + 006AD4231C8C5AAE007F8C6A /* hotplugtest.c */, + 008FBFE71628BA0E00BC5BE2 /* listdevs.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 */, + ); + name = Apple; + path = ../libusb; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 008FBF2F1628B79300BC5BE2 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 008FBF891628B7E800BC5BE2 /* libusb.h in Headers */, + 008FBF901628B7E800BC5BE2 /* libusbi.h in Headers */, + 008FBF931628B7E800BC5BE2 /* darwin_usb.h in Headers */, + 008FBF971628B7E800BC5BE2 /* poll_posix.h in Headers */, + 008FBF9B1628B7E800BC5BE2 /* threads_posix.h in Headers */, + 008FBFA11628B7E800BC5BE2 /* version.h in Headers */, + 008FBFA21628B7E800BC5BE2 /* version_nano.h in Headers */, + 008FBFA51628B84200BC5BE2 /* config.h in Headers */, + 1438D77B17A2ED9F00166101 /* hotplug.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 006AD41B1C8C5A90007F8C6A /* hotplugtest */ = { + isa = PBXNativeTarget; + buildConfigurationList = 006AD4221C8C5A90007F8C6A /* Build configuration list for PBXNativeTarget "hotplugtest" */; + buildPhases = ( + 006AD4181C8C5A90007F8C6A /* Sources */, + 006AD4191C8C5A90007F8C6A /* Frameworks */, + 006AD41A1C8C5A90007F8C6A /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = hotplugtest; + productName = hotplugtest; + productReference = 006AD41C1C8C5A90007F8C6A /* hotplugtest */; + productType = "com.apple.product-type.tool"; + }; + 008FBF301628B79300BC5BE2 /* libusb */ = { + isa = PBXNativeTarget; + buildConfigurationList = 008FBF351628B79300BC5BE2 /* Build configuration list for PBXNativeTarget "libusb" */; + buildPhases = ( + 008FBF2D1628B79300BC5BE2 /* Sources */, + 008FBF2E1628B79300BC5BE2 /* Frameworks */, + 008FBF2F1628B79300BC5BE2 /* Headers */, + ); + 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 = ( + 008FBFB91628B9FE00BC5BE2 /* Sources */, + 008FBFBA1628B9FE00BC5BE2 /* Frameworks */, + 008FBFBB1628B9FE00BC5BE2 /* CopyFiles */, + ); + 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 = ( + 008FBFF11628BB8B00BC5BE2 /* Sources */, + 008FBFF21628BB8B00BC5BE2 /* Frameworks */, + 008FBFF31628BB8B00BC5BE2 /* CopyFiles */, + ); + 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 = ( + 008FC0011628BBDB00BC5BE2 /* Sources */, + 008FC0021628BBDB00BC5BE2 /* Frameworks */, + 008FC0031628BBDB00BC5BE2 /* CopyFiles */, + ); + 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 = ( + 008FC0111628BC0300BC5BE2 /* Sources */, + 008FC0121628BC0300BC5BE2 /* Frameworks */, + 008FC0131628BC0300BC5BE2 /* CopyFiles */, + ); + 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 = ( + 008FC0221628BC6B00BC5BE2 /* Sources */, + 008FC0231628BC6B00BC5BE2 /* Frameworks */, + 008FC0241628BC6B00BC5BE2 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + 1443EE8C1641926D007E0579 /* PBXTargetDependency */, + ); + name = listdevs; + productName = listdevs; + productReference = 008FC0261628BC6B00BC5BE2 /* listdevs */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 008FBF281628B79300BC5BE2 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0450; + ORGANIZATIONNAME = libusb; + TargetAttributes = { + 006AD41B1C8C5A90007F8C6A = { + CreatedOnToolsVersion = 7.2.1; + }; + }; + }; + buildConfigurationList = 008FBF2B1628B79300BC5BE2 /* Build configuration list for PBXProject "libusb" */; + compatibilityVersion = "Xcode 3.1"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 008FBF261628B79300BC5BE2; + productRefGroup = 008FBF321628B79300BC5BE2 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 008FBF301628B79300BC5BE2 /* libusb */, + 008FBFBC1628B9FE00BC5BE2 /* xusb */, + 008FBFF41628BB8B00BC5BE2 /* dpfp */, + 008FC0041628BBDB00BC5BE2 /* dpfp_threaded */, + 008FC0141628BC0300BC5BE2 /* fxload */, + 008FC0251628BC6B00BC5BE2 /* listdevs */, + 006AD41B1C8C5A90007F8C6A /* hotplugtest */, + 008FC0321628BC9400BC5BE2 /* all */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 006AD4181C8C5A90007F8C6A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 006AD4251C8C5AC4007F8C6A /* hotplugtest.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 008FBF2D1628B79300BC5BE2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 008FBF861628B7E800BC5BE2 /* core.c in Sources */, + 008FBF871628B7E800BC5BE2 /* descriptor.c in Sources */, + 008FBF881628B7E800BC5BE2 /* io.c in Sources */, + 008FBF921628B7E800BC5BE2 /* darwin_usb.c in Sources */, + 008FBF9A1628B7E800BC5BE2 /* threads_posix.c in Sources */, + 008FBFA01628B7E800BC5BE2 /* sync.c in Sources */, + 1438D77A17A2ED9F00166101 /* hotplug.c in Sources */, + 1438D77D17A2EDCD00166101 /* poll_posix.c in Sources */, + 1438D77F17A2F0EA00166101 /* strerror.c in Sources */, + 006AD4241C8C5AAE007F8C6A /* hotplugtest.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 = ( + 008FC00F1628BBE400BC5BE2 /* dpfp_threaded.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; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 006AD4281C8C5BBC007F8C6A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 006AD41B1C8C5A90007F8C6A /* hotplugtest */; + targetProxy = 006AD4271C8C5BBC007F8C6A /* 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 */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 006AD4201C8C5A90007F8C6A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8516417E63007E0579 /* debug.xcconfig */; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 006AD4211C8C5A90007F8C6A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8816417E63007E0579 /* release.xcconfig */; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 008FBF331628B79300BC5BE2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8516417E63007E0579 /* debug.xcconfig */; + buildSettings = { + }; + name = Debug; + }; + 008FBF341628B79300BC5BE2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8816417E63007E0579 /* release.xcconfig */; + buildSettings = { + }; + name = Release; + }; + 008FBF361628B79300BC5BE2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8616417E63007E0579 /* libusb_debug.xcconfig */; + buildSettings = { + }; + name = Debug; + }; + 008FBF371628B79300BC5BE2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8916417EA6007E0579 /* libusb_release.xcconfig */; + buildSettings = { + }; + name = Release; + }; + 008FBFC41628B9FE00BC5BE2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8516417E63007E0579 /* debug.xcconfig */; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 008FBFC51628B9FE00BC5BE2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8816417E63007E0579 /* release.xcconfig */; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 008FBFFD1628BB8C00BC5BE2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8516417E63007E0579 /* debug.xcconfig */; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 008FBFFE1628BB8C00BC5BE2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8816417E63007E0579 /* release.xcconfig */; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 008FC00D1628BBDB00BC5BE2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8516417E63007E0579 /* debug.xcconfig */; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 008FC00E1628BBDB00BC5BE2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8816417E63007E0579 /* release.xcconfig */; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 008FC01D1628BC0300BC5BE2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8516417E63007E0579 /* debug.xcconfig */; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 008FC01E1628BC0300BC5BE2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8816417E63007E0579 /* release.xcconfig */; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 008FC02E1628BC6B00BC5BE2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8516417E63007E0579 /* debug.xcconfig */; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 008FC02F1628BC6B00BC5BE2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1443EE8816417E63007E0579 /* release.xcconfig */; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 008FC0341628BC9400BC5BE2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 008FC0351628BC9400BC5BE2 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + 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; + }; + 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; + }; +/* End XCConfigurationList section */ + }; + rootObject = 008FBF281628B79300BC5BE2 /* Project object */; +} diff --git a/Xcode/libusb_debug.xcconfig b/Xcode/libusb_debug.xcconfig new file mode 100644 index 0000000..11bc4c3 --- /dev/null +++ b/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/Xcode/libusb_release.xcconfig b/Xcode/libusb_release.xcconfig new file mode 100644 index 0000000..3bd47bb --- /dev/null +++ b/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/Xcode/release.xcconfig b/Xcode/release.xcconfig new file mode 100644 index 0000000..ead284a --- /dev/null +++ b/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/android/README b/android/README new file mode 100644 index 0000000..32024ef --- /dev/null +++ b/android/README @@ -0,0 +1,116 @@ +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. + + +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 + +Runtime Permissions: +-------------------- + +The default system configuration on most Android device will not allow +access to USB devices. There are several options for changing this. + +If you have control of the system image then you can modify the +ueventd.rc used in the image to change the permissions on +/dev/bus/usb/*/*. If using this approach then it is advisable to +create a new Android permission to protect access to these files. +It is not advisable to give all applications read and write permissions +to these files. + +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. diff --git a/android/config.h b/android/config.h new file mode 100644 index 0000000..0dd35e2 --- /dev/null +++ b/android/config.h @@ -0,0 +1,75 @@ +/* + * 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 + */ + +/* Start with debug message logging enabled */ +/* #undef ENABLE_DEBUG_LOGGING */ + +/* Message logging */ +#define ENABLE_LOGGING + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Linux backend */ +#define OS_LINUX 1 + +/* Enable output to system log */ +#define USE_SYSTEM_LOGGING_FACILITY 1 + +/* type of second poll() argument */ +#define POLL_NFDS_TYPE nfds_t + +/* Use POSIX Threads */ +#define THREADS_POSIX 1 + +/* Default visibility */ +#define DEFAULT_VISIBILITY __attribute__((visibility("default"))) + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_POLL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LINUX_FILTER_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LINUX_NETLINK_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_ASM_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SOCKET_H 1 diff --git a/android/jni/Android.mk b/android/jni/Android.mk new file mode 100644 index 0000000..6a32b50 --- /dev/null +++ b/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/android/jni/Application.mk b/android/jni/Application.mk new file mode 100644 index 0000000..f972a9e --- /dev/null +++ b/android/jni/Application.mk @@ -0,0 +1,24 @@ +# 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 + +# 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/android/jni/examples.mk b/android/jni/examples.mk new file mode 100644 index 0000000..05609cc --- /dev/null +++ b/android/jni/examples.mk @@ -0,0 +1,134 @@ +# 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)/../.. + +# listdevs + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/examples/listdevs.c + +LOCAL_C_INCLUDES += \ + $(LIBUSB_ROOT_ABS) + +LOCAL_SHARED_LIBRARIES += libusb1.0 + +LOCAL_MODULE:= listdevs + +include $(BUILD_EXECUTABLE) + +# xusb + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/examples/xusb.c + +LOCAL_C_INCLUDES += \ + $(LIBUSB_ROOT_ABS) + +LOCAL_SHARED_LIBRARIES += libusb1.0 + +LOCAL_MODULE:= xusb + +include $(BUILD_EXECUTABLE) + +# hotplugtest + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/examples/hotplugtest.c + +LOCAL_C_INCLUDES += \ + $(LIBUSB_ROOT_ABS) + +LOCAL_SHARED_LIBRARIES += libusb1.0 + +LOCAL_MODULE:= hotplugtest + +include $(BUILD_EXECUTABLE) + +# fxload + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/examples/fxload.c \ + $(LIBUSB_ROOT_REL)/examples/ezusb.c + +LOCAL_C_INCLUDES += \ + $(LIBUSB_ROOT_ABS) + +LOCAL_SHARED_LIBRARIES += libusb1.0 + +LOCAL_MODULE:= fxload + +include $(BUILD_EXECUTABLE) + +# sam3u_benchmake + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/examples/sam3u_benchmark.c + +LOCAL_C_INCLUDES += \ + $(LIBUSB_ROOT_ABS) + +LOCAL_SHARED_LIBRARIES += libusb1.0 + +LOCAL_MODULE:= sam3u_benchmark + +include $(BUILD_EXECUTABLE) + +# dpfp + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/examples/dpfp.c + +LOCAL_C_INCLUDES += \ + $(LIBUSB_ROOT_ABS) + +LOCAL_SHARED_LIBRARIES += libusb1.0 + +LOCAL_MODULE:= dpfp + +include $(BUILD_EXECUTABLE) + +# dpfp_threaded + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/examples/dpfp_threaded.c + +LOCAL_C_INCLUDES += \ + $(LIBUSB_ROOT_ABS) + +LOCAL_SHARED_LIBRARIES += libusb1.0 + +LOCAL_MODULE:= dpfp_threaded + +include $(BUILD_EXECUTABLE) diff --git a/android/jni/libusb.mk b/android/jni/libusb.mk new file mode 100644 index 0000000..f4896b2 --- /dev/null +++ b/android/jni/libusb.mk @@ -0,0 +1,54 @@ +# 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) + +LIBUSB_ROOT_REL:= ../.. +LIBUSB_ROOT_ABS:= $(LOCAL_PATH)/../.. + +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/poll_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_LDLIBS := -llog + +LOCAL_MODULE := libusb1.0 + +include $(BUILD_SHARED_LIBRARY) diff --git a/android/jni/tests.mk b/android/jni/tests.mk new file mode 100644 index 0000000..93d5516 --- /dev/null +++ b/android/jni/tests.mk @@ -0,0 +1,56 @@ +# 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)/../.. + +# testlib + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/tests/testlib.c + +LOCAL_C_INCLUDES += \ + $(LIBUSB_ROOT_ABS)/tests + +LOCAL_EXPORT_C_INCLUDES := \ + $(LIBUSB_ROOT_ABS)/tests + +LOCAL_MODULE := testlib + +include $(BUILD_STATIC_LIBRARY) + + +# stress + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + $(LIBUSB_ROOT_REL)/tests/stress.c + +LOCAL_C_INCLUDES += \ + $(LIBUSB_ROOT_ABS) + +LOCAL_SHARED_LIBRARIES += libusb1.0 +LOCAL_STATIC_LIBRARIES += testlib + +LOCAL_MODULE:= stress + +include $(BUILD_EXECUTABLE) diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..0e6113e --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,41 @@ +version: 1.0.{build} +configuration: +- Debug +- Release +platform: +- x64 +- Win32 +build: + project: msvc\libusb_2013.sln + parallel: true + verbosity: detailed +environment: + matrix: + - libusb_2015: msvc\libusb_2015.sln + libusb_2013: msvc\libusb_2013.sln + libusb_2012: msvc\libusb_2012.sln + libusb_2010: msvc\libusb_2010.sln +install: + +- cmd: >- + rem Copying libusb to cygwin home directory + + xcopy /S C:\projects\libusb C:\cygwin\home\appveyor\ + + rem Copying libusb to MinGW home directory + + xcopy /S C:\projects\libusb C:\msys64\home\appveyor\ + +build_script: +- cmd: >- + msbuild %libusb_2015% /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" + + msbuild %libusb_2013% /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" + + msbuild %libusb_2012% /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" + + msvc/appveyor.bat + + appveyor_minGW.bat + + appveyor_cygwin.bat diff --git a/appveyor_cygwin.bat b/appveyor_cygwin.bat new file mode 100644 index 0000000..a6fed52 --- /dev/null +++ b/appveyor_cygwin.bat @@ -0,0 +1,11 @@ +echo on +SetLocal EnableDelayedExpansion + +if [%Configuration%] NEQ [Release] exit 0 +if [%Platform%] NEQ [Win32] exit 0 + +C:\cygwin\bin\bash -e -l -c "./bootstrap.sh" || exit /B +C:\cygwin\bin\bash -e -l -c "mkdir build-Win32-cygwin" || exit /B +C:\cygwin\bin\bash -e -l -c "cd build-Win32-cygwin && ../configure --enable-examples-build --enable-tests-build" || exit /B +C:\cygwin\bin\bash -e -l -c "cd build-Win32-cygwin && make -j4" || exit /B +C:\cygwin\bin\bash -e -l -c "cd build-Win32-cygwin && make install" || exit /B diff --git a/appveyor_minGW.bat b/appveyor_minGW.bat new file mode 100644 index 0000000..bdb4750 --- /dev/null +++ b/appveyor_minGW.bat @@ -0,0 +1,19 @@ +echo on +SetLocal EnableDelayedExpansion + +if [%Configuration%] NEQ [Release] exit 0 + +if [%Platform%] NEQ [x64] goto Win32 +C:\msys64\usr\bin\bash -e -l -c "./bootstrap.sh" || exit /B +C:\msys64\usr\bin\bash -e -l -c "mkdir build-x64" || exit /B +C:\msys64\usr\bin\bash -e -l -c "cd build-x64 && ../configure --prefix=/mingw64 --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32" || exit /B +C:\msys64\usr\bin\bash -e -l -c "cd build-x64 && make -j4" || exit /B +C:\msys64\usr\bin\bash -e -l -c "cd build-x64 && make install" || exit /B + +:Win32 +if [%Platform%] NEQ [Win32] exit 0 +C:\msys64\usr\bin\bash -e -l -c "./bootstrap.sh" || exit /B +C:\msys64\usr\bin\bash -e -l -c "mkdir build-Win32" || exit /B +C:\msys64\usr\bin\bash -e -l -c "cd build-Win32 && ../configure --prefix=/mingw32 --build=i686-w64-mingw32 --host=i686-w64-mingw32" || exit /B +C:\msys64\usr\bin\bash -e -l -c "cd build-Win32 && make -j4" || exit /B +C:\msys64\usr\bin\bash -e -l -c "cd build-Win32 && make install" || exit /B diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..24f39ee --- /dev/null +++ b/autogen.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +set -e + +./bootstrap.sh +if test -z "$NOCONFIGURE"; then + exec ./configure --enable-examples-build --enable-tests-build "$@" +fi diff --git a/bootstrap.sh b/bootstrap.sh new file mode 100755 index 0000000..dc56539 --- /dev/null +++ b/bootstrap.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +if ! test -d m4 ; then + mkdir m4 +fi +autoreconf -ivf || exit 1 diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..da8a158 --- /dev/null +++ b/configure.ac @@ -0,0 +1,332 @@ +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_INIT([libusb],[LIBUSB_MAJOR[.]LIBUSB_MINOR[.]LIBUSB_MICRO[]LIBUSB_RC],[libusb-devel@lists.sourceforge.net],[libusb],[http://libusb.info]) + +# Library versioning +# These numbers should be tweaked on every release. Read carefully: +# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html +# http://sourceware.org/autobook/autobook/autobook_91.html +lt_current=2 +lt_revision=0 +lt_age=2 +LTLDFLAGS="-version-info ${lt_current}:${lt_revision}:${lt_age}" + +AM_INIT_AUTOMAKE + +AC_CONFIG_SRCDIR([libusb/core.c]) +AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_HEADERS([config.h]) +m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) + +AC_PREREQ([2.69]) +AC_PROG_CC +AC_PROG_CXX +LT_INIT +LT_LANG([Windows Resource]) +AC_C_INLINE +AM_PROG_CC_C_O +AC_DEFINE([_GNU_SOURCE], 1, [Use GNU extensions]) + +LTLDFLAGS="${LTLDFLAGS} -no-undefined" + +AC_MSG_CHECKING([operating system]) + +dnl on linux-android platform, some functions are in different places +case $host in +*-linux-android*) + AC_MSG_RESULT([This is a Linux-Android system]) + is_backend_android=yes + ;; +*) + is_backend_android=no +esac + +case $host in +*-linux* | *-uclinux*) + AC_MSG_RESULT([Linux]) + backend=linux + threads=posix + ;; +*-darwin*) + AC_MSG_RESULT([Darwin/Mac OS X]) + backend=darwin + threads=posix + ;; +*-openbsd*) + AC_MSG_RESULT([OpenBSD]) + backend=openbsd + threads=posix + ;; +*-netbsd*) + AC_MSG_RESULT([NetBSD]) + backend=netbsd + threads=posix + ;; +*-mingw* | *msys*) + AC_MSG_RESULT([Windows]) + backend=windows + threads=windows + create_import_lib=yes + AM_CFLAGS="${AM_CFLAGS} -fno-omit-frame-pointer" + ;; +*-cygwin*) + AC_MSG_RESULT([Cygwin (using Windows backend)]) + backend=windows + threads=posix + ;; +*-haiku*) + AC_MSG_RESULT([Haiku]) + backend=haiku + threads=posix + ;; +*-solaris*) + AC_MSG_RESULT([SunOS]) + backend=sunos + threads=posix + ;; +*) + AC_MSG_ERROR([unsupported operating system $host]) +esac + +case $backend in +linux) + AC_DEFINE(OS_LINUX, 1, [Linux backend]) + AC_SUBST(OS_LINUX) + AC_SEARCH_LIBS([clock_gettime], [rt], [], [], [-pthread]) + AC_ARG_ENABLE([udev], + [AC_HELP_STRING([--enable-udev], [use udev for device enumeration and hotplug support (recommended) [default=yes]])], + [], [enable_udev=yes]) + if test "x$enable_udev" = xyes ; then + # system has udev. use it or fail! + AC_CHECK_HEADERS([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])]) + AC_DEFINE(USE_UDEV, 1, [Use udev for device enumeration/hotplug]) + else + AC_CHECK_HEADERS([asm/types.h], [], []) + AC_CHECK_HEADERS([sys/socket.h linux/netlink.h], [], [AC_MSG_ERROR([Linux netlink headers not found])], [ +#ifdef HAVE_ASM_TYPES_H +#include +#endif +#include +]) + fi + AC_SUBST(USE_UDEV) + + if test "x$is_backend_android" != xyes; then + THREAD_CFLAGS="-pthread" + LIBS="${LIBS} -pthread" + fi + + AC_CHECK_HEADERS([poll.h]) + AC_DEFINE([POLL_NFDS_TYPE],[nfds_t],[type of second poll() argument]) + ;; +darwin) + AC_DEFINE(OS_DARWIN, 1, [Darwin backend]) + AC_SUBST(OS_DARWIN) + LIBS="-lobjc -Wl,-framework,IOKit -Wl,-framework,CoreFoundation" + LTLDFLAGS="${LTLDFLAGS} -Wl,-prebind" + AC_CHECK_HEADERS([poll.h]) + AC_CHECK_TYPE([nfds_t], + [AC_DEFINE([POLL_NFDS_TYPE],[nfds_t],[type of second poll() argument])], + [AC_DEFINE([POLL_NFDS_TYPE],[unsigned int],[type of second poll() argument])], + [#include ]) + ;; +openbsd) + AC_DEFINE(OS_OPENBSD, 1, [OpenBSD backend]) + AC_SUBST(OS_OPENBSD) + THREAD_CFLAGS="-pthread" + LIBS="-pthread" + AC_CHECK_HEADERS([poll.h]) + AC_DEFINE([POLL_NFDS_TYPE],[nfds_t],[type of second poll() argument]) + ;; +sunos) + AC_DEFINE(OS_SUNOS, 1, [SunOS backend]) + AC_SUBST(OS_SUNOS) + THREAD_CFLAGS="-pthread" + LIBS="-pthread -ldevinfo" + AC_CHECK_HEADERS([poll.h]) + AC_DEFINE([POLL_NFDS_TYPE],[nfds_t],[type of second poll() argument]) + ;; +netbsd) + AC_DEFINE(OS_NETBSD, 1, [NetBSD backend]) + AC_SUBST(OS_NETBSD) + THREAD_CFLAGS="-pthread" + LIBS="-pthread" + AC_CHECK_HEADERS([poll.h]) + AC_DEFINE([POLL_NFDS_TYPE],[nfds_t],[type of second poll() argument]) + ;; +windows) + AC_DEFINE(OS_WINDOWS, 1, [Windows backend]) + AC_SUBST(OS_WINDOWS) + LIBS="" + LTLDFLAGS="${LTLDFLAGS} -avoid-version -Wl,--add-stdcall-alias" + AC_DEFINE([POLL_NFDS_TYPE],[unsigned int],[type of second poll() argument]) + AC_DEFINE([WINVER], 0x0501, [Oldest Windows version supported]) + AC_DEFINE([_WIN32_WINNT], 0x0501, [Oldest Windows version supported]) + ;; +haiku) + AC_DEFINE(OS_HAIKU, 1, [Haiku backend]) + AC_SUBST(OS_HAIKU) + LIBS="${LIBS} -lbe" + AC_CHECK_HEADERS([poll.h]) + AC_DEFINE([POLL_NFDS_TYPE],[nfds_t],[type of second poll() argument]) + ;; +esac + +AC_SUBST(LIBS) + +AM_CONDITIONAL(OS_LINUX, test "x$backend" = xlinux) +AM_CONDITIONAL(OS_DARWIN, test "x$backend" = xdarwin) +AM_CONDITIONAL(OS_OPENBSD, test "x$backend" = xopenbsd) +AM_CONDITIONAL(OS_SUNOS, test "x$backend" = xsunos) +AM_CONDITIONAL(OS_NETBSD, test "x$backend" = xnetbsd) +AM_CONDITIONAL(OS_WINDOWS, test "x$backend" = xwindows) +AM_CONDITIONAL(OS_HAIKU, test "x$backend" = xhaiku) +AM_CONDITIONAL(THREADS_POSIX, test "x$threads" = xposix) +AM_CONDITIONAL(CREATE_IMPORT_LIB, test "x$create_import_lib" = xyes) +AM_CONDITIONAL(USE_UDEV, test "x$enable_udev" = xyes) +if test "x$threads" = xposix; then + AC_DEFINE(THREADS_POSIX, 1, [Use POSIX Threads]) +fi + +# timerfd +AC_CHECK_HEADER([sys/timerfd.h], [timerfd_h=1], [timerfd_h=0]) +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" = xyes -a "x$timerfd_h" = x0; then + AC_MSG_ERROR([timerfd header not available; glibc 2.9+ required]) +fi + +AC_CHECK_DECLS([TFD_NONBLOCK, TFD_CLOEXEC], [tfd_hdr_ok=yes], [tfd_hdr_ok=no], [#include ]) +if test "x$use_timerfd" = xyes -a "x$tfd_hdr_ok" = xno; then + AC_MSG_ERROR([timerfd header not usable; glibc 2.9+ required]) +fi + +AC_MSG_CHECKING([whether to use timerfd for timing]) +if test "x$use_timerfd" = xno; then + AC_MSG_RESULT([no (disabled by user)]) +else + if test "x$timerfd_h" = x1 -a "x$tfd_hdr_ok" = xyes; then + AC_MSG_RESULT([yes]) + AC_DEFINE(USBI_TIMERFD_AVAILABLE, 1, [timerfd headers available]) + else + AC_MSG_RESULT([no (header not available)]) + fi +fi + +AC_CHECK_FUNCS([pipe2]) +AC_CHECK_TYPES([struct timespec]) + +# 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, [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, [Start with debug message logging enabled]) +fi + +AC_ARG_ENABLE([system-log], [AS_HELP_STRING([--enable-system-log], + [output logging messages to system wide 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, [Enable output to system log]) + + # Check if syslog is available in standard C library + AC_CHECK_HEADERS(syslog.h) + AC_CHECK_FUNC([syslog], [have_syslog=yes], [have_syslog=no]) + if test "x$have_syslog" != xno; then + AC_DEFINE([HAVE_SYSLOG_FUNC], 1, [syslog() function available]) + fi +fi + +# Examples build +AC_ARG_ENABLE([examples-build], [AS_HELP_STRING([--enable-examples-build], + [build example applications [default=no]])], + [build_examples=$enableval], + [build_examples=no]) +AM_CONDITIONAL(BUILD_EXAMPLES, test "x$build_examples" != xno) + +# 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_TESTS, test "x$build_tests" != xno) + +# headers not available on all platforms but required on others +AC_CHECK_HEADERS([sys/time.h]) + +# sigaction not available on MinGW +AC_CHECK_FUNC([sigaction], [have_sigaction=yes], [have_sigaction=no]) +AM_CONDITIONAL(HAVE_SIGACTION, test "x$have_sigaction" = xyes) + +# check for -fvisibility=hidden compiler support (GCC >= 3.4) +saved_cflags="$CFLAGS" +# -Werror required for cygwin +CFLAGS="$CFLAGS -Werror -fvisibility=hidden" +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], + [VISIBILITY_CFLAGS="-fvisibility=hidden" + AC_DEFINE([DEFAULT_VISIBILITY], [__attribute__((visibility("default")))], [Default visibility])], + [VISIBILITY_CFLAGS="" + AC_DEFINE([DEFAULT_VISIBILITY], [], [Default visibility])], + ]) +CFLAGS="$saved_cflags" + +# check for -Wno-pointer-sign compiler support (GCC >= 4) +saved_cflags="$CFLAGS" +CFLAGS="$CFLAGS -Wno-pointer-sign" +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], + nopointersign_cflags="-Wno-pointer-sign", nopointersign_cflags="") +CFLAGS="$saved_cflags" + +# check for -std=gnu99 compiler support +saved_cflags="$CFLAGS" +CFLAGS="-std=gnu99" +AC_MSG_CHECKING([whether CC supports -std=gnu99]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], + [AC_MSG_RESULT([yes])] + [AM_CFLAGS="${AM_CFLAGS} -std=gnu99"], + [AC_MSG_RESULT([no])] +) +CFLAGS="$saved_cflags" + +AM_CFLAGS="${AM_CFLAGS} -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration $nopointersign_cflags -Wshadow ${THREAD_CFLAGS} ${VISIBILITY_CFLAGS}" + +AC_SUBST(AM_CFLAGS) +AC_SUBST(LTLDFLAGS) + +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/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..76211f2 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,9 @@ +EXTRA_DIST = doxygen.cfg.in + +docs: doxygen.cfg + doxygen $^ + +docs-upload: docs + ln -s html api-1.0 + scp -r api-1.0 pbatard@web.sourceforge.net:/home/project-web/libusb/htdocs + rm -f api-1.0 diff --git a/doc/doxygen.cfg.in b/doc/doxygen.cfg.in new file mode 100644 index 0000000..d26ae33 --- /dev/null +++ b/doc/doxygen.cfg.in @@ -0,0 +1,2334 @@ +# Doxyfile 1.8.8 + +# 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 config 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 http://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 = + +# 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 = + +# 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 an logo or 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 = 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 + +# 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 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 + +# 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. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# 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 + +# 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, +# C#, C, C++, D, PHP, Objective-C, Python, 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), VHDL. 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. + +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 http://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 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 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: +# http://www.riverbankcomputing.co.uk/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 + +# 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 + +#--------------------------------------------------------------------------- +# 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_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. When 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 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 +# (class|struct|union) 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 + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# 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 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 http://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. +# The default value is: NO. + +WARN_NO_PARAMDOC = 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. +# 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: http://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. 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, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, +# *.qsf, *.as and *.js. + +FILE_PATTERNS = + +# 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/hotplug.h + +# 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. + +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. + +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 +# function 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 http://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 config 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 + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# 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 = html + +# 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 therefor more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra stylesheet files is of importance (e.g. the last +# stylesheet 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 stylesheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://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 NO can help when comparing the output of multiple runs. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = 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: http://developer.apple.com/tools/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 http://developer.apple.com/tools/creatingdocsetswithdoxygen.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: http://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 master .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: http://qt-project.org/doc/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: http://qt-project.org/doc/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: http://qt-project.org/doc/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: http://qt-project.org/doc/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: +# http://qt-project.org/doc/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 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 stylesheets (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 + +# When 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 + +# 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_TRANPARENT 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 + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using prerendered 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/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 http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# 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/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 +# , /