From 4ec59a4b815733d049e01ac2317a263ced3117e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=5B=20Kristjan=20Komlo=C5=A1i=20HomePC=20=5D?= <[ kristjan.komlosi@gmail.com ]> Date: Wed, 21 Dec 2016 18:19:26 +0100 Subject: [PATCH] Initial commit --- CyUSBSerial API Documentation.pdf | 10180 +++++++++++ CyUSBSerial_SDK_Linux/README.txt | 36 + .../doc/CyUSBSerial API Documentation.pdf | 10180 +++++++++++ .../common/header/CyUSBSerial.h | 1842 ++ .../libusb/libusb-1.0.9.tar.bz2 | Bin 0 -> 421971 bytes .../libusb/libusb-1.0.9/libusb-1.0.9/AUTHORS | 45 + .../libusb/libusb-1.0.9/libusb-1.0.9/COPYING | 504 + .../libusb-1.0.9/libusb-1.0.9/ChangeLog | 4377 +++++ .../libusb/libusb-1.0.9/libusb-1.0.9/INSTALL | 234 + .../libusb/libusb-1.0.9/libusb-1.0.9/Makefile | 807 + .../libusb-1.0.9/libusb-1.0.9/Makefile.am | 28 + .../libusb-1.0.9/libusb-1.0.9/Makefile.in | 807 + .../libusb/libusb-1.0.9/libusb-1.0.9/NEWS | 65 + .../libusb/libusb-1.0.9/libusb-1.0.9/PORTING | 95 + .../libusb/libusb-1.0.9/libusb-1.0.9/README | 22 + .../libusb/libusb-1.0.9/libusb-1.0.9/THANKS | 8 + .../libusb/libusb-1.0.9/libusb-1.0.9/TODO | 9 + .../libusb-1.0.9/libusb-1.0.9/aclocal.m4 | 9111 ++++++++++ .../libusb/libusb-1.0.9/libusb-1.0.9/compile | 143 + .../libusb-1.0.9/libusb-1.0.9/config.guess | 1523 ++ .../libusb-1.0.9/libusb-1.0.9/config.h.in | 116 + .../libusb-1.0.9/libusb-1.0.9/config.log | 760 + .../libusb-1.0.9/libusb-1.0.9/config.status | 2284 +++ .../libusb-1.0.9/libusb-1.0.9/config.sub | 1757 ++ .../libusb-1.0.9/libusb-1.0.9/configure | 14148 ++++++++++++++++ .../libusb-1.0.9/libusb-1.0.9/configure.ac | 222 + .../libusb/libusb-1.0.9/libusb-1.0.9/depcomp | 630 + .../libusb-1.0.9/libusb-1.0.9/doc/Makefile | 377 + .../libusb-1.0.9/libusb-1.0.9/doc/Makefile.am | 10 + .../libusb-1.0.9/libusb-1.0.9/doc/Makefile.in | 377 + .../libusb-1.0.9/libusb-1.0.9/doc/doxygen.cfg | 1294 ++ .../libusb-1.0.9/doc/doxygen.cfg.in | 1294 ++ .../libusb-1.0.9/examples/.deps/dpfp.Po | 1 + .../.deps/dpfp_threaded-dpfp_threaded.Po | 1 + .../libusb-1.0.9/examples/.deps/listdevs.Po | 1 + .../libusb-1.0.9/examples/Makefile | 542 + .../libusb-1.0.9/examples/Makefile.am | 21 + .../libusb-1.0.9/examples/Makefile.in | 542 + .../libusb-1.0.9/libusb-1.0.9/examples/dpfp.c | 507 + .../libusb-1.0.9/examples/dpfp_threaded.c | 545 + .../libusb-1.0.9/examples/listdevs.c | 64 + .../libusb-1.0.9/libusb-1.0.9/install-sh | 520 + .../libusb/libusb-1.0.9/libusb-1.0.9/libtool | 9378 ++++++++++ .../libusb-1.0.9/libusb-1.0.9/libusb-1.0.pc | 12 + .../libusb-1.0.9/libusb-1.0.pc.in | 12 + .../libusb/.deps/libusb_1_0_la-core.Plo | 205 + .../libusb/.deps/libusb_1_0_la-darwin_usb.Plo | 1 + .../libusb/.deps/libusb_1_0_la-descriptor.Plo | 181 + .../libusb/.deps/libusb_1_0_la-io.Plo | 219 + .../.deps/libusb_1_0_la-linux_usbfs.Plo | 263 + .../.deps/libusb_1_0_la-openbsd_usb.Plo | 1 + .../.deps/libusb_1_0_la-poll_windows.Plo | 1 + .../libusb/.deps/libusb_1_0_la-sync.Plo | 190 + .../.deps/libusb_1_0_la-threads_posix.Plo | 52 + .../.deps/libusb_1_0_la-threads_windows.Plo | 1 + .../.deps/libusb_1_0_la-windows_usb.Plo | 1 + .../libusb-1.0.9/libusb/.libs/libusb-1.0.a | Bin 0 -> 409430 bytes .../libusb-1.0.9/libusb/.libs/libusb-1.0.la | 1 + .../libusb-1.0.9/libusb/.libs/libusb-1.0.lai | 41 + .../libusb-1.0.9/libusb/.libs/libusb-1.0.so | 1 + .../libusb-1.0.9/libusb/.libs/libusb-1.0.so.0 | 1 + .../libusb/.libs/libusb-1.0.so.0.1.0 | Bin 0 -> 242856 bytes .../libusb/.libs/libusb_1_0_la-core.o | Bin 0 -> 81152 bytes .../libusb/.libs/libusb_1_0_la-descriptor.o | Bin 0 -> 52120 bytes .../libusb/.libs/libusb_1_0_la-io.o | Bin 0 -> 71344 bytes .../libusb/.libs/libusb_1_0_la-linux_usbfs.o | Bin 0 -> 166600 bytes .../libusb/.libs/libusb_1_0_la-sync.o | Bin 0 -> 31888 bytes .../.libs/libusb_1_0_la-threads_posix.o | Bin 0 -> 7472 bytes .../libusb-1.0.9/libusb-1.0.9/libusb/Makefile | 718 + .../libusb-1.0.9/libusb/Makefile.am | 49 + .../libusb-1.0.9/libusb/Makefile.in | 718 + .../libusb-1.0.9/libusb-1.0.9/libusb/core.c | 1875 ++ .../libusb-1.0.9/libusb/descriptor.c | 730 + .../libusb-1.0.9/libusb-1.0.9/libusb/io.c | 2454 +++ .../libusb-1.0.9/libusb/libusb-1.0.def | 120 + .../libusb-1.0.9/libusb/libusb-1.0.la | 41 + .../libusb-1.0.9/libusb/libusb-1.0.rc | 56 + .../libusb-1.0.9/libusb-1.0.9/libusb/libusb.h | 1443 ++ .../libusb-1.0.9/libusb/libusb_1_0_la-core.lo | 12 + .../libusb-1.0.9/libusb/libusb_1_0_la-core.o | Bin 0 -> 80176 bytes .../libusb/libusb_1_0_la-descriptor.lo | 12 + .../libusb/libusb_1_0_la-descriptor.o | Bin 0 -> 51672 bytes .../libusb-1.0.9/libusb/libusb_1_0_la-io.lo | 12 + .../libusb-1.0.9/libusb/libusb_1_0_la-io.o | Bin 0 -> 71112 bytes .../libusb/libusb_1_0_la-linux_usbfs.lo | 12 + .../libusb/libusb_1_0_la-linux_usbfs.o | Bin 0 -> 164400 bytes .../libusb-1.0.9/libusb/libusb_1_0_la-sync.lo | 12 + .../libusb-1.0.9/libusb/libusb_1_0_la-sync.o | Bin 0 -> 31816 bytes .../libusb/libusb_1_0_la-threads_posix.lo | 12 + .../libusb/libusb_1_0_la-threads_posix.o | Bin 0 -> 7408 bytes .../libusb-1.0.9/libusb/libusbi.h | 935 + .../libusb-1.0.9/libusb/os/darwin_usb.c | 1750 ++ .../libusb-1.0.9/libusb/os/darwin_usb.h | 169 + .../libusb-1.0.9/libusb/os/linux_usbfs.c | 2438 +++ .../libusb-1.0.9/libusb/os/linux_usbfs.h | 139 + .../libusb-1.0.9/libusb/os/openbsd_usb.c | 727 + .../libusb-1.0.9/libusb/os/poll_posix.h | 10 + .../libusb-1.0.9/libusb/os/poll_windows.c | 745 + .../libusb-1.0.9/libusb/os/poll_windows.h | 115 + .../libusb-1.0.9/libusb/os/threads_posix.c | 55 + .../libusb-1.0.9/libusb/os/threads_posix.h | 48 + .../libusb-1.0.9/libusb/os/threads_windows.c | 207 + .../libusb-1.0.9/libusb/os/threads_windows.h | 86 + .../libusb-1.0.9/libusb/os/windows_usb.c | 2996 ++++ .../libusb-1.0.9/libusb/os/windows_usb.h | 608 + .../libusb-1.0.9/libusb-1.0.9/libusb/sync.c | 314 + .../libusb-1.0.9/libusb/version.h | 18 + .../libusb-1.0.9/libusb-1.0.9/ltmain.sh | 8745 ++++++++++ .../libusb/libusb-1.0.9/libusb-1.0.9/missing | 376 + .../libusb-1.0.9/libusb-1.0.9/msvc/config.h | 24 + .../libusb-1.0.9/msvc/ddk_build.cmd | 106 + .../libusb-1.0.9/libusb-1.0.9/msvc/inttypes.h | 295 + .../libusb-1.0.9/libusb-1.0.9/msvc/libusb.dsw | 56 + .../libusb-1.0.9/msvc/libusb_dll.dsp | 190 + .../libusb-1.0.9/msvc/libusb_dll.vcproj | 421 + .../libusb-1.0.9/msvc/libusb_dll.vcxproj | 166 + .../msvc/libusb_dll.vcxproj.filters | 69 + .../libusb-1.0.9/msvc/libusb_sources | 36 + .../libusb-1.0.9/msvc/libusb_static.dsp | 170 + .../libusb-1.0.9/msvc/libusb_static.vcproj | 346 + .../libusb-1.0.9/msvc/libusb_static.vcxproj | 150 + .../msvc/libusb_static.vcxproj.filters | 56 + .../libusb-1.0.9/msvc/libusb_vs2005.sln | 61 + .../libusb-1.0.9/msvc/libusb_vs2010.sln | 49 + .../libusb-1.0.9/msvc/listdevs.dsp | 103 + .../libusb-1.0.9/msvc/listdevs.vcproj | 360 + .../libusb-1.0.9/msvc/listdevs.vcxproj | 165 + .../msvc/listdevs.vcxproj.filters | 14 + .../libusb-1.0.9/msvc/listdevs_sources | 19 + .../libusb-1.0.9/libusb-1.0.9/msvc/stdint.h | 256 + .../libusb/libusb-1.0.9/libusb-1.0.9/stamp-h1 | 1 + CyUSBSerial_SDK_Linux/license/license.txt | 504 + .../linux/library/90-cyusb.rules | 5 + .../linux/library/CyUSBCommon.h | 222 + CyUSBSerial_SDK_Linux/linux/library/Makefile | 18 + .../linux/library/README.txt | 29 + CyUSBSerial_SDK_Linux/linux/library/cyi2c.c | 690 + CyUSBSerial_SDK_Linux/linux/library/cyjtag.c | 247 + CyUSBSerial_SDK_Linux/linux/library/cymisc.c | 584 + CyUSBSerial_SDK_Linux/linux/library/cyphdc.c | 130 + CyUSBSerial_SDK_Linux/linux/library/cyspi.c | 644 + CyUSBSerial_SDK_Linux/linux/library/cyuart.c | 755 + CyUSBSerial_SDK_Linux/linux/library/cyusb.c | 630 + .../linux/library/libcyusbserial.so | 1 + .../linux/library/libcyusbserial.so.1 | Bin 0 -> 98840 bytes .../linux/testUtility/90-cyusb.rules | 5 + .../linux/testUtility/CyUSBSerial.sh | 7 + .../linux/testUtility/CyUSBSerialTestUtility | Bin 0 -> 27904 bytes .../linux/testUtility/Makefile | 11 + .../linux/testUtility/README.txt | 137 + .../linux/testUtility/Test_Utility.c | 605 + libcyusbserial-master.zip | Bin 0 -> 94584 bytes libcyusbserial-master/.gitignore | 32 + libcyusbserial-master/.travis.yml | 72 + libcyusbserial-master/CMakeCache.txt | 405 + .../CMakeFiles/3.7.0/CMakeCCompiler.cmake | 68 + .../3.7.0/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 7432 bytes .../CMakeFiles/3.7.0/CMakeSystem.cmake | 15 + .../3.7.0/CompilerIdC/CMakeCCompilerId.c | 561 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/CMakeOutput.log | 198 + .../CMakeFiles/Makefile.cmake | 109 + libcyusbserial-master/CMakeFiles/Makefile2 | 199 + .../CMakeFiles/TargetDirectories.txt | 26 + .../CMakeFiles/cmake.check_cache | 1 + .../CMakeFiles/feature_tests.bin | Bin 0 -> 7440 bytes .../CMakeFiles/feature_tests.c | 34 + .../CMakeFiles/progress.marks | 1 + libcyusbserial-master/CMakeLists.txt | 59 + libcyusbserial-master/COPYING.LESSER.txt | 502 + libcyusbserial-master/Doxyfile | 2437 +++ libcyusbserial-master/Makefile | 210 + libcyusbserial-master/README.md | 38 + libcyusbserial-master/appveyor.yml | 18 + .../cmake/helpers/libusb_version.c | 46 + .../cmake/modules/FindLibPThreadsWin32.cmake | 97 + .../cmake/modules/FindLibUSB.cmake | 168 + libcyusbserial-master/cmake_install.cmake | 52 + .../CMakeDirectoryInformation.cmake | 16 + .../include/CMakeFiles/progress.marks | 1 + libcyusbserial-master/include/CMakeLists.txt | 9 + libcyusbserial-master/include/CyUSBSerial.h | 1622 ++ libcyusbserial-master/include/Makefile | 182 + .../include/cmake_install.cmake | 38 + libcyusbserial-master/install_manifest.txt | 4 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/cyusbserial.dir/C.includecache | 66 + .../cyusbserial.dir/DependInfo.cmake | 33 + .../lib/CMakeFiles/cyusbserial.dir/build.make | 280 + .../cyusbserial.dir/cmake_clean.cmake | 17 + .../cyusbserial.dir/depend.internal | 31 + .../CMakeFiles/cyusbserial.dir/depend.make | 31 + .../lib/CMakeFiles/cyusbserial.dir/flags.make | 10 + .../lib/CMakeFiles/cyusbserial.dir/link.txt | 1 + .../CMakeFiles/cyusbserial.dir/progress.make | 9 + .../lib/CMakeFiles/progress.marks | 1 + libcyusbserial-master/lib/CMakeLists.txt | 30 + libcyusbserial-master/lib/CyUSBCommon.h | 253 + libcyusbserial-master/lib/Makefile | 408 + libcyusbserial-master/lib/cmake_install.cmake | 67 + libcyusbserial-master/lib/cyi2c.c | 686 + libcyusbserial-master/lib/cyjtag.c | 248 + libcyusbserial-master/lib/cymisc.c | 586 + libcyusbserial-master/lib/cyphdc.c | 130 + libcyusbserial-master/lib/cyspi.c | 644 + libcyusbserial-master/lib/cyuart.c | 588 + libcyusbserial-master/lib/cyusb.c | 638 + .../CMakeDirectoryInformation.cmake | 16 + .../cyusbserialtest.dir/C.includecache | 36 + .../cyusbserialtest.dir/DependInfo.cmake | 22 + .../CMakeFiles/cyusbserialtest.dir/build.make | 115 + .../cyusbserialtest.dir/cmake_clean.cmake | 10 + .../cyusbserialtest.dir/depend.internal | 6 + .../cyusbserialtest.dir/depend.make | 6 + .../CMakeFiles/cyusbserialtest.dir/flags.make | 10 + .../CMakeFiles/cyusbserialtest.dir/link.txt | 1 + .../cyusbserialtest.dir/progress.make | 3 + .../tools/CMakeFiles/progress.marks | 1 + libcyusbserial-master/tools/CMakeLists.txt | 23 + libcyusbserial-master/tools/Makefile | 228 + libcyusbserial-master/tools/README.txt | 99 + .../tools/cmake_install.cmake | 54 + libcyusbserial-master/tools/cyusbserialtest | Bin 0 -> 19680 bytes libcyusbserial-master/tools/cyusbserialtest.c | 603 + tinio/Makefile | 2 + tinio/README.md | 5 + tinio/builds/a.out | Bin 0 -> 7904 bytes tinio/builds/compiling_error.txt | 4 + tinio/builds/main.cpp | 53 + tinio/builds/main.o | Bin 0 -> 2288 bytes tinio/builds/tinio1 | Bin 0 -> 3960 bytes tinio/compiling_error.txt | 4 + tinio/main.cpp | 42 + tinio/old.cpp | 161 + tinio/uid-vid.txt | 2 + 235 files changed, 127199 insertions(+) create mode 100644 CyUSBSerial API Documentation.pdf create mode 100644 CyUSBSerial_SDK_Linux/README.txt create mode 100644 CyUSBSerial_SDK_Linux/common/doc/CyUSBSerial API Documentation.pdf create mode 100644 CyUSBSerial_SDK_Linux/common/header/CyUSBSerial.h create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9.tar.bz2 create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/AUTHORS create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/COPYING create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/ChangeLog create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/INSTALL create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/Makefile create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/Makefile.am create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/Makefile.in create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/NEWS create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/PORTING create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/README create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/THANKS create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/TODO create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/aclocal.m4 create mode 100755 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/compile create mode 100755 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.guess create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.h.in create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.log create mode 100755 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.status create mode 100755 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.sub create mode 100755 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/configure create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/configure.ac create mode 100755 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/depcomp create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/Makefile create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/Makefile.am create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/Makefile.in create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/doxygen.cfg create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/doxygen.cfg.in create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/.deps/dpfp.Po create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/.deps/dpfp_threaded-dpfp_threaded.Po create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/.deps/listdevs.Po create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/Makefile create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/Makefile.am create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/Makefile.in create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/dpfp.c create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/dpfp_threaded.c create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/listdevs.c create mode 100755 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/install-sh create mode 100755 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libtool create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb-1.0.pc create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb-1.0.pc.in create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-core.Plo create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-darwin_usb.Plo create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-descriptor.Plo create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-io.Plo create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-linux_usbfs.Plo create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-openbsd_usb.Plo create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-poll_windows.Plo create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-sync.Plo create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-threads_posix.Plo create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-threads_windows.Plo create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-windows_usb.Plo create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.a create mode 120000 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.la create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.lai create mode 120000 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.so create mode 120000 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.so.0 create mode 100755 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.so.0.1.0 create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb_1_0_la-core.o create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb_1_0_la-descriptor.o create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb_1_0_la-io.o create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb_1_0_la-linux_usbfs.o create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb_1_0_la-sync.o create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb_1_0_la-threads_posix.o create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/Makefile create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/Makefile.am create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/Makefile.in create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/core.c create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/descriptor.c create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/io.c create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb-1.0.def create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb-1.0.la create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb-1.0.rc create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb.h create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-core.lo create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-core.o create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-descriptor.lo create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-descriptor.o create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-io.lo create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-io.o create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-linux_usbfs.lo create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-linux_usbfs.o create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-sync.lo create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-sync.o create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-threads_posix.lo create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-threads_posix.o create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusbi.h create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/darwin_usb.c create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/darwin_usb.h create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/linux_usbfs.c create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/linux_usbfs.h create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/openbsd_usb.c create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/poll_posix.h create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/poll_windows.c create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/poll_windows.h create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/threads_posix.c create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/threads_posix.h create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/threads_windows.c create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/threads_windows.h create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/windows_usb.c create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/windows_usb.h create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/sync.c create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/version.h create mode 100755 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/ltmain.sh create mode 100755 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/config.h create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/ddk_build.cmd create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/inttypes.h create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb.dsw create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_dll.dsp create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_dll.vcproj create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_dll.vcxproj create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_dll.vcxproj.filters create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_sources create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_static.dsp create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_static.vcproj create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_static.vcxproj create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_static.vcxproj.filters create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_vs2005.sln create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_vs2010.sln create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs.dsp create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs.vcproj create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs.vcxproj create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs.vcxproj.filters create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs_sources create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/stdint.h create mode 100644 CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/stamp-h1 create mode 100644 CyUSBSerial_SDK_Linux/license/license.txt create mode 100644 CyUSBSerial_SDK_Linux/linux/library/90-cyusb.rules create mode 100644 CyUSBSerial_SDK_Linux/linux/library/CyUSBCommon.h create mode 100644 CyUSBSerial_SDK_Linux/linux/library/Makefile create mode 100644 CyUSBSerial_SDK_Linux/linux/library/README.txt create mode 100644 CyUSBSerial_SDK_Linux/linux/library/cyi2c.c create mode 100644 CyUSBSerial_SDK_Linux/linux/library/cyjtag.c create mode 100644 CyUSBSerial_SDK_Linux/linux/library/cymisc.c create mode 100644 CyUSBSerial_SDK_Linux/linux/library/cyphdc.c create mode 100644 CyUSBSerial_SDK_Linux/linux/library/cyspi.c create mode 100644 CyUSBSerial_SDK_Linux/linux/library/cyuart.c create mode 100644 CyUSBSerial_SDK_Linux/linux/library/cyusb.c create mode 100644 CyUSBSerial_SDK_Linux/linux/library/libcyusbserial.so create mode 100755 CyUSBSerial_SDK_Linux/linux/library/libcyusbserial.so.1 create mode 100644 CyUSBSerial_SDK_Linux/linux/testUtility/90-cyusb.rules create mode 100644 CyUSBSerial_SDK_Linux/linux/testUtility/CyUSBSerial.sh create mode 100755 CyUSBSerial_SDK_Linux/linux/testUtility/CyUSBSerialTestUtility create mode 100644 CyUSBSerial_SDK_Linux/linux/testUtility/Makefile create mode 100644 CyUSBSerial_SDK_Linux/linux/testUtility/README.txt create mode 100644 CyUSBSerial_SDK_Linux/linux/testUtility/Test_Utility.c create mode 100644 libcyusbserial-master.zip create mode 100644 libcyusbserial-master/.gitignore create mode 100644 libcyusbserial-master/.travis.yml create mode 100644 libcyusbserial-master/CMakeCache.txt create mode 100644 libcyusbserial-master/CMakeFiles/3.7.0/CMakeCCompiler.cmake create mode 100755 libcyusbserial-master/CMakeFiles/3.7.0/CMakeDetermineCompilerABI_C.bin create mode 100644 libcyusbserial-master/CMakeFiles/3.7.0/CMakeSystem.cmake create mode 100644 libcyusbserial-master/CMakeFiles/3.7.0/CompilerIdC/CMakeCCompilerId.c create mode 100644 libcyusbserial-master/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 libcyusbserial-master/CMakeFiles/CMakeOutput.log create mode 100644 libcyusbserial-master/CMakeFiles/Makefile.cmake create mode 100644 libcyusbserial-master/CMakeFiles/Makefile2 create mode 100644 libcyusbserial-master/CMakeFiles/TargetDirectories.txt create mode 100644 libcyusbserial-master/CMakeFiles/cmake.check_cache create mode 100755 libcyusbserial-master/CMakeFiles/feature_tests.bin create mode 100644 libcyusbserial-master/CMakeFiles/feature_tests.c create mode 100644 libcyusbserial-master/CMakeFiles/progress.marks create mode 100644 libcyusbserial-master/CMakeLists.txt create mode 100644 libcyusbserial-master/COPYING.LESSER.txt create mode 100644 libcyusbserial-master/Doxyfile create mode 100644 libcyusbserial-master/Makefile create mode 100644 libcyusbserial-master/README.md create mode 100644 libcyusbserial-master/appveyor.yml create mode 100644 libcyusbserial-master/cmake/helpers/libusb_version.c create mode 100644 libcyusbserial-master/cmake/modules/FindLibPThreadsWin32.cmake create mode 100644 libcyusbserial-master/cmake/modules/FindLibUSB.cmake create mode 100644 libcyusbserial-master/cmake_install.cmake create mode 100644 libcyusbserial-master/include/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 libcyusbserial-master/include/CMakeFiles/progress.marks create mode 100644 libcyusbserial-master/include/CMakeLists.txt create mode 100644 libcyusbserial-master/include/CyUSBSerial.h create mode 100644 libcyusbserial-master/include/Makefile create mode 100644 libcyusbserial-master/include/cmake_install.cmake create mode 100644 libcyusbserial-master/install_manifest.txt create mode 100644 libcyusbserial-master/lib/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 libcyusbserial-master/lib/CMakeFiles/cyusbserial.dir/C.includecache create mode 100644 libcyusbserial-master/lib/CMakeFiles/cyusbserial.dir/DependInfo.cmake create mode 100644 libcyusbserial-master/lib/CMakeFiles/cyusbserial.dir/build.make create mode 100644 libcyusbserial-master/lib/CMakeFiles/cyusbserial.dir/cmake_clean.cmake create mode 100644 libcyusbserial-master/lib/CMakeFiles/cyusbserial.dir/depend.internal create mode 100644 libcyusbserial-master/lib/CMakeFiles/cyusbserial.dir/depend.make create mode 100644 libcyusbserial-master/lib/CMakeFiles/cyusbserial.dir/flags.make create mode 100644 libcyusbserial-master/lib/CMakeFiles/cyusbserial.dir/link.txt create mode 100644 libcyusbserial-master/lib/CMakeFiles/cyusbserial.dir/progress.make create mode 100644 libcyusbserial-master/lib/CMakeFiles/progress.marks create mode 100644 libcyusbserial-master/lib/CMakeLists.txt create mode 100644 libcyusbserial-master/lib/CyUSBCommon.h create mode 100644 libcyusbserial-master/lib/Makefile create mode 100644 libcyusbserial-master/lib/cmake_install.cmake create mode 100644 libcyusbserial-master/lib/cyi2c.c create mode 100644 libcyusbserial-master/lib/cyjtag.c create mode 100644 libcyusbserial-master/lib/cymisc.c create mode 100644 libcyusbserial-master/lib/cyphdc.c create mode 100644 libcyusbserial-master/lib/cyspi.c create mode 100644 libcyusbserial-master/lib/cyuart.c create mode 100644 libcyusbserial-master/lib/cyusb.c create mode 100644 libcyusbserial-master/tools/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 libcyusbserial-master/tools/CMakeFiles/cyusbserialtest.dir/C.includecache create mode 100644 libcyusbserial-master/tools/CMakeFiles/cyusbserialtest.dir/DependInfo.cmake create mode 100644 libcyusbserial-master/tools/CMakeFiles/cyusbserialtest.dir/build.make create mode 100644 libcyusbserial-master/tools/CMakeFiles/cyusbserialtest.dir/cmake_clean.cmake create mode 100644 libcyusbserial-master/tools/CMakeFiles/cyusbserialtest.dir/depend.internal create mode 100644 libcyusbserial-master/tools/CMakeFiles/cyusbserialtest.dir/depend.make create mode 100644 libcyusbserial-master/tools/CMakeFiles/cyusbserialtest.dir/flags.make create mode 100644 libcyusbserial-master/tools/CMakeFiles/cyusbserialtest.dir/link.txt create mode 100644 libcyusbserial-master/tools/CMakeFiles/cyusbserialtest.dir/progress.make create mode 100644 libcyusbserial-master/tools/CMakeFiles/progress.marks create mode 100644 libcyusbserial-master/tools/CMakeLists.txt create mode 100644 libcyusbserial-master/tools/Makefile create mode 100644 libcyusbserial-master/tools/README.txt create mode 100644 libcyusbserial-master/tools/cmake_install.cmake create mode 100755 libcyusbserial-master/tools/cyusbserialtest create mode 100644 libcyusbserial-master/tools/cyusbserialtest.c create mode 100644 tinio/Makefile create mode 100644 tinio/README.md create mode 100755 tinio/builds/a.out create mode 100644 tinio/builds/compiling_error.txt create mode 100644 tinio/builds/main.cpp create mode 100644 tinio/builds/main.o create mode 100755 tinio/builds/tinio1 create mode 100644 tinio/compiling_error.txt create mode 100644 tinio/main.cpp create mode 100644 tinio/old.cpp create mode 100644 tinio/uid-vid.txt diff --git a/CyUSBSerial API Documentation.pdf b/CyUSBSerial API Documentation.pdf new file mode 100644 index 0000000..8c5a8d0 --- /dev/null +++ b/CyUSBSerial API Documentation.pdf @@ -0,0 +1,10180 @@ +%PDF-1.3 + +1 0 obj +<< +/CreationDate (20130531173412) +/Producer (Doc-O-Matic 5) +/Author (Cypress Semiconductor Corporation) +/Title (USB Serial Library API Guide) +>> +endobj + +2 0 obj +<< +/Type /Catalog +/Outlines 3 0 R +/Pages 100 0 R +/Names 754 0 R +/PageMode /UseOutlines +/OpenAction [101 0 R /Fit ] +>> +endobj + +3 0 obj +<< +/Type /Outlines +/Count 13 +/First 4 0 R +/Last 4 0 R +>> +endobj + +4 0 obj +<> +endobj + +5 0 obj +<> +endobj + +6 0 obj +<> +endobj + +7 0 obj +<> +endobj + +8 0 obj +<> +endobj + +9 0 obj +<> +endobj + +10 0 obj +<> +endobj + +11 0 obj +<> +endobj + +12 0 obj +<> +endobj + +13 0 obj +<> +endobj + +14 0 obj +<> +endobj + +15 0 obj +<> +endobj + +16 0 obj +<> +endobj + +17 0 obj +<> +endobj + +18 0 obj +<> +endobj + +19 0 obj +<> +endobj + +20 0 obj +<> +endobj + +21 0 obj +<> +endobj + +22 0 obj +<> +endobj + +23 0 obj +<> +endobj + +24 0 obj +<> +endobj + +25 0 obj +<> +endobj + +26 0 obj +<> +endobj + +27 0 obj +<> +endobj + +28 0 obj +<> +endobj + +29 0 obj +<> +endobj + +30 0 obj +<> +endobj + +31 0 obj +<> +endobj + +32 0 obj +<> +endobj + +33 0 obj +<> +endobj + +34 0 obj +<> +endobj + +35 0 obj +<> +endobj + +36 0 obj +<> +endobj + +37 0 obj +<> +endobj + +38 0 obj +<> +endobj + +39 0 obj +<> +endobj + +40 0 obj +<> +endobj + +41 0 obj +<> +endobj + +42 0 obj +<> +endobj + +43 0 obj +<> +endobj + +44 0 obj +<> +endobj + +45 0 obj +<> +endobj + +46 0 obj +<> +endobj + +47 0 obj +<> +endobj + +48 0 obj +<> +endobj + +49 0 obj +<> +endobj + +50 0 obj +<> +endobj + +51 0 obj +<> +endobj + +52 0 obj +<> +endobj + +53 0 obj +<> +endobj + +54 0 obj +<> +endobj + +55 0 obj +<> +endobj + +56 0 obj +<> +endobj + +57 0 obj +<> +endobj + +58 0 obj +<> +endobj + +59 0 obj +<> +endobj + +60 0 obj +<> +endobj + +61 0 obj +<> +endobj + +62 0 obj +<> +endobj + +63 0 obj +<> +endobj + +64 0 obj +<> +endobj + +65 0 obj +<> +endobj + +66 0 obj +<> +endobj + +67 0 obj +<> +endobj + +68 0 obj +<> +endobj + +69 0 obj +<> +endobj + +70 0 obj +<> +endobj + +71 0 obj +<> +endobj + +72 0 obj +<> +endobj + +73 0 obj +<> +endobj + +74 0 obj +<> +endobj + +75 0 obj +<> +endobj + +76 0 obj +<> +endobj + +77 0 obj +<> +endobj + +78 0 obj +<> +endobj + +79 0 obj +<> +endobj + +80 0 obj +<> +endobj + +81 0 obj +<> +endobj + +82 0 obj +<> +endobj + +83 0 obj +<> +endobj + +84 0 obj +<> +endobj + +85 0 obj +<> +endobj + +86 0 obj +<> +endobj + +87 0 obj +<> +endobj + +88 0 obj +<> +endobj + +89 0 obj +<> +endobj + +90 0 obj +<> +endobj + +91 0 obj +<> +endobj + +92 0 obj +<> +endobj + +93 0 obj +<> +endobj + +94 0 obj +<> +endobj + +95 0 obj +<> +endobj + +96 0 obj +<> +endobj + +97 0 obj +<> +endobj + +98 0 obj +<> +endobj + +99 0 obj +<> +endobj + +100 0 obj +<< +/Type /Pages +/Count 56 +/Kids [ 101 0 R 104 0 R + 107 0 R 178 0 R 253 0 R 302 0 R 305 0 R 308 0 R 311 0 R 314 0 R 319 0 R 327 0 R + 338 0 R 349 0 R 359 0 R 372 0 R 382 0 R 388 0 R 402 0 R 408 0 R 417 0 R 429 0 R + 437 0 R 447 0 R 453 0 R 462 0 R 469 0 R 483 0 R 495 0 R 500 0 R 504 0 R 508 0 R + 515 0 R 520 0 R 525 0 R 531 0 R 536 0 R 544 0 R 550 0 R 559 0 R 565 0 R 572 0 R + 577 0 R 582 0 R 588 0 R 595 0 R 603 0 R 608 0 R 616 0 R 622 0 R 630 0 R 637 0 R + 642 0 R 649 0 R 652 0 R 733 0 R ] +>> +endobj + +101 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 102 0 R +/Annots 103 0 R +>> +endobj + +102 0 obj +<< +/Length 56 +/Filter [/FlateDecode] +>> +stream +x3R*23434q M  ,sy \yy;` +endstream +endobj + +103 0 obj +[] +endobj + +104 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 105 0 R +/Annots 106 0 R +>> +endobj + +105 0 obj +<< +/Length 998 +/Filter [/FlateDecode] +>> +stream +xڍU]6}pJ^>BH͗tpFm/{ i4ƾs} [%Rp`OEթBVBREI sh*L~g (LZ]lBt&L xyh+DZԀcU^YA H0UJyʀ(\3'RiY Ӣຉ7w;@n]BՠnJ7X +2=Sג5W +Ѝ;չ6閯dZfdMhTcA7qMhi.ok{ e~0zQ+Lw 2(ǚLgdnϼ;cM;d̘kp|hs{DETS>oiU]kendstream +endobj + +106 0 obj +[] +endobj + +107 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 108 0 R +/Annots 109 0 R +>> +endobj + +108 0 obj +<< +/Length 994 +/Filter [/FlateDecode] +>> +stream +xڍnH>/I]?n 2NCG> .12|G> 4|psߦugy!o4˱ %Z fCt k_I2_mWI[\^j!OM- RKGB&fJòȑ #3C?mV- +< +SJ:EQaȂp|{WcFZnƧe7+=Ə_9?ڈ-F'w6},qQT; yR8"؂q=L +pqX9b Ϛ*m[&{J0#K 7&P:5a##g6H>Krf._6s] +~ݢ +Y;3uVBG(4 2mBU`XbQU_G<(9j,]λ& 9Ǝ\(2]0OTsL091 U|@ȑ!wD(}CStؼH9f|PxHcIa>y^L.& Na4S=i%)zQ(:l5Z}ؾՂ@c̀E+\P坎&v+ +ȉRww(`pV0Wׅ̕~ΒvY=$;z)hoٜ +:8*uʞt8H-bkVʾQB9R14endstream +endobj + +109 0 obj +[110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R +118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R +126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R +134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R +142 0 R 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R +150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R +158 0 R 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R +166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R +174 0 R 175 0 R 176 0 R 177 0 R ] +endobj + +110 0 obj +<> +>> +endobj + +111 0 obj +<> +>> +endobj + +112 0 obj +<> +>> +endobj + +113 0 obj +<> +>> +endobj + +114 0 obj +<> +>> +endobj + +115 0 obj +<> +>> +endobj + +116 0 obj +<> +>> +endobj + +117 0 obj +<> +>> +endobj + +118 0 obj +<> +>> +endobj + +119 0 obj +<> +>> +endobj + +120 0 obj +<> +>> +endobj + +121 0 obj +<> +>> +endobj + +122 0 obj +<> +>> +endobj + +123 0 obj +<> +>> +endobj + +124 0 obj +<> +>> +endobj + +125 0 obj +<> +>> +endobj + +126 0 obj +<> +>> +endobj + +127 0 obj +<> +>> +endobj + +128 0 obj +<> +>> +endobj + +129 0 obj +<> +>> +endobj + +130 0 obj +<> +>> +endobj + +131 0 obj +<> +>> +endobj + +132 0 obj +<> +>> +endobj + +133 0 obj +<> +>> +endobj + +134 0 obj +<> +>> +endobj + +135 0 obj +<> +>> +endobj + +136 0 obj +<> +>> +endobj + +137 0 obj +<> +>> +endobj + +138 0 obj +<> +>> +endobj + +139 0 obj +<> +>> +endobj + +140 0 obj +<> +>> +endobj + +141 0 obj +<> +>> +endobj + +142 0 obj +<> +>> +endobj + +143 0 obj +<> +>> +endobj + +144 0 obj +<> +>> +endobj + +145 0 obj +<> +>> +endobj + +146 0 obj +<> +>> +endobj + +147 0 obj +<> +>> +endobj + +148 0 obj +<> +>> +endobj + +149 0 obj +<> +>> +endobj + +150 0 obj +<> +>> +endobj + +151 0 obj +<> +>> +endobj + +152 0 obj +<> +>> +endobj + +153 0 obj +<> +>> +endobj + +154 0 obj +<> +>> +endobj + +155 0 obj +<> +>> +endobj + +156 0 obj +<> +>> +endobj + +157 0 obj +<> +>> +endobj + +158 0 obj +<> +>> +endobj + +159 0 obj +<> +>> +endobj + +160 0 obj +<> +>> +endobj + +161 0 obj +<> +>> +endobj + +162 0 obj +<> +>> +endobj + +163 0 obj +<> +>> +endobj + +164 0 obj +<> +>> +endobj + +165 0 obj +<> +>> +endobj + +166 0 obj +<> +>> +endobj + +167 0 obj +<> +>> +endobj + +168 0 obj +<> +>> +endobj + +169 0 obj +<> +>> +endobj + +170 0 obj +<> +>> +endobj + +171 0 obj +<> +>> +endobj + +172 0 obj +<> +>> +endobj + +173 0 obj +<> +>> +endobj + +174 0 obj +<> +>> +endobj + +175 0 obj +<> +>> +endobj + +176 0 obj +<> +>> +endobj + +177 0 obj +<> +>> +endobj + +178 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 179 0 R +/Annots 180 0 R +>> +endobj + +179 0 obj +<< +/Length 978 +/Filter [/FlateDecode] +>> +stream +xڍ]oJ{yzݝ$AE\UN0WInj3ݝ`{_~O|>B +,=I˅%~06݌GXw9xnr4Xpm\F5-$ D'A28G6i U\nБkÝ= +}>"eF},`)FuNgd2Rd{P,3r[_xWyU^l`:cu2\ xc &CRocoDJ]䝫E rGYuobyOٖ# hcǛeAi;G4_|I?ZGH +@MVbQD%GķU6-Jj?`= {Z% փ༨` YǓKӝA!M^ev$X(ϛz)o-@!wϳ5TwE/ݽE-`9@1n@f QnPqF?!]A + ArQq΁Nq#nl\+9\cxtqʛUN$+TKY2@t~0K4X .{!OjXl3(OHg8<<$8nmKH#"`2X⫪@bԟWYZ,J{Ǖ#H452t"XHӂ9% غfHp'c?YFd{6"F8U?/>$}\eXx[wb739/)A@T b.*[.q%,bH]mSn>*gljQ'> ~$U08# K4~* EWwxpT1֘PrwGXRŇ/ce]'e?w?ZBendstream +endobj + +180 0 obj +[181 0 R 182 0 R 183 0 R 184 0 R 185 0 R 186 0 R 187 0 R 188 0 R +189 0 R 190 0 R 191 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R +197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R 204 0 R +205 0 R 206 0 R 207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R +213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R +221 0 R 222 0 R 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R +229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R +237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R +245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R +] +endobj + +181 0 obj +<> +>> +endobj + +182 0 obj +<> +>> +endobj + +183 0 obj +<> +>> +endobj + +184 0 obj +<> +>> +endobj + +185 0 obj +<> +>> +endobj + +186 0 obj +<> +>> +endobj + +187 0 obj +<> +>> +endobj + +188 0 obj +<> +>> +endobj + +189 0 obj +<> +>> +endobj + +190 0 obj +<> +>> +endobj + +191 0 obj +<> +>> +endobj + +192 0 obj +<> +>> +endobj + +193 0 obj +<> +>> +endobj + +194 0 obj +<> +>> +endobj + +195 0 obj +<> +>> +endobj + +196 0 obj +<> +>> +endobj + +197 0 obj +<> +>> +endobj + +198 0 obj +<> +>> +endobj + +199 0 obj +<> +>> +endobj + +200 0 obj +<> +>> +endobj + +201 0 obj +<> +>> +endobj + +202 0 obj +<> +>> +endobj + +203 0 obj +<> +>> +endobj + +204 0 obj +<> +>> +endobj + +205 0 obj +<> +>> +endobj + +206 0 obj +<> +>> +endobj + +207 0 obj +<> +>> +endobj + +208 0 obj +<> +>> +endobj + +209 0 obj +<> +>> +endobj + +210 0 obj +<> +>> +endobj + +211 0 obj +<> +>> +endobj + +212 0 obj +<> +>> +endobj + +213 0 obj +<> +>> +endobj + +214 0 obj +<> +>> +endobj + +215 0 obj +<> +>> +endobj + +216 0 obj +<> +>> +endobj + +217 0 obj +<> +>> +endobj + +218 0 obj +<> +>> +endobj + +219 0 obj +<> +>> +endobj + +220 0 obj +<> +>> +endobj + +221 0 obj +<> +>> +endobj + +222 0 obj +<> +>> +endobj + +223 0 obj +<> +>> +endobj + +224 0 obj +<> +>> +endobj + +225 0 obj +<> +>> +endobj + +226 0 obj +<> +>> +endobj + +227 0 obj +<> +>> +endobj + +228 0 obj +<> +>> +endobj + +229 0 obj +<> +>> +endobj + +230 0 obj +<> +>> +endobj + +231 0 obj +<> +>> +endobj + +232 0 obj +<> +>> +endobj + +233 0 obj +<> +>> +endobj + +234 0 obj +<> +>> +endobj + +235 0 obj +<> +>> +endobj + +236 0 obj +<> +>> +endobj + +237 0 obj +<> +>> +endobj + +238 0 obj +<> +>> +endobj + +239 0 obj +<> +>> +endobj + +240 0 obj +<> +>> +endobj + +241 0 obj +<> +>> +endobj + +242 0 obj +<> +>> +endobj + +243 0 obj +<> +>> +endobj + +244 0 obj +<> +>> +endobj + +245 0 obj +<> +>> +endobj + +246 0 obj +<> +>> +endobj + +247 0 obj +<> +>> +endobj + +248 0 obj +<> +>> +endobj + +249 0 obj +<> +>> +endobj + +250 0 obj +<> +>> +endobj + +251 0 obj +<> +>> +endobj + +252 0 obj +<> +>> +endobj + +253 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 254 0 R +/Annots 255 0 R +>> +endobj + +254 0 obj +<< +/Length 747 +/Filter [/FlateDecode] +>> +stream +xڍMO@^߻G$U4"F]bې cJ;NbcE;3;dy2>xe*]o'MYlןYsYɕYc9~>d.'l15Vx W. 1ABYpjlDX,]ŘDiV}YJ*Dp0fe J̆=8-٠Z-̆5˗4A`k2lh9vmCpN]'gߩXkY,etI5n+b/>.rA\6FR֧wFf@ oRڈ;6cWh[u4h)yP=YA(p[gh7|oVٟ k:Ғ{9% 2q;k??; + 9ƬsEIp(NAhza&U JǶzd0YG=z19TX\זLjk pk ܲ 7ks\n˛d~V,Mws̊<]WWUwʭN`HNQ +3Jݮ$)pAv +ǤUT;Q:MXGwS)endstream +endobj + +255 0 obj +[256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R +264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R +272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R +280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R +288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R +296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R ] +endobj + +256 0 obj +<> +>> +endobj + +257 0 obj +<> +>> +endobj + +258 0 obj +<> +>> +endobj + +259 0 obj +<> +>> +endobj + +260 0 obj +<> +>> +endobj + +261 0 obj +<> +>> +endobj + +262 0 obj +<> +>> +endobj + +263 0 obj +<> +>> +endobj + +264 0 obj +<> +>> +endobj + +265 0 obj +<> +>> +endobj + +266 0 obj +<> +>> +endobj + +267 0 obj +<> +>> +endobj + +268 0 obj +<> +>> +endobj + +269 0 obj +<> +>> +endobj + +270 0 obj +<> +>> +endobj + +271 0 obj +<> +>> +endobj + +272 0 obj +<> +>> +endobj + +273 0 obj +<> +>> +endobj + +274 0 obj +<> +>> +endobj + +275 0 obj +<> +>> +endobj + +276 0 obj +<> +>> +endobj + +277 0 obj +<> +>> +endobj + +278 0 obj +<> +>> +endobj + +279 0 obj +<> +>> +endobj + +280 0 obj +<> +>> +endobj + +281 0 obj +<> +>> +endobj + +282 0 obj +<> +>> +endobj + +283 0 obj +<> +>> +endobj + +284 0 obj +<> +>> +endobj + +285 0 obj +<> +>> +endobj + +286 0 obj +<> +>> +endobj + +287 0 obj +<> +>> +endobj + +288 0 obj +<> +>> +endobj + +289 0 obj +<> +>> +endobj + +290 0 obj +<> +>> +endobj + +291 0 obj +<> +>> +endobj + +292 0 obj +<> +>> +endobj + +293 0 obj +<> +>> +endobj + +294 0 obj +<> +>> +endobj + +295 0 obj +<> +>> +endobj + +296 0 obj +<> +>> +endobj + +297 0 obj +<> +>> +endobj + +298 0 obj +<> +>> +endobj + +299 0 obj +<> +>> +endobj + +300 0 obj +<> +>> +endobj + +301 0 obj +<> +>> +endobj + +302 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 303 0 R +/Annots 304 0 R +>> +endobj + +303 0 obj +<< +/Length 13 +/Filter [/FlateDecode] +>> +stream +x3Rendstream +endobj + +304 0 obj +[] +endobj + +305 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 306 0 R +/Annots 307 0 R +>> +endobj + +306 0 obj +<< +/Length 919 +/Filter [/FlateDecode] +>> +stream +xڍVrH}l3"iCƮ> 4I5#!m +N.|ӗs0P~t2[0QvӉ`D:*\ _;<M5ACGwK BMh[z[Y +q-)d]lūm:-E+:"L!~?Z8LyƄD*Ɏߓr(J&ѮG$E="đvh_Z(ʅ]R]+rNCյIϵef7MlPԯ:.FhBCq!4qV.&ɶ?-y;qyaLXZל[3_GG/[yf +-y-]Nr̯ $r/&s=53X98fn#1=Rհz%Jt +v 3LQek+)8\}pꙪOkdƄ ¹xsmHuR=iJgG{%-kn?>l@^^[}ږw\vu1uSI[U1JfVQ/ +}}_^xxHUDP܏s  y~Q,GσHF2Dݻ9H8fyoF +cΘ|N%y֚9V':g휖WHy7FV<*?}[<| V} pKB?e[?٭W<$8)*ؘQ񈯤Ւ +y~%¯B}$r.5K#t[sSendstream +endobj + +307 0 obj +[] +endobj + +308 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 309 0 R +/Annots 310 0 R +>> +endobj + +309 0 obj +<< +/Length 751 +/Filter [/FlateDecode] +>> +stream +xڥKo@HYɼK&uNv06i{ 0\";3cnۭ"eڭ>C0E%jLqy}ESZ1ܪPwE9rW} + i8RF`"׆$Gy<+Mf4GmX(ZvٱO +e1zu_8}p8KgKUE+VS+n옺5JcP>>x 6ŊH̹%^ϲ4{0,(9gyi\]?b|/,nB,$"f]K<tnG&ܒ^- ZU'@}yO-ĊJ]讬 0]εŔUsl518jNt52'f:ް> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 312 0 R +/Annots 313 0 R +>> +endobj + +312 0 obj +<< +/Length 388 +/Filter [/FlateDecode] +>> +stream +x}KO0z8 VM8hJ"$~=bY3;>ME~CtcA;"k<([ԎưϪr0g9Հ2DZ~ +(%-:URҡ/䷏f(VHrX͒pendstream +endobj + +313 0 obj +[] +endobj + +314 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 315 0 R +/Annots 316 0 R +>> +endobj + +315 0 obj +<< +/Length 2773 +/Filter [/FlateDecode] +>> +stream +xڵnle,Pl*QH$'( ŢbRR ?H߷gH9g(FL"}ۏs#9%_ÐJ9%bFMMca|y}'g2U:/sPDnf{ J`e D8UJ쳧z%lނ9#Kkz(LϋY9%Nn_l'dņ,,'|Ga=lKYZ$2P9hۻWS̽y~2y]n#IIOvW +(ey.%3ӢÎ<^^[\tF [alAXX\]1#\n'ٶSrj(D+Wױ8ˆ2cedN5ߤ1alN"fbݜ0JŁ;i8Ml>?0)1鳃gc%p]T܏=F@IxVڃ7jjnjn YHl%\Қ UMD2qޗ{{}R?HD7bk(xNEJpČp&"-&a*  +!T*0"8LQq6g'b8S9C$= 1T🗢LoY0j 5^4Ԝl Jª&)ä́DZ +Hީj6pU`vLmGr]#ݠ,%m~̪cCb2pm3@nbȬ?g77lFJ/&3 .ꡇz|zmټk;|gbaDW8SD \"^-WocFnTk,Z"m( ;{d4OǿvfÂ{,#>PU,n)KK+`+ +{P:`Ehx-WzoR%HҰ%Y ayntx?t %8H&یeGExp${{m~wj`" ^ `R4Pj=F{޷m)5 +t+/ "mHit[{%8H錦ٿPC_Ub2W@WD|ٛ@LvK:[DB|y߶& +" .tHIMp|MLpٗv[,ݤt$Zu/r%P{ yEA/TGhl-WoRYוMJb&C:}@vp4m0M%o64i/l3گlc^lV.`"w/ jV^c\["XpJh XV +ꮻ&}e F*vV' fޮ^0/I:" +P+) +8h &S~햢u \R6mHEuU~##hx KáNwoXvXg77~B*ouAI^_{PyEA Vy;h'_h=Zz޵qOd`Itx )5#>(%ড়Oj>Nj4yU\gi +c lv՛> +>> +endobj + +318 0 obj +<> +>> +endobj + +319 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 320 0 R +/Annots 321 0 R +>> +endobj + +320 0 obj +<< +/Length 2290 +/Filter [/FlateDecode] +>> +stream +xڵY[o~jx<;S3I{(@ +$y!=LDf1@&9x.4E;?Xad}bcLDQC""1D ޞ^ߗo:?[OW#$\aL<1f =׎@) g1yyjW@Fvjp-eǵC!o$8zPkVVH UCgyXzCڏ I0c4Ȟ4`!bgoiL",r}Mrim Ѕ }P.e`X.p + VXrF;A.RC1 evw\˛! yUU~أ(E_Avk$##r +n:RCCu*Ba +PN@7# +$!XHA`(HE䀂 7/J916!jq\Z):€!TCtBaj(EJEX-ި`E@ej5#YK^T3vC"xStFXYǡ :@ BN" `hcx:c"nrYon!CݯIa&QY5X;Ό`cAR+!]KD<>^8P0`=^.V+VCX7 9;1۠m#p=fear(*UVKi7P8Q=Muw47tOyC]5TNk?1B$ +67/Z5kp262/Ŕ"C\ 6BC|$9$cMm}#!0\r1 +.8Q5+c5<1n$5G.03磣ZsNd狱oSEgT)uJPt?_f_s#oV*zP3H{LJeeSQ ́d%gRqBa +c#ĕaQ1NH@K0$l .69`@*"6!Rq\T):#yZǡ9CaR!2PfI۬mTg Œ NER0cPR +8R" ś52(tѫvkgh]>o'I$KoTk Sl8殖4(h,9 /_MoTc%P}jZP5Qsa y{6Jp~)!C1ev }pbeh+C:oLm8=]'윤Ui"|-ncq(0&Թ笚׭rxxo2jx셚8Y&ooؔm1S! :+P}jβ:uy,BAx(zN[gajJ{I _:b;@0sZ*pZEhܤ{UC=l(,sX71h3QD@GzQߎNH'ތoKj}vY&#{"uom۬DߗЭ?VܞDr(v:%Wx#~ٶK8HtMtoaYiͰվ)MڨwN]: +A{ +Wb-F )DJV\FXnLӣ/Pz Znd8=1dR7.G|q^ξD>Bu75oh%dz+';UyFQR)!fNJ"Niٗ_Yendstream +endobj + +321 0 obj +[322 0 R 323 0 R 324 0 R 325 0 R 326 0 R ] +endobj + +322 0 obj +<> +>> +endobj + +323 0 obj +<> +>> +endobj + +324 0 obj +<> +>> +endobj + +325 0 obj +<> +>> +endobj + +326 0 obj +<> +>> +endobj + +327 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 328 0 R +/Annots 329 0 R +>> +endobj + +328 0 obj +<< +/Length 2066 +/Filter [/FlateDecode] +>> +stream +xڵko]~i?9Ml֦.5nʒ!C{8#y(5Up_<$^G0uzå qF&'JPͽ%{Wd2==c^'\@eeΒ$d?oN; pʼDXOk*dU2QԖKnRJjcYrPnTYj-)Pr@J. yjIPIݴ-yY Kѧ^iC +iq;%zY14H]'4(bFkr0,5cYCh eҳvG?ߌlz39 u0'ĉQIR-LR|!Gu,Lqqb`^(#RDDEHZm更}w 0H UFφS +NR)C8ѰX1q[xy/6zHQ:]^zGdِr{1 (DTXg +xb_3" p +6MþjM< +E OV*vJRi dbOÁ *졾\t+p[p' +}.r1BǩuUPUf`$ی2V&a]L!HG!YD!*Ka[xtq?Gi)A8N=7~.Wǻwd}s)M޳yA0=C7 'Qp^Y)(lEh)7i`A,}K~zJܳR)Cpݟ JGxLK(p;p5Ѷ,1{ ޵彤* ̪HAfUt~)""p +6MþB B$/H;B8R#-!}zn| ThzZEofݺoTNRǢ)p|UzJ6_HGj2]^<[7⡦d W8]_+&yUf,$nap16osbgz +d2W1*jQvAAQw0ul](Ick'<퀏:JVdק}siCKP'oj56 }z-!Hb4Zʬs72ƒu9=.}{_ox> +>> +endobj + +331 0 obj +<> +>> +endobj + +332 0 obj +<> +>> +endobj + +333 0 obj +<> +>> +endobj + +334 0 obj +<> +>> +endobj + +335 0 obj +<> +>> +endobj + +336 0 obj +<> +>> +endobj + +337 0 obj +<> +>> +endobj + +338 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 339 0 R +/Annots 340 0 R +>> +endobj + +339 0 obj +<< +/Length 2303 +/Filter [/FlateDecode] +>> +stream +xڵZn8}7=`Xrk-y[1![TDՊYqaR/a3==Qj,1Q"_.f)e],uzrس_-i3I5s}y){*˂ =mM5Ymeo 7 %}\"+2ސ_goZXrDyEnXcQT.Z]"ۻcS{Ydž6bCnƇ#!E-7aWܒ!Eo8Թ.:F$nK>f0zWܧ!Xn%vzE[@fBæZf,*ũ}T0iJ_[rɇV aR=Χ `os}z(|r.76 ˕JQ|4<{yv)5bRDQUfOܪ.-r u#_RϏ=m/yjŚ bVSa3ke%1' [K%pܐ I@'iV8N4ù`˹4r)o'8,6hÀ #6^AV? '-pjdRHz͠deJbȇ]\A|"p0ɮ(K2QbqZ; 5 jxӣJFM@X&BQ?j6y~qƙ@vߵ;RD +iL29pfi)7\$H6WC,*O'iej& +Fap a(ыA*"zDCe.KgF% ؈7`` +Ns% +F7% Ir2 ryW=`Vm X#nB|:D>Ȭ?BxBU1cG;vQA{#†, +f;RRc_>P+#{^c\v#RڟbX^m .&$x` \]!PEd0^RbFBB\_ Ԇ2WQ*+l9tǾhH{x7=y""<[R( 6wF- ط}}XW +WFl |~7%>ga^ wŘ  &zhVax16b?W ;vL9 g׳N]\] 8eTɁͧ= 9zAljeD't?wPY0 ;}gv,Q["` +_V{z+bl1F '̍]L^ 5,l hwHXfEq\xAޙö 8̪}r.U%ɾ= +jEՁ _w!z# Lr,:h#!ؘN` +G%露LƱWo)H˰c$5YwlC?¤V?PNυ̲D9u3FjHCc#ހ}wHlL94Wrb`D)U+g~=$(3AqEtq%Fk:Ehp{l n,$9=pRn"`D)Q~ +f&.&Y;gt8J1忈n:D7`pq(*eGCc#ހ}wHuE̤{NZ8 +F7(Ʊn/' G†:gIZ_EJ m +X:Ehp{l rUc/IeRD^Se3!:U4WA\yEC#i)uEƼl0"޾Vvw%@ 2 F8Gӌ߄'a{`I0ba?4;6V@ϖiΖgk!|r12hv yz)ѥ41L7?OK.G/,@`;`3prbTkFyeIjxwM׳˫[</%zFxGil`hLA0 1(-_AL[: 1#Sn.F4Im,FNl\kendstream +endobj + +340 0 obj +[341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R +] +endobj + +341 0 obj +<> +>> +endobj + +342 0 obj +<> +>> +endobj + +343 0 obj +<> +>> +endobj + +344 0 obj +<> +>> +endobj + +345 0 obj +<> +>> +endobj + +346 0 obj +<> +>> +endobj + +347 0 obj +<> +>> +endobj + +348 0 obj +<> +>> +endobj + +349 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 350 0 R +/Annots 351 0 R +>> +endobj + +350 0 obj +<< +/Length 1307 +/Filter [/FlateDecode] +>> +stream +xڵX[OF~0>!4Uˢ% UU 1DÊߞ3lB™\3g/r:!埧s!-ɱ#Lp5|-NN^VJbj'gi9Ktkϭ3"0Tv#g"[ 0g,5UaIFJ*,c=*VKރo, +.(%AAΊY2ߕ; ڀd %恆ĔZFfv<9O?!2c yY%en1q,S~*3U ΀5nQ^ ̓M9bQ@:͓KsP9YY- +SXN|uVɛ~) QS +--("saHW&.i Nendstream +endobj + +351 0 obj +[352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R ] +endobj + +352 0 obj +<> +>> +endobj + +353 0 obj +<> +>> +endobj + +354 0 obj +<> +>> +endobj + +355 0 obj +<> +>> +endobj + +356 0 obj +<> +>> +endobj + +357 0 obj +<> +>> +endobj + +358 0 obj +<> +>> +endobj + +359 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 360 0 R +/Annots 361 0 R +>> +endobj + +360 0 obj +<< +/Length 1817 +/Filter [/FlateDecode] +>> +stream +xڵYn6}7c[ ^۩ AQk[7؋&v(-%b1:sf9$ N ?70<)A5)S\Of,_L&_Z,NŸO{v5DԒ:$y ׊Z k*$C;Qc}@`}4r) Ψf̵;w쩘M!FC F%,|aUmkƨpRckAHAJQ#k^h0[%%jwJb̻1-.b$U۬kjBMx˼]9*#}KhƈC$a$uy5 ([~))JyxW:C"=b1AZbIB4Fu%h퇢EZ$BMx˼],f>(S<m$^aE Ki$".Pj,iF*8#&A3"[]ۗv =ADZ"JB4FɩqBvĢjc1"޺`WX ^C # $ڈ́$Ӄ1Nb:|ڧ'K64:_]BL^F5Ʒ4/ƠCa U@ًh38nx`:/0_6=ŀ8?^?pb(mBbeP /B U犴["-Xe_HP1vje8a<㰣op?SJǙ|~v{l=smR|'ۧ N<[gNL´w v(̓dn>3ۨ V4^U `zU8]OƟ><__"l\wR3uvJߓopa/AMniR<pe J%8Mn$Yr[u;;Lp~ nh^%?եN.8_]q)vCץj]ejZ)nXI]zUʆ؊V mvxzOpqd1?VoНC#50^NZc@)u' ZCN"-N& e.@Ԣem$^a΢G-_ی$zp@i}DzzZ'&Z)Pa2o j٧pFzƈ^986ݰ9Ϩ;t%y@Rȃ<\-$!j#BY5@TȉT؄qraN$VKTtXlؚNwl~_ RLŔCX$^ + +FdZYF6+gazt63rzø50n4#w5۷J%h:ͼn{x],#u\}͡ӖMt4;E V9wƭ6F#ÖpN+on8Ú!y; meRO˳;<B[Vs}J|6fvzae#?ߝ)HF!&JpK#*B2So%̎)R*"4Im,Fendstream +endobj + +361 0 obj +[362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R +370 0 R 371 0 R ] +endobj + +362 0 obj +<> +>> +endobj + +363 0 obj +<> +>> +endobj + +364 0 obj +<> +>> +endobj + +365 0 obj +<> +>> +endobj + +366 0 obj +<> +>> +endobj + +367 0 obj +<> +>> +endobj + +368 0 obj +<> +>> +endobj + +369 0 obj +<> +>> +endobj + +370 0 obj +<> +>> +endobj + +371 0 obj +<> +>> +endobj + +372 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 373 0 R +/Annots 374 0 R +>> +endobj + +373 0 obj +<< +/Length 1416 +/Filter [/FlateDecode] +>> +stream +xڵXn6}c \+;\$ n((H.!JHJV")pxݝ#/wwñ qFw;RPŝ!9$dzUb+~99:2W9*VY +j8'I]U+ʝvIVίY9ˋj'H¶i S`j6Rwc#_N/.||ty5xN6.R+gT0b5_YN`XT =C9 .=RMgURi}&?JoX)Ef R>?f$ȖeAf1b6X +,ӣ_ r#زFm-sŌgcegQR9j *Uz<Ԣ s[Y HB& +}[od1__g}mTR˚Ok\'-~cjØ{y"#YC~1_lzѵ +ڒp%1\߹'w]:4qP+@/s!8 옊1ۉnkc`ҐE/n:ȮrrTc ԛH +~E'hB +j5VfLJՠWkAb\ +ոZkϜ`nh7 +dWG=~Omhg?^h A(LP Yqv.W#z/T\mYSs,X: MD&*KC1o'HPQ9"qGt"֘bGHGXl+D:o#a,^ZtZT:hq34ah2 m"4}D:NIN{c#۔A:cVj_'#pkH.D>B97n&ٻ(('"dL[QNcFh#5tCo'HPR: YW9W0&1QKIQ Q2Ɇd:PV?4C9 WG9X,8`)si;kzN&>۞`#iTIe C0^`S|N-5\3w^a+ljrxֹ_jR >cy#r2A&aܢ %X Ll8N'A s*7,K"X r8+gd(x[4`?j}Ex5O&fwu>Bāᖁt:_mjATj['Y߃U2EE?{r4:w5 +N>OΧ~0VLC UJ{ScfRˣ!E@Jc-endstream +endobj + +374 0 obj +[375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R ] +endobj + +375 0 obj +<> +>> +endobj + +376 0 obj +<> +>> +endobj + +377 0 obj +<> +>> +endobj + +378 0 obj +<> +>> +endobj + +379 0 obj +<> +>> +endobj + +380 0 obj +<> +>> +endobj + +381 0 obj +<> +>> +endobj + +382 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 383 0 R +/Annots 384 0 R +>> +endobj + +383 0 obj +<< +/Length 2403 +/Filter [/FlateDecode] +>> +stream +xڵnx^-E^I{AQ-'IlC'P2[pAg8$")#|tKD"u9h4}y15!>pĺv,QB1$MRH6Iݪ RG緣ɗp2ݏi0m-XDc {&A׃x6Ez'C%/]Ye*}Lf_GhWfj(/Me}zɶU7xbRDlɫEYlM=B$Bb|sQ*{\l2G*_vS_˓ +T4 }_r~FNRRj qߓϧD$J+II~ ÔA*f +( y"Ҕ_r%0%DŽRQٝu2/u@$ci VL}sfMax)+g}3<< +8z)3F* ObhʱӫA|Mvh*q(sE=2 n1q=5Ceya|Q/r/)[K 1:X'0:gAƊpFg%DZ,&q +֋="T օ8c,\c5*cIvKl0Fuڏ0}.I4.|/g }xCn'/p2 6Ip/y^*]s@{*Y,/OfcEyMFEBZ۰|@7?{U,#4ݢta؞@uabjߤSΠ~|;΍wёS +M4/ 8KbۯJ'0#x W)JRͷju?f0> +>> +endobj + +386 0 obj +<> +>> +endobj + +387 0 obj +<> +>> +endobj + +388 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 389 0 R +/Annots 390 0 R +>> +endobj + +389 0 obj +<< +/Length 1741 +/Filter [/FlateDecode] +>> +stream +xڵYRF}!s$O J((el$G43y==gz.ЯGAQ?|H!@rlHS%ÃOϏ&ǿN^$Q4d"bJ{8|HV#e4ch,]G+QŔ֎~n@ǏmfsuM15X +!z3Nn//>}̈+AwY|{_n=ݯW6zȱbL?gGh|>3#R)lQuȓϳ 0&]!0}@E"}Vi6|i^m.:oGQS Ōf +0c=o4_-# +mP{"(01%gX4:+X\K̳kk#[A4@L:f'A`r_-t*n2aB] +D%qzWRABjrŠY +1J0tۻz\ I[ +`Y'ٵ`le56Z- j%x ԙ6p"/ocF8NYڮ&gɗO'C{)ܩ|^M;4afpћ*Bl{G +\4kkF +jh# )TؐŎrɀ\w Zc!W-fY./QViqM&om)[[]Z\M-].ݿ;Uݕ>Ƹ18\ި6۞<6CƈmڡE{!境 1¶0ާͅ[o~n\}#M`z"|t?dS wij=T WlU֫thOzC?>lÈvRИf]IlHWp/| =qu`:PBy Q5)1V1~v"ƔmD~QG0yv:jM1]ma<[7fp{y3 hA+]U}|KqX{ZeS'nZJx-n?JGu<4읝C;jZ1:4jNLHF͉W.)$0,}n@YH."9K0PuWiZ\Rؘ(xv`.ltuR/u(endstream +endobj + +390 0 obj +[391 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R +399 0 R 400 0 R 401 0 R ] +endobj + +391 0 obj +<> +>> +endobj + +392 0 obj +<> +>> +endobj + +393 0 obj +<> +>> +endobj + +394 0 obj +<> +>> +endobj + +395 0 obj +<> +>> +endobj + +396 0 obj +<> +>> +endobj + +397 0 obj +<> +>> +endobj + +398 0 obj +<> +>> +endobj + +399 0 obj +<> +>> +endobj + +400 0 obj +<> +>> +endobj + +401 0 obj +<> +>> +endobj + +402 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 403 0 R +/Annots 404 0 R +>> +endobj + +403 0 obj +<< +/Length 2498 +/Filter [/FlateDecode] +>> +stream +xڵnx"d +2 ,b0ti-Fw=ȼoac-~n_H#o gL xOܮr5lݬO%:?{{;|\-Nc \) O/.䓇v%;~۬_ˊÖl_|y:j>^|%>AaKA%-&&.MtLCl-ӬV$lE*]Ꮆ\I[fq߹f Z $2+- \[bKbbKbf˶MB uWVQDXS wE*L7k 0[ eһ%O ʬDᏖmtб&fN$ɤWpz +WWQD +k:I:_He)hUov 0^S^!8[/Y)=xYHu-$; ]1swe%L^uL>4 +ʞ> +>> +endobj + +406 0 obj +<> +>> +endobj + +407 0 obj +<> +>> +endobj + +408 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 409 0 R +/Annots 410 0 R +>> +endobj + +409 0 obj +<< +/Length 1977 +/Filter [/FlateDecode] +>> +stream +xڵZ]o}7xȃbˁ$2,EQJU+Y$;Cpwu1{pH #ӓ_.8a32==ђ:$S'ɟvo',3d<~C 8KRW]Z,I¯OS5D5S-'\+j-7/\SɄ$ۊܖ՚Z91Q|sSppʥt/'81WDw^~l.EhhQ!C0:cT8}K\FQ +2RHu fDX N^ly  +b&%xI&}؀_kR,^kƃna. ֖aod¢!"e=7jt}9/qVzY4+Fr>^,wjXܨci <6#qIObaC"-!f :oqb6L(ʼaKxq⚜1Y,A/2Qd +dM$PYg +Dk?\ESCo¾&2bDh<L2dD!2݈q;e2 p i<~ "U%k",nd!h퇢hq56MyX(U>|p|)+vPXH@Bt +oC=G/wSDB(YQ{bX(.Ң!9o&BE{M1J1vPjt6ս,іJ+^ ;vRAiS wj;g[nwՎ]Vw{o97X؇z'o77B +yAS>(YWݞo7sgÀ_3[ZzH`CTBŤB=.UyƚР^|%4!HPl5+1؍PJѸ2dt#[hkfJ X'qnR^q5G"EGided~A#:o*-XHr:P5 ] yċ-⠯\ !ǘmx\eq38<ΞVRNgZՄ,!{ z.U%( Y3jL3^Ёi+OßhQ:$`.Fcw_gXoy\-t S:^ GIjX +?eTendstream +endobj + +410 0 obj +[411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R ] +endobj + +411 0 obj +<> +>> +endobj + +412 0 obj +<> +>> +endobj + +413 0 obj +<> +>> +endobj + +414 0 obj +<> +>> +endobj + +415 0 obj +<> +>> +endobj + +416 0 obj +<> +>> +endobj + +417 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 418 0 R +/Annots 419 0 R +>> +endobj + +418 0 obj +<< +/Length 1933 +/Filter [/FlateDecode] +>> +stream +xڵYn7}7c,Iԭh c#meծmp/\r/ΦuQ HFg ᖡ^-r>}s!HJHS-5-G_0\^_t5x8:Y\@ߏ^/+oNiK8B L+0%)_t_hA߶6H3@P![pKbajh1d `È>:ufMh2Ro!K2diX0(m*t8eӅ0X@Mo>~F:jr0@ z타T@;5 М0M7`3?ƈAqstrMNvŐTI$Z\n3z{(ԙ\CǰA}~sdnEQ/os3Ҥź>67]gJ%upn?񻧆*/誌7- ?~;܂[rYSs͑zxjC#4*lb?'RIG&s礈0]^1NQ$3UA6Og뵻&ӎdQR۱KpPVkUqAA,j: +Bx#w. ACnh#)ؐc' bq q9'Z+;A\ܸ^&i9$jIkA̕p!9}U/iG p_bnip\)HC]oh#)T؀~OI[\"rLbज~b^1Nv &Pbsw{- +DWӄhXU~j*tnI>ɶlׯmFmJiw__t6Tf<8~Npt:Wǐp@.ȳLm# Dk n`#ż=lkx +C ̰pl Cy7FX?Ɍ`'|a(*a!O{`6-rX1~rs!ZrECk)\![*:;v>۵|S@π|cJ~)o݃}HwEt BytrR}U%\"OtY deGU Y)˪eʵ be l^ 3bQ(Nc8610x]dK@ޡƭY/dԀVKc:6%zuM%)m’mqlLj0dG`?Cou)5NQ/ +`crmXi> +>> +endobj + +421 0 obj +<> +>> +endobj + +422 0 obj +<> +>> +endobj + +423 0 obj +<> +>> +endobj + +424 0 obj +<> +>> +endobj + +425 0 obj +<> +>> +endobj + +426 0 obj +<> +>> +endobj + +427 0 obj +<> +>> +endobj + +428 0 obj +<> +>> +endobj + +429 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 430 0 R +/Annots 431 0 R +>> +endobj + +430 0 obj +<< +/Length 1467 +/Filter [/FlateDecode] +>> +stream +xڵX[o6~X/ؓ^ME1CZr͖ KnCIJCC9ΕoW œ B Z./ÒZ1@@^^<☩hųE5Bq7b({:gv&96pZYḬ ?2KQC]?9a,<4TLU+p8DHݸ{CwSB%SPlY!fUv(QN*:% FR'6H +[ kCB!rsL!2*g$3!+KїuV@e]ۼhPKOn1 Uϊ#y?FIԁFB3[ۆvДR`fjʶ^Ͽkb4ܣ%`'{qNE*\rDTĜ0`V=#%R$Ą +ƈYbʹ?8F dY;* >$HM}sF`ms8)@4Z 6^:GX FQl@Tׅ$I8ֿd`KK|,VJCZ6o*Ng@?RBV2 /${XhZ84XEo6A?o)P- ( .D2F +"d01B籭~ǘz0:5J7~iY,I1hHpQl6&bޡt׎a^ظVVN(4JzN Է;vn6k؃c{hDx,V C2*CM;Hb_0(YVG#^ط_o!NA F&𵟻.u\ lݥN8nu\.in +>U Cc93 +3) <V2Ϡa\K"-EZp7ѩՂՉ)M80ӳeYR8mĉ3:kF/ hAۍMꛣJ<2hȉp*fVU`C_޷ h@~ƴIF9LXgaVmq%JY e'.mO g>&5RĨ3X> +>> +endobj + +433 0 obj +<> +>> +endobj + +434 0 obj +<> +>> +endobj + +435 0 obj +<> +>> +endobj + +436 0 obj +<> +>> +endobj + +437 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 438 0 R +/Annots 439 0 R +>> +endobj + +438 0 obj +<< +/Length 2156 +/Filter [/FlateDecode] +>> +stream +xڵYmon/@U$ ٸ4zE jmVJ+E˳way8<)~:?{?{ A +}AWC)Qr00X)oĜ0m@Ċ2e,_bcDŔs%Xͪ.mY\v I3 c)c/,2fnnKIghVg\ig}LBY 46Z$֋|J0@UTT<I^pm*ÔJb1R,42blvǨ,:sՇ%LzS=.Ӗw18dV +?,QRȢ>hP8oT5bZ*D !^ѿOߠBḁU~,x)Ew\cCs i)dFih ށ6PBxy)Ay +Xh'DҞ39ff2$}Gr>S4ؘ /;tW 9ߖkP4( +>!(.6e5pEpFU_* j^'8:SPP͠ܥN\ r;GPbfpoP~~x;U[;%fD${$v8#c?5@0)#Uۼ.ۧʍJprO*N79GHqHhRZ|l wuƀw=XTm(܍"`}?v,9|QbTFL/'*+ʇR&15PC|U)5 &!Gs Ov/ߔώ9Ec˧ŌA*0gb Fnkyy{B1̐e?*w|pS5.>q M͔* +}T}Xq'Dʠ +00=Ya^>؛Ӿ@u-}<q *t\M(g-k&nQ^(CgK:ϚIESJmi99'Y[BcowǢέ@o{]AM k(2zl$Hq +#[nʈ-B'J@ +gq1nJTSI7O!QiiQ*cd1L0FSs͙iB2=m_YH;q7o?,.A7E_@u3li@sUӥXa,R*#?m77'!9Gu2S!:hendstream +endobj + +439 0 obj +[440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R ] +endobj + +440 0 obj +<> +>> +endobj + +441 0 obj +<> +>> +endobj + +442 0 obj +<> +>> +endobj + +443 0 obj +<> +>> +endobj + +444 0 obj +<> +>> +endobj + +445 0 obj +<> +>> +endobj + +446 0 obj +<> +>> +endobj + +447 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 448 0 R +/Annots 449 0 R +>> +endobj + +448 0 obj +<< +/Length 1143 +/Filter [/FlateDecode] +>> +stream +xڵKo6xlk8u6A$^(77*lːnA};-Ѧ`<8 E xa>1+AW3D;G̗|,]||AR Vm4\ؽɗ, +O'Oj Ȯȫ1_|K2nl&O7d/מX)w~eF |#_0Np}z.Mj3sP;T2! .po-5qP6,¹89gNu\ E@}}kHƨun5JQ-Ai0%emJ jʏ4%pMHlJLWk(\*Վ*E=2'$ne4 S8\D+s݁p Ym]U^.,*f$qnnkˮeI"ڼN3{CeQ-'+@cetfh1 c;cza!MAo҄&lzZB3HZ!Lo(ɁP}z#֘jϠրIߜ,TuٹkQmY|=;A4&\򷀷茈z6aiS62-av=1do96@Y5/7c]>? :C* '69f&V(Eg;"މk6bH-LS۷}zaco=eG`$mi h.Fwb]f.Phu!'j:zìLW7Ǯ,+cN'/׾I]e_KKE)8;WNn[1S턫sףU9'kı%/[rH7^'%dp{DI~~]b?ɐTvºөY}mk`Tk'#%]mZ`aS<cOl{}wJbˏVa 1)|R)CDR7T.V>I> +>> +endobj + +451 0 obj +<> +>> +endobj + +452 0 obj +<> +>> +endobj + +453 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 454 0 R +/Annots 455 0 R +>> +endobj + +454 0 obj +<< +/Length 1028 +/Filter [/FlateDecode] +>> +stream +xڝV[oH~G?c2gS (J"cc#_ڲglLcg"w|sc<rx!BAx$( 3 Zmƣ#Z;V^uAiӸ$/,,E7ΑoB4DGZjH)G]\F]X0IP[a ĢG~PxvqmbUehei +qwtPQ8ju.amjEW[*̸–U}\q!R줥$Fji2-**(E_{gy=[<ۛlm8r|=>EYlkCmQu.vbAk2r=qyiH!Lvm>y̪"9|8mB2%aQLlH߸„O{qokbP~6'/O> yYZuyĩ3 a&T PkX` ))nu{0!p +aQ4V7{,f=͖=:2r!`:@>~ؐRt$ +fq@ {ûסQ~%aw2N"\$.+-~i[v9:>]n<ݬ<2DS 3-zqw^> !e F$hyq-Wq2O4H8_;bx%]6hScXS(HW/ V +3b~ë+)8LJt0 wu;63tWśΈI4p=;j.\ v)F'\] DskX}$70U\sK_,"endstream +endobj + +455 0 obj +[456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R ] +endobj + +456 0 obj +<> +>> +endobj + +457 0 obj +<> +>> +endobj + +458 0 obj +<> +>> +endobj + +459 0 obj +<> +>> +endobj + +460 0 obj +<> +>> +endobj + +461 0 obj +<> +>> +endobj + +462 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 463 0 R +/Annots 464 0 R +>> +endobj + +463 0 obj +<< +/Length 1815 +/Filter [/FlateDecode] +>> +stream +xڵXn6}c[,SٺMEbdHr;,-v$1Fgf!Ax~CP3F#e & +X}u"Ui}MMh+9dđ +Sʢw IUSR1A~(_U.̳,YV +Uy y +Y~IUDxnOKJ|.dĴYB~XʖR$ 01P\$(xК<x))0 BǤEi5FH2l1!˥ʫx1ծH$x }ؗBJf@v'E +Q?S Vb[VCB ֌}\ۤJsD}B!{fjk$k ɩBQ9a -%2IC c$Šby2?F D=TI h[3mH6,~7KF +ˈQAsX.QgݎBY T6`cXqT )"/nℛWkb4!T ߋzdaʽk-B5զ"ƞ昽pve%I+ )c% Ah(Mn5Hٸ$lB֕Of{B'~ۤ`taɠT?_IL2=d2m)K(rWH` +Oooon/fkl,wmx0ҒI(Gvt .fo5MP3}2m[M+GJ(ت:<E)Jku +7I\l; +[99Y%ާWSRQ~|Krp\#O'Lƒ; + ==^G0[@tpH EA}Pz),3Ğz<N~ Q+bh|'b ,j%3*]7e2kK%ɪvE?K1ZdU~ȤnI +w1VBcZVc?>xl*N-I +"T +]lc\׈./cnJju?Eg YZ846lPn!=5Mh4cpRpj=?< Z'1jDǍшp_a 0h_1">Kz(dZlP a#lg ⺭+]Ry EDu.4a2gn9}pEAsR^x9z:aKf0W7 [>meѻx#82L,9bog/n/MÌ +v\wN#k=DZ1+O.&?z+MI|P(H 4Xִމ2[;`q℉3bcYw(i |u9x}4\blc p1hrh18K^ JIm]R: +!^@=IfKoAkjors}5^/fo +kbT)5M9)"q#:qtcendstream +endobj + +464 0 obj +[465 0 R 466 0 R 467 0 R 468 0 R ] +endobj + +465 0 obj +<> +>> +endobj + +466 0 obj +<> +>> +endobj + +467 0 obj +<> +>> +endobj + +468 0 obj +<> +>> +endobj + +469 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 470 0 R +/Annots 471 0 R +>> +endobj + +470 0 obj +<< +/Length 2030 +/Filter [/FlateDecode] +>> +stream +xڽY[o6~mu^Ij;"б-ɐtc%BY:EspHR뫟WWOa Zm )B97W}VJe)b頦d:-/7E[6P#A(4̣ ʎYnED]CՁ̞龈%uuAl{(>} .]D-\@TArR:\Z&,*$V +P&txܜbVxiLۇsrFk_GR1ڗo|~{]Eaa}yn\^tuģy,O7K!T yMcR@KG}(#h~z99--AhrV`g0ԛ@ԷN *ZWXǹ[ +@id-_-mAQJb@N5"CDkti{3i0RD 聶gA` £P%5Ic w9HQVK8j/J3 Ճbl-H#_ҍmĊ3aԁќb[B ZJ IqZ 3>U\7(>>s sٱz&vZ"!~$@x{P`64 hRhW:"Rd{f9NaN/`Ű@|UaGʬ3?۲`/=7 >PFMϠd(]C +W~_]n($YWV&i[̙%;vgCSpBsTa7Y~%e^{n@r;d$]*}. Q娔X73Fl~M}R̵'ڹFrC\eCFCJ: XPhPb[ve|a͆(J\(ӥ\KzLW!E!M@hePkUo ;a x8}LTꐨR-쓨CyzC(m5vsE9%n쐨=)P ڴIJН䯣X VQYY%yCBۑ9}5'.Plùߟs͍ >k-kmPaDKC +·{mzA v94lCyyPn `{r,0OѢjqJ\rR] (؁Oŭ2s{v(.ȦiuFqq/j^3Pqs1[=-_iR XPx;Ō;|}^~}-W/ƥ"B9 ӣȈQUVC;-$..>:lG uzp>n~P ?C.i8F@ә\lM c#`oE's |8k Ӂ&bTu =-F*x8JճL )GJ)J )aX–'}S*RBZ֓FL59|r私 +>%piS_qml +](9Op6CD]΁@b.̸*4?w榍tybʴΠendstream +endobj + +471 0 obj +[472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R +480 0 R 481 0 R 482 0 R ] +endobj + +472 0 obj +<> +>> +endobj + +473 0 obj +<> +>> +endobj + +474 0 obj +<> +>> +endobj + +475 0 obj +<> +>> +endobj + +476 0 obj +<> +>> +endobj + +477 0 obj +<> +>> +endobj + +478 0 obj +<> +>> +endobj + +479 0 obj +<> +>> +endobj + +480 0 obj +<> +>> +endobj + +481 0 obj +<> +>> +endobj + +482 0 obj +<> +>> +endobj + +483 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 484 0 R +/Annots 485 0 R +>> +endobj + +484 0 obj +<< +/Length 1683 +/Filter [/FlateDecode] +>> +stream +xڵXn"G}HKDl)F$X̰?򿩞a.=0f6ȒmUNUW7C?]_,r?WSDhi8Ҍ` ޢWE5f*_>8Jx=D09;/?=v3e4ڈ||e.[`ه7q9yAȨB&jTH[XƒP\xbn9'.nGpR (ؠUܴ* !2?>zNxׅX Nx}紏c1wL9&qm `MF_0U=pn.&I$&PD%SS~s8ڇh}A5 ˱V_1X1k+~\QL97c`Ii<rCR%_*PwN9 J[XXeh]+\jt +uZpa2ڰu + +T@5sPCT"(nU߷*ƄL!%+ba 'uoYx-5 9en4YcM<{%+h5]"oӧ E0\%.,Uh^Rl{Z[nlCvh;SMa֓O!VvO xbsP%Z~@T6TU z.ZӒhZvPA&NZRPTiacTFM5ã)E,Xj.A BR=gSCf=rlnlԀ/ +keXcYS,Yՠ"*+_>&jv0p6>fHK{(,%k8#-.)l5dSsQ +wQ-^|}'jг[F)+yU~kW>zZzlimN@"xϲX'Ҹ1qh)%- (MK)5|k5`Cl6=̆ 狇x8p5D`]BRhA؟Lwh!>9X~zBN)lyhrYb8s\^EC˶{7Hp y׉x`6IS$8| &;h}ش1ѢOiuJLd{2o.>p4}FK6"4K[}~o1ַancKٞh0h*@CUޏÇT;dpNx75Ceq6ܴaǻ<IΠV)T+7!<<|M>ZF.sUtvg pkɊ'}ć.o$R2K7?Ɋډf$pY_OI/ 9_ EiS+Q4Ie*.pwfWg8u'!Q%y:_R B  W3 +¹cKMqk0\Usj-ҜbeYv5˧g a!{!3Kh È-.E4*P{͢6 +P laǻԙus; +`n/-x^,^Lm `_'B +U{TtpVMk1o^:y?~1O +2XN10Y-QGr+0!tĥ>_^cendstream +endobj + +485 0 obj +[486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R +494 0 R ] +endobj + +486 0 obj +<> +>> +endobj + +487 0 obj +<> +>> +endobj + +488 0 obj +<> +>> +endobj + +489 0 obj +<> +>> +endobj + +490 0 obj +<> +>> +endobj + +491 0 obj +<> +>> +endobj + +492 0 obj +<> +>> +endobj + +493 0 obj +<> +>> +endobj + +494 0 obj +<> +>> +endobj + +495 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 496 0 R +/Annots 497 0 R +>> +endobj + +496 0 obj +<< +/Length 1392 +/Filter [/FlateDecode] +>> +stream +xڵX[OF~G?C_!b&a[!LWCmߞqe +B +7g9s.G&GCP&#V#e-& +4}hrf8j j|>M%FPL,J +D%q:4oskf)Rz4/z5?(1J$ĴlyJj~I=),BЛ[mߌ`f,VZ1K`ŵN7ky`k6:()PAu5*Up[?\Uٴ”JSsR,u`uTId{n.N.Jf W_wurFku(/:Ρ{F9Je(_[Uf[eQ +qh +CMQ (}RcWUPxS+5`kj9\ɧ$|&پ!v~eFDupZe[(Hu?*Az:uYÕiᘊ(?.G7ËoiY*P8y i 'OF..ac }Kr&ыt~30P~ϓ PxrsN-4]m(8U<2YlQCpfOIӋ٧4vlxmߡ}"ū%k0S)fA@` +ƒPLj\JU[6Cjb MwգK;-*Dwh*a-jbCj}婋[bhoasz(w͑A*C $]r05굢 J(R\R,zQȹ(Nh5jwawsC!kW;WU61#- +h9[^w6{(L3.=|+fS嶝4Rk"*Y +_knQ[kKl-lm Vw VFd`)!H=ZЄV[gVL,BWk?U8yAoa/H^ҏ M1nKH'^~s(C(^ݠY? be5pV,B|3rOT/VF 4(ˊwm!ܾn[ [7tC[~txI> +>> +endobj + +499 0 obj +<> +>> +endobj + +500 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 501 0 R +/Annots 502 0 R +>> +endobj + +501 0 obj +<< +/Length 1605 +/Filter [/FlateDecode] +>> +stream +xڽXmo6 7cMCKTCl?wGKHJr" S=cF|y|$jLqwG_ãN6fFדo(,A%HÑ2)E=YXl -(_obrSmV_Oc.ߠ(Q]lJle~~Mogד7>nCO(B;UfXX2/V_EtQc߯a">])J\HYGi,yNgۋ*ٛzCJ`Uˉ/j^"yhf>ޡYV_-쐚`cH]Ӭ-GW2Bc Q^9C0W\/**_h-Py]f7`f ET +5U7*1'Î2kRb,E*l -ŬmbʹٟKBL` 5 +S"j/([%Zb3noM,a9RfP.Fֺ:GX F!ly7O +w$DzP'ܶ6+ba,s=7ѓp#'?><=Wejfߡ9~iaxԱJ-IЀm؀Xi +6b *EMB18qIE–Ы5FC`Ze].&念O7lruS'5~`2QN7(n"[ohᛆqC}X ߂%Z#$mVwbbq;mNͣ=ݩy{Zu%6t0lM&` QO3[벏7FB@Oל[J Z2>g -0,PnȌK dftWc ³Z]T[H':@r0zj C}"WX!~ s0dЗeg+ k-DkXZi2׆WM~?(cX +cj:Vu5m|m6ȼ jj*Cy>؜Ba'?D#laB:D2*,~_,XhAHЈ>lD8 +mߏ  B~K\vIʖ5FC-Z{6s4GRדw\,%cp W/1+XDkSn<6"CmQ9xj`Gc/&$x)Mm^A2+pF3ڡsr@pu_;˧ҁ [zz(zjiry3Κ/뾈@g0TA.F΢ףx>u6_zlrרNm +y:U,l4NV{wԊw^u`k5#~c >n+C%9T߻@~ ih;/wz 4>@]8X%K`%z[OmWwl&}2 HS~(ak8lr:OFRA 6T)F56VW +]ýdbHnᕞ "]T:FՅendstream +endobj + +502 0 obj +[503 0 R ] +endobj + +503 0 obj +<> +>> +endobj + +504 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 505 0 R +/Annots 506 0 R +>> +endobj + +505 0 obj +<< +/Length 1731 +/Filter [/FlateDecode] +>> +stream +xڵXnF}7Ƕ@{<*pTEae%)ogI/ɥH[AlIٹ윝=k~;=0?=!INO.("X4_H4iF0eӓC?ߧ'yXIL-tz5_ǟGWsP~4wg9J2'xv>D`"~%r"OG_frtm3*J}@8M5ZƏ"nesv`S()6E0,HiA Z1]{an*0tAVB8Ln(5Nd=t{Ym´B+QzTc`:KQOcU*/֌?g= |i?Y+Qn?Z%)Jꃔ Jy<ilKwbb~$՘k@_49t^_751=!վ a, GZS~c8VmH = m0+=lR:?(b~, 1;bH$Ā` +)I.pYV#hf]+MmBY T[#X/0FR})n'{WU6/Pu.VJBt@/[^6۞Lq= \iSMOG:~4,QX=|ֶf+ Rv24l3!$C^xJlo}NfeEtTbKcUm ǰE"e;(*7t/;ijѥ6 +}ؠlm VZ=\% 6=.!vZl=`;eOpri- 4D] (/qn ݌/P|\y]9n=+ДRW_|4ux|@|"h:4Tm$<" $9p4+Ի=5BΌP]tk}xOv9f9tvg Τ5%}e;.ɠ(Bht8N]zhۈ>Mwz02#0 @ }FLe}Et=E˝*(zWc7PNocHRF~PwSsI. zP7٩a+u~"¦cn +~@ a`nW\bGBKjnzά)R }F{mV iAォ*Ҙ:$zz`#%#XC{8)Ԋ"K~k[~h 6 VBm=t (qUm\U1l.5d~3/||5~P~}^lb[>oŝ A\j&Zk Zwcr~1[u~oB* ^*D6)SA+cY#,\k`ёtˉ5p139pxQI0ۑ w 0 T9%,-nUZ/-keIѾ9Y9=aUyXPRV6ԕ/jr1>c?\$R#EoOq{:I1yU+vQ•|t܂4dHngm">qtendstream +endobj + +506 0 obj +[507 0 R ] +endobj + +507 0 obj +<> +>> +endobj + +508 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 509 0 R +/Annots 510 0 R +>> +endobj + +509 0 obj +<< +/Length 1302 +/Filter [/FlateDecode] +>> +stream +xڽWn6}cP.GIfR-Pl&ֱSIb?ۑl]([-}8sfx83d/{UIMcClXz +v*E2_ c VD7VwC#< >8߿{?)%92xWȏx6]:p>R;g~] y0;튁IJ$ АkttwrwOcн* b6ZgխFOcdiy>g0;J1'B|;v\, ݩ綩? ~#XOOj|Nv5J0(UkTBl=F{X3CWsFoE+fLˏ+)N#xtKB+P< %_-<.Z[R-Q׮> Be-wRyxPj +TP]%KvAևRℛ]؇[.FJBƒY[v~U[XP(,=а^ƭJh>TM}a_ҹ3=JƠ~%TLˎZ2в﫥:jqaEnsrP-.p@Z\dh`[eu `O9lCr i2.SnwP_a\fc!:A/2s.!6 ~ xv7ejט :͈ԕO׏7 jRRy G#'8*)ֆ5:<0mq4n)seCh6H}y-^*k]߆S2oBhX ;S|!# iAPo *Uo'0(Lu41_ǻ~z2zDQYМC]"`O< 6P̜@'d buzYl^Id6XOLjREpeM%cPo4_ TW eQaRܶ)Ar#0tej/UJendstream +endobj + +510 0 obj +[511 0 R 512 0 R 513 0 R 514 0 R ] +endobj + +511 0 obj +<> +>> +endobj + +512 0 obj +<> +>> +endobj + +513 0 obj +<> +>> +endobj + +514 0 obj +<> +>> +endobj + +515 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 516 0 R +/Annots 517 0 R +>> +endobj + +516 0 obj +<< +/Length 1769 +/Filter [/FlateDecode] +>> +stream +xڽYn7}7c[ GE]Jr( ^*tqwo+Zk(E'=93s~==y?9=!OOޝ3D%hpz"jDP&'?\O"[gy#uz2I|#XWi +~.Yݦc# }(&QDZS~s83*%Ruhc`ŬqE1ܼKBLYVl=$U SТ.= 2flޗpV\o]BY #T[#X+6 + +KqXDIq8o]U۴”JcR,rxm#l7}#ܿJalsهz.Osz%ʑi:ݣ.k8 S cUdlآubbUvhċmD8-6뱇6tP&$?7.1vaJfx91y,>gy' <\\2Y2ώ’W’` oQ K*k;4J\6|~b(wTD@, Vyc!K~B_MjyrtZ?efa&4t&90'6l췁o:RSfǫ`-P1ӂ2 Am7G%v4M/Q*ōoxVKTlHVDsjt;0<aѬ@'q˶a:mjl{>&۹xf=c& rڬʧǬ-0x2~  ?n&."MV݅g BhۙC!uU<v3On{3)[{?Lgs G,M $C^a,8Po^:Wh1=Z>t12{?5j㹙8b&1\oAInSP!z$ Kwowݻ"[eˎ87- zPGkv풤5u@I6r n1imZn|=nrp9Gt~n{(Tf@6Q2 Yikk낕a:f41E+n!ZaMQwPKD`lh8?V?0oG I`e$Z<;9]c~%> xWRGb%Yx(N/ Yt{,hb(^[]_[l{.p{WódI Ui>iRBhͫXXijܶPИDp5GALrW&'.Ewendstream +endobj + +517 0 obj +[518 0 R 519 0 R ] +endobj + +518 0 obj +<> +>> +endobj + +519 0 obj +<> +>> +endobj + +520 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 521 0 R +/Annots 522 0 R +>> +endobj + +521 0 obj +<< +/Length 1904 +/Filter [/FlateDecode] +>> +stream +xڵY]o6}vXY~S|tgː&!Pl9Lecw)]p}!yxy2 '?zՇ#1RMǤ.Ϟ4Q.4[>YѸ+%6$dgbRk,P8Idyoki!P{Ӿ[ RrDZS>P9a8Y[SRb ERFr!=F"1 ?(ȣ1J$ې^a1$Uƀ@hYW$Q;,Ⲝ[S )%]r jZp`-3 ։p\H 7Yu 6b4!Z{٪Av/v"@ضv|jH^J9 +E:u']JX/Vb)k+peUj ``Pc + ~lWaj f{:`eyd:{oVGvFIV>\p 2$F +x}s|tz +GىS~:qǰO"&`숐WflkҰ Er@kd](y4fx==OBIƋmcaEV xE^ҡ^{`hydBd\b79 o2~JOo$;]䶍Ȅ.2zY9Zc +G:j9sV9A$hWdXYy:W_2u -j  2 +[Wl\+"Pa B)NIF'? >GZ@@-{iu*K&>^cJZ-xC4AY v6mAzgM=rY0S%Zlc<2ߞ-{~zniڇ' YB^aK4/vwtT<#Y/@ܚo l~oppZCt]+o|X+aQavX`>2C:gY(09kGpt" m~iN[= //NNRWGFF5:A^~67Gɍ #:qtU?|endstream +endobj + +522 0 obj +[523 0 R 524 0 R ] +endobj + +523 0 obj +<> +>> +endobj + +524 0 obj +<> +>> +endobj + +525 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 526 0 R +/Annots 527 0 R +>> +endobj + +526 0 obj +<< +/Length 1658 +/Filter [/FlateDecode] +>> +stream +xڽXnF}7ǤH7{<ʖplWESD,tqI*Βe)R 7 033gg^bz~F?RDhnfS(} Q $@(te[<2LwjG_M=2V&hQBK4oH(D"jj'!ꭒmӱE]I3iϷap$΅3ƣ,œYGwK8HƸ/N1F))Z<&w;B_( aҷ v- m7?M`~QdGOiݜUX-WC%4ib6~S0Q+\RQ"2 s5j׽0s]p"@D}1n %!&N2VݸU;ªOa|mҪG@{TePU՚p8w +%?pʫվW=g@RtVŬ@8E>(*Os[ +r@CիJ`B?R?8T-ekf)aù1bbV@rn^( غ\I+ Zg|@ߜd dpcbQ%Tu'ԙ50R[c~@gPsd1)΋nwz6hXTRqRZ,a=׺_!Br-YhlDSv;ATjnk%UV7{jqg'iCX ˧ckq+|9T2E", NJTKͫ2z-dƶu}Cs3+ N_얰".n·Ϝ|Ihm +~}V!}tevhЧ(\|XJk7&*lMSM +Ğ0?J ޡ?)MռJ=E੸'$MA-pw,N '182Tq5SSOQp'NazYSȱxv(*NZRNݫ2zSj< (\?O -#{.t'48rJL-EeA02֛Y?2zq˩ERF}/H@QYZ=ly^g_qvgJNxAhh`+./'!3pO;z)NW ]p!ّG":S[ȊB;[m)<Ep8#4XYf>Vc\uk#v/xv*IFw'@$`N4~4cxh@V(,jbbCVRƣm1?zW~Ya{Z;ڇ]ء,̞a+ uUQqiJ\ MG!Be=pHW'.ZVendstream +endobj + +527 0 obj +[528 0 R 529 0 R 530 0 R ] +endobj + +528 0 obj +<> +>> +endobj + +529 0 obj +<> +>> +endobj + +530 0 obj +<> +>> +endobj + +531 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 532 0 R +/Annots 533 0 R +>> +endobj + +532 0 obj +<< +/Length 1665 +/Filter [/FlateDecode] +>> +stream +xڽXn6}c[\/ISdv("PmyֶRINv(Y)YSd ^p8<!C}e_>1D#h<> Kj5bEw{4hcTzzd|fZꭠ +C3,l<,/,*t#ZDE,8Cf YU,RdQ1rELC=:ym'e<>ˍ"R,eŽk +!5Ɛ]N|%aJ/"L0WSDY8[  +|ߨ;5͒XkOTbNGY&%R$V}m|\QL97/( p69 "S"Ѻ +쎺frm/a9RBSHJM;a-8Rl`CX?:*.IRE֛8>hU9rb!TY, ekodž~E{DZ&pFjvr֭sCյ*YhI -ed8E1bգP[X*ž *EMg0⒊[|v0XB7lqн`k#Gmm.#ힻ1Zm1L-C}վ: h!(GQ뷇m^z|`e Ql A.?>ٹQ6|lc +P5g;IoJb +7YޞSLʷy*[6?Ddr=<8kkUF'<Kʴ7h24'n!'tC8P:`n '@~6W Pm`wOۙȩ,gKH!8ahf2sjfOgwg)z7(Y>K x~(of=DrJUi *O`7`;P jςgپ>Wl_<S!Q67>}j؏CA􍲬mIr YXFfpY`Jrs1hN(p܂j!lY1'pHs%Ԫ~.NE>^Z':԰R(Oq9vM{r 9+jv1 +beL1/ָ ҷCz +̹>KCendstream +endobj + +533 0 obj +[534 0 R 535 0 R ] +endobj + +534 0 obj +<> +>> +endobj + +535 0 obj +<> +>> +endobj + +536 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 537 0 R +/Annots 538 0 R +>> +endobj + +537 0 obj +<< +/Length 1809 +/Filter [/FlateDecode] +>> +stream +xڵXn7}7cZ \>*p,WESkw]*ΕRl:3s8r////r?/o"4\^%5)c0Tf]~\^慆$ǁ 8RÚrZ|%15tP_p8PtZ4HŠ~Gd~܌? nnF(ڠ0^o-R_m=f%R)y¬:0{7>棩>U=fvpg+"(١ddva b!6YF1,ٿ6͜C>4r²-OG,Fz0]moh _b. +hmF+$CtAz$e hM3[j]BP'n8"%\hf!x8)'̆+vS%9\ka)DlzEjw(2 ;ۖ7?%Q (xAѸlZ󹷛-ɟQ1s=AI0YS@7 1 دz4 vJq-Z%qXwLfpK՛w;?'BYzWF $c +rH($B?®9áo$PAiI/zX1c~\QL9^(vGِnFT ]:cC|o.a -\:hV{nY Xl}C*)6Yℛ^z +( # +(p}Vݫּ7Tzp6Q8JS]%7 +\WIً\BwZzqQ˧P`[zi +pJi kRRnE{N0$Ǯ^4Y8欒_pl#{bTo[NlL4`#Z_VqWjx)ؖ{Z?J}B$jI5"b|;,oVU9'V WV +#Ǫ@SIT:2Q/2#9 +[/z3sTֵΪ HA݆V>dzg0FΟa0(DKzg룎0z:g9S'{o0`^fN +|3(~gųm}, }N |TؠZ7 ;ꛘzOK(&Gvw#8yꌦYu~ںX b'xxx8ZN &ۜL~Ggдvپ\a 6_ SnmygW6 +~(ZDţ3ȕjZjp0OnAN$\e/YW΃I}qm(^'dJs-h&~f_MVȳZmx1;- [ Hs7sC]#.jk:Ur31=*$98Uw!x~tfbG gZE̷Ή(_tS[yY-׎^ƟWxpoI 9%o{Gkm!d<9N]\aSŁA+%4pS\ٖ#Cr6wĥ>_ֳendstream +endobj + +538 0 obj +[539 0 R 540 0 R 541 0 R 542 0 R 543 0 R ] +endobj + +539 0 obj +<> +>> +endobj + +540 0 obj +<> +>> +endobj + +541 0 obj +<> +>> +endobj + +542 0 obj +<> +>> +endobj + +543 0 obj +<> +>> +endobj + +544 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 545 0 R +/Annots 546 0 R +>> +endobj + +545 0 obj +<< +/Length 1715 +/Filter [/FlateDecode] +>> +stream +xڵXnF}7Ǥh7{<ʒP$WESD9l%);KD[R0噙3ù_./fˋ B //ÒZ1=yyџJcɏ`2_ϻ0 /:#$3"96pZKϾ гOP5@E@i pbV).s:W .|L8:RM'EArO(L&'2٫z 0ߏqGx_fLZ,L/.O_aY# .ʎ"Jj7G)z\\Ü e7ksd]3]ͯcVYe #B-Ծա4)B YJ>rUz?*L*NۡI!Vط+ӉӤcVfԤC{NPRNt #,PL!\J,BWMr"YwɮBW#j&Ca)Vglvh-Z4)dغ{c~vT [ +D3jR塏=# CF3Pnx,`Սy7b?QC!%R3n:s#ՉX/#lu-c6G]|K&wZzزɴ`O(d!ғlMNބ/ + +P&ob) +tSG(/Aӣ0 +F@2Op+:p>O{&=ef}ԑٛΤ?O0zV|xX)`Jtvw =G!۷9"}y̼izP +K6(XAk+( jCn|۟\ǟ3ʻ`O.ޢ +M,7ȊہSxW>H^aHf̾zag8w;xTOR-Em +/^.G΃kV_ލ͋۽?*~N?geJ74Eg<[PRTq{_[^Lkg'IX9Z{<ʇWM`mMP &( "Ju2CZvoRE)F}  09}nU`f H,9?pM'vqM ه3߱B>@%|Cx im^p v +].$ib B PRg]@3LjzZtq

uǣA? :cWIW``k&~iJ\>AWDȺ4ܣZt~RC%endstream +endobj + +546 0 obj +[547 0 R 548 0 R 549 0 R ] +endobj + +547 0 obj +<> +>> +endobj + +548 0 obj +<> +>> +endobj + +549 0 obj +<> +>> +endobj + +550 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 551 0 R +/Annots 552 0 R +>> +endobj + +551 0 obj +<< +/Length 1429 +/Filter [/FlateDecode] +>> +stream +xXn7}7cPˣbɩ +vU( E^[[jW !Wˬ򺰋"pg9gx~R8#Tso2~n87$l~ƨeΒ$3U}:6jIvpʼkE5LHC +ω>{Q#I)ҝ'81 ؏&yʒbrhn4`Tra2 ^ݑld +'u*հ)Ȃa5Һjt + VI8͡.bfI&}uV9f \cT9e#0¢3"3R +ٮܻ_ |_UC +PL=% HTXXNaпaQKEjq [86զ; # +CAU#ӂQ%}Gqݬc"a~CBaݼ b4 +8\\ c^t;iژYi: `4 B^$IIM[:Agu7}DQȜ>ų!Sy)t=ސ6#6bpܧ!TE.~L(pK,lH,PhˬY8Uf ~ eox5xU0M3?qI?秼~uF&QD"="nBqLztAݚ kG\=_> +>> +endobj + +554 0 obj +<> +>> +endobj + +555 0 obj +<> +>> +endobj + +556 0 obj +<> +>> +endobj + +557 0 obj +<> +>> +endobj + +558 0 obj +<> +>> +endobj + +559 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 560 0 R +/Annots 561 0 R +>> +endobj + +560 0 obj +<< +/Length 1433 +/Filter [/FlateDecode] +>> +stream +xڽXnF}7_[NU8K( EmT HxRd) Ù #'?=p!cܑTsoq>0OO~2LǛR-[0r2&(ʆYJY?ejy ))7HuI +HxTgz Am-ULMi2}(Iy.hϛ\DISt<ϢVUyK"c1]ߎדq`fp,H?9UY@WbPeaI4 .!ZkMB&d%1msf/O-WYnk ൨~+Q"]n=PwxxJ;[D]{-C^CB9—* +]':]41FF]}oFAH`pNRLFendstream +endobj + +561 0 obj +[562 0 R 563 0 R 564 0 R ] +endobj + +562 0 obj +<> +>> +endobj + +563 0 obj +<> +>> +endobj + +564 0 obj +<> +>> +endobj + +565 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 566 0 R +/Annots 567 0 R +>> +endobj + +566 0 obj +<< +/Length 1538 +/Filter [/FlateDecode] +>> +stream +xڽXnF}7_]RJr( FcRT|HܥDKN" ̜=Θ_././rOoB,]^H4iF0eˋE?_Y$Vm2On'_o3{>]<{n +m]-Lߢig-w$y1MI9,K]e +3.ٙ"|W'3 !ٙ"|L\[0-H˰ |_mCAK~C~~,OKt*!dO|vt|\t䋧$OE29j\b )<l:D&^03w[O7\Ux(ხNP|? {B4arэef+4O60ߡQ*R0|*IER;U֟D6<`xf/O`mXSƐ !'Fv6of5=%Td@`B)'DDK@a%cZAx%c +{m]cx(4/F_c(`R&|Ca{ΐEak(S4y*ohS$vsνPxTkd?D ņJ7 +E^`)$gu')'o24#7>!@Vqd;( mÅMBBi Q3U~r~"}v($$]x T6] [ |PDq2Y!O<@ƵnYg2-|*[h Hse妹 +伉5|wq!ONrHD MhtUfS<c+;8'MDHMYB+=SMw,m׃a=vFq,H߈m\([x#?.K\Rjl49,8zshY)#3 "]`i1?yOendstream +endobj + +567 0 obj +[568 0 R 569 0 R 570 0 R 571 0 R ] +endobj + +568 0 obj +<> +>> +endobj + +569 0 obj +<> +>> +endobj + +570 0 obj +<> +>> +endobj + +571 0 obj +<> +>> +endobj + +572 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 573 0 R +/Annots 574 0 R +>> +endobj + +573 0 obj +<< +/Length 1397 +/Filter [/FlateDecode] +>> +stream +xXnF}7Ƕ@7{<ʲpTRE!(:fKR1!Βe)R( ů_./ O GP )f"M%H-//~>6v~t=Џ(b&+]"1Wzt! 2J$ĀG,nV'ndB 8AI,h `PGǤ>_=!pN T +MM! +jy`k;b[ %TR!gI"P pot}RT CX;>f06X}ԂAFJSHDOz]IQ؂i8R@0+ا$V +;m7(-.Mۼ-s 5eh<}gzw׷ߣfr(NQ2_Kq̘U'zA4{[[y2_%)' meh{ +hL' Pu`Y4|?M#QPٹ45!txbb8ys<NhvӃ4}8􌦓+4qI<_/K=?fhGM#k%\"sJg[ +8`;/ͯT}?OI6qٻ':E<\KD.,4%570X +ơUZ}ȤG=@{h1ߠOR8lROIOWΡsA%õKI9Q/:n֪I2[hŀkK閙@80?T>6)=8+> +>> +endobj + +576 0 obj +<> +>> +endobj + +577 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 578 0 R +/Annots 579 0 R +>> +endobj + +578 0 obj +<< +/Length 1627 +/Filter [/FlateDecode] +>> +stream +xڽXn7}7c[ GE]Jr( EZʒCv$Wk+]3pF zz~rzBS|9=yw!D0,HM'?ӓd+9O) Y>Q ~wNHÑ2)srm2ɶhp Py+Y2]zȿ슬\~=-hkTdEzw{<{WlKk741݌ߣqVeEmQeM1X vfrsG:}LoJ 2`cHl3+m^[`y Œ[_㴘gMǟ751}EU]!b0"*֚*3A{h+)f"acb6qE1<KBLCvk@%D2^*P>#.˽y.a9RDcHMc:GX F.ly +DTP'6;j&+ba,֖9Ƽi=eEh8]U﷿.2{67*1[]3|.y]\S(6ZK3#h7&Vmhha!o}MA& N\R%j6ګm|x~ByT%x\+1qǃ2*ҩK4F^0:q6ƈ"X.4{ (keThbds#/Ja0Ccfz?Q!u :oI$D%(Ǯfl7тP?GëOY]4EU4B|xYnI1ިa0ʛl/rd|+Wuֻ./YW`pD2B` v20\Wd%dCpBʒCb +G(h`<= /g] +^L%,IۧVkBi490!Ъ vx}QmIeN5G.O(ҵePըIs^̇'ⰎRtB*mgDpa^a0Uv71Q-\?h&'(of󷟠||9A>?AѲH F[;/  AmlHJe=SS®6q_ud, <0*rbJ>bm{&n;qWlp5.3XA]>O^)JXԑTA ֕)0ָ)4,DЛ[1[z6D> +>> +endobj + +581 0 obj +<> +>> +endobj + +582 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 583 0 R +/Annots 584 0 R +>> +endobj + +583 0 obj +<< +/Length 1976 +/Filter [/FlateDecode] +>> +stream +xڭXn6we8G$Kqz7)"PlD[[J%9A=J$ֱ/C70뫛A'v}CPV뫀aABRkLꇅ)YV* ?Q#"H +i%'ETKC}\>Ǔ d_J,PX[%Aq5<`V,gz#_Fϓda-/focA/QMaEq4C@eQ 9h8Z揫ϓzT<?&/l@x΁ CiFa\=ލ[lm;zXޠh65^^[痤1sE(4`Ivz6hQn>6>系c*S"[)l=Nmme +P~J0}G04~&ڠSOE f^=L%&G6K%k;$}9%L a9u^ܚ|/E&J/Yo r Y,Kٚ4I̺@YilRa5Y[OPb +>ٲ0?xgTO(97OqbOfV)=Nvk5uA<0̶ǧRjqzH +pgl(NJPߗʋh{*fx0)oB˿jt& )dk؊iwޭps=aʋ='4 A.z5(l2{åۆє+׻֜RVr_[ `EBސ ^|>ŗLBn G cC ?z);{;:OgsaVn޴f2`^s,83T@~,翔mז_ax 'CF)%ag25j:uia&Z'ny%vt_գ~'w /%N6[ۏsb,X΍;@ɮa32<w;rÎ\^2.=.̅* Hq +޲eE,vJa (Ѣ,0#uﷁr;ah"h?p<}j;ѡ}d ,/_Ǩu!KudN[7CjװmM>Mc> +>> +endobj + +586 0 obj +<> +>> +endobj + +587 0 obj +<> +>> +endobj + +588 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 589 0 R +/Annots 590 0 R +>> +endobj + +589 0 obj +<< +/Length 2111 +/Filter [/FlateDecode] +>> +stream +xڵYr6}wIjNQY:#3ڤT# +I4HJ୩AbW7+/wB4Z$Ǿ9  ~-s}5ZJb/Gtr2W(5M CqnBB v$DR nƋ`1N2Ai }4ȣ$F&M%>5a{X{xr<IM$AVs*y>G}Kq,>v ;尛/KX|-WXk][n#+cؘ0. rpF3cR Np*f6xnbNR%^d hC2iXRu 09ZGfAgG ;fqXC:ؗ,%V$tR7Wά"bڶlzFe:V)A4!6 d0LMٵhXUhXѼ>0>b:*.wPlC~\}>5d{NGJ 2>J{LSmmcӺŔs}~,A'!E J|_*Pdw#\sk|)nu r {3aOp`Ŷ;(P "&Ym^z k +kPsRja/;^{!օPЊ U &# zc޹QH8n^ $:]'P4X +_JÎZl/~ʭ#,Bmm;pP&舰e :K!xLnB VzbEVwʼ}ٜLK>B^Z!AMvUC:q)ؖ{W^eڣ}#!ߕW˪tȋ + 59| *Vy(ǔVe(1C攼#xCUȫծ~[G2.[c/{؃#/k]yA{`ʪrZ3qTa0 _sE՚fa}je.y܎d +;0}doQV73qh:|YB,_F"rjV&zuXɶݒ;p@T~pO0O9.f8}KMְxs&}o-a"5;Aѿ=ANXiVVJuU MnkWOnvlվ +k$0:eûOˉr>Ѿs `1q׏ʵ?,R[$O[HYXͦu/d1ܻs4el y:Næ9v\/pibþ[Z#ٶ("9Ρn!:q<7rmendstream +endobj + +590 0 obj +[591 0 R 592 0 R 593 0 R 594 0 R ] +endobj + +591 0 obj +<> +>> +endobj + +592 0 obj +<> +>> +endobj + +593 0 obj +<> +>> +endobj + +594 0 obj +<> +>> +endobj + +595 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 596 0 R +/Annots 597 0 R +>> +endobj + +596 0 obj +<< +/Length 1392 +/Filter [/FlateDecode] +>> +stream +xڭWnF }s?F e|H$XZ.Kj$R`f؂FEKkHwP'Je5 b[* +TmI,m%iqm|P}nhX)U X=g3y]TEH@1U_&W7S7~T '5ƛ4*BOHbZ`,`LNaUah.R(- c}~9QXN֏AIpMjvDp D򖾘o=V嘒JtwnHeS"--3en[ }UTR?+h#itM[Jc&3=9.+gdf[`]-//˥[!z):=p4jۯUam(Zy3 +[s{7YLLiQ/:~ zG `x;3t*?EĘܰ|̾LAA HP-\->v?]fzmߏ!oo/f^5 Lh71݆|P:/>>w󻛸=8т e6oT߼7 \ V6c<#|Or ~T +Ppt,<݃<ѡsW# `~pNM/V1+ey )kىh R?'>n1^nz5 f~+ EQbps"Bݔ%!.N\*#? endstream +endobj + +597 0 obj +[598 0 R 599 0 R 600 0 R 601 0 R 602 0 R ] +endobj + +598 0 obj +<> +>> +endobj + +599 0 obj +<> +>> +endobj + +600 0 obj +<> +>> +endobj + +601 0 obj +<> +>> +endobj + +602 0 obj +<> +>> +endobj + +603 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 604 0 R +/Annots 605 0 R +>> +endobj + +604 0 obj +<< +/Length 1674 +/Filter [/FlateDecode] +>> +stream +xڽYN#G}G1޾_'1mVy2/df C{.51f25֧A~9=y?>=a$|'_NOޝ ˜`d^`sV=tIbLk]9҈QF!%1Ed"*dlMMlwF[J[ioE\WI,Fl9PUHZD,[[a_VPŔl| ¼bMVUB=- p+J@\_^HZ\FFyRB@%inbDy$(Pس6–B e΋S>J V/9 dɁ:blYt`kY|0M^(it<{8@(zFн4Jӎ\^}X?Bpx3Ի<+g<?Nz UU]p,B~ {0XNi<#}( +2INz7dSpf`/8Pc7wq(4tI&J,^sBe ك1<z;{W3tx??{ʐ3{~oB;zL)!!UQբrKiq' Q%n/e]QcM!|6vt;+)wTs0`9BAq4$ʒ8z:3C!5̱ s\6bo7p}O㿝{T) ;xxJyyp-z.u5R섖G[,]ؚmPj`GR>\U`a7$-ڐ֖a#^7|ąTBv Ȓ nD%pb |*PċB-"va魰/m+tt^uLI!f}sJ{ [`fn)sQ^Wd:ٷSAJLma+![n,H=P|xP¢W4 dņ"lUjt`nƽz\2E^!g#VrM{Ξ2heJPP-.pbh*hO>BTnۘ]KU0^2C7x.QMlg(eԥlOF jN(;ge +/Bj2xָߴa:۩_! ѕ)ݨڕ+]_-Co,H&2Ijc1_Kendstream +endobj + +605 0 obj +[606 0 R 607 0 R ] +endobj + +606 0 obj +<> +>> +endobj + +607 0 obj +<> +>> +endobj + +608 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 609 0 R +/Annots 610 0 R +>> +endobj + +609 0 obj +<< +/Length 1922 +/Filter [/FlateDecode] +>> +stream +xڽYmo6 -W8օ7Nmg`(%WP6%Qb/wX <>$~]_de/W7B $Zj#2f]_ f{@bjB=L&|7=܍(^0Y#(Nuľ*,H΄PGa{l0mWqD0 7Qe9 +Ai]% hcb>&6φ㧙eTF(EyaR "+ LdUE ~yLgp4C__{kheqF-^D6/%k-/I 4}3%ÒAJ9My6Eڂz gkK\J*8.rZj%lh7[kOam;`8]’ gBjXՃaM$,Gt6B"eEi/? ^*HjId +ZrPo[O.>=ƞ{@]#nKaUzKE+4|qV-}R(ܳl]dX[[b)Z|8_-4Bԃczbi[ZVkGVՑ{TUV,ID>^U$Ӂm+Ļi5S:_Џ`p; +t|B<^j(-Q~1I`;3%-6-¼(Nv|&CLG_pj̔>ӐQ]mCtgj|] /m..=I&(2|KN B;=TWj[;TC8> lm IA"\۞rɋL&Ґ3<o@= endstream +endobj + +610 0 obj +[611 0 R 612 0 R 613 0 R 614 0 R 615 0 R ] +endobj + +611 0 obj +<> +>> +endobj + +612 0 obj +<> +>> +endobj + +613 0 obj +<> +>> +endobj + +614 0 obj +<> +>> +endobj + +615 0 obj +<> +>> +endobj + +616 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 617 0 R +/Annots 618 0 R +>> +endobj + +617 0 obj +<< +/Length 1573 +/Filter [/FlateDecode] +>> +stream +xڵXn7}7c QTc( +c"Q:3Jr6 g"A{y{xyF ;?{=??#%g."4_ %ib1Sܢ#u~6cxw[40A!%FH)KJ]v+!Eh>9tHe;ѧC-4O-~xng%qFK9^8n ?q: )h-B(.ї$`K,mkz0%g)3L,SwhQ[^)gjOp{} JHY0Fi,y<ˢq'RZ *$K؁Y~Ρ줴3R.¥$-? W[jg+K^h_aSVRKQ^E8{DYn*VEnhq")5NWV{^ +1$ڸ%1? gkb4WK Uso@a$PDZS~Iq8 j/NܘHhߏ#+fWS%XbZ{TICD/Ylf|m\bk(Ek4k9n~X T 6m0&(PAu5FrUQ|'Fc`P>rpC(PjA5=!Z +(w/A|MiT>BcXV YJ-Vbs;jU+#IZ*l0o{ 5QjTK< lӓ& Ge5 `LQ2`e;l>L|Bq ,-hqvx6&=,.MFOOQ~x{W1}}G(q5;0Ch{I7Vg#v%K3%Jl;dxq}Q̼w:v<]&Wܫ(&cp`'R="z)S9e39Ftw™՘9)O2E xU{N1 |8ղA|˥\ +H&h)YE~Q9;Ei++8Yp߯Eݥp2[kM ])'xwH׏/q), !z8/thYݝo7$Aٷ03p_η Bk+^f`M L|0*U? ?ie  ܀Z =*Is;|+Bۜ4ૄ=RT´l=k ;T=u aجrh~$4KלbeYs8v-M<{$Vl[롌j 7&=FU,D^Z,1:^NaZz9Q`T_M$X)HY=~5V\U|&5U߸/[Y5+- NVWX) +=S> +>> +endobj + +620 0 obj +<> +>> +endobj + +621 0 obj +<> +>> +endobj + +622 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 623 0 R +/Annots 624 0 R +>> +endobj + +623 0 obj +<< +/Length 1716 +/Filter [/FlateDecode] +>> +stream +xڽXn6}c[\^%IxKEQM'jmٕ;e+Eġ!C./Ɨٟ-CP G֘*xqyd$NG?./q-9s9ɱ#O1SN +IL[_u0M|nҖzzp0zwϽEKƋAQ9\E ajfxwpKϓ'8.z` -tk22 pm2(L̞&A]f%ahq1UL`2Τz SEk`1Kv0e^.i^ +^ +sC.б>&D2-Oާ>DH"BL6ťl +7&'669BRbM6@rĐ&І&Ln4 lzEY D.8JWV&~)Ht%q)Rxg? h0l%yee)ؼ A X嵨+D nzjr{ K2's ܵUF0(͒(~+P[uk'd=~Np0N~׿Z  5UVM + Q)SD%qg"A %=F`L(1 +"x4ˬ IA6b/td{#).պ E8ZK@Ue_@ibVubT~HdP'\wJ@?h) z`հ +BQ67F9e!TMyL±`u=.;b/NTV`UP'.*N` +lCo=PN%nn!- z-*Xk@?}% YšJ6tt{^6O,_V|5LԋÄ6`SvC#:1R( 5Cn|/bv|5E{N|QSIˎ=ߏ9ˇ +*׺R;VXU"ՊzRХJF8Ҷlݟ2}ޕӷ\d} ~=A{cS ߗ_ %4{{tQ_4]A}9&y'81Aczc-'L<I.3޼hv $$ֹI|N {t osvMDϰ|$0,Wv 'sGe/~0*s_`\3re@bDm/(3 )|z~Q |AS~>f+yغnbt\)\T#.Z1m&{wӅ SCRq=*)0{z DZ?04`endstream +endobj + +624 0 obj +[625 0 R 626 0 R 627 0 R 628 0 R 629 0 R ] +endobj + +625 0 obj +<> +>> +endobj + +626 0 obj +<> +>> +endobj + +627 0 obj +<> +>> +endobj + +628 0 obj +<> +>> +endobj + +629 0 obj +<> +>> +endobj + +630 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 631 0 R +/Annots 632 0 R +>> +endobj + +631 0 obj +<< +/Length 1613 +/Filter [/FlateDecode] +>> +stream +xڵXnF }Ƕhgg4G'q^dԗ-d{u$Cˑ[0dUl,Z9X rqcem(ϡG TmF+!ŹM!<\&qlyu +Mmcf϶Ҿ*kgXB/jR`"Q@-ʟѢ2+HuClQʭ:IkW?x1o6/Ga뤈s(9-15(\Ѳ$ǜ)\x3 混ɾnUTHL̞2[8dpxY@, ;9#ǁrዅ|gVD+WCTsԝ 1JQ~30Z VH0 e`LˏI)cJ |_>CP)|)Gϊd_Z[ hrM!\Kt+}9 +ubBjl4b; ( $>d3Z 3aHa|!={b_$" (d 7nlWl[%$-|>fHJRj)&ث*1՜ +v5)> +۱bO7sHǠČTjhB{NPR{CV)q_dԹ'Ϫ.=HhW6Mv7)V:.!7KyK68ldJln=8WG)iy:ZǞQ^\U {>X&E~NW7\ݰSF8ЈC.+*@JkRzv)n޵^EYf-C^w%g@C` ?|Ύ;?om|)Hl_9fbI?-䌞W~qh8A +V +iS^l9&Nh8O#sn0LVLaDX7Tpn奬oW:{pˣ3.L}lexW4@<΢L}f8wz/YnVXD+a`16OPW8Fp,RU0 + +ડCj3 > +>> +endobj + +634 0 obj +<> +>> +endobj + +635 0 obj +<> +>> +endobj + +636 0 obj +<> +>> +endobj + +637 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 638 0 R +/Annots 639 0 R +>> +endobj + +638 0 obj +<< +/Length 1355 +/Filter [/FlateDecode] +>> +stream +xڵXn"G}G?c"%}\ +˜`d(A5X0ғg?$_lE>{{7$CВ:$1NQʗ,r4M6w.d4%_wcJy¹C騇Ċ)NjZ:=gP!9[Zqf&OL䡰Xl^CUUi'R찻$m얛3ڃ#-a^:%۴\ǟ3F-s|#g9j*/3T2!:dQ?ZS+<'9'ޗI)ҝO 5c`c[C ͍b04YgrEyukƨpRgpNVd ?uu + fDXm8%Z̏)pmƘCES*ɤ/6הּe.O^ּ߼r$T(V{ӿG8c,Q^R- ̓YrJ%z+dNbs-3*f l)-6ߢ3η%>lBX7x1 +-UM4k7208\֣n䧴$̣K^) ,S6__m\M7.{xL6O$fIZ݇^p{v0ܽ /ڒo0BӖS&.Bqo&_ :~RzMUtH!Gewx=WÆZ +bp|[*!U9R Xs> +>> +endobj + +641 0 obj +<> +>> +endobj + +642 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 643 0 R +/Annots 644 0 R +>> +endobj + +643 0 obj +<< +/Length 1227 +/Filter [/FlateDecode] +>> +stream +xڵW[oG~G?cZ_ `ʵ]600V~How]J,#t3g}8J+!-7ÁHÑfS&@}G?t++U~wχbx5L'(ܠ{rq^mp7va+P#jk;Z8FVCi9;4+B߮W \ 9E\;/aM*̸4{k,9+ +dVE(WK8r*Zfy c4A(t.F!_>AqnA'cD>VIx_v)&ū(<ʗ,&2N+ѡYO>F Ț !p} 6\mb6 ,?U*0 +`e`VC %P %.jP寿 hү.il%*֚*p.%0ΌP +XF +y+)2 1;T1T,^̃lKSg3e[mK1 Z@D:L-}ꅦb-8Rl`F:J$˦Zp[ޫU1BձX)U lY={Xn{ƹ/I3m;vr3E`޹WGIaYXuqUiREVUI_EhLX4!6طPƙj,bKCzKa)^?n0~|-CcŔF&+a80┶ZicAyKazvr-ղw̔Zi½1#}#Lsj]ńciy)\rpX(bxXŧqr5W7vUO٤.[s: qߔV7zra|+$RS璧oP?‰UY^XG7.4lt\yhAZ\ {68G'XC +,' + |TmlYiIR7uԴ)ml2]F7~L>a-\5u} +-I 7yzB +b4X_[9Lĥ>?حGendstream +endobj + +644 0 obj +[645 0 R 646 0 R 647 0 R 648 0 R ] +endobj + +645 0 obj +<> +>> +endobj + +646 0 obj +<> +>> +endobj + +647 0 obj +<> +>> +endobj + +648 0 obj +<> +>> +endobj + +649 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 650 0 R +/Annots 651 0 R +>> +endobj + +650 0 obj +<< +/Length 523 +/Filter [/FlateDecode] +>> +stream +xڝn@xljIkGڴ8'T*]L ^Vjuf|-8b}C} `L0H6q$* Phr!G/:Ry{_pm:+ ªވH^pbe *i:ʴͫ9G~BV6y`SEЮ i،MǼuYٮmG9 i9∷qB,z']ZkEpJ;t9flo~T!ђd#*@ t<.c Xon $:zĐoc:J"I qǶxmOG턃pn5Cì'#"S5,x܂~yhzA FӴ)Qo{!)vb +W +4Jp!fPkGJ5'`҆BVP{y ˬW\Z._Ov}y;_|&QY=8SvTǣ)TLj;Tv9&T'xPendstream +endobj + +651 0 obj +[] +endobj + +652 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 653 0 R +/Annots 654 0 R +>> +endobj + +653 0 obj +<< +/Length 1644 +/Filter [/FlateDecode] +>> +stream +xڍKsHwevޏ@IYEز] .oK |s͏wO? "^3D5(}`ØFH,(}#Z=?DWa=ZL1cHibfGm'0'_=z/z%2!|Kn 3k՞XW. &$զW57s&=d`2YxNQŔJQ`112F +%G&a6Is)M3/$S& (dl)K)\S6}H +v/h 4M Or +ðڸ_Gݗ 0NGxHe0K6Mx6fI!9H~ +I|ǹRqGl4nB@(Ǵr=q`r$As*̵=y}̙40=n(ry|q.iAH|phj2~ SHdzt6M$B%iModGtgIOg bi6,Q, (f<@J}hQ%3D1fd J̔`:V&.Y|6JjY4yA| 2C0LMV`#AGl|U:,_U(Vt]ct=PۃCǰ.כ+M;}\s\c lozT(h<o\GSӼ|BS)1XM:츬^/M+'%Azb]_hțr}/^ꮥ{F\ JbN80kW[Fp)qj<HI[ DR{I,d]r>JCRQ "*ć).* d\OP}bDMQ#ὂCb1E;ė C>B:qꌺQɿ. >&\.3@& W[u_Aj 5F.F) >ŸeO)Ұ(Z@i\ފ/uxjqy=8\VbB8¡ =0И[,:넆lܸWŦ| ZՉuc kВڷmnS(.nj߂[t_~`q{CwJWN`-9\tcIP9l%k%K {طpSs%67oۛE^ +; $nN?R1lv9HOű7rz nhBa#=Kw'$3679?}VZ{BzTd"sg b@59󬖌YFܸ2:l`>5GgV#bPFytY\t!ҽEL [>5_~ym[b^rMn7Z HCҢeEb4zGWg A`Jv%_DS\Fш}4=)ڱ>՘3vҝ zUN$pxhVgJ Ʒ׎jpN(=fR7M/J̗moOũR8%JU +L/O(Xiܹ%RKs S9lML\;?-Kendstream +endobj + +654 0 obj +[655 0 R 656 0 R 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 662 0 R +663 0 R 664 0 R 665 0 R 666 0 R 667 0 R 668 0 R 669 0 R 670 0 R +671 0 R 672 0 R 673 0 R 674 0 R 675 0 R 676 0 R 677 0 R 678 0 R +679 0 R 680 0 R 681 0 R 682 0 R 683 0 R 684 0 R 685 0 R 686 0 R +687 0 R 688 0 R 689 0 R 690 0 R 691 0 R 692 0 R 693 0 R 694 0 R +695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R +703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R +711 0 R 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R +719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R +727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R ] +endobj + +655 0 obj +<> +>> +endobj + +656 0 obj +<> +>> +endobj + +657 0 obj +<> +>> +endobj + +658 0 obj +<> +>> +endobj + +659 0 obj +<> +>> +endobj + +660 0 obj +<> +>> +endobj + +661 0 obj +<> +>> +endobj + +662 0 obj +<> +>> +endobj + +663 0 obj +<> +>> +endobj + +664 0 obj +<> +>> +endobj + +665 0 obj +<> +>> +endobj + +666 0 obj +<> +>> +endobj + +667 0 obj +<> +>> +endobj + +668 0 obj +<> +>> +endobj + +669 0 obj +<> +>> +endobj + +670 0 obj +<> +>> +endobj + +671 0 obj +<> +>> +endobj + +672 0 obj +<> +>> +endobj + +673 0 obj +<> +>> +endobj + +674 0 obj +<> +>> +endobj + +675 0 obj +<> +>> +endobj + +676 0 obj +<> +>> +endobj + +677 0 obj +<> +>> +endobj + +678 0 obj +<> +>> +endobj + +679 0 obj +<> +>> +endobj + +680 0 obj +<> +>> +endobj + +681 0 obj +<> +>> +endobj + +682 0 obj +<> +>> +endobj + +683 0 obj +<> +>> +endobj + +684 0 obj +<> +>> +endobj + +685 0 obj +<> +>> +endobj + +686 0 obj +<> +>> +endobj + +687 0 obj +<> +>> +endobj + +688 0 obj +<> +>> +endobj + +689 0 obj +<> +>> +endobj + +690 0 obj +<> +>> +endobj + +691 0 obj +<> +>> +endobj + +692 0 obj +<> +>> +endobj + +693 0 obj +<> +>> +endobj + +694 0 obj +<> +>> +endobj + +695 0 obj +<> +>> +endobj + +696 0 obj +<> +>> +endobj + +697 0 obj +<> +>> +endobj + +698 0 obj +<> +>> +endobj + +699 0 obj +<> +>> +endobj + +700 0 obj +<> +>> +endobj + +701 0 obj +<> +>> +endobj + +702 0 obj +<> +>> +endobj + +703 0 obj +<> +>> +endobj + +704 0 obj +<> +>> +endobj + +705 0 obj +<> +>> +endobj + +706 0 obj +<> +>> +endobj + +707 0 obj +<> +>> +endobj + +708 0 obj +<> +>> +endobj + +709 0 obj +<> +>> +endobj + +710 0 obj +<> +>> +endobj + +711 0 obj +<> +>> +endobj + +712 0 obj +<> +>> +endobj + +713 0 obj +<> +>> +endobj + +714 0 obj +<> +>> +endobj + +715 0 obj +<> +>> +endobj + +716 0 obj +<> +>> +endobj + +717 0 obj +<> +>> +endobj + +718 0 obj +<> +>> +endobj + +719 0 obj +<> +>> +endobj + +720 0 obj +<> +>> +endobj + +721 0 obj +<> +>> +endobj + +722 0 obj +<> +>> +endobj + +723 0 obj +<> +>> +endobj + +724 0 obj +<> +>> +endobj + +725 0 obj +<> +>> +endobj + +726 0 obj +<> +>> +endobj + +727 0 obj +<> +>> +endobj + +728 0 obj +<> +>> +endobj + +729 0 obj +<> +>> +endobj + +730 0 obj +<> +>> +endobj + +731 0 obj +<> +>> +endobj + +732 0 obj +<> +>> +endobj + +733 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 734 0 R +/Annots 735 0 R +>> +endobj + +734 0 obj +<< +/Length 577 +/Filter [/FlateDecode] +>> +stream +xڍMo@^&;5G6*d UN(rR)JMfμ%8qY=~L2΅d82H 8z|ϊq {CiVx><>&.ѷiҐn5fI&,KsF:H* R؃ҭ;Ȗ̌@&2g(IimT5?^Nw"s&8qNHXPB3y'y?Q%^.ЁFM%Gv+?cnm;)KV)s\)KQˆ]_1W(ZUh]3 +B`WGÑ.)‚ٶcT?ʟWUY`HqZ|?,w8҆@֗#YfHNc~3aT8-PSE/_XM2t*r 6(r̐okq=UUs0ݿ2`5ehSN]wx.MX>M'+R .XHNW[ab WO#aupDRʄJ mgWendstream +endobj + +735 0 obj +[736 0 R 737 0 R 738 0 R 739 0 R 740 0 R 741 0 R 742 0 R 743 0 R +744 0 R 745 0 R 746 0 R 747 0 R 748 0 R 749 0 R ] +endobj + +736 0 obj +<> +>> +endobj + +737 0 obj +<> +>> +endobj + +738 0 obj +<> +>> +endobj + +739 0 obj +<> +>> +endobj + +740 0 obj +<> +>> +endobj + +741 0 obj +<> +>> +endobj + +742 0 obj +<> +>> +endobj + +743 0 obj +<> +>> +endobj + +744 0 obj +<> +>> +endobj + +745 0 obj +<> +>> +endobj + +746 0 obj +<> +>> +endobj + +747 0 obj +<> +>> +endobj + +748 0 obj +<> +>> +endobj + +749 0 obj +<> +>> +endobj + +750 0 obj +[/PDF /Text /ImageB /ImageC /ImageI] +endobj + +751 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F1 +/BaseFont /Helvetica +/FirstChar 0 +/LastChar 255 +/Encoding <> +>> +endobj + +752 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F2 +/BaseFont /Helvetica-Bold +/FirstChar 0 +/LastChar 255 +/Encoding <> +>> +endobj + +753 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F3 +/BaseFont /Courier +/FirstChar 0 +/LastChar 255 +/Encoding <> +>> +endobj + +754 0 obj +<> +endobj + +755 0 obj +<> +endobj + +756 0 obj +[107 0 R /XYZ 230.1367 723.7257 0] +endobj + +757 0 obj +[305 0 R /XYZ 42.5197 729.4939 0] +endobj + +758 0 obj +[311 0 R /XYZ 42.5197 706.7178 0] +endobj + +759 0 obj +[314 0 R /XYZ 42.5197 729.4939 0] +endobj + +760 0 obj +[314 0 R /XYZ 42.5197 657.1125 0] +endobj + +761 0 obj +[483 0 R /XYZ 42.5197 642.3526 0] +endobj + +762 0 obj +[314 0 R /XYZ 42.5197 470.3586 0] +endobj + +763 0 obj +[319 0 R /XYZ 42.5197 584.6804 0] +endobj + +764 0 obj +[319 0 R /XYZ 42.5197 264.7766 0] +endobj + +765 0 obj +[462 0 R /XYZ 42.5197 367.9809 0] +endobj + +766 0 obj +[469 0 R /XYZ 42.5197 530.2436 0] +endobj + +767 0 obj +[349 0 R /XYZ 42.5197 674.4992 0] +endobj + +768 0 obj +[305 0 R /XYZ 42.5197 657.1125 0] +endobj + +769 0 obj +[338 0 R /XYZ 42.5197 399.6334 0] +endobj + +770 0 obj +[327 0 R /XYZ 42.5197 317.0927 0] +endobj + +771 0 obj +[327 0 R /XYZ 42.5197 141.8988 0] +endobj + +772 0 obj +[349 0 R /XYZ 42.5197 400.5933 0] +endobj + +773 0 obj +[349 0 R /XYZ 42.5197 225.3993 0] +endobj + +774 0 obj +[536 0 R /XYZ 42.5197 524.9784 0] +endobj + +775 0 obj +[544 0 R /XYZ 42.5197 706.7178 0] +endobj + +776 0 obj +[582 0 R /XYZ 42.5197 524.9784 0] +endobj + +777 0 obj +[588 0 R /XYZ 42.5197 562.3902 0] +endobj + +778 0 obj +[608 0 R /XYZ 42.5197 578.4635 0] +endobj + +779 0 obj +[308 0 R /XYZ 42.5197 729.4939 0] +endobj + +780 0 obj +[630 0 R /XYZ 42.5197 706.7178 0] +endobj + +781 0 obj +[622 0 R /XYZ 42.5197 541.0517 0] +endobj + +782 0 obj +[359 0 R /XYZ 42.5197 459.1199 0] +endobj + +783 0 obj +[359 0 R /XYZ 42.5197 283.9260 0] +endobj + +784 0 obj +[500 0 R /XYZ 42.5197 645.5525 0] +endobj + +785 0 obj +[372 0 R /XYZ 42.5197 653.1607 0] +endobj + +786 0 obj +[372 0 R /XYZ 42.5197 477.9667 0] +endobj + +787 0 obj +[500 0 R /XYZ 42.5197 330.3641 0] +endobj + +788 0 obj +[372 0 R /XYZ 42.5197 178.6495 0] +endobj + +789 0 obj +[382 0 R /XYZ 42.5197 653.1607 0] +endobj + +790 0 obj +[308 0 R /XYZ 42.5197 657.1125 0] +endobj + +791 0 obj +[504 0 R /XYZ 42.5197 304.5576 0] +endobj + +792 0 obj +[382 0 R /XYZ 42.5197 170.7674 0] +endobj + +793 0 obj +[388 0 R /XYZ 42.5197 641.6007 0] +endobj + +794 0 obj +[531 0 R /XYZ 42.5197 645.5525 0] +endobj + +795 0 obj +[531 0 R /XYZ 42.5197 249.9976 0] +endobj + +796 0 obj +[388 0 R /XYZ 42.5197 107.4339 0] +endobj + +797 0 obj +[402 0 R /XYZ 42.5197 154.3599 0] +endobj + +798 0 obj +[388 0 R /XYZ 42.5197 282.6278 0] +endobj + +799 0 obj +[408 0 R /XYZ 42.5197 472.3885 0] +endobj + +800 0 obj +[408 0 R /XYZ 42.5197 237.0504 0] +endobj + +801 0 obj +[308 0 R /XYZ 42.5197 555.4676 0] +endobj + +802 0 obj +[565 0 R /XYZ 42.5197 610.6101 0] +endobj + +803 0 obj +[565 0 R /XYZ 42.5197 231.1285 0] +endobj + +804 0 obj +[417 0 R /XYZ 42.5197 589.3659 0] +endobj + +805 0 obj +[577 0 R /XYZ 42.5197 259.5376 0] +endobj + +806 0 obj +[577 0 R /XYZ 42.5197 645.5525 0] +endobj + +807 0 obj +[417 0 R /XYZ 42.5197 260.7145 0] +endobj + +808 0 obj +[429 0 R /XYZ 42.5197 706.7178 0] +endobj + +809 0 obj +[429 0 R /XYZ 42.5197 383.1695 0] +endobj + +810 0 obj +[429 0 R /XYZ 42.5197 207.9756 0] +endobj + +811 0 obj +[437 0 R /XYZ 42.5197 129.2391 0] +endobj + +812 0 obj +[308 0 R /XYZ 42.5197 453.8227 0] +endobj + +813 0 obj +[603 0 R /XYZ 42.5197 291.2802 0] +endobj + +814 0 obj +[603 0 R /XYZ 42.5197 645.5525 0] +endobj + +815 0 obj +[437 0 R /XYZ 42.5197 304.4330 0] +endobj + +816 0 obj +[453 0 R /XYZ 42.5197 729.4939 0] +endobj + +817 0 obj +[453 0 R /XYZ 42.5197 657.1125 0] +endobj + +818 0 obj +[453 0 R /XYZ 42.5197 390.3962 0] +endobj + +819 0 obj +[483 0 R /XYZ 42.5197 177.0822 0] +endobj + +820 0 obj +[453 0 R /XYZ 42.5197 119.1666 0] +endobj + +821 0 obj +[495 0 R /XYZ 42.5197 489.4486 0] +endobj + +822 0 obj +[520 0 R /XYZ 42.5197 706.7178 0] +endobj + +823 0 obj +[308 0 R /XYZ 42.5197 352.1778 0] +endobj + +824 0 obj +[500 0 R /XYZ 42.5197 729.4939 0] +endobj + +825 0 obj +[504 0 R /XYZ 42.5197 626.6834 0] +endobj + +826 0 obj +[508 0 R /XYZ 42.5197 508.9051 0] +endobj + +827 0 obj +[508 0 R /XYZ 42.5197 169.9991 0] +endobj + +828 0 obj +[515 0 R /XYZ 42.5197 443.4507 0] +endobj + +829 0 obj +[520 0 R /XYZ 42.5197 351.7384 0] +endobj + +830 0 obj +[525 0 R /XYZ 42.5197 594.5368 0] +endobj + +831 0 obj +[531 0 R /XYZ 42.5197 729.4939 0] +endobj + +832 0 obj +[544 0 R /XYZ 42.5197 208.7874 0] +endobj + +833 0 obj +[559 0 R /XYZ 42.5197 319.5919 0] +endobj + +834 0 obj +[308 0 R /XYZ 42.5197 250.5329 0] +endobj + +835 0 obj +[559 0 R /XYZ 42.5197 706.7178 0] +endobj + +836 0 obj +[550 0 R /XYZ 42.5197 441.2287 0] +endobj + +837 0 obj +[572 0 R /XYZ 42.5197 513.7148 0] +endobj + +838 0 obj +[577 0 R /XYZ 42.5197 729.4939 0] +endobj + +839 0 obj +[595 0 R /XYZ 42.5197 594.5368 0] +endobj + +840 0 obj +[603 0 R /XYZ 42.5197 729.4939 0] +endobj + +841 0 obj +[616 0 R /XYZ 42.5197 729.4939 0] +endobj + +842 0 obj +[616 0 R /XYZ 42.5197 633.9925 0] +endobj + +843 0 obj +[616 0 R /XYZ 42.5197 267.4532 0] +endobj + +844 0 obj +[637 0 R /XYZ 42.5197 729.4939 0] +endobj + +845 0 obj +[308 0 R /XYZ 42.5197 148.8880 0] +endobj + +846 0 obj +[637 0 R /XYZ 42.5197 657.1125 0] +endobj + +847 0 obj +[637 0 R /XYZ 42.5197 302.1332 0] +endobj + +848 0 obj +[642 0 R /XYZ 42.5197 626.6834 0] +endobj + +849 0 obj +[649 0 R /XYZ 42.5197 729.4939 0] +endobj + +850 0 obj +[649 0 R /XYZ 42.5197 682.8458 0] +endobj + +851 0 obj +[649 0 R /XYZ 42.5197 612.9434 0] +endobj + +852 0 obj +[649 0 R /XYZ 42.5197 543.0410 0] +endobj + +853 0 obj +[649 0 R /XYZ 42.5197 473.1386 0] +endobj + +854 0 obj +[652 0 R /XYZ 150.8227 723.7257 0] +endobj + +855 0 obj +<< +/Type /XObject +/Subtype /Image +/Name /G1 +/Width 1275 /Height 1650 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Length 171350 +/Filter [/FlateDecode] +>> +stream +x[pa$V I^:wtMm"B˛hO\U+Kw/: nkr؎ʅn +Bk7l{zMDmWaZ]xH{HQ4[Mb +/ jږ+V841 !niR)UJ 6z aɤrkAa + 7L](vx6y7,B)"#Ub%*։dXHF E&*%ɕE;w3/e'U{yg,B}2ثJ}ҿV 3,, 78D" +sBF8(e4'y%,^'/J-fCONwV>Y͏K"W4}pE*mR"Skof:KDxq\)fjdM啺=ʙXHu&:LލթzkFz[Ϩc,"Ǧr¿ۅ/|8*]w #]{WÅ;CIYX +ojt)jN?J9a[՞_ݿއ CMM;䶏o\M&#w?Xkݛo.-fhà tv(廊]MۇM; +<9/ة8Kv p"I +VRHn˨j3V*ԅWwg5]U?~bsw[Y|ow=iۗu=r}rYnrzZn_鿦4M^_-7d}Kouw*wom-޾/_:䷕7u m~l޻f#SC`Unkv:'ܯc-s!Rc}e׀7Om`675f-޾o?7-nztԢO{~!SP/}( Mroh4j&A=C>8r2A1eݡgp{g{hgGG47(+Њ|F l2߶)L9iR]0Rb*p_;Xwחڶso +uQ9)fyi\Na6ߌDb5/Ǭp]XU24Iqvb +ۈfnR;Iub'x{{R^?>vϏgS:ou5[S?{97^TKެ\ߛ 7t1cS:~BdlЫMrӞL)ݔm 4rlnoN%o=mOu3ݵwxNY+8.+]JR.~EFK9|SQ4'Bv#HƑBcW7_Fn{ζ\eVM}TEɼuEB{fnY_2[%\VOPxұ}_7aOL'_9+^ۣS/yB&N~1/L8qʼniӵ`2NS/Ha/G'_|ibʼnwt^^ىɯ3y_LejM "1{M]Zrp]]3R3L]]j#{gnX]w\LԼGTguA,u>y`O֢yQJ ҬTz?V3sYqv^gm:VBs*S7М-ߓ2#gg|DJ{nB6[5Ipvs$TR{uuB~?XZ;6iqX}C[ܧx\8wh1ֶ֭%mR9x[ MQsipkr2h 7[jA!_XUAa>_煊.mUj6QyzwUy` J@gc$;$`6&3݉fH^@!$$~C81;~>(*T})룺N;Eii& oܞx%gcsOFqsRgccIK)TB"Œr.ħbSĉXh,y$M{YVY8 +z2!  q#foN~tDuLT "TZP#aӃ~Rԁ +葹.iQ Q(ِ ؀uSa5>vWm{Ĭӂ9a"^⋌i&@  +P\)Λ,9B ,^y!P^͉:gq3o9aZ7!|񧛗m]%e:Kt869sXǏ_N|q$oG7s81@ C#HOW-fލ ኆ5m=]vӵѧj{G+"H#ò74Dnh_oﯴWmhyC ")-km]>1XQ穨V} ^:׺Feֽ__P]RhCcO%:Wa2ԟuu`PۈF{)o~mnqk_X9Ǔ@ CxEGחS]EebZ:ڧe]Z[i`2~#0^.3-ˉזv!g2 +393R.š:C˴#@zʉd:X#-BcFedOEN#TS&ĠvCOuhҥ5ӭ]Jв]yQXx|Hy,ҹQl2SN@P㵝/^@ '5ۊ,M2GU~-Q֏B%dtPKuWo)$WB{N-Ra v%ݧZ*f@]L*0 I +^ + /ffߤVr. +ʏz>=aJʽduԡ5S&~Syļ6hplxv=0_بLoavA=@ +舞RjjRiOwݍ,L4@ `x[ob|ڴWt}*?FR#Wl^zLeVD5Y66Y 5LK2vղl1 g~5+fsTM}au詋V6-e{ߖs͢%'pix) *'%3y-\ OZ$q %@ =/2ΊJ [AJ+ +Y(fԼ5]JJ$^8K%Œ% ޾?8&>KĒc.!r BХājyx4~|tؕ-2gy1 %}A%_A87/>ySƏ8?zS,wRCNKMJX@%tcRcNQb)2>+E\9G,lQ(Ӝ l|sm)7vo2ܢ͵߃_02]@ p?]~Y$qq٦/^O t~(3HXMT?>;]%$<#qx4<. Ѯ+XG&ext$8:/#X#G$Bf-r鳢qtLGcE +o'ϷAy^>_a~`p(K+E^@ p^X_S:Ll6rvMطf9Abw+ϓp>΋r\6M "/[AAal.ljb& p(cQbZiW4vk6{{~9%w30,Ϣ&3p; @ Y/}=iNYh\F  W^ؕmGhvq.? ̇{ɘf@ p?{^c|VBm*MoO^Y\DT ++Ap +Q-Dz6(ֱ.VSN-QQէAiqN0 -eP%a:[nAfʽZfKm޿z-/;'W?/3R䧶fO\C>-MBޫIVe y` iQbd,s吳SՙfSkqhhRMEHCws+xx#gJɱyl9x2|fPE+ggq'0;E< ;D_ɸ;Y)<瑿c]*q&@  ܂ŶOHZ{+o-WφWøaߧ0-ۭa;N ۮ+ұ]jڡcZ:}*OW>(n%[ RB(Z,az}J@!QQ^#pֶ~|F,u+׾n\zNN T:_|lNHsbxblupn` /Er$3)qLYQT+ +<7[wѳg%^LAVS]JKkskq-+m;Z_zoR5Nmy?u>ɺp4qw?< x&n&;YXԂ!sqa5fQ\U @ `߼elKc O,KW8=h%X +IyCYkթ3͜l̬: +(w{~~k'kw~Cc:mc-I>{̅+}`{]l MLǟܸY6>67aX¦]X?uϢwYADg[\imWv]{ +JKq]ʽ,K¥o5|z^_7okz3M6uyVK'3)nHp!wp߄8߉,u9?1?1/~sAYҊ(:ݔzOcP?.1_口v=B˄ u.aI".YƯ/~_wf&-]gp\6ih:}u _l>u/׷+.^smW'nN2+g'M5?Ai"zK{1uk3Wl %>%.߷ 0H5/7Y|VV(o#,40u)FU= +羅X%;u +Ώ&yEA ]06l' +^4j҂yAsF +2ϹDz 9rRdЄEMZ|W<|ԫ49w*~!XEuDd)fohǵVƮ,e-շն{MGWevC\b}s=VdAd*/^=/FTUbgO.#׎" lee9ve+0<7xsl@x_aa|- >L #+W/oۯu"' YFe,8ڃhd'A]Y|CVILbaL}1 bRJ?o޲7KߙWm;i+ܳӮ)-۱Q;a= +q"E!h^Ygo@08/Acɚ]9ӬƘ玟l\G 2Jw^n6](^evB[Kh\{LLQBW 5'Z6}L|-aV YV Hvؤ8 qđMNmynGNlam}~zHl234D-Qń_ 91w襎)<^M"t/L`1^HFL ^U&§ +)Q a'V|Yo-̐ğljLN0۾]v-vWolUtoRvEͯbj˲@{ώv﮻[wA08/b<*nWtKAEZG mO)z,z$ZnNVZPGR=~WDIIiQQwg9v끆=OvQ.~MRI+몑jRW&|9[Boc^sͭ{ Z@[SWq J2.ɮfXuHgE--"WhKA ,;N$D0K#&즓e,->cֲ>fkqzޚ7;\D'ڈ( +A)xErQ((²QE(C/Kx@GUv3JX f71RPj>p*?ۭw4lgtp&t)U%'և*W!0ҽڪ(ڧŮ`ܽk]1v6XliX{D`ĵH9梖[WpO~:"e?iޯ>XZAYVay -mvƺ1cۄ!QhziTR!B .l0obI^pqGGʶ)oֻpbm v%f2֕L"]U#amj`QWN䑩_?g HwB"mX8*F徲ٰeeaˣrvZ(mkVBnjdfDWb'w|̺PNk_,|2'<ⱕOy>lƒv:IF91ffxN)65#pi` íXU]V*wWkE=oʷUXUXmȱUlؑWAvk=UlUٶʜ%篷Mᰒ*hP}ڈ;1Q SER1̕Nϫ`~x MXhf}]BC-x๣\2ޮI}}M_ o*^Xiz9ym]֡+s*Y˷Uw砼;fQa>{/ Uk$"Yrb'aWYvШ@sTei@ZFF\QAj2- D2/ +y6>|󮪜Gu }U "`!o1 jƄ *=E>[/f466UEy6v~E!hlTY)b;mgG{ڮ`WZ&W_>lQ|Yw7PCk}ND1s2c c"wZ%&x,=e{WxxWD}}f)߈;ͫ}&0='_Sr4pp*[(wG/'$Uգd6UH.L#/FjHj~᫆[V[VWV_Z}{JO"XG#҆e I1˓˖kbWm>ا);:/rӉ_niaWaA_wz& VUVTU {koC+-u)k &N͓e^TYy;hk\kʙo` K w'²'oq[Z0V~avSu{[9Q7n3.`p +^[A!d,ª$)5jm.I-Idj2Q+v$u\xdcѱu<>>iNHbgN2ʼškJ;_z喃>fZkN|2=3eo*yM;g_|Cj; Tm +X%{h9z 4A)3nĥ$ZP18g`ܼ5tS Hf^YR?Q&+Hľ6,ѧYy6Q4Zƛ*aAT+6a&?}Իĉu Ԋ Qzx1 )b:V2 )F-  +Y12tЕ/4)ftq象ύ,׼(hQ ☐G΍NzLRƛ3>g-1-Ή[?:Gy4"JQf)MU@mK! ō@.%b%>/I>G2 Yz|ޫW1!%!Z J 0(_,1/|Džx\E5N/R R,MoMR\.A^ !-HiQ81ORQQQQQQQQQQ-%*ں n?:ZrZ_96֗oqwirr껳r{3#gDEEEEEEEEEEu2/$ylm4*Sl9`dfRIfwD3s5IQ[I oǿ|,EO$Gi`xpz4d\YB,! KخߡԤD mwhX|vmg %(z!Ik%0IJ2FflgMgxvp +< +~rT\a﮲k=0 C•%P xYɊeDhy@ +G0ST(O2xTp9B&h]#<mA Sc5$䇳lN8 cɹ,~KdG2H2?JQƥDvDb7cTWmxnkeq@YtOQ, GW{Wk̦V .)پ0n3 SqtYD#}>4ni*=p|豗+~sɧ#U +.&YT; xE:Dj]!:~~NJ?_3P(V`l͎b\l%C^iQl&1J6Sɒk#% &Cp-0@8aJbHŐ݁RE_ ud@C$ !  0 I-0ш4 [A d 9O +U_`k@%S>J# 8tii4%/@1I& N _"&Q$B.pK֝U*XJjKpF5D}s.'<c 0[Wb3Y&QZ{K:~{FNTf.3wtc82Veiciol+CJ*@\TC&Ilr*XxߏAx }3.i7~]Prscau}$`ktͅW=kE}G[.B4и|>O^3մ.oGyݏ&-\rZAVǿװ#0`!ļ^)l5hx=_0Wgl{10tmYg^N@;47j A C(XͶ) +Vș|3Q\*OHHK KȒi"5Yr6K>͊VeŨcT9 +UV熫"lMSJ&U+H&[d}fBfo2C Zbg**e~ /z}-7/\5KϬK]FJ\AdB.8PX$)~z8g&g@==) t {+{l\C=֥3)ܗpGlY]ג^-9ЅxLj4ţII+=l 'c0_}WR֯'EܗQQwp&YA`#ko+M8ꉯ\qpU'c@QE x=ܿ8Wg<@,0< +9Tx~?.ТU+rUyl#'3/T;Wn^<#zeMt}lyrqyw*ig)W59ѷ. H!i! @/"m]=\SUC~cI^Zj5ޮ}m{sV@ `]ԵZ $Hm룺jWv o( !$IH H2sg&i Luwgw笮E-WBH2sɝ!g)gydνwN>nڎuEwsg>ԟߓBfQS}AN:$ f(/l0] G^ImQWo'Fgc yB&FLw:4u1B'%%%%%%%%u /š*j{ +==D )rwwƌW'8Ƨ\;Ξ;ޑCxmm8[x0',^4.ԼIoޗ}#K)r`p1}/6oo^ 6D. gdC[g/U=㖞pz`nIo_`_G3]U-}yS&Νj_}=-%+W?mc3f>Gs_-Z5a{]cEeU;Z*v{'s{qΙOVxZ6+{2^g3맛6lwUykwwmQyN #ihRHjL:{EC(tH<˱WFܫG lQe1}c6dùݗ$:.]QZe({cMyiJIIIIIIII%]ПZ4bOU= fA(0M}.{9K':W,Fv IlNt¹zҳnN^01-71mti7ϭn |{>SYoGzC`ZWbKϷi܅u GBzws^  ǒI^9 Q/m۷ٻ½ƿѽ{gc9^oVc=[TW*-vYow۶.*":toݛ 4SUU0p %UւLY2Z%9Jܡ +WޫW^~FdB_$m])@F#U#1^N8l`,1.nB PCϊh,(E0\k hîbg'rwz(Pz +Dd/(J' +ߡߛyߔݳ(uj˟{nW;m7Cr(ȯ.o/٦(ݦP߽@is\bߡro杍C==Lk==5͗`LJP@xX!^W{1uՃ0 f0ltxdR%ky-gy3L\b_4vT,J@C{Kc2z>ѶoԤj{5xGQR<86yfჯX\oSl +~O^ԍ0W&iw[ 5 +eyBiڠ4z[ʔr`ǩnPVVVn)WZJєR 4(V%,I_i '-5 qN4Is9"ؙUJ=%J#޻e힆-ӈ~6LK={!5H`6tl:0Bl`!An#ax1YCFK0F*fZ'>D'|ك +4B]18׮}6֐1qt^ϗ㱀J\}l$% (k~S /,XŹ$|ҜQTk+%%%%%%%%u/I1Bn{6)$ٖ'ٗ$%_Ir̝;%}TdiڮhZ)ilK'͟\7r$IvD)IE)EE%9'M궴Nɘ79cQsEw?dsv﫬>g! +W3tFy@°g]^S)%}|z̧z3?eNs8OCO%-A:a@`a 6y| e_ab2Rϋ"&fx 5浘#;7bb`L"<_>E[idkݹ:Z_ +b:lD.X~eX=~Z$g=]6#)~P 4`7#dl$NмfBo ѐyW11F$%jD 03f=}k/-It١Rcusqҗ'8VtZF}$ 8gu7;֌K5.Z*9޹q8x{V-+XssF95qoɾ F gN '1myƳk?<;'?SPgwY\s/ݻ`w V ONhmLi\Ws&ρMަo~X^.ey<u`  YB `Hc{XgK bA +;A*Ru ?jČ.`ee/Б&} ~1{SFX0U£% cj2)F]ę:; 18C2Px@, t]cln=ũx-ȹC=4$-6 %D-k@^= a":3#^v<!M61p1sj<̀$Ɏ3XWN/\\\ ;^s,dG[5z#kBF-y;/fB^?8sbNMqvM9S+x!E:w'oS=AD?:rvVe W{'t/f<_?Ou/M=#t>'JpRp'Q\)1bLm^$/у@DCTSCp0ӹ;!.̀7s43qG,fȎ6 ;P,:1낭n:PV,@!HPXbI[&R[HUG+g3-kqXTjXE=UX]E p?s pµhgt+cd5'M/!לepnO OgF2_sґ|/*V:@^m+W]OfM睏gMvɼ+.o+`Kƃ3ё3ѹ.Ι}ĸˌuq6WyO4P.\s:(lWb!Ic/住>yOXu?jl4w-{:{Ք9ٓ˧V*4 1 +YskH0CXLDD iHa3M9oaW _R5(F g"7(y)4 A}bm$q-B,6pkpc^+Ff9Hƣ3[0*:԰`ߑ1FedHkZX/o;b"= VaD}To:8UӴ7'p7]p I/|>))))))))x/, _ӋGݗg;aXľ׶ :o:?9mY̔ٙ)SRW%HJ[bmycdDzII8!gLILt.5c}Ϭ)j*(U^?Lχh0n!qGo|]SY|r!xG6* JʲNϟ$!׉wd>`"(&c45gfxaFcQHT:#;$pXӓeWi<%b#!le8b˽SMA1-` !p5xDunɪ"XdP,n@ɀؔ<ލADIߐlf0[,EQ&ކO2/AD2A +5qHZe0 1JvkFW8P!X0Ο &l`lULސ #`2e`@p]ICb~m{J;(԰ jzjzyvv; ܁|O O *#ؙ<wzoWAuݓW: +wxrž׽ DX`Diq@H|ż0&^@OTsLi̯i+T:\6̢_ꂎ!M[ kW$@~t)c'̀ty0 Mև)c %!vsq ^#͔fGZLqx#JU¯*N@6ݢU+M{RRRRRRRRR7Du.f"ڇ9D/RB/`; ‚Ǵ÷(zicz? D7\瘞 ػ!14R+ `F10a&,_J`z +/[(dң'44 rW#~n?sϠ1A[_}0[y`H_-E!UNR`8&nPX9J dcQ ? ?,+ 5jww;#:LLpdvy8ak(e ޙgn7bb\7zv}֧X0/,^Lc@~ \f)))))))))D@40RuW._G?dQ[W`!/^u#Pu;;r9\wMt%tz;rv7}R ; +NOoB9:gԊFq*ccKj*Jw@vy(z]뽝.OG-wW:=.3s[C /%4-mO4 Ч6ۼבWzE[JK³%=ڽ+jZ?V Z* pN t!P$R#$8"kmkֶ[d!Ù]ϵ?\[gŬp>''<VvtC!YwRmMXs`y-g/>\]@Mez -**-?]ҾWbXS]RPT^_m(ԖjkpB ^#]\v¦Xб3k&IkDSb8 ![3wNr]*B.Ǥ:9!m oL#" +wO#i4rb麭iŻ)|nS,IB] n#h~C{2"-I%k'.A2g| LilIL߻25d$"xT=rb[ +@*S$ASEM["?w2Gygun%s K&R]eUYOZv*O=T]r~wceh.>zhuIC/k(>\=},\,*k8?}sުsچM]@[W[&S**w[BEZjOo­jȥsߨ7%G>_Pv@Ӹ2P[O[GN+]pVeV|xNF }ͺX٧=eUI{ D;.SW6oik+j4 55+v=eSjbJv.; _垞ڣm(,ӜۏnQYGwOwF,;{J5C` ,;dtb O4'uOye'*jhihA'zt{zx@$2G7ѐfNӊ%˶eZiR$Nm#5Zk%VʒǒqBT3Xh̀`AJu'r!pX+rk4Z%BOV7)6D$MQ\LN6D{пPܓҘQo/DÝ^i¸&t@cRF Y %DꦁǪ[Ƌ*tj%4C[Ф㈍]yӯC$4 µn[@Mg˯vM NS2 ~n͖vLϭ XBUMsGk.Fxn[FΤ~x;ₓdm>tPȐy..-(i~c13]ӗ{L(',ufiҷ[;gL;E n-4aaKmNk} 4u}/t:gyV{}H2Ch'x82X6wΣ>Io'%!^e 6?6-]iReFu&tzCdz.f?><%H*2 +|xBTkT:8*#`*EJD~J8#=3vE}OP5/, e Aeɋ6S>a\vl$+Ƌ>KË4*Wxn~[#֒Ƌ6>)9T&ᬀ=fʄ!!k>C*р},~fzr/v L&7 +3S4(Ebm]FR86o53?_Cd)lZ47sπ}H~)˃@G1D,eW N"j8vaDžS #hl/ 3T RP)|=; &І"L3-L .F?mRD2hVK%w0c $DX+3Y򏺞1¹'/boФ9S!p~6Âٌ2Ќ &xE&u֝bTuG*gKW͝_5uheS~y]w^kjK?|v < LC t&mi{w&Q\g +'Bw7Y4I'AB )@-!!8.oeek502>sH#Љc;}{*⪥j诞hzT}|rޣ怋=q7}'.w1mxD2h% ?\|7~~z~t}y+00/ +_`&#U`ĂħDC6&سxEFA +j@U2gVMkS4YX!QmP;fϯ^>dРW(zA ٰޔ_ui 5)EC"(fƒ_G:Ɯ%-݆|+ Yc!łHd50kshqG:Մ40\9o$GAʏ> )2`Eoʘv*e7EK:쏟g=,L?_G"]4=6-~?XơCp>2{)n\dę,H<3-S`cqZaVXaVXb*n?~8cCl^|>^Z?^Z $HyIL_7Y/D7EKQhWIkm6Y(ooz4#ݥQM|XWI41<,U4;J"e%rD `:#z&/s,MX3U I&8WxP.sns%Wź&NqXWrCPu7KyŒE%RG UC үzyNHzz] cťc>*M" =yڜ \NCjS}M]cp`,r<VK4Am.~D7UF}mڏ4SN[w.PK (,(b"ja}YiWoO)MX,g*e*2KAH4DSFtvB=) +nU=7lH}h{Qnsֆ50WU"U)G9+GuT.W*B]m1нWYks4Bl\1]⪎s]էS, T6Bac>ysY.ҵ1B;Deare\"ׅ9@+*]*7F8+c3=nЩV$֤]"\(厾QR{QJPo!`J#g X`^0IM5 ZZ{CݫWTp sC+r+qT<~ JEXXz0i*zp?Ej#Y"] QIghAO?;t܂nu|?߲$ɪ|t_&FihO ^ax'r~| +6ܬ6 ++ ++ ++D͊ew0{3JpGE:UV'HU뼷!U8"RkgM"])WEl9qDJM|Fm&WE:ݕ1iehwgؙա)?] +B@ +&1s,Sо?pvTY;N ʱ|/nLz8זqPwm1Z*s,.{(  ETAjDa'8פnbW%PM\"%Fen> ꇂقŠɏde*h9vXdTu/Lt/NvڭZhE8-ũsW^5r ++ơ5!n~>ɞE;oƩT5r,GBw>$-߾C 06~+i#)lEc< &FS+hh7]܌gVV*sI +Ѫg.A;A5P,|a̡!ғx&3kskkc!C^: ?]AOnxOUUljhب4g\vo©JXdVXaVXaF`"^=)婞Uos+z1}g5fg5dkf^㜂1;wUisJy͉eQRyTh C[B\6 +owG2BdNQȴhgٵ37EZ̈a> ϣ焥*::!`[5]5]1u cqP"<&eVO<FK b,%I$89E@`^$t. .ti&ZB9ϟM3}ȈpLΫu.}3 +tg.:{G6"w$4^rd{$B"aX`oLtj{ P/\hw6E@0pquȺ;u2`ָ@w4BzIPΘ-ޞҲ-_T@ÍO҅&6Y Wa#L`s]!NB9?kO]h[X%ad.ZE)2l=ǠORNq۟{}"20(V .9=ݻ ů&5q(): + pu.Į>dgM*Fb`Tu@#Fm3}Ck'YF %V!AZں1FrOҪmZ  EPb.԰J3YrAnyaKeUYaVXaVX@ <1#膵U +ULA ޝ`Я`0+,լ&9eK{KԢF[VGvE{^tzKyMf)_gT yU:P.P$`EtO6+BFYZ⣐].sO̾2%cp=^X=Ѿl[&X[A 55 vq:8f,(lnvwkOS"Aj[5Nu* ض W::;npEZWh ΠY6UTsW5f +BKga`Z($ccR3?"-X]39}pۿ.xo 9 Hنa2??%u9ogHLgWfkz$>>M{w8omB"84=@86㫷vx9ſwH bJ89Dx_uHKs>F. /x {ԙm)BE;ڋ^sVkڪ EE.*"3ݝ>;}3U}fۛjQb3V A +$XD䒐s~$g;}'圓'~}*9x()^kSvҽ/6ɒu+]}tu>>Xy n8QBr~q_L\s֞I缫N+}dC.̧**dQ *ďɟ~غ&iծ;s'k-K>ֹWɕk~'hTEHE>)ӿ~:0n.>(lGz6+u\1/~`ۿsgf*tC:tСZiq+xHkUA?j䔍IbE\ZmX#V 0㧰bR6CO)7&IlvPn+LFI猓*cmF[DǪI Ƥ1Vċr PR]:z\`ArD F#AI$ ueZcZ!23& 4^r"32^XĦQb2 FA;`̙0DBԔ.57ahg )XR |O tK'q8QE^zk`js[v:9c{Ph7euMRVBЊVVugXpfx'\G`EEU'!?kt]svX2ωD?X^ٕy2?rU@:tСC[Ejڌ&DE -<0W*H2Qn*h:b,FkU:숷8 -&d2M驎Dk\:R\b⬥ByPijӄHks!]j9vh#$-6g I; +jyC5傏GuR{ۤv-2j>SM +/1"؏h׵L6QRbK5"(RbsuWxpxi4qGTV䞟9t+ZEP\P,&aYQl-! :$P0[ 7%(<;NV_13iԵA<½0Mg+6 K2ok^Z嘉_%ZY~w@z0vgЏsɍw-qǯ^yG]a/&{_8`]cb}i{D{,؛Mk:SjQQ۫Gv⥁.wT4{Y}W[Z۰8qQNeY{|t?߻ȇ_.ee=F >DB0経K6H\d쿽w_ ^SA/; eĝDWك*:B(j}=d-w~_/PݥY:tСCǭ/eb^*-psUc WXݜ՘+=kgc읶1Qcٗ.\eiDX[#0 e +wRcd2|Y["H&?lmقjAD +n&6L"H:2oDc}e(TSDʠ;Ց,0 e.DZwGYvG[vKRLAk#Hm+Z#:BESSQXs +a/e-^_!tFʆ *g*Te+dޖ -L}$ :fˍngf99|qՃiAZ<'`B(mh][ou7{9v{rAݫ/zHU_v9~X!a@dCgZn17)zO=moKl>jH+ +\2M8ϻ Zq ]/%>;Igσˊ}ՠBe+`i[XEBa }+*:u+%4%͝sƆ֣#X.@ +־88 ^p%7UCp8!*{ wfJޯ^?ym`-\СC:tq `w͋0 +@0J(y[~_G_;de: ÝkNu~G=vK2<'ސޜq_V&G0!lj}e/ ]ZNi鱍;1 >c +V΄ogb&$/VE2<5 lK|`ݼ'~tS!Xiۚy5OV#_LBefj;).Ά&=:tСC`)R"cbaT!D|*|px8oკ5?hi p熷^Bob}Krv<טӘגז1fo[m6{K9ޒnߝ'#woF>v˷ø7=wz5;;;-d4ٲӳӳ4>ۼkPkS@$do܋Ui6؛Z-k[MF$[{ךgA.V!AmXvwzvӂew)2ϡṰ+nzL%TrAN5ؠNVd!*kRe1y'@p}8"v$ӭੋ {F쌒X"ۊ~>H+!5a޵;y~0Rqc??@yI8lsVۋFآHCCٕ}oRyG,˭{?dU`a0M勝}鶷OԱsgw_n``o&s[mћ*}hgrf^qsa^{tСC:t*R k^`Y;Ҍ#'L=R =tSzug5*vO] n>uN䦬DQqhx7TU{bd됉N +^Ȏw`ĈmA +7IVIHL%#%&_  Rְ5Ƶ*=SHPDZ)LU*AKB(K6#KT/<Ӷ]%;U LhL/YYu9BgOo|SLT@kPV0ȋ! XcĠ,˪=/ gry8);\!燎]0̄y{HZ)WkiJv{oƩYQ#yV7z/a;h'TNS/@7ېÈ be/v$IN;쳆t!1.Dq7mxcP(|eEA![ }#jDToi֡C:tq މ%)`QH}.v}tsJ)'Oϙ+WgS8<taL]?r9fR@fYV.@.Q}"@HMg= :ۻz%UC:KL09DY={UQP+BsH#v],(\lfѸ:7`<ᱧAZ5+`%#0#0ˆ%|$A/'YTrSUo8c3/^e +יӬ8j#!Hy220?>Yp[>dEK +cC^E}DUt2 +d||Bg:*3c8rϸ{EL ӻ{x@Љ5Gm+ڻaP#{58N؊ I/\~xw{W{4Հ4 x1=ufؾza,-*})OO<-oXOe tU(:X + $ ³ 2 $e0@ǒz{mֽСkO~O˵u;cm˷;8 ,֖] nY;H& +¬@N+ۯ\ݯdUӛglG GPAl j*?'X3Ӿp}GԱ ~֭M/ z0<86=-?bpsWdk9w%͊y9?\y4WfVm\)T; +"Gy& ,|Qkvhiך3/7yns5FsR #\M#),*#mَ[wQLit*Mޱ\Q,=7{=pGs-&&f35Gϝh׎?Gc +mšƸwjd03K4CͿB̅G҅Weh@hJ7P LKDW//|`i6@ +b6(9ʒDM_UϽϽxX95R¡kc oc +x< XX0PF(qZA5*AC^!:3Ѻb`R@+YEf1hzE9Kw{w@[%v ԆI[{[s֏?>9v g:C~+vbbE 7/v2[JՃRz2hDQ@PV?BMfLoؙk'; }*3]dV WeͪxcP +pj#]eܡW!Q0aFaF@]C{:Oa"`I&N@``'<Ȩ.bºWрnTҸi@HB\n˴ܤj-V3uQ=2ajz)iI [Ant#OzabZEՏ/{vm1"D*+"4^^pVNW5㧭I&/lLzGlytat:͓7<2}au3YW>ކCqh0 D%f4pK7{qyQOdu?U*$7#0(`P)*EJϯ}C4eNQ( +4)Ժ%a5-0ζv|ʆ67cxM{7`i*<6i.& \ݬȆUBqH3֒# Yc{~xJO ? ++Aߙd&43!*=`и}'~;~9 jDL9q6ӞDVFtXW匥7*Ҙ=i@( R=?e'-?bbJ^z98 K#x0& + SD,Zg{EU;n^瀟 5#0#05u\x"0Z +'D`IW$`RdBQ"%CPy- $z}b{{tǞ#;~W}'O IG>}߇[l]ou tP*@ (|Wtlshoȇw_/io>zmϑ]{?8]P$@c0!J2C֯ ^vaw524F2!See"V-?{܉3W&/˽ +,W9$p^S1(~CFp2"sb= [Hk@f"ZOU_ے{Hb@psK-(D&؏?{YV@:haL ,siB EfSxncʲV[Q$Wz7}Z *z 4FX ek&V\Ʌ_|}6 ++jAX걋=g)% +pyF]O0#0#07 EJ +pkB;;Ϸ_>={=;wy. U! +Q䳗.9 ==>wXgωޓ6w{$&spѿR0?: <^@@=3ֵ˟۾lKH gaq靚n}͓\: aیۦ', +e, d0J*I[SIHk-jj!ˬ:'j+N )SG +ׇ}p05iEA D2B?V=_eX P`E ygމ M7f~ń:39-h VO~g~!`ƙv9+Ec"$ 1\GO F[ԥݒ)(%fD' 4OW[AJPoNpUf'=*jp L3(&A>I5 X +l:p1ѰFaFaF<{i`dfՌ̘ck~$+ţmmyz gh[a2ZgOL. +cl4⸪8&V>,^iUD*Uti/ebYltp8/|A8mk{Ub` ŨU-(`MQ>'"-Npn%Q֢%1QG:͎X>;nΚI̕;{1Щ/CLX])ûȐԠ +eo)~!70r1Ik=g_]9mYϕk~]cE*ҿu'#geDK[lA,iuz# ?f#K?V C6"71*RJNvz)pP$U)6be %" D <ݷPRdrA 2|ϲXd +_Vc7P`TM8!/+NtԼHw@#"F +A2r3.9_'ܐT@jw8@.{ۛ8'7uI/t/V>&9uk ˶g}~+w׵[B19݈}ހ٥޿ttv=+3=ިj9j&]=dWxRy4yex1 wvKtwU?v~ ^8Zov5잉F?ŐRT֞Sm.u aּd9D-{)[)۸Ԣ-m]wG[TC]a^Izkj&8r!Eown&)Ws-/*UW=0e\B<qυ?6<<1Ww9\h>k?\w^]sȝfqӻh~׀X$NY200000000zI+~cQL/Cɨ +RyoW\ 2E:CN$!!`z7A|z>oiQpTnpa1ńTݜ`Sv9n ukXBLA97Xr_o.d, ֗F549%("Bg<NxaƅEY +Y|rs!!C B" LцNHX_RbIʼ(@1L*$$@«RG;w*)&퐐 +exKeΈ#iiaa0cHì0ψ|(ӗ.B[[Q*YP/$1qY渜?L\}UIY4ߟp^ֺ~}nNKgۄg%dJTzcMQE^E 1ڏ2i)nI% eQeNO+_Q%Bv +HMZw_D=17⑅ys[t>~s&e\%I%.2?Rf|d>.#ƚi1N[,o\lT5:pBe>E! jSJ)1ef,ZSɅƔ"}rOf?̐b +(HLXs K E ˆKnοU7qZbq; i݉y16f}}N1'Ę; 3 SjX3/ "Dո(HGb=!폿X+:?7.HPCΜ7ؔw)P˂Q +Zd}@SocGy^K٨qekBd j r+aO+ +~=㳢}7* 0aRķz[K@(m>Y>rEï%/<hg1TKjd(ehDI>MLN-_+1 I\, +k6zIj +V'jRjȇZq1+yiQ 5}JCWj[zC064&̒2(I*\RjJ^nL}8uUt2q֬>IWPDՈ]cj>+ɲ prob޸ŦB}R>MgEeDF (B"Ӄ"҂3׍ynpTzp\ݘ'G|{K%Ӑ5SAw)u Xn9pmQ7EdߗNjLح$"iV ^ Rܧ} 2:|4YA#viPzP۴H5{~GWt*]{E*V; Lګxi[A]2RIxgѧWO*McfJn3f c,J :Sβ$$vIys.`!/HO- XuƂA!"x!?Ę32/||שE '+I*N59ቘ9>NUnBO@(-HDQ>枒f3 F[%,׋nA…9_9׿ ttSsb{P_/v:aދe^yL0+kf`````````JN55ZU״ԶW׶nUGZ2p,mmz[8ԝ=c<#UΪ5h9zXKcۅ.,w#e'mf``````````dQv*2d~CS1VqչUX323M٦Kr%)DLbnk^5ϒ8Ј.$,7y +br{lᄤ܍7`^Lxe(gZ$vER!\, ,3)cE^,0/xju)S^OJy31mkқ4Io$Z_OL$+7 aq%޷/.;U'& uS8mJad KNQ謬7UGXK)8֢BL9 7tk8:ك`8G/eAД)$Z-[UKz.N {ax!twd$'9ssr\>ۗWt.rH7p9;`OO҅;H ^'9,pH"Qݟ5 \&G>3K`Fp0RٰT7*ByD(EVދK е#,3-IoU~au-tQC2ƣl=ۗ:?pT;ƒx'g_/ַ>{-$['KF~i +nK +39fj- +Og! nE[4 qB(TdH + dQ"Ow!z'[2@YLZa2Ϋpdva#7Uʞ20pTEF}{U2/8"cE=\\ezx`?4*z^"2$$T(D)۪[W`U[ml۪n-IJrF! ( 0a@!K{Mw:s{y QVbY!w[2\=?\J?</D"H$tÚ`7ʻ $Ώf[5x'*GHe:XVd'*^pĤx_o&蜕.K} l&e?9wP[e?kW_=LO빌+sXx:?"jWt*f8G˝#3g;%X<ݻ^~~W@ z(`ƽ<=]l9Awzثpt:3)>~H$D"HxE:*dOwM.zi{`ġ# Dc`$H@4 16L)~wv6=2p E!&`y=љ΃{ ttK0R!S`"=;Zsv=a ak'?v8Ǡ#3)%-p+-ܗYt꼎I꧶Y I_/xD"H$D"IuQ(egΐe(: \oʔ1> 9g, &c/\4tkCSϽSӜ{ + áSykİwK-1j^ɨo|롟Toڤ1~/u]$cBz +xN'?{ +JV{A7:u:pter6g^~A JF1n13Ǿ>Ke+4^Na/:)і&>qEɛ_<`YQ`tHxU]cA+g q cE} ű:FFmKodؿ*~2j亁>{䧩S`: ]ӊvf +bm6Nӛ'6l*8|*8{bp]{ΰݓUQaUpyQq/c?eU̚H%xl˼9MZ'gMO*Ca8rj렱"رJ?=,?=XJWLEwnYrm@]5VB!>}}™ziLӮWj 4&]Ǚ՜[X sǛ^50VnDB<9"c==[]e Ë;xpcB<9 ExT\^55(x4mri&H$D"HW*,{miaWyez MmjhwjɸpaۖPhx:IFj`JtDA5jL1W Vfk3ޗ~/f΀f+< =8fjpRm'l -|tܲ}gOB4-K0]21AG h߻sխw!71Pc 0c~pvBBD*֌ׂq-ThhaP{7eppU.ԝ뚭A$sDWqm42w>@qt/D"H$D2iՖIgS:U%c7vX X-V[&>nbdq0#ա:fl*̄PVl|wlWCm`*w8 +e&L +x]U›n( +DYϕp-`B؝D h;srZ΁Ypہ-apE\⿔\l:R<:6HxǂsWShhǎz}5u,= -Ӧ$ݴv=7B}ĚK 8Y`k,]JBKC_w@4c8ګsD3UGL"H$D"`~%$5/MG~,0*eCK˪S^,Ծ "MXFZQVAƀ#bDhk6a|Nn\ "l|'48)㼊";;{3bG@9h};N<ĉ~b4'#ct;5N>:MP!Ҷ`#=5SǕB*L@c]tշMu`U~I)c +.vnspdL/xf~[gDN5=l?w >4k) +q8~ji +L8~怽X<`hg|UPU ) Xq߻olX vU~=2D"H$D"]{Tl;Ȟ~Ij* g>i }v^27GZX޻K#;i%S:x"QW <# +)6`1#8)a ?1yhtLTM'á}Ckbʕ" +w6cdoF>y9209#nbA@c> D +#\y`q{wat6قLDvX~$`v4l 3miSܷNŌG|ˍPj﹋.2DQ3Ѥ +C˺.Oס?pР}csN+vѶ=cZC8 Y^M"H$D"HW^Ff6Ռ]0V+?3xY\3#[+v+2mmfR̅xl˄ +fl\4qv |Զ ++ƒ廜wsJ *]Zg? $Rq}@N’gzl*@$*-GL]4i TK^a2wӧ{b u'6w!n([qp KuYg ^ۑxlӫT+ܞ7)?x+S+GؾXf@7\L^pX8SӰmݢ|x8~ +fρd +g.&%H$D"HW._HiaTb,,_clab< u8 b(V +PSccF%TJ7 +:lVkwu/\ 5`cL݈90B H$D"H$>ߢՒspu<!9%5;Q ^5(Yb&dj'70"㹺ɑ}Sׁq]Di)TCC jk)p3XmV;4+Z㜹%qs`^ġЯ5rK^P-j۶sر +p +6HV*h`AY5n/U5vhTNY:0ʿp"}Sc^ |WXR/^]EXY,kYY.XX F! +$ ܕbPTٕ I͑x;[w6^}aȶhGk8-57>;/<rOxt(8 otdj5Z)/n{?qw>XS|۩ ~$'(Fԛ_75>||uhhF譓z= >Uc]/忸8P jŷw{]G/9;vTѱ5+u]ܵVU2J*xbveBؼWn~W{;|w}ռaŵh*d\kt4G ~ּ57on62ViNVŵ}||iGmѨxx=߯n|99س+7yؙsDͱGHT^࠮ WVoS55k?Eߝ]kLTF>WC94[G?q{sXs[BumN6J (lL5ǫPgG_nD4ww_^llK2/Tܱh0:<ͶEw׭6͗65wnVNj8գnۈM݃]UVhfe93 j=6u!shMjH#^+7o5_s3N=;/onSsHFB%T6VHvmjnzmSH}R +Sb盻wE''dr(8nUjSc!PqG#ըU ~&&W6ZݻJ-7D1\62ލj+Ak6415` +cѱH2VW*Dtpm"^9zcx\U]땩a'˓''FGõw<':J#](Z^362yx/W{jͭ[[67BFύN4G75F5ףFN{/1=QЊYd7[\vnV%w5LNF>9o56-4=Sm6GceiWJb5[* x)h8nx.q( f/zUVk:ƫd\!jUnL+/7 Ps* MG j2z\xv#Lsjwj|;z}.gp2W=QEM$4xFu|cdVCԘ)E˄=,^:<3Y9>rZS? ;ک"AQoTZ2b_d6h.z}6j䞵 6W۸&õJqm~6R^>YM$# ג{/E3bVjg'&xr28n1sƾkSv#7[W6[`%s|{o/ػ֍h4W7Z_#?]OF#ek:~oPOzR;eƍa+W<)e_4BOSНGc?i:JzD׫*[geX2,XB ]kyU_«wxO=./3u{yЇBw;ėv?ľ o]^WwSZK,A:oo`u^WwrʾbvxW):PWwšP[+un{m@-XB->v9yɺ[۾hx9}g4YXx3kݔ +oq͗NsKZ@h\KZ; _8 +o϶-|n +?e^U Q73xw?M(v5[[J{sC%OM7.s\wxuaiaNS:/uhQpo߮mwtY+rU~ͥEڞy^OM?oZvOO;f %4@mDsk,Y2ј΋.{uCW\rPJNi.,izj:=B{xyZ f'Y_ʿZjd澛o[w:5-fk2|-xos<m{=5o]ݩDE-Yc9פZ咱7_ҷk{gR@[fl8oɊ2=kQx০? /Wr(=&Uq iutb{w{ew*]{h~8/3y;s57}l xkZݶp'C3y3`$^> jo;7`uzK{h͵̷3wi۩zɨnhص̚ ~m^в{&-Ӫ=V#R/T^OMsmǦ?M]ϣ(['\ig5{hz֍t7?iLsQX5},\Uc8P\p{NI-% Qv-ԝu3(]?޷T*P'qnNk-+y{TY$0*? uK\T/Q2PUf~4H|opZǩqô^͟,w:NMb>Vi.s2!ZO1Z֟?] j!{*u)sp %)٪ޞNM~6%C߅Dzuu qfEv=JR^^xmU%1&UO&y;MS͟m8V{KK +_R-a[-m[/ ӻJ*o^ fBSkn[x g]r +c +oi:JG{v;C_o*d-7S?}N3g 켡:oZ4x}Fi;C/eZ2Y(]fԔb\\8%iwJnk_H.(OzBw(3  oZ8y͙[OMq g$s<&?bvOg`H +'|?ﯶ$!ǏZF;w{$0^;BlȄdvXp۝&yL+B]; z=VZ|8 a['(9{I}6pw](c{x,TFp_0 `?g^nki3p *^rU;˛(۲\* ,0ܞh}_9(G("""""+""""" +/("""""+""""" +/(""""" +( +( +(("""""+""""" +/("""""+""""" +/("""""+""""" +/ +( +l9tђÏ?>$on^Y|K++o7N'o鯖XK92//փSota6ñC+"""2܄6Q?hN /~x(/quO|s̉g~{=|EKyl3ۙ9 +/(""""ӑӖސ~87Qտx?µϾ|7* +/(""""=zcֺWMw]~=~*Ǽ_I}g[m;V~Ï?32:Wo4rP<Û Gޏ^tqKGrYξտ䟵+ +/(""""+Wt֮?i_:5G.?Tk?i ޏsm^Co3V[t +/(""""ӝu7wjzP)o8ܙ,<%]f.X5?3ztcc ۷GꦍOw omZc]?G+"""2M9eOVS|ϻ쮙,j3Px>Bzoy3p +W mw|83 ӡd*߂` +/ +46__#m'3Vx3ǟ{Qgec~o՚6m]v=N]n8鿍VfY=-Y*sæp5ΫHz/}kжNTw3Px{?/zz}׉_OojE^mտm=Ǟ +pЧf/m ru^~)y/zILop* 1T;vvZ8ݰFɋ.(d]2Uq»dŪ>+j\}O?}Yq}1<;׶ + +/(""""N\ +.OZx'*y m&eSnok[Ȓi;97uFTԺM/ ǒr:m ׏+/=<8] +Ƃ;޾; +o~k;=7sUv}W7HcMo󃟾LWDDDd(ӆZ֭\~+`'(EK^QKnm)›^;*ohR|Α_} +ɬH|[>Ool=7O=7}wێ=XU[xO?Jvo.6障~7 @ɄszOxRWDDDd\}a\d ,P0rIhO= S"*p(zi/oz +Ȁy͑;U^"W>f>~Vx>S›o*(|?NrYs3AWWDDDʃ=(UՋo3oI 9αLopѩ+^Li.6W;+"""Gp̹FQj?F[}jݦ9Vx3c>,,ǝ~ 7TrGJhf`) 7KVJ3Wt:sFͶ›YM",ydߓ_4[{LWDDDdd Z'*s ҟnTx_ +o?;r(x̸,sp|aYˮGWDDD\CoIo$s.ސst-]휶N!Sӊ͔ +9VpODE3] e"xg|WE9h:DCԎ] \K+-.YpTOwҳ|;c6yyg7G/^WG?S]_Y~5w(}nJ3(""""}'PyTF{sʖ92:S.O? ?,{–OkmK-L5w#NXֶDWx]$=\o4>-2/^k <c]'r+(""""RfX0s<+!˯739m=׭߼uƚ6Uk^{ٝ^(sQm3^iU,:uEةϿiֵ /n]xcO,7ދCMWuw(I|~2;|)(""""gx҅t.{ϙ{7d)K_BzoC:m^Z o) oȗVYhlƟd)(""""gλ'+n f.]b՜,IWoԊHܱk4adt}g)V82>Q)vXWDDDLғ`w| fp\-,:uŭ=Vjg_Xv=]oS;~Fb}u +YxJzȾ%g.A X};>7{5? +PxA>?|)Bk U1dɊUCNzep'ϻ>/-P6۵n}k7'{7poyǝ~y؅d_M.(("""""2' +( +(‹+""""" +/("""""+""""" +/("""""+""""" +/(""""" +( +( +(("""""+""""" +/("""""+""""" +/("""""[DDDDDUPxEDDDDDWDDDDD^PxEDDDDDWDDDDD^PxEDDDDDE^QxA^Qxa@jmR9(Gp@XrI/^|wӓ熍gq֑ yGtW0o޼жf]}i-}Wh`̡ު{|> :uԩ{N71ލH?xΡܗs6kxkK p 6q^ow~,'nuOA(!7"6{= 7b`yee8\{"U).4 ojhtur&s49\my$̔~+i oܜ:sVEmS-sUqs9gKS{ +eѭs&joږ0z-QsI5V|ﻅ2\^#XIռYX|Q$[U֒[^K\a$۬gS:e?*tixޒRkO&jlU˺]j-hޞoe\@\K|T%cW,v9ikUmqȀks<نljIo}{y\]Әߞ>}+y^x#ܽ{w۶mo[hѢÇ?{L7nظq[c;vxդْ׳^YsQk ###[lYjUnYx^+K򝘘xEMsUccc9R?T?zhŊy^|9۷~[{Qz&)^ŋ&''{gffr={;jݺuv7x#):t_ؕibHFs83fDY,5#w}scb%KZ.jW Gw5|݅r.źW>RKhj)PZo D<ȤɓzΝjR8uTqfK.Ůsdy˖-.GGG˳###e&9޺u4rӦMuƚƍW%5-[,ʿ{/6lmTm(k{mEN|L94s\Y&DQ"䖌WOt\J|62O>]tiSrh駟޼y_8Q3;;wsUǨ!c]RѣGqeFLHKKm۶՚WꏍK3*ߖ qf.vIo+wBkRXr܅ J)kqjR>j>|X-311q;kjtt{dƗ Z'GL~̏=Ĉ̡jkU#GZ׮]F6;gWyokx;^`x#bW9||RԩST\\sk5UE\2Bױ؜";v,Nj&WڽQѪwsoϠ]]+\+SbfSkIPCގ3vh968PX.5gVCƊ۷$poݺUQ̙3ͅ:(_tLuh|Yg7#[{y=joyKXm^|9_x;^K_[Wܹse{O67^~=W_?Zj㚻z])|4wnd xϪ?55Rlɒ%=Z۞hyl.)jGGGǻwnI@--?~ڵ={[j/ Zr׬Yrެܹs6u1N.h7˔!4[@ګ]ʫ|憐?8Gl>9.eέ[Ʈ3gδ$!x)~sNqb2i=:\Y@_`|5b{ܬ-ce.z|oDi[ /t>[@._=d&J޽{+@3$F\Щ:E.s橿8o-ܬ!X p{ƺrQ7Gĵ/.ʗuEWXsI=|pLyl)o.]T3v@IމǏwܿ˗/ceJ|Qv۶m+% /^3^z"cVE%z:qD6&j-2G>!d/)ȑ#XkjcWY|c-[(/o ~{u{Z^{MW+/P?H98kˆZV*[._cǎeH]"dٰaC$96V:N>]4Άn_Ys'bpСAѵķ8<(^n{6𾨌G6oޜ{/ވ捾 16Ʈ.w֒Ǐ疕+W=|pA)w^x--J?jo_ .]ޛgϞK47Pq/2޽{k=tܺukƍՆEjf6m;p{n\Qƨbڵ/^.F]av{sqXm7DOo[3~'ٳ/<Zn߾t,P8^Qtzz"Tߞ>}+t5pz_5kD%Kر-%ׯ_%~ܹs6ݻ۶mE>|ٳgѲI˻wmx6]bEco5>}V2Iϒ{'%ylٲeժUeŏ?x@]MLLD mff&n;:: ݻyիW%@޽{4fll,Ge=ьx`_/0/Z 6{r/RJK.-["eɩZs^x1KNNN 9vϞ=^Mtڵ+?y极ѣ}˖-vü-ٳcxY|y;tP'-'stuvvvΎ͒S{㤥OԽ!z>x/ 2*nE^|wީ-_G|XKrJy4WZo߾Z ߯eZgff%KК/ # .bvW#9ټJ.˱׮]+k-_ؼ!ou [^eC9s8}OyV,_7ܹsj4[|ָeAs]ݱy333Yl̥K^ +!{F[xqu/SRntK$U_#bll,DuǏ#\g >D]hÇü%.H Xu|mZZUV37/U|޽lt@{ evˣX&ka)yF_ZdIեro522g,JŖ˗/Ww~[-[uFCe#v 6D'ϱ-ov`Z.H7ĉծL.q=WQ/=ofޜW,955iӦ2kHM=}j%|S[7x7d@Kr:{{-T/ Dܻwom_˛866V wЮ޼ٳg_ h۷˒blڳ=ǡ4J-.ZXsvhd;c_OòUx@^=|zz~{dWƍ7n|ޱcǏ_Ffþ7޽m۶ɋ-:|gpB߽{_fMdɒ'0G!xrh/۷TG(av޽׭[#?|d6 $RVGWXQmvj,!GS7op^}mo 6TtZB_־rJ|r5gϞݽ{Y?{.ҕߢl۶m=t+>s{s@ bhfK͛=#խ[2pecܺukmRn />ۘ a 7bN;wSec>|rӧOslΟ?_=o.T|"99qUO˪B9նnWm+VOY-('͗\x_G C|~BGl۷"AѲ>mUV۷v2ښ?1XspF>%`t,G 775p'TmŰjk_-DnŔ*/;x iK|Q?k~roy<ÇRC1 bŊ27_K>|zlí[-#>~̙3Ya""p XӪc>h ;~\[ev_~Y |ʕѫ-U5V_>- ssja_{Eǥ"~g9Ըf͚ǏǯG|^er؜!zϞ=y9PcK.AۥU9ˑ_{>yt]]/˧V~"Reڵkڅ =~zmn|.hk"ge6)QK?LMMvF-ɨ4.KW ]֭[0VGHvYrfffKCKUy_Z쳑=ogW jY7 D}﵎/駟0cF͖gxϞ=[}6"ms Ν;ۓr$1"vkn!ƁəIEE==x#V~~29:&}BoW_E}K|AKEwy+`g~^nOϗ6hϟsp3-T-2UKY޹-=,TIeiyΝھ눟=wͩ<[}SA;q5f P֯βqV#[ssc@XFdKZ-󻔥K5㞿UysB?=<|64ܽWĉ"`Şq?-deu0+w;w?ʑJfШƊƮ2):S=<hu 5}j/fWsEj2F\+k׮惽|ETU>m]_q/^\[|QKi:F5OKޚf~Łe2|hj">'k~^w",D09on\lY]:˰<?,Ɖr 4|7ن0/e"ZfwÆ Qgl|)v s\]+&ȢnZʚJ_˥Mbƍw׾)/_^[R߼ys?SVR3`+e +Ae,Zޜj޽WݻzbڵfSDLe{-HQ}QD,955!kλU+ɥY["l֊UЉҥKn=G{쩎䖷#͹Q%/\ލ낼8u՝;wnVWt->|Xrb -f4.Hgtga$pڞt;OMXt{sA9ۿ4mPS7vIqٍ xrk(ʇau{+._s bxMNN6~ӧzuV˖-۰aٳg#ʕr~W^}#V;W>v7nlܸuQ;?~ކ .dݻw+bŊ#G,%_>?;w_K.ŭu%n޽{\c't&0P&ߙ?S]xq5Hx#vEEH 9(MLL4SV͛Q 2|7*_zuF獨,v/9DXFW]+V< w:әwx9+a1g +۶m[ti5 x/_Zݻ7w=xg?˗/߽{wGGG?Nݻ%~(m۶56e˧~[f ]KΧ=++WDWZ*~;6:{zYy&ocL`u[M*t+rk?Ν;K2ec_~\)竍/&gCē'O?~|̙lƗ_~o<|0.,|֭AD/Q9{ʕ_V*zƷ|Kܱms.a]/]T:սսk-] غuݻ9M:^eޞv>ܺ uv 9 T@u0J:YO୽*i|e/2ya٘--]5t9x`ܹ3v5Z{.Zե|"n- uv 9QUu&ޖ|6ce%3^:vEwlUY![Ν-ǿ%;CCv@_S۫_t/9xKo, 1t&ޖgxs-bW嫏q>w>'j3?$𶿇7v5y޽rꃮ/^y/Y{xCZ(ꉜUm㇉N8k=i7s˵kjon) طo_ϖ{x/^~'Nˋ>WZ.'ΘM]j;l6{{W +vsA w]_8Don^&''3D})#pl]y s˖--XOC?,L=͗ԤUVE{23^KiӦزq)%wV5oDv#2eƗӰ;)ZG͛7Yʗhٽ.Rٽ$ zؓ'OS["6V\ɨKy~+ ={,Rs%j}g-#wwލ +3k׮N?.TNӧY… ecN,<\y#מOCG'ٳZ2~y]JkdܹsgUk9;PٽJuzzz:魉(i;D峳yԂH^W4\YU)ٽߵ=yG3_+!? `7oݻ'Owۺuk!ҥK54;;/x:99[oݸq]W۵w V\y! !Dze6lpϟWoY|Ete˖w +={V먎bŊ#G,%_|9.ҥK=o422үX_~}48JΝކ8v͚5q%KvԩSYg|b?ǏwoO޳gʕ+E\7(zcǎ;{I`o5V]'/yމK3 xo޼FZKDjȞk"Ek;gYcO>=tk׮my….}r̙m۶u+Vgi$03MD`x#,]xC*h^r }ܹ7{n6gʻ{nnظwY_^;իõ>LMM'ɓYMO<Ȓ =z4_sN6>k^X"dՍ[}Ql/w]7zڵkՍbʕ+˖gϞ> զA{e_~ӧZ}K믿V{رc}F>=g.[";J{^xẃJS-~-a4K]t~KQl'g׮]qvTҪ.@X~}3b}yڼܔS7W_5wMLLĮgp'Y_k7Wĺ}vtfx,pΝZ@˥zW^y$B-MNNfl/kUk[>j93ݼysԙ#bQaHG5瑶Vx缨~7._|>7Uz駟ylsW>3[[)~~K3Z< VsՍ7jSṔ֭[sNi3-^޽{e{,>vYXgH1FΟ?_md.UT*l,=٪v?ep~Pvff&~89J[zƼEo^D=y >ۆsa\ܥU!7\xqr?\Ưhp9P wPM%]rZOYDn4rn6Zʖws~hVC=D5-9[x<%/?5e>36dɞ^|wީ˗hoL.}UC.ZU;KǖW0)_ŔYv+^Ė8݉'_AO'2omD^-mذ\qTU`۷cWJs}%٪;-7F?Ai$ic%dxǏϜ9_~e{rJ.gH|]~R_ ?\[&Z36Gx\R{˜2z^RrM۱v=%O[tC#+bk3F>s-ZTK/*<ٳo$wfx[Fx߿+-w=6n*WرcG۷Ǯj >(fǏ/^8ZnNԽ3^ o#+|yZRO?43`o%_2oyf=9AL߭[9K\Kw|@-?xUz;vrKڍa19Q!:{I _}Ugz^hY믿^re]p47wU]cFay7sqG(]|mݧ|ڵkhy¬ڧk=n5rǵd_3* =+պWx޽rjtxb^z9V8{x<;w6fksdx>sz˛cW5x'|R^ܳbUu7++y-/yZgtEkuԚT_R8Ɵ63g}vy޽{$cε<{/+ +)~݌_kOU;Qd޸Sջ6-a峳5:/Ljs[7O4Pgv/ Hv4pk׮d1ܬvquўȃ͇^_=:SC4/Bb3* +z]3_7o[mqC0[.Zu;:22sah1;;/x=799[oݸqÝ`PW^}a^++W(%7lؐ7ڹbŊ}Ϟ=W~7JĄe˖'N x#]6~Xn]$HЙb?~%F/_1BJ'T =z4[R N*/^̣"Do޼9"X,0333G̃_~@8l썰Ţ@ .\ZI$cLĸ_38H;[7%GS)U 7nΉ]#/eʕ+٪hdg /w^8op)72̍y2SGJ.Y3U7FR-PtzzDWyTccHeGcٳgsKvT5f9ݷ{'[4#\5?z'OG"j56O>]ti -Q,Ν;KmVmms7޹s|3Smd^l7so\rJu{'C .5s.9EH7y25#aĺʬw}G57G-_|S毹u#U7vr޽[;;b?lG}TfZD~[[8I؞rj1|嗹Ns+8skfԯ\Bê;v숤\Mq|pq ص=snm/=?Tlniy7.^w !NdY@}9ͬ "UVe,kJGz_s&pseWyTUԶlkFpΕr-}5oNnţ殯:N\fs-lrUWXQ}Y j d!b9m۶fekY8bQu"S{jb/ldyȑ#{ svr-L8P2ŋyҫWӑ[e~ZX3= oa*EoƌV2lذ!BPk/e쫽֧"g;7-^v9g|ry朦-رcVNneAHr-2?Κ8QǙáCJU왎299֎86ƮZ vo^tin߻wo%nܿD$9'A]scY5#j9{f_QÇK˞9|pi{'/_'|*V\ Z&MjeΟ?_c=ӱ[j-ÙhPKUՍ133yYc=92y[t/6tT, ຼl..]T]|X'96X'ok׮E+WˊOt2oOZ O׾oڴP ݻ222c 2[ʕ+1z˖-ky@}^:Fŋd޷̅ b$׭[gy~ɋ/ӧO-c#>2ϟ?{c 39b-uD^maV}y*C_qCT(%7o\dIڵ_acw]re`xPZ˼~իWsW\ر#{ƢװUЊ[߿?~_u[Nqqߩ]Pѣ 6={Tj=G<|J_&GwڵQp}]L˗/ؒ掍QXŐw:= O>$sjҥK{׶UτY2k.^xƍ%06wwС|wٲe=3oAnϼ'Ow F˱LLL$-ǿSR}K#qXr۱Wc%ʼ0̛q֭[jL\L[lnE>:uz2EX6[??eڡ p}Wpzz:* +8P].ݜܽ{y r)sNgϞs/_1wj_~%;VkLajpo^vI) ʼ2/ y{Ffact\Mݚ+k,,qxŊ6gϞe?/?LCVU9a ׮]kntddd۶mݻ{fYG>|o][333)c _/W\l!q\yμՙb֩SZ_zup(Μ9;w.3oyn?k|+O?Q855L)}eydIl&9O? Tma 5>}+yƚmގ;ZDnY+W䁔K/^!16gmU]NMV@}z88rE :,-޽˼2/ѱ]*%iFů?|ׯրz[ 2/_<_q>Nq)o߿V]`rj KK1ʼ2/љ\hZdnݺW5~!J{| 䵲 +׹UMyLgGU@W'oܸQ-\fͩSرR- +˼2/Q9fޞ9孯ͧ'Nh/Sn\rJ&[ GέjԞ7̔#V})=%kn͛%S.]j6Rt6ϛQl/'=3Çe^m7rJٳgY^V'~9e2dݻwK"CIrl^~&`ONѾέ"|duES~FR})}vm"tϰex߿_޽{{Xmaj=m!epjkjٵ-'}9qd^ҙwѢEw՜F4F׿UE.[K͇ئ|4mZ7.P+²XSl:jv 1dq8YA.\[LG gϞرcՅ֬Y/Ȓ%KjXmai>ou281`oݺUv2Vyx3ofqrGjyQhUĊ%qlذ!/v(466i%Mjb'/^د0IpIjロέzsŋoܸ1׭rl94ʏ=: )3SQ-*xxܹjܼy3srsM8_QsR.c%MMMeot"j_>'}%K.e9Av d^̛2D6(ƻ"w#w4y󡴹r||O-o]mZϫݻLٳ|P.\(Bw={^73NMME … d6hɓYD؉,t,|I7]6-|wy3-_μb/هWJ&lŋfEf-[V\/k~ٟƍrѢE=jo!?3ohj?t5yx333Yl߾^[lܔwoΝ;YgϞt3:oٳgysnb%O>r MnjcV5eϪ?11d΃Ƕ$+~=姫ft~+hvoR9Wow7ok׮b0 yxrfn Iuopll,t7|322jI~j,̛O?ˉy39>xZx]ĆfNڶ|ΝիWOխu…fZdj?V^BAsȼwݺuZΛUB#bݣRۛy?(/:̉Mq~]4Q!_nݺzQom۶%ƱT'd"Ϲzw+VD6:w>P=ʉLǸSv튷<8`v y{dUG`Ywh# Volo޼yciW4w3fȝ6s2{s|/FҬ\;_]v}0Dͼ=W]n6ұRۗy͒e)'N|_W ر#.L%[e"u޽=/ ۷o:ޱϟǎrͱUVGetȕzN7̔%Ȫ+q>|rD^yɼ(.]o%Faocy7n!kw>{{'vmyofyS=ou^^/믿v\uoܸzw&e^r) \4ؼ`f0yfAׯq?﬽jϼn>fͱʼaϞ=DǏ#:u*8zh{r6"mdeNtyݻwm۶eR<^_Ӑ+fydms/cccm0ފ +\T+ov믿y3F<|dpXjUJ^דy˗fFyœWf F. V^:TmfW-Oeu~wڵώ1~as´Z[~ОÛ6߻woО_zuʕ ZUaʄrpKͧ)ܹY3p!z2`v ysPPӒ}rA3c8\N9(W_}5/;˖-k^אrgkgpΝS{~PaU[{˚i'j]GEO>VvmsyHVqE`T?"FvڢECގ-M˼ccc-Ip4S}̙\k+^I^y] 5?>Ur/eVl{zG#jfU{w^ܿ^?p@rSG㿈,uVvv}r^gK.& FƉQ5s̼ .̛3%^͋K橞VM6) jڵ^a۞gtteĉdwԌ?Μ9ӽm. xw=oǏ6G bsT޹sg`j9k׮ŷ#:t>k"  2/ȼ  ]~3۷:YpW_}wujj*_vYؼysd/^%z;::dg d^K*}vtرcȼ^xɓyZ6p%}xwgffryAY`ܛ-6kSf6<s6 <~c }m}.\hgϲsJӧĉ՚'y"e;wVk˞ߥfNvϭ[֮][8ٳg:et|6;2/oH杚$p±W⏌-pm?cG-Z>,Y[E*uVX,9zXbKH=`GW;Q|2oDdk'yK|(*Xg'ŋ嗇7^ru-vos}ؑyxC23n߾ēc˖-eۼsNfΟ?1xٳ[j3>}zff& ɒj9r$X{ѹsr>(K\{{=^{ru Tf>:hQoU ߟGZ']vdV9_30#a|;./#dޯ:^\_+Huosll,f7|322jT|맟~}]~?ܼ2$]v]ܪԩSzܤ9^^8NDN}0QvZؽ+?5Sc\vԒyLd^̻nݺ~f +ŋ|9덓dtXnݚ76uTضm[-2)ܯ%~tڵko_|ŠGs(T"* Zs.ٻw+:ԬW3\vԯ͹ &2/V9uUx{Z6Sjr.BVmwUˑndժU6)!̙3YRĉv͛=ڀ˞-5ҟ~u4.ˎ率Ld^s垍tlTk7\m[EMWBkV=z47~)I4\v{j46㏛om߾=*-SV;h͹g[Fc^O粣~me0yywQsto6tmͻVˍ,iNҖ˕̳/\Pލ?#D'[K<{ |lπAEZW\E,/-=ow>}H[mK捷@ccc?Zx~7\op6/.[pk1KlqիW\KsϼCHy3o7oZ>]hѝ;wJ\ziqyO2믿ѣ gϞvرc>5eO:ksAȳׯ_oFYɪZ-s\8.]Z?ys?̱Wr"wWy֭[9|rۜ{zGڜ`"0[ڭ[tڵ9/3#GTʫ߈xT+m45kŋg_~Ym<6*lܸ$h͛lN&μx{Ŭ~:Vz4e:沚h[l|A)iY1V]jΥ?%_t)zŊwuo׷o2wԱ9&2/sɼ +&&&2WVx:68Pmӽ{6lPkMy3y&runի^~sm;frxmbY{k6Ր޽\bl=w6{hOolQ62ȼW/5dzz}/^xJǫL_fTիW7gT˼[e-!u>svxٲeݻw=qe\>|o5ҟϤoc'6//޸qc3;Ў:9D`իY!"Wo=w̛4|Zkg5ݻs3GFF:W_ w~שLߵksV5ҟ9J.]:ٳ3}Ѭme0y:Ʒk׮-Zs҇e˖%KTpK㏌j3gj`eH^y 93{>}[;)Ch62ȼtɼ-.]Zhz;2L1|uSsxtttӦMW&ה-Wkrʕ+g6:o$V|H@5ҟ$iU >9##juQ{sLd^˼u׭[w7#˗/G,w Hׯ__h9ʣGP֠ޱcG:|.N8);9s_ .ĩ_J5Ϯ]62111clض|Ѭme0e^ŋHOy@d^y@d^d^y@d^yy?Ǐȼx%KȼVzȼU}u?zٳYkFt{ݨ3k糵jGT:cOk;k8y{95(ʇaۛ6mZ`;W駟j5ۅ :k׮~z8q"^Y-g_qì ڵk˗//;Zlٳg{| =olѣZf7nX~}ŋkb⭁2 {j1;w&VTno-ʚΝkX._ܳ[laسgOGGGmvC o[>_S/{IqF5hSX"ŋ$2K??YtҨoeL޷o_/Im_WVfcG%MD՜>D~{%#yV/(Kg}V/֭[yW^] \fċ̒ 7:_-[dj2D"n/ewɾ7ϟ?ժ3w]=>>vrrZ/4ܽ{7 \%Wtg۽{wK%KWQe> +sb0H1yjj<5?1ۃZvtwxkqF5+ag׮]=+D0n^6ג\2ofZ6 _uD ?^ݶy m(}7###=ߚUB|7b`bWg3:u_ֲ͖  ڵ/ԩSQ?lwˇ8#m۶-pZ_sFիW j;y̫W֮nN\%S\ ܨhѢ\KF)}¬R֭[esgySjCs=Yrҥ{,4_wZiiف8jڵyvn>9s&/|mּu7[4/_|EUV>|8^=k9_O>Mr +\Ky;̌=OPvUο{rN{6=qyu/4BGo?m۶^sm;^Dލ7Yi͚5N<$E˴`?y7uO>]Ogm$Eo\].mypÇyﯿ6rm>i跆X^=gr[S8˼ܻwСCynQ}VQ?efmy̼-f0)w###.]2<؛7oV.S'oy\RQP"3j{ۜWlUB;MNNݻܹs2nyl^{יyj?k^sӵ efҫrHmCAJY]eYe:wqΝ)0kȼ/Qg \Ü3_s3oD͛7ey-ZW]v wp|\* sرcH1$Gѝ={تZw;v56SV7shի22| +U^\X;˗/oYeը;] ҥK`_OO)?={n:8#?~<ݻ̽dhyL̪}/7G, _~d055JDeqn󈣫7n3SG7o|poK +zUKԶwRW^t)>"YEN,WN>|957yUE U|kqF5˰w$g<)"!.au#4;?~<>>^O՘"}e{9ݻaÆZkC}\ZF)fffnݺ3f/d.W,_Nb93;::7N<{>6p~NN<9hsU o5cccQX!bqFlIO}\;b??srά=֢3,[,o߾~5̥91STKyam^sytYÇ7n\zuʕ͋ @5fҫblck]}a <#g,ot/=ԖQz3󞏂;wݻswpqe1/_[)Be+;6~ٌ~NJ%ߪ97wgU??5-–3ճ08#~w/^zSoD_4:Pm +-\Y+W?Ư^% (|rψ| z6iüÇf]\>ĹnpR̙39zeEmL32/DvtttӦMyc|sE3o^\**R5r::^UD\>㡏z{rHPOn(͛7,Yb*y#fXlYT+Q.rMT仌9c,^8C_ե 7o\hqŊŋåɒKFrvu߾}Hy/_[.!rϞ70cm%:ݻwȑPe޵k探2/A7>Rr֭EEaΓ Q:911V+T3CMNNV=zzHw"eEge2j2o&2Q7ܖ-[Zz2Bn߾U[e+y^2Cݽ{Y:9{ΝltϼIA?"FdTKΝG$^Df7]8]\x1C/|7:WǿCd|ټ +?՜[ k3ĕ[= `$xy{i\… eA/Җy2^-j!n֭\Vֶm9kΝ*rf͚xyȑZy3ҥK O:կ֭ӧJʼC u[~W7-κI .O) }ŋG>x鯄իW?S\x3Xcǎ~=K~8BS2+=zKگnɼE;;w̼囪=<|𬙷Ӫ?}fٵkֶ>Q77Dm+ɼW^W5^Vtw}:#lٲ;0ttR{Y^+Vؽ{wyӧOٿ6=Y;+Z^esUuݻ/8qȹTy rʕ+j333={>/Cݱ{Cd[+kμyYE>"lfdWrw|||ևر:9h]hѝ;wJyt6zƍtU.\).5:S oݺURcJ w5mcG׿^ռT~`5u~Zpviӿtͩ?k+_LƜ7O>ɓ/^Ysڵ/^Nݴiӊ+2eҙM@CMNNFd^Ç :qĪUrѧm۶x{U,X9sfܾ}{˖-ei eoN;ʼs}_|/,o\'ٳgP#  2/ȼGxq2w͌<~g>*lڴp !W\0lٲ2/ȼYzu|x 2/e.\߁׭[' o/^LOO?yӧ]?w\G ͼ1W_}U6C(2q^2$%:fr)cǎ_ 殫EjXBVuV)x2 ۭ̣Ekadd2[۶m?v3VH5Ȕ/wD87|ͷfffS-ݫT\i؛yϼǏIV׮]ˬ/xrf2Q;fmyЪX^(ʼ2/o;wW!E~zO?4<855U %-]f^J}ԩTq; >|8QDf3}eck1:?7掶m'+'="fյ;fޞV (%,롕F:KϽw<@W-VGŋ/X "Fjgm3>t^Y(\D*ܺukK*S-7nܨYԩSͼӱZwq.\(;O6u-9FVPyxe9;k֫-[JPj7?*I}1ޞ߼ys}KjTu6{:t("s5֞UԽ9PU>|x̛z3rٟ0~geyk_[ȼVy_y#6'siRXιsjy9`$Z}vfE3|'Vybrrr޽սw"jɒ%۱;_vt>6~^8q<:YETʕZv;ש>vX˼gx>{ȼv3S*-2( _Wlm5ʕQwNұٳg;ʧVW)jzYj';V\ÜӲ|սebdl[ʾ.O!O +΃0_[^i? +]w캺w^==ލh?cf&R8tPuZFߟ4Y(R{ӯTxhTﳇ _Wvz9k5Wmn?nÎDռu/2/şmk ?x ܢE,s V}]ŋSu%ן+ظ'ʼ^ݴiӊ+j7+k4Q5[*Iye^[l)+eۿުk׮_&R', ZoYYZIϞ=3D6Jȼ  2/ȼ   2/ȼ  ky@d^y@@d^y@d^y@d^d^y@d^yy@d^y@@d^y@d^y@d^d^ 2/ȼ  2/2/ȼ  2/ȼȼ  2/ȼ   2/ȼ  2/ȼ  2/2/ȼ  2/ȼȼ  2/ȼ  d^y@d^yy@d^y@@d^y@<<޿"% P"B 8* LKCj\^Lxb*,I(6܂(ŀ[C ǻ`h0r{#F=z8/<眹׾G?U=wޮ=3g4/4/h^мy@y@ 4/4/h^мy@y@ 4/ד 4/h^мh^мy@  4/h^мh^мy@  4/h^мh^мyɰt9zɉ%_} uI' ڜmݦ{5↎:׬YSkapWWX[#h^ Š*m +Qhz=C46;V6Cy9T&~oVXҢXkդ84<\{[aq7[\魯ջqH5o@v4oToW YA]:p GiաGn&n3Yi^Uakϒ8rI +CM/onWI'-^z>H-ȯZl:-pn˛zww> IΉ6FJ $>U+Kvnjs߆jN6}Ij^4/S&0h-Zn|VD&> X=Hy5/0}wNlmU:pq1ܦM19cţ.ۢ@5Q6] ~#mS ._thOz/]jƗ,!drqrsǗoz*4ch~YͶak_?\ͺ.kaxuko+*֞& !ӯxf;o5ob7aXJ Kwk/~Vwt  Dֵ9_^[iqI g5$%motA\wki qnO4o?{՗U +ӈyeiE7C׾ VQZ(ੌmš;U1A^ ˴ qm8];|m)[P PasBjM9{9C3Yuڐ3'\h^мh^мy@  4/h^мh^мy@d߾ۻ.Gw,?}.GW󚙙ռh^33333ӼkfffffWyLj^4i^͋533333ͫy5i^͋533333ͫyѼfffffy5/4E󚙙ռh^33333ӼW󚙙ռh^33333ӼkfffffWyLj^4i^͋533333ͫy5i^Iмfffffy5/4E󚙙ռh^33333ӼkfffffWj^33333Ӽh^kfffffWyLj^4i^͋533333ͫyѼfffffy5533333͋ռfffffy5/̬g}s9͂;hU%+>[GrQ?˗> nk$W'O|拋Ͽλpz^'>wy70+?ƭi^͋5333'6gQ+ _w.BFŷI}gGnnGօ7?tWt3<իݽgVx™ 8y"\ӯ8-}j^͋53339uOu'־_ŷǯyo[d'ϝm90^o^*ijҋWznB9 ּ̜kW{@5Fۿ2 Nn+.5E󚙙|ArH͡հѧ^ͿmybӺyKBdeó:[jy?&̖߾}g/^m-;_<~ ܶT:(\j^4YϕJgeEW5יּKK/}z̜z.#>r޳7q>[nxekίSy>+5E󚙙YVzÕlܼBWN=򔋶m;Uw; >xfޡ}7l-CM?yL%izpko}>G1}o (>ʼn_q n/=\[Wj^33336V_^:鳾5N{3P 7+w]=7~u(gͥ߶ռ̎=PVu/p!ؼ`zbKțw4o֡3HyL~WYj^4d/|lJ$K0f_pK O^<3H7Z?#y4E󚙙hf7;wIu:68;y5/ټGy553330ٹ`7w5'g/u/k^ͫyѼffffq?Xdϟh7Klѭ͂;fsгO^cټڳw_퍖NuOo{t^=ռh^333Q߶Q@qK=ߟ-ZcfΟ-][ɝ]5$j?*qe`sgn}Xj^4٨vw?SpąC#N 㳾yP7ڦcnxek^{3a݉_3O]_矜Lj^4٨v^3UT۶l{K +Җ߾tZM}(4f\.lO}ƿ?7~kdeW+ (*S Ϥռh^333ڐs6?q൩y3O .XtOo4onv|yO8sa|{>}r޲wtǞvY˗=0Ql^{O3y55333xX5knKWzk_ʼ[w{Nvk?/ח>>C⃶3^Qr朲Lj^kffffrۻVu2GrQ|ʣܼ;V yK精24{?񝿯^l9׾zGzi|ɽ?hzu#y&5ռffffVM?yq]>"t9?oMؗ.m?ɧ˭y5/̬6nǝ~Eqn=lޗz]Sм_,gpPkA~*-ٵw0Fxuɩxtݨj^ͫy̬iCx',OoUvy8p3?vgKǷxG3s!ռE>j?y;-yWY/77$WWyF͸$~[.j;?/)n{-;=S:ܵgAOBϞw%+ó |k7Ņުy}svw^ͫy5ڪտ.~ڛ?ÿvNԳy;jd4i_Y_}O8sa|UXҭyxWj^3333ݬ⟯/gg?`=SܼK}d4o3Ͽ:I{_ǥ,^n=5*qqBj#OhO-ͫy5/`->e:Yۼw;8Qb sCGcjCoMs*]>[H pHIhtEөlA5R81y=#oޜ7~Mͨ59jO}Jtףy5xֵ[&RSt}DMmVOۺ7\[5vn YT#i9I}63mWᇋmx4oP4`MchȽYL_?K)?Džc) UARh|cT=RVXN6Vg͛s|tmC?[ۧkjRg pfMU9d[§ӣ)T:6}!wjͥ/[%o{w`j^Xf^g#loNϋ"+;Qϰ|޽7KNƷo"5w 0~JiFyv6WڼI知+kߚom!_CU·swz +5y4o}^?wh4gNl;ڼ駥8xSgνռ5 $r~0^u8Wh^Թ9 Uߡ4˯;MJ7Z{&mOt)~ڼm&-hPN/zyмColnAu0KQ},M6ڼײ$E0xq~~GQ{/EUVߚSZ{yr N>xS@mWVJ޼7=y{9?xOnS jʼWEoMjN|;iڼ4tuoA +k>g.F͛yK% U/U{ŔS܃r?)tW}׾53>985oo9&[Dn9bh^çyǏ⛈fΜnTL?(.5Q~ޞ;6͛<{niۆ̷z.^ެy4oC7N^C4&|m:с6|7cyw9T4goMMn)j痬7k^͛@ཊAr圳e6TONП  SSI9sS&0oH<@|Oã:[{7}իFX6/h^{KkRϦvhڷOv{+b#fJj_|YӼyƵy4|` ^hj4k:PCwupFo.LRǮyѼ[֞GW>Tӗ:|vA4Vy4o|HwcRj^4/yfo"x7o'){ռ yGؼ>xi3^3?rO[isu5E0sWtb NykheR8 WlT;yO$=KnD;́@ 4/h^4/h^мy@@ 4/h^4/h^мy@  4/h^мh^мy@  4/h^мh^мy@  4/h^мh^мy@  4/h^мyмy@  4/h^мyмy@  4/h^мyмy@  4/h^мyмy@ 4/4/h^мy@y@ 4/4/h^мy@y@ 4/4/h^мy@y@ 4/4/h^мy@@ 4/h^4/h^мy@@ 4/h^4/h^мy@@ 4/h^4/h^мy@@ 4/h^мh^мy@  4/h^мh^мy@  4/h^мh^мy@  4/h^мh^мy@  4/h^мyмy@  4/h^мyмy@  4/h^мyмy@  4/h^мy@y@ 4/4/h^мy@y@ 4/4/h^мy@y@ 4/4/h^мy@y@ 4/h^4/h^мy@@ 4/h^4/h^мy@@ 4/h^4/h^мy@@ 4/h^4/h^мy@  4/h^мh^мy@  4/h^мh^мy@  4/h^мh^мy@  4/h^мyмy@  4/h^мyмy@  4/h^мyмy@  4/h^мyмy@ 4/4/h^мy@y@ 4/4/h^мy@y@ 4/4/h^мy@y@ 4/4/h^мy@@ 4/h^4/h^мy@@ 4/h^4/h^мy@@ 4/h^4/h^мy@@ 4/h^мh^мy@  4/h^мh^мy@  4/h^мh^мy@  4/h^мh^мy@  4/h^мyмy@  4/h^мyмy@  4/h^мyмy@  4/h^мy@y@ 4/4/h^мy@y@ 4/4/h^мy@y@ 4/4/s T&<AA&Ɖ!LU3e'DFAA@/DGt4yo=ZksTRy}9/_~w8/p^ y8/p^ y8/1#ǙJj[S9R{h3y SjC<+yAw}=7>ʺ6Q'߸Gyg'=o7Wھ+w3I>o|}o60W} ʤ0RڿSJ4=D/j2b+´eEAD^La=MR(mNv0l{Z(ߘNGh5)WJ 31|l~)_5{+)ĸRV5ܼZ +2OݾZ-kƮ^@^c74/= nNvv3;qs$ o4GEGu"ɢ7L-tJ;1tD9SH^SZʗ*4 lN{PUVL,=[ #Vp#<`ctfd\Wڹ/DڍN"${#JVs+39bF9aMfqc^ƈ\lD-߿r$KK/K:P<-/'tssKGj +±F8/cy֢5eئfg*@{BB_WkV|(wNƉr+"e|^&pG`[B&fPXrX'De(/tyȰvQ] J.veƑ*礵%#٩XX(u5B;s;͂a )[Uʹ&b'CeOXsCl&Y$["/yެ%ccI9_ Ry|L5|q1K }īp^ƶd,8>,JҹӔL$9ϸԝe +G¾&;~n+>9Cy4TkEWV(\"JCT +TSyU* \24e@&tNJ24 +e'd;`#Vmåu]'}[cW'VTR%pڂ€+怸OcMn\|m6J:)MvzpNSѳmϲyCKce;E>#+V)3H:eRdTq^8/cv\$VTd s)ܮ셥@mݕhoTS,[xi]/72ys^ܜ~gegI5BhmE4pgIݽݫ"yʚg[~潭Z|ds6.[Sg׼#ϯrEHMsl}[TaR'|yQq('6n]㬍W,~i=WUKiyk^EZ?{]@^5SGٳ<~R \v#g+,\D!5ȯұURTzu߼{̥BtBNnO +iDQX8EěWMR.ZS{:o*GBk#/|x߾7m<PLi3ylҤR"pVP~ʗ{|G*յckq(諞ȉSy*F;o:6n-/5 ^9 CC=tnNzJ~u 6u+ ȱ=#YW=NYۓ:!0ɑ٫ֈm7\wשXPXҨ.@X7#.UW\im*!U#|~t\ MS޺&(pc7WNFzJm 3>Zv=N'[ߚ3.ST=)9oSj@ǻޘSr'~qF,|ĕ)I]m0}(ybȒbAr-pvU~?~kVVUwY&i6-J|k dooz -}QRkiyk$jެk"V,)L$g~{ѤS?W=qP9;wџ~:㩷2Y:js#sS!/b 9n50&7-l1\E*N6G,_+eMkw-hg}أ4د#OЊVRI +U\*q^CQt|%7 $ťTkq|7/]"˺Iizbۖ,~?CV's/'井Lڞwg̤EC9:sW3i˛}q!srTIƮu8/17Yue -wg絿M%oˮz}_Mj5^YvSTrO!{kI\q7n|eT  +_-GaRZKJz: 7S544u #ZeASw-lJλ9fMk{A:M"/ >7D~M\k5q ߽k߄|H|e݌_\7-ox;v +خ?kZTsJԺ 'ɴٯ]*955Qd㾵eNM'It؊9k/3];M˺zzYj?_IUJ| \2*0^Ƒ̑]7&ݛUlכ.xlEQke8ksQ$zITw ˍT:.tO_>cWXqLnhVZ-.z?>b9hZ5%ݛ7jcFi-,mh;?M>as5l+/~dzֺ 2)Kry۬(6_ϿG<-[^~Җ44Lm\n1+'>BġR)O}'zN6ErE3b\Y\W=huҁ]'ቧ~JuplLZ-r]e!w=t~@{RGuet2E_s'_E*gņ'(B +ソ冥tn,UcJl?oVvRd'~?1M)okՆb?{dOWQw'L_m4qŴL㨆Jwsx\*Bz6֍}qtCx<$=f?9ܛ$Ro}ks{9ɺ}pgj;`Ҽe͕#bk^vCCBy4U<˔2ƂE#g׳^y%hk +K0D|*N1KD"73rK 5=0o=ns{?FzO`ǹO@^H79;O9g=>'`0e#[V=pILM iHFb;Ѱ 2 ; O4hw~ʺ3%Eݗ EvlyvX!gAhٽ{q!AuaUL-aJ̉z7^= (JM,h v?}ϜwhQGfy@ `]AebI[OɬB;bw+7y[箿;QqI9ð^+Skh0ض iL(gG؅=qfXÛn^u7̞-AVVRٶCR6QT:i|4k4Î`8p~ZzWA +liho{vwᅝ7ֽ2k~(887Z:W.!q77+rcڸ[^˺A%|p+MԐzQb9*fI7.1D EI<* /7bD9ew whmki9/@ u%s~s>]wſ:{-(|T]E(%'}\E]Vc0 zɩ7ˍ0&n}b.\9pK/]:x%F|eHL%|S1XBMe*cnj{u?yAO]\⢁|cnTQU ©5eRn{h/hvАŃC/+5ᑵK +*)2ёX-oE,0PK칿>Q\pQK,xK/Xk`^s*y yub,sQ۲^2dU,}H1X ˷:9vې .fhvRD~Id%2 @ dMbxb>y'1^/eW|4n]d oǼLJ4i߫nL+vʤGRSozƳ>$Jp\cRR=*R&84kfƥ0DbMʤ$Ґ4%Ys\: &f8cDu2p,1+tmuRҢ)ԥ;H~_`E-َQv9x LKrQ/M%"% hA{i9RҐ[ qo" pM~*Zbt⺖9DRoM1(1pw.{"@ QB.,y#ٜ|n&C}>M{#ɞEI༾u2T%F(L2u,]D۴ u+q;dz'۰ =z)G0ݡ>8b'Сr"(0J:tҪ~Y^ pfQ"̡kr^@  NRrx7;I]EGݱܲ =k(d|4oLP =W3O(ϪyY-WYn]MW-^1x-A;j#5eNl1rdw[QJQvE*TU,ɿ*V{Un3r^@ D= +,R-tg%̍;vg$C&(5*U!ԭjǕ +cYUL5oWMccXiu.{W㘻Hkv%hu +9?Ƹ~ӣ,OP 9/r^@ D^7!.A ۑq}ݎjS~;^u:ˢ\ځ*͠{W}ksHqGYcec.qW:{b-e s>A&G՘sϏx?#Gz$]mgeޝ@ qbWU7SQ]O̍#ex|dif{oNwÉdԒ iFG`pWu )e *"g +Ruw3?V.H»%drGd^f녒W&$A>,k<""@ zfv2wISHޚ`pC+4-|֗/frEmCEaê 5eXUCeUCEuwmXʪî~Ũ<)Wxꈚ)OuK~WJ\aFq\d~UzjsEuL>H/tAmԵӐhRXiԍCMݣuWӾҸ &B< 8e˹CmU*EleʫU~ zІ5)զtCB3tiwU:lZ~hr #& cE`LLw>!#n6r\͘O[1)S0`bs©S*8-`rmGc4=SV[lK4 ,J#%,eJK~Eʓhɯhwيc`(wj1jɽa3r^@ qHK,q۽a\{K5c_5쒟+y%ڠq_4'1dB ((j/wPCA؂ݲ! ۧd|*N/=C^$)3I26̘ mq݆S.>ksC?-1qIW֌ͷnc*u^J +:B󼽖N?|<~^0mFYEE3yNV5|E~\\'i&}0y@ Gx;hZrx*N$c&,i&I%ʃ %aJXI+#q;u'q1Q4)-iJY%1듸'n}E̽Qkoڝw%I1Ij0T D2JcIh%bqs_O'?OaR* uUa~Xq㼒Yn0Uv4Zَ<*N.Âǔ~I{'zkR2BB}^uWSA_1Wze3bSŶ5#E @}+RE4P'nJQ)e+ VIאQ,-T.!ܮJ( qM͋WV{OE]7mٗή[^{oB/S:jUK⺶LܿG̴P? W,fViϩ~nyеS~6]zS0wy&64 +_u(DzlG֡.5[9ʓh4)߲sQu70`+QqJ/ur^@ x0I2G{4>`Kosxa b)%󶙲vdx&! R]}uXY%#pWO;^: 49?4;&jI}:OSC63V~{Ɉ?(9nhJ+@g^RկyCN-o8|)IS +*?o e+O4+se̾wp&RV9ъOOz4A!Ť v!)$M:{'3܁݀jGww@cGTsjr\c^2e= ˋ-#͸YV+>L5f\ZOSu^uΉJ,B@@BTD;0\9VKf-&Sw/( DiG&nhƔܙ+3ge@΋@ IILdץ8 yL*>E Qu]^;fVY՜yk慪 [V3nNi.j;;(lDP@Qc41zD1*(FAP@DňK4y^&1ɼ7$qCBwBwK{߽9mn׽U9-,LK|W/UK2JEEbբQQپT lu:K]lxijzAK[GnU@e0eTg'!ƼE\kjmgRV/_VO[9H= +WzG @XN<L NpP6yvg͡k0HsjEC{| BL, L{kvvLxF_x쓵Vcbstr$2x0 ChrWJ0h~$};ߝnvș*?6s]Dj,?i8\zow|Sc'/]5X1D%s^H{?]9~xٖC9zԅ[M{pHv'{!4j-ߞY~yˡܴ816Bdt8Qwኦ[{뱳mGδ3h8rKyEs?{GNY9mf݈mW~!bV촥/$C:_ ĹBL+z$ )*E=hCIt +Ў`BY;>IodЭ\R &5@E7Rg%l~'m!$&H@t 5$ņV~Ș mfe\y{cw3Sbk'I/&ͼsgK'n`\M\b?_TՐ.IN<|J|*xp'Or^fPNnW6dM6dPD`y@~N?:"iԌLo&^!ުB}|kr1uA)0_U)f +|/ ՅB¼M39+OW[[GSYx:_4< *1cV%B4)Y~U>k7h7V{`a +boU~mnlouZF9/s\90G T@J$CtVLO ?N}>vg"qO'Y's,W^ks6^6xrȥC9Q\grk忭Tz 2o}v,fNi$BAH>IzzᖹyJbqдQpᡃ〔$ %5u{E1?OS̗nYG֫k^,/*i;P/Yo?[/7L-mNDp,$,4psP~EkLM7 -ϗM[RtίV-箷16e2i01+ [֋7U CWlA">+ː5]0?z{x|Wgoӡ+FK]ZeKEg!xֆo—MP3Lo2+DSS&IB\ɇǪM*BRh={Lff:9Y9D$mZ6 +R1IzCr|~7.&HW fmv@Eꠐ kjW$0C$,Lνh2[m ݏQxUv] A4#aӔ؂K^|mkwn/sB'OYM w64X=$rmԒK$<qE줺IKUDc d: ;ml:i^1RdZLV]}+Di#`@6T+[ ԀwC qF- +Ԭ +[Shu k䣤 +XԉGk1Fn2iA%Azg$\KJn(P&u߁GyR*5!ҤN%Nd\m{aH%}c !]5_bVh?c$O{Q',h0iK&ڰyy2 fRTg)VDĥ]C:|@E\">Ụ-+ b3BCTt+V w*v2sENMj eA~y ?[1R 2&l&l=?KK艽ϼ"yS^Z_Pj<M~lC)a@ԥ=JA>g|=㑏ʷ~_}ݟ۳o7'~"͘"VT ؋~'Kk{x[zxIM<3]Z`$N ҭLQ+yrdW6dM6d'Zv>x%%!@$ *ݨ)3__>UaڢN'O[2mAS,LOȐ|B왑>U!y$#2#_f;ਮ+[;0Il'mPb1qʩ1LX!hf$TbCxb$6qq[ʱHh-޹ERa>NjwҪݳSٗ*7'-RKju-NڝbZZݎw:%].'YMqSqIr{uρJ{ؐ.4MQDނ\FLR)4X,dҹ mtp5_vr&K8؝"vȔ2{ ++(Mq]~3;y`żq\̛9SЫm\Ļ'X5nBHXquWP–WCN+M}_U4 =`, w4Ƕd۳ŧЁ坫2UϋYo+#:IDV>[p'caFaj)c*Bys7+A8^##mZށ8:W_Xb . g`Iͼ☀P\pLn[D =)?Y1iQhgN>Kn/H.;? J Rz"]HQ5IԙmGԉRaZE$zcV [[R=;nJg+!6ym6l6P +j TJi\'d{/yvHU+d +B}PzII҄twMzn]zn}P*Ԥ +{d0_ e#}۞buPF?.8{>b;kܝ$u'J]PG8`OҗznK= ru$9NC/uW];Iius75^\6+A?;%%*My yBSu ;fK-Q~%]j)r42T1˂IEf(cYkB8qj,Ӏ23RϽjFBв GV҅41Yhu +m.[RĶ=MN7d> &6sw-6M?UirI]bKs >H!9X$!5;&6mO[+M FH?a1 $r7; Rt2Sj!;PkLrӽ!U'uŗ$5(-s NwC%Jy/QivxZbϾ%ggiRU-pMqsL Vy[EH5 =O9G;*.F +#zt &rJ[Y62zM"DY@%1e^_FErŧC(ˆģz,Fafz313}"DMuczW5kK9t)V͌08RF1_p YuR9fKM]yn HxhXSy"*nxU}6φ+yd˾2fX')TCu;b#LA9H@'߹̽vL>^g}QM ecb,MͰɷ,zOD),G#Ƭyg3mfmf۝Hm֡րÀVG ;+% =ܻ<5){2=4i_P!e Yžl2KI5tFLޣ[3rr@YADyP6AE1ˋ?'wCc\ubKۈ,wuF +3=z췔y8̺0ΕQT1yo5{{;9 !M 6/w<{!.>6W "PL!XO$U|pl`ԯQF b5|q0PA8Bt Lҗ?iBq5& +|9pW'(hĤ@wT5Vg\mZxc^mym6l6l-,>E婲tې_;wa 7p فgyx oP~}N;?5?98}IꈟaOcOގ32)ar8p,X5HOT= 8=O83<~z=OCð'Cx-Fa5: +RG#B).t&Vd+;N}u9ƒsoZyVC(%Dݪ}!]":L濮13<'+5KżǞ_,;MƼy43BC]äٗ(8+aBisXڧL֙A_ fW*b'&ҌPٙDPM/ؐ FX nbƽyIkú3{iceG,h)A,,@; +PL0- S0!ym6l6l[:&)@9p ƢaKjT8C Tcsm@KgLfڸA盘||qRGбy˄bpqs;n\ CFu擈\Itza7u|)dMc:g;2LJz(k\Ո?B&ff f+csׄR_&СgD._b+s6̃bes5P1[Aysw/TQ&Ss HD)Rȝ5M K Z5\ +R~U&BI1!hL/ BAe?Am~qW',f +V5EC OǦ*zN,~+Q<0gC +eNC'$1Z hBP9LUaS=% +5~B5H1gx5 Ӵ1Hk|J\ tt/ U<{(8CW :z- 5d|Z7O6kmfmvgZ x5KkQ(JBhMuH_!k\hR#|`S7jU!FX܋ L;ђUE%=ޒCޒ{JyJ<Ҟnoi7`~#aog򊟆KJ{Jvt.OA[жͿfY6IF_z_.+ml~hkЊnS}¶i[S.K{CRa}RIRܱz[kuuN jX #2{z^S݈!E7?ړtOIe׉ ˯ 'Fw"5+XhR B s4삎6e^ƊU߹wU%z ͼfmfmẃ{0!#j@-d6*Ʉq@|^7q WUrMlAdT%bOM6]nv]bSjrĽ!w>\\R]T,R%EhMZdv]hNaqJ>\|SjLRĆT>MMPs +.] ] A)6Wh ”]MNٗ$7$MN%6`N}:$_.Ent֧}oRߑi, *$nLdAY)⬇u}z32o틍pd[8f+_z]7}X/5x?k q[sHՂG)%YH[Ա3wK5M75-l^W-_i]сv&:C"Xg V>D@ݛ?,tFuvVYsx"7U o2eG߿p}6b+:xJQ]?w!hFT5duOv~@"L1YJfR C-01T!i %Y:GOݟ_ꩋ,FI Gn"=į$"2fD>M#a_LLgQnOvfH.j:kmݳ6l6lγ[TXXvZ'ek7_yMAǪ[-nj+YU|гc¶-Wmi[sզޕ{ttS/l{ +;NXt$ke:oܝt&(ŽcҖWZ'ʭYbFb*HoAHH<[) rgx IHRZD_Ҙr:ӝm[BZ^PNHeibChq*LIu/{gUAȾ/PGQrN I'!$@ҁ+!D=}9:?:raU;5xc=qC5j?صgִOe@H +~A7-/.|yڜu}AѨDtD·u2yƏvhf%^MV' +?w]UYѤ$+n&Y\e'+"VF78Զ3=]{ߒ{^Q0oG@3nh?U*ڤ4tk(hPT<ɶőӗL4*7Fa=E7*ҙW=C= +m?BiHYU>xKQ8UJpKIF[6FY6EQ=Re)֒*M&{g)663%hz&8. ˈ[PMlvrqV*S~kQ_B޳98"Z?hFZeܖ =0dȬ\2_qt^eSa` BM8`Km S7gljY~RRxoH$cIQ\+&ɋ숢LJbt" {,JCc(j:ʼHiH7Њ '0퀬dF&E>W$]v5S1Zǚl.\@jxuVx}C'{gWT?;3B-ˠ%{duXO1;fd,6Zr܆YKg/ȼhSaa;;\I%NUDt$VUE(\[+Z8dYqΒ9ud6w4ϿHr5i.\K&KzWhdfyvy9*UWЙW=C=b^UEp@d|4ɸX5<ƔFuKIx&b2nH`6EG[KyELIUM{4d4"4<$<,i\ncǰ%QL~F7){,/AXPFҥk~s"\hXj{,]KISS6( !GeG$o&tɩ%W6tVEW +HYle$ HJqYCY b~֘VZ-)r%&,QQ.\ 2:aF5կO..fVZXr⒤wFZRj~lu:V$E&Nt:1IDo ,xEbt㔫nڪ7K K|) I"[8&?PN$XPfe(|]IG%Ts74]n'ȂD\~4v#v"p=κ:њO-5MJ^3Zt7>>hrJ'|uMCdQ@v +o%DT8I$A$c!5þ`vX y!*h]5-珟u9Tr Ҭp<,w|3~]I=14);Ҳ*Չy=Up9J63z衇z_E\0"1;s {Ъ5Ӓjʘ-rxsvgȸ4f$PY1&;Ί4ŘmIXcnA͜-80(`H0d'3ӟYUf ٱ[!nJEJ #Z a.e^kNyD-ʈMJhȈOJO0bQQI-Ƙ4>)'Δ>l<=~odD8L] sĩ2g#%ʍ,cjѰD\bG?m#LBT5W AYe(EQDF1 +JWRjcyRˏ_pqPE2gU5"kݲ2c)IiN&#!ee?\(ڱ+ޔ{,HFwHQc<¶:N\;:=;]vZ=x犊W)Q/J$)*:{N{ҩ:pvttt<><>zyn%:{9z9𓎮xqN}pK0*"sH`9v+puUtF~Gν~p\QzDG:5/ ]|~v5hԳfC3ּ{ 8(3Ų`=7dهXAfEY038>;/^Ixmlۉ]껟(Z6,R=O9;@[5!rY{5%"mLwZ雗0 3Lo9pS흮{aUXiV߈\TۺLA9g6BOS]-/#H+ƏCg^=C=C; $3#. q#Oy^MQ n/UJpE~QVrJYLg~cniIm2n6godHrn%k+ek6gPSr_Nnͪ.݆I-PRT+}:jfzf&ce{9k>4KV:'b̈́ZMk`2R3/)hrڌ41a|cn5\_Q4)Ɣ7c~V[ʲKj'D?]4"cRW# +#} +"߄ĔO[ɩhZ~#EbI5UIWRB&>D) M6@WUڟDXU0]&l}";$^Boӽ3 erNGV&1՜{]ׇ[ވMʲUՃnuk_T{oieʂu,u)򰂎9.O-/G F .8;komΫ.ژVtsK"]̈g"CDc9"_Y`{Ͽr9/ԑqIa0TYQFjKjH^yC=C=W^X"w,:Lhd._ƣnb,yf)]>%9&*B@!Ur]3R22YT2ք™́TjBԬZSÁ"+оDGbBZ"[[-[,Atm0]̔iY9OWT$# Y-}5"(*a^{)~ڐyK5hίyeJJ9gFuԓ%V.Zh\x)c}+0pd?3iIYK_Y{gv}x=#]9}C]SLRm|W;yǗ=_|}*"(p $'wN},'Ycjl>u_'rT@JYNvN&cBU1;7$*{vKWeHF,)w|*x[ h -}3z衇zǝu(yb9YSstFlI5Ͱ5Snqinfelj36Sv˃ @s)RT@#Y{;@YC!MQt}v?}Pl'CNFV}dyG` Z_ ! %hQ*6̫z衇zq1LЄy1#os[%Tq(UdV35!H. +,Te.86nԄ+¬T @L5 C(ց[/]e ]b)V",aֺ, xBn GߗS÷DQx0WoW<pkيe~U4 +BU,jlWmPEhs-*j#eB^ѮD2$fjo(I*VFژ =2(rI"?Xb<h̼ͯ3m4Mj*,(NiLV166z0wFދWnp+Ξj:}0ɋS$bB,(~(IHmnK?Os 9*>0=1r(h@@RKY_՛p6yEF(6]FmП9ehB&t;=tC=C='s4I$ꡗl)2jnbَt +t[(d](etM gͮ0v[05u3`v +S3 j,p3̂Y15w-d6ئRS)LOi`jl]^T?&+C_uLy]}2LSAl]B#,E)y[U&SJ.dTUW B-;ĸ5`F^Q "hߕoUah*hI^Ō/Z{|*C4 H-w(cmc%ݖMmz۾ OE%)"Gk'z+g;h2HUP[Tm~}yK@s15K5yw#'I +<2,c a(zfE{뺆#Œ*%*Ͳ8֨ ѤYZS&:aneZ|Nu?-϶ A~L*iKd`LTG_ݣA&m(&q "//{'b ZIPA(#kᣭrw3z衇zǽ¼<47#YF7` h_5:*l-(KRjvG[KMtIhbiXbEj +زp4AoJ#ͥQ[#+ Tyi];Pl*[VF0aSաL\m"Eze{TduHB-zgXkMFHo6REQTN@UsBiGSmb6?~VCˋhVUV?^4`ZR)\52|e'*VV%AԔ@FpwDxn *yzS< LZAFK]Z|j?dUp%Θy35.\-7xB1rM%/H;#btnB0;?_0IGFwcw\  ƓAP%̘ uW?N\W>mC% <ޥ&|p[5\TC8ZK@W8hLBǿ9 ?1mxhZº+@5h G~-e`otIyȁUЙW=C=@ȟ[~{\L'~-ώQz/_vOvOtOtώ'[ݟO?kZ[ZG-m-Gt?mv> Wy%90byxtW]XlD `O^v>y}/>~xǵ:zuʳ L>)h?KZڡ=W{GkK[5B| lжqz5;?MӁ=C ̫3z衇z=ļ R$" "/*P@l4&O/H"H\W%'u9ii9Y rӳҳ׻;ɺ9 rrrrrrfoKt,)?¹Sih +[t;=,-fʦml[ӸӕXcrI%Yq紐%/t]캁o yxۘ$R*%=S%|g3/iy +CzC3jrӏH8R"}iXM AC88{-Lϓ9c-E;0 /!HvIp;6 -БVӤ}䀸(i%qх[Bw_jNዕ˄O_1YpEuic8> *̀kh Χ!{=]b͏;ȥe8@ YQ~qBWOOX\+@:̫z衇zqJʒ>1x0(f9J&'|$wHDm,wc&fJ1଎JYcLR\za֚XJ;I6*d7&U1lu cfbXWlR4xfAvGj`ޙ)kETjbluŰi-ccUxQɶ +cre:)3 /@ 0Fd-x p"E9ҷ&?oo'īx ˘~U1 + 2֦6LEį9rg9܊ +rLC׽ >VښUĒ2H\KS8,EOuIHIȩ?Sf$,?͏+_͢@_E<<˺4;D\EhǮwf;;Z Ky}c_?nZxA/UhXb;s!3& +H$FH8%nV;2D}1+|Wւ֒ſOB\feDUa9wg4?kD=2oI}/ki~|^k2ĖdE@c՛s2Jb6`7> dzWg^=C=C{,G"%5cM•[W/ZYxE|{F##;E+l+S jRW~&. *"Bن < u8m v=m 6[Cg8툠\TcB7[hv|;fCc4Q,) w&]o`l04OB gSY>d+8fJRM㌤jlQB|nhD^ ~Vċ~|E[/fyG+k=`+1*8]oݔPG6ƙg Ovy +)k毣EAbuA/>DIU2 + q hKBKvթkàO8ě YUN TU{H{SRw;`^R_1Sy*PԪ] Ū]ܕҪ(+cðs_I)}w)CW8O ?a[μz衇z衇D` & HQd|N@mb hd,U&j.1[T& EX[H֩Tuy:SW횊яvL9~n#cc&1PK\h 7;?aOԄ€%>b[l^iü0zS0c0n Z!#vN^$1jB)lNMp W|PTӸ^B?1%yy#+=ٰyY)m}O<0s 4'l瓗WQ /m|Ƅ5-{ +1:RuȜ&k +c+*DJ"9{Yۻ10tPM&;ӭK~A&8L^7om3glz87{nA_P~I g4!qUk3k y'e,,+&-wRaL{Gn?Dv= w7q2.l٧{o7Mmߺx#*`H?NɷQkb̫aO> +9ph^gY\5 yHI}`ÑJhLD x&#=xsE0oNtxuC=C=N0ieǰ!~Rtu8UA,+ltE8]Dv@NB([[D3;BV"hd;1CX- B6,=A|xy\328# KPP${Ϝhlتg%;>>2g}S}:Ph)nH+k|nstVǞy/_T {erKdT׍}6jHȒJ3͵E{ }śbiUK&\7(ߐU{*2ٶ,#ȲUUTmq^])_}/Qa@DnL[5[׿ꬭE Y,kn{-L{mfFNΩ~iَ'l{<P;g"r+\o]ї3&UleUUe{l9\K>ku*^^q;!+-LpCu+\f%M{&bڂݶlz/{ߏ;J*wY {c|; `۩^ fXOi Ӌ솇4izVs[}vNϧwثh&-dV*=z`rt'4L34L34SW:#N)m* + Ygoc7bQ~HC{5#|p." 0F#|a [g\oXٰuE÷= v6a`{,oĥd!KnJ"J^3~tXng.ܹ(jxì`G&67쵷\.qnOJ%I DP i̫fifiv@D<""e\Ra*0MfimȎSJ+ϧ)֘bkH-m65'ʚlIdo`boL5b9n5ژPVt.^kb`;g9_ڔloL4v%{URZڀUs;oԥ[ZӬiV-ֶtskFIVkܘlO>ВKfbXcs칕M=eQ o + NJ* 2TrbXreÇ9,[cRƮkr7Yl36!7%JU/^rPpRo;gʵZXjŖʫ׺(U; i,g-ϳUV+T+-;]GOiuK"Zgͱj>ϳV+)./GTudQRK;c***)vbMՑkb&o̳8P|t{Ge'%.hDDاJGWIiyRv:L,ȵU½À0=Zɖo~iP(L>;d=Ykf.aj؞Wgc\Kd@~iv&!bZ)]\\n:0-CfMS|WH^.1|'Nat:6j:ƼififwA%),DUyP%T*=Ɍ]xM EI@E0gT>Os/KpzYOYi*_\5 4aI)AقP{+^^rE n2/1dD>ARd|ٯ[A);HE{^}0 +`MЏN><~o/tDtCj(R`ܾv˷GR]@fMξSC2F/q$ж9%%C0dWV/Nm]Z?[HnA%Ԃ$uETQJOn Vsr?]D- d IPDCOdZkUOG]34@P0 q{ CX3y5L34L3 #f?fr!PPr4ž/.IEs]Zִ-ŭ-%i%MKS)l&&sSZIVkKfSI[%Ҙ^ذ\lbV^=[U /0r+#a׉KWXfGUBuy􋓙GjQ}TRbeKߴс ubIA譝zO$Lv"蘂@ 1+/CR<zȀ%IJ(`Hlt +* +ƴF em$Q@mb\t#é +#*˘Ö0GcQVR);1$dSdTQ&L> _{WVƀ1XZDdzB]=PKrQPr0E`w^1D_"^ȃ 2SäLb0B 0_t^y5L34L3S1 ^zwۍQ/*S7)]!˗e ?hxkDȪЈAA!#Ď 42$&($zDh$.Ÿ8k`Q74k3:ksZ^Mj⠣Nj +j$aN Wg/_[홙5-WDΣ ̻ذ,CFW1.iXٜrF$9R!UuAHSѻ \ 0 A=<?4' f,U +p% X K -M]Dv p7˘`kH-vpwWVT +DXI)\G*PIQuS-Ƌ2 ]4Do}?qPg.,.DAc%vRʎGtxQ} 062/Kq] + " qƋVp06|`vܵfjfif1+b]VjiL4XZR-- kc!ZfO5ZoۛLmE^}|_jѥR|u>$øa|7q/c]S՘3p)r1_5|/?]E~p(z%jtR#7Eg{uOziKKO]4bi,k|/;rYe.~{,G=^ +-z$U{QL%541/E#P!`nG? +*/AgX C耞yOQpH^1LN0%nBEZ1}ܯ٢x}/?NǠ_Ic7;J)UP3{=T1S0b5Zun#ˮ D`rXef/1zn7L,!K1X9:RY1%T*+Y ZJJָB%DMK!^]GXȷpB+DH +QCEdF\ F_MU @\E&}LӃ6pAYj˜2 +X{ b}yTu^T2VXmVv|0C1m ߮7Cu|PC=f/C1˰iC^|7SCcga w|QO'FuSӦsϯLJ+CJ[J!eItPyukG7zbחBfħ48Kg5jw^kԈQ8]((()DT HK"\EyA1%S h7q ,J1?oI$K$HQHxN?LAp_I[1!L޾ yE!hCyա f`^ cXuK[jA2ؿɡLUW+waTRBi:+Ԋz(є}$E=WthFc')Qy)N7Ej1fifi{(2cnܪ)F"G9;趪;I;Ұ +@ ЦS8RHBVHۉZ,ٖ{OoKa)Mafsiв%M޽sӓ-rl3gr=?ޑ[$8|?yJŁUkGIZ+Y|.#wHE^-9F~,2*+dV9eW_-EoZ);Zz8JrKjՊ5W_'[{ 2jUчxhAMϗ͵u b"  +ȱk&3^5yBeްٻ<{?eJnoy_0 + +Wq+/!M{HN;< ECblVܯrNOɨq +^N??TzRuŢ̇yŔ(K/ǜ z{<<-j^y +roqEkœZ "JxgOsռ7̊=g +{iσ &فz90ąg_ x̋’f-eњT. ա;r<-neZLԞt\/-<ZCgSM瘻TtiW٘V ӒhS3h}>vEM[LKӢbft=jcbRS<S.0m*R9l_څ=C/o X4tܫb:}РƝmq/vx+ !i+ZJaq^K"!8i{gݭs e;.ܶP].4o=?4Þ7ۀl]pFo y2­ -qպD$ysb&޿=9?3iL0/üb !lu#K69+<@k~=X#'u.98_aɑVl?*;"=&K &K#p$KdBe (u\qiAИ1IwH~+Dk=gzѻ|iQp?~&3PVpq勑w}_ +%?H +u1ߵq%;":1bkKDIU}|.U3TQڢ]EuR\ْS^,jPVv֋TF՗W9\n'n\#{+8Ӊ[ºo߁Z'^({Z8}Xx;?K/cޅ'+KÉ+L̉Zgޙ5swѫFLz"B +ɛ+cNږrۙCb4!T6Lr*R.;"98\$Kg(`iV$+DW\L[nX.K45X.=3OBY}k%,t?Q{mh*8?WoM|~MMį%DHN^8x׶C$ؖu}݅vOQ*jt]H U|oFx|ga2s.[1]_T՚mhﱣ!_Y]R]_Vxr61myDQRbvWGk`}[~`"2>lHOw}\x}=IBwSi7]ݗgM)hK*h~x׉@[y֗{ْ\Ok^A~6_WpU:CͺN8n[^-X/ p}<,k|[eQWtQW''`8peʛ M݅Ӈ_jE*:vJ + Ǽ>XnvhMo]JM?yk*\f|NmcG-3j x zfKD6Cyax֓0Yf,-Lv6Lޞ|{CCqaKFO^)9R.I + =$9'OE#dᲄpYR,.=6xgyC"3$!G3'Wž}ܵi页v:4?{= zFM:bZcS2'3w΢ >JWkBy,!ЋL!ϢimY&[6[81:1Oi2}*ʪ4HjG}|;Tw;9xmxX_llmw 9@ۛ3x`r󓸍JWv]y{LzCiԛ45gyi鮣si͛vZlw^19>y?]kG+S7eZӌ]ƾ7<6S95&st ?Cb\E kQ xRmnzDop&J> ; fa@h¼yn38鶳tń5ŚP!oEN҂.~C, Aڲp#n8žxgI ?CnwH>S$hќg\g/ZaP:8"ne atn\ ;łi{L/pr+/eY9,iI f"Έ86>~;sxNw9u"6pb7hVeIS+ݵy^th|oMɴԤjw\ +eyAYn9p@=[^\)=)9{"J~|1q_|@ƧW 93=|C.&,Q·yx lyb)v+To!>7i[њMi|+MgS65gQ-CF1T#e, t*[VϦFT>;إ:Ǝ\=j1i)-CKzKu =JʚE2Lc_FEأ5vk TsEMǧWF(ˏsyN +Y#3N +u F%/6 +$ZE~>5!#yDPZoUV4}.Xs?g–;c^+fڍ4fMEmݔ{\eOfn{M>#ҠSٗSi2vcO3|=<: 9w_`A (""¼DDDDDDDDD8Nn*a,zcSQeG>ӡ7u mBs' +̭z!U큧W#g%)pyZlLt,~{*RCp0řP!BpqqbDlGVmG$K#cN߰qwl{G_9Uhϩhˣr69>CQc%o\+ZshW\ \\c#~64QTg,tCP[LX<2TDIs?ުLU I_НRT\H)5v2ʚ⒍jco?|W ++KfyvGMO25'IS>6I1CXL޴yݲ#i_}ݑ`^Ӹݧ)?UT/oϝ={_2gyeM~&>! I^0"taEOαҵƪ&[5< i& kfD" @ ̋fbKgY.HdLL-=ܖ2Şa_aO%E֏6n$O^~#+EX'9n6YsL)̛9ymia0{d{d[ɚe2gFXg,U{^^9-]WՑ(?rSaUCbPHXB"OСSg]{պ<|/ +ro+f1QF{UY +!~,"Uڽ>յӸ+wwcaʦ{yfS TÝ^֐w}|E\fW!uߞb^YC[&M9k @ MlQ*¦z쎇e]>}hKJ9M.*ʘbKDؓ#퉑([R5yeKf_i[H_&̱&  SSxSp{iai"IQ QĹN}̟yۋ+O>+poT"[r'"[`?/S"Y3@ٙ|ڙxy~D5z͏ξת{\Ti?}jP&J)ɽ8s 27 7*iX؋xH2(X&vڳc]ZE%3J[vno$#={WԕxP2qĺ`D9a1ȖWzFBGyA @x% #4cYՕ:>>~%s"s\PZ\YoꓳFwtF1![[fIɾ\,Hdޔ0֦hcGUt}<04D?D)!|7x'OBT^ V(V<4991+r`ަ=U g?J]svW5.m zf>ų_fqc9I /|>,CU8(yA @yN}گ"v ϔߊAWzBObWHl"c."eEYwy 0U\N4HEӠQU)3"jZJ LҘoHP1`,|U5sޓe];m%lXtM3M 8}hƲsyA @yrF'LTtꘃ[s4HO3nX]+%bW{YZj+r*vwTy;;"wsu rU[qe6Wɷ V諿}wGe]^|Gf& 8ci]>]_V^5אV^sjq0Gcg|H/nRB9`" +K ǜeS+x)ْО%Zi12`FK +tƲ,W a^n@ &.j1#bS/5$ED82vAa~9۶|i N]7=61z~ 3筞=scOgm1?nւ1+c0w~bWO;*u`K|KJ3JlTwB d8Pޠd0|OEJɣ[F@ADtȘa(Y`&ePM?;V V!ާҐX໽umz.wkYUaװsUt|-> )C A @Mns5nn/=W+YY,v{xxꮬGq&oC'2#oh +H/@ 4a~Ui۞d]?\aA/@ 4armE%ـjw7vtyZ{[J-%[Vnz[VݲӾ۾VZVTp^®)TبH$ a=&Z,AHUc"z0jZvtP.Ւ;z-ec|%Az{ikXAM2/ L8h#XvqS4r +U:j2XKʪ; 5%~fƭ/jY۶RRZRWmsO'Bh#^?E@ MLIî!DQ]Ċ\`4H %Ì疊aƮɝzˈ]cF;c`\o~"3J5A#*-O"Ҷ\K*(IX,|}N0 sIcW .{L?4_3[C(jQJ,D:eƦ^`bŐ };pոbm۞ڶҪX̶xi_01X\yK]yA @ypԐ_ GD*Y( F1/׭eƮփ̶ڲw6}έUj.^FL#"I}4:,\Ha(,Ȝ`P vͩb_DO oaA!=yPypQ'K??m]>]I8z6*M|aib*rX/b5Ϳ{ޓkW瞺 =8b""A%ˏW/020/@ 4WMXQ !4;vVmw5mqTʭuu经:Gn,tw;stu仏UvUu?W^x"Yu߉Ϫy}•!$w +Gx@͐ n1SbW0hu&^&G* ~̫Ipw uι:Oц +-ײhD2ƚb\#4&|]E`V}Z?[$xXx*.FOWņu]͛Z%uNwGIMVW߮ŏ8@~n 3@ &*r yLGOgfM4ŦL[3-&pp[ۺTui~LGF R<mΘzͫϪzO/ ܍]ۼ+^[}Yrar@K.hfŒ~RjđqC7>70sa-$3roK$YW)8~)r׆| Ymz{3>_-嵇}*ek*c*]e,eyn'S*D mk=^0/@ hBH9#fѽ.Wt%9Җ?ytTUl*:IRIm$$$D$lPQ[G89N3A}_T%- ;WU,;/U^W|/_ IC:VP2 +ED ¹Ȅ06 +ӕEŋsZ|coPֿ,əþ./.iy"nJPp2eY“drd8t[=[:IeNӽ`mXl~[7-k'nҷk m $VMI?S¹G:l]}.Ө[TIQTuDB\YQe5VV>Zl,3+ƿDn%4h -N 8wqk Ѧhm^ۺbg"㒃Y闏w6V{cKuKJ[|ir՛g=-o?ăOkO{闞M-YQoI1OKk:5dZ埿6>2NGc/ /5\ +aqL2/{IE.y"<\_ʗkPXOfB+!&~sXbA - ++Cٚ0nk05,=k/!kA5q\C_ja~}LvkPBk[̔GrEL5f3_nl0u0uݼ3(a7v`ܺthH&.]TGq }>+,ΕHhC'Ϭ)[08͏ + )M( "Hm܄䜶^i.Ѿ֗-KlVeo(=';n}_˾31^+B #ڑv&䬿(RQQQQQQQQ3Ы@Wג ({;vYMSTOej 2L*eA|&4L_Ɨ0šlY0S᪃P}C0_nB{HUB7j4|}XBc0[N#*Lvḋ7ܖ[UEKc/SBvKݷHЏ[#Jkӎc^<+Һ)+eJ}bDʊ$y$萁N| sN~u d+:!|mpZ (2[?H.l}g;L^f`\6߼` 鴞4X' S1Pz@'zk7Č== =:l+EceL qȚ`$|XsP{K˲ +04c4$ߚ\wk#۲_kWkSޥKEEEEEEEEuSep⫄ۘ"vHn &$'ur3Pi[`2fgDs/F/GQh.oO*ofG"r"  zBpvcϏ¹|n$1AGGѡG_IʉdE1kgqsuvmv]7exr֐57Y1Wstkgk1+*^s~Ctڙh{ia@>;L![8Gek0~s$_mbrf$dG1kfg!DE|Iޅ:}Knߎ R{R#:x%¼jH*g^o%V=?Ɉb/e^********{{:}Sð $8Wiܴn;aC7N:e:Suh%F]s6EC! \i_pu^âm!V|Uj娂ʂ݊,2ܾޯ.O6#n?zgl`_LJ]930Ҿ8+UkJ W̕Ձ|m _LMX~_R IJ) Sk5LE8Wo6Խ.Ə N7y)~/}JQQQ楢a^y 鳘qYs؍3&D1Ltvc4m@eGq9WL㲧b<~UnÜ-6k7ELaWa˃A 81k4Oe[%m8(Ţj|{ZFU]Wgև%ԅsR0?{guqť(Jlh"AΛcy咶l>$E. E/AjFFFY9lWƒxH$[)q;;3%-N¿>yvw8?_{b +}/ykZ~- u_5>晋/Vq75y39i25RFnf1ĎB,-|†bvqpa + >b (إQ?d |eh$Y:h 43Jn6!i2U6ȧL|ʀbFwh6)ac&Z߸$BE,|)nIC;chFĬѓ7JYHi4 Id=t'EZri?dCt^lOmÿߛ2?, TB(3L$.Mh!AH۸Ǡ3`;ES kH-b +A7_1@ٶKIu!@Iڨ墵 MR^Ps6&RB:w_!a#7pIADO6&<7\BYꭕkE}n@N>`m ~8haovaTELa)\(Ro7o6pnN>BQgC?{躢ﮬ?+ 4}zاBwy#;R]i/yzM=`/#soG͛meZt7UqGgbgWfGgngw͗o国C;t}]{}]V_'f-]Vo՛i̵zsM~U[:D[w3썴]jsgpGWdWw3kڼ]ɝLK{rgw~+싈~z?;؀x[W_'ܓH6⭾{ M;&➞ǂҧ̰& kV%, +J.^=^+*HTX9Zc*,^T'/܅ggN;1>_oԳ1wbb7y 3o_2VOON̟ss'Γɹ㟰1oOЫgV{8>1^z||=5ə_\^WX"2/6^RÈdYfei[^CT„]QƟ-,uydVZ憢ь|WpSwzꅠ|ԍu(Rp +ֲ}NwU+ wUvN>BwKa7hktKJpzqN諓ܳ.>L߷Y[*;zkQ l@-WUلxKCȼZɼ+eY5ckI& +gf?:wsyznÉ3gsxI/~@ǩ3b想3Ō*^xr!3>T옶 +I+q*Đj"F7+DWOل]؄4=闤bƊ"ά%Mzg.ĭ(SO%vffYHIJY[-(U%7=',cR԰emYET.TȼI^U&4j~o5u}6srR7עg\)Zn䞾;pT=:P?Yp眨bXZz)ޓ]Jx҆t'Q#& 4 +)42릙BƼ*hauS+C3 +y0bB蠅;hAV4jG°,(csV(c3FOz5 Ivsۑ2{+h*x2/F0Sgd//鵠uB̄&2rA7qz +q+3sQV [1dG.Hup!=mZ⦆1Sr:O~]S6O6)}ML3)gsz,eLIa#OUړ3j.f d C넑!w_6Kڛ3GcoV( Ro={FڟshoNhI==9sQg!j7+䥇Q^F#\(QG:x :^h|m+neqP6ƶV=%v9Q1jCtxwhKW۾֮VoyrM l#/~E 4(l:8˼ru94 4ȼX#WH5c YU80YV eoT]-kezFU8`j~k +;.S*0eETR vqY_sK<[ sJUgW/|z*^^7)OTQ,iYxe]VeqD-*pW.d^ ԋR.ieR+ce\YR& cYeU2P\ʴfm:w=nr2\P"SrM&?qܥ7~:q??ctl4u#fӯ1gzV|9ʱWU|93/~M:`f_=:׎NvlcS;O}lO|˩>eQSX]ƥ xI-/hE=.oBȼBӗ*+"UaR5\VҊ +)l/)c29;ߓSO?>uz ӫ~w'.3q6ޣ=Fp*{g=7OLdwSpJva& ĀU XĠ2{º2QhgW Ű]Pmb&i&UJ'`T栽zw" +l/fM"++ihWeM+j +,ȼWWD5i=QWb=*ͼRMxF>LC۟7=#t-%f͞}wH]=MNc_߅:oNqFo71Ksܔ1Y/Ju.mdo]/eT62C9zWfrWy1II+M|)ݒ]=Q# )`mI]l/)YժTᲦUp +*ȼZkF.iˣy$2tG#g"v!bv)nA'w +ظ:"&!kr_PiyHdtF4ئAl `؛],d2/I*T\g4RlEaFȹk/7NM]#pK֞CRm +neoy(ݿ[vmݝ[1̶TћoiъK_8]##wmPE;h*GN[a=^A;֏~ (q#cRݼ`ZCT  y1÷M?o/xGiS[DKYRMcm{OzcH\ֶ1SUl|m6skz.TxVyK˚#x[I>Ö6.u^\bmgpd_> {Vr_|tEy[R-Z ms_ 9^ +yu^輍)>#@e]#iǜ_Z/iS#u#|k[[}ksu3h^nԼcyκkS}OM/"o:.?'k^мܳy^soV~g76<6V4/h^мy@y@ 4/4/h^мy@y@ 4/4/h^мy@@ 4/h^4/h^мy@@ 4/h^4/h^мy@@ 4/h^4/h^мy@@ 4/h^мh^мy@  4/h^4ALendstream +>> +endobj + +xref +0 856 +0000000000 65535 f +0000000012 00000 n +0000000182 00000 n +0000000327 00000 n +0000000409 00000 n +0000000543 00000 n +0000000635 00000 n +0000000769 00000 n +0000000848 00000 n +0000000985 00000 n +0000001074 00000 n +0000001183 00000 n +0000001293 00000 n +0000001403 00000 n +0000001513 00000 n +0000001627 00000 n +0000001730 00000 n +0000001872 00000 n +0000001960 00000 n +0000002069 00000 n +0000002177 00000 n +0000002284 00000 n +0000002392 00000 n +0000002507 00000 n +0000002614 00000 n +0000002717 00000 n +0000002821 00000 n +0000002928 00000 n +0000003036 00000 n +0000003147 00000 n +0000003259 00000 n +0000003371 00000 n +0000003484 00000 n +0000003595 00000 n +0000003715 00000 n +0000003822 00000 n +0000003930 00000 n +0000004040 00000 n +0000004152 00000 n +0000004261 00000 n +0000004375 00000 n +0000004481 00000 n +0000004588 00000 n +0000004699 00000 n +0000004811 00000 n +0000004917 00000 n +0000005024 00000 n +0000005118 00000 n +0000005272 00000 n +0000005364 00000 n +0000005470 00000 n +0000005581 00000 n +0000005689 00000 n +0000005803 00000 n +0000005902 00000 n +0000006002 00000 n +0000006092 00000 n +0000006236 00000 n +0000006334 00000 n +0000006447 00000 n +0000006554 00000 n +0000006669 00000 n +0000006786 00000 n +0000006893 00000 n +0000007000 00000 n +0000007106 00000 n +0000007214 00000 n +0000007308 00000 n +0000007449 00000 n +0000007543 00000 n +0000007651 00000 n +0000007754 00000 n +0000007858 00000 n +0000007963 00000 n +0000008070 00000 n +0000008175 00000 n +0000008282 00000 n +0000008397 00000 n +0000008512 00000 n +0000008605 00000 n +0000008744 00000 n +0000008837 00000 n +0000008944 00000 n +0000009046 00000 n +0000009149 00000 n +0000009238 00000 n +0000009377 00000 n +0000009470 00000 n +0000009577 00000 n +0000009670 00000 n +0000009810 00000 n +0000009901 00000 n +0000010007 00000 n +0000010110 00000 n +0000010200 00000 n +0000010340 00000 n +0000010435 00000 n +0000010544 00000 n +0000010638 00000 n +0000010721 00000 n +0000010760 00000 n +0000011287 00000 n +0000011527 00000 n +0000011667 00000 n +0000011692 00000 n +0000011932 00000 n +0000013015 00000 n +0000013040 00000 n +0000013280 00000 n +0000014359 00000 n +0000014944 00000 n +0000015100 00000 n +0000015257 00000 n +0000015413 00000 n +0000015570 00000 n +0000015726 00000 n +0000015883 00000 n +0000016039 00000 n +0000016196 00000 n +0000016352 00000 n +0000016509 00000 n +0000016665 00000 n +0000016822 00000 n +0000016978 00000 n +0000017135 00000 n +0000017291 00000 n +0000017448 00000 n +0000017604 00000 n +0000017761 00000 n +0000017918 00000 n +0000018076 00000 n +0000018233 00000 n +0000018391 00000 n +0000018548 00000 n +0000018706 00000 n +0000018863 00000 n +0000019021 00000 n +0000019178 00000 n +0000019336 00000 n +0000019493 00000 n +0000019651 00000 n +0000019808 00000 n +0000019966 00000 n +0000020123 00000 n +0000020281 00000 n +0000020438 00000 n +0000020596 00000 n +0000020753 00000 n +0000020911 00000 n +0000021068 00000 n +0000021226 00000 n +0000021383 00000 n +0000021541 00000 n +0000021698 00000 n +0000021856 00000 n +0000022013 00000 n +0000022171 00000 n +0000022328 00000 n +0000022486 00000 n +0000022643 00000 n +0000022801 00000 n +0000022958 00000 n +0000023116 00000 n +0000023273 00000 n +0000023431 00000 n +0000023588 00000 n +0000023746 00000 n +0000023903 00000 n +0000024061 00000 n +0000024218 00000 n +0000024376 00000 n +0000024533 00000 n +0000024691 00000 n +0000024847 00000 n +0000025004 00000 n +0000025159 00000 n +0000025315 00000 n +0000025470 00000 n +0000025626 00000 n +0000025866 00000 n +0000026929 00000 n +0000027548 00000 n +0000027705 00000 n +0000027863 00000 n +0000028020 00000 n +0000028178 00000 n +0000028335 00000 n +0000028493 00000 n +0000028650 00000 n +0000028808 00000 n +0000028965 00000 n +0000029123 00000 n +0000029280 00000 n +0000029438 00000 n +0000029595 00000 n +0000029753 00000 n +0000029910 00000 n +0000030068 00000 n +0000030225 00000 n +0000030383 00000 n +0000030540 00000 n +0000030698 00000 n +0000030855 00000 n +0000031013 00000 n +0000031170 00000 n +0000031328 00000 n +0000031485 00000 n +0000031643 00000 n +0000031800 00000 n +0000031958 00000 n +0000032115 00000 n +0000032273 00000 n +0000032430 00000 n +0000032588 00000 n +0000032745 00000 n +0000032903 00000 n +0000033060 00000 n +0000033218 00000 n +0000033375 00000 n +0000033533 00000 n +0000033690 00000 n +0000033848 00000 n +0000034005 00000 n +0000034163 00000 n +0000034320 00000 n +0000034478 00000 n +0000034635 00000 n +0000034793 00000 n +0000034950 00000 n +0000035108 00000 n +0000035265 00000 n +0000035423 00000 n +0000035580 00000 n +0000035738 00000 n +0000035895 00000 n +0000036053 00000 n +0000036210 00000 n +0000036368 00000 n +0000036525 00000 n +0000036683 00000 n +0000036840 00000 n +0000036998 00000 n +0000037155 00000 n +0000037313 00000 n +0000037470 00000 n +0000037628 00000 n +0000037785 00000 n +0000037943 00000 n +0000038100 00000 n +0000038258 00000 n +0000038413 00000 n +0000038569 00000 n +0000038724 00000 n +0000038880 00000 n +0000039120 00000 n +0000039952 00000 n +0000040355 00000 n +0000040512 00000 n +0000040670 00000 n +0000040827 00000 n +0000040985 00000 n +0000041142 00000 n +0000041300 00000 n +0000041457 00000 n +0000041615 00000 n +0000041772 00000 n +0000041930 00000 n +0000042087 00000 n +0000042245 00000 n +0000042402 00000 n +0000042560 00000 n +0000042717 00000 n +0000042875 00000 n +0000043032 00000 n +0000043190 00000 n +0000043347 00000 n +0000043505 00000 n +0000043662 00000 n +0000043820 00000 n +0000043977 00000 n +0000044135 00000 n +0000044292 00000 n +0000044450 00000 n +0000044607 00000 n +0000044765 00000 n +0000044922 00000 n +0000045080 00000 n +0000045237 00000 n +0000045395 00000 n +0000045552 00000 n +0000045710 00000 n +0000045867 00000 n +0000046025 00000 n +0000046182 00000 n +0000046340 00000 n +0000046497 00000 n +0000046655 00000 n +0000046812 00000 n +0000046970 00000 n +0000047127 00000 n +0000047285 00000 n +0000047441 00000 n +0000047599 00000 n +0000047839 00000 n +0000047936 00000 n +0000047961 00000 n +0000048201 00000 n +0000049205 00000 n +0000049230 00000 n +0000049470 00000 n +0000050306 00000 n +0000050331 00000 n +0000050571 00000 n +0000051044 00000 n +0000051069 00000 n +0000051309 00000 n +0000054168 00000 n +0000054209 00000 n +0000054365 00000 n +0000054521 00000 n +0000054761 00000 n +0000057137 00000 n +0000057202 00000 n +0000057359 00000 n +0000057516 00000 n +0000057673 00000 n +0000057830 00000 n +0000057988 00000 n +0000058228 00000 n +0000060380 00000 n +0000060471 00000 n +0000060628 00000 n +0000060785 00000 n +0000060942 00000 n +0000061099 00000 n +0000061256 00000 n +0000061413 00000 n +0000061571 00000 n +0000061728 00000 n +0000061968 00000 n +0000064357 00000 n +0000064448 00000 n +0000064606 00000 n +0000064763 00000 n +0000064920 00000 n +0000065077 00000 n +0000065235 00000 n +0000065392 00000 n +0000065550 00000 n +0000065705 00000 n +0000065945 00000 n +0000067338 00000 n +0000067419 00000 n +0000067576 00000 n +0000067733 00000 n +0000067890 00000 n +0000068047 00000 n +0000068204 00000 n +0000068362 00000 n +0000068519 00000 n +0000068759 00000 n +0000070662 00000 n +0000070769 00000 n +0000070926 00000 n +0000071083 00000 n +0000071240 00000 n +0000071397 00000 n +0000071554 00000 n +0000071711 00000 n +0000071868 00000 n +0000072025 00000 n +0000072183 00000 n +0000072340 00000 n +0000072580 00000 n +0000074082 00000 n +0000074163 00000 n +0000074320 00000 n +0000074477 00000 n +0000074635 00000 n +0000074792 00000 n +0000074949 00000 n +0000075106 00000 n +0000075262 00000 n +0000075502 00000 n +0000077991 00000 n +0000078040 00000 n +0000078197 00000 n +0000078354 00000 n +0000078510 00000 n +0000078750 00000 n +0000080577 00000 n +0000080692 00000 n +0000080849 00000 n +0000081006 00000 n +0000081164 00000 n +0000081322 00000 n +0000081480 00000 n +0000081638 00000 n +0000081795 00000 n +0000081952 00000 n +0000082109 00000 n +0000082267 00000 n +0000082424 00000 n +0000082664 00000 n +0000085248 00000 n +0000085297 00000 n +0000085454 00000 n +0000085611 00000 n +0000085768 00000 n +0000086008 00000 n +0000088071 00000 n +0000088144 00000 n +0000088301 00000 n +0000088458 00000 n +0000088615 00000 n +0000088772 00000 n +0000088929 00000 n +0000089086 00000 n +0000089326 00000 n +0000091345 00000 n +0000091444 00000 n +0000091601 00000 n +0000091758 00000 n +0000091915 00000 n +0000092073 00000 n +0000092230 00000 n +0000092387 00000 n +0000092544 00000 n +0000092702 00000 n +0000092859 00000 n +0000093099 00000 n +0000094652 00000 n +0000094717 00000 n +0000094874 00000 n +0000095031 00000 n +0000095188 00000 n +0000095346 00000 n +0000095503 00000 n +0000095743 00000 n +0000097985 00000 n +0000098066 00000 n +0000098224 00000 n +0000098381 00000 n +0000098538 00000 n +0000098695 00000 n +0000098852 00000 n +0000099010 00000 n +0000099167 00000 n +0000099407 00000 n +0000100636 00000 n +0000100685 00000 n +0000100842 00000 n +0000100999 00000 n +0000101156 00000 n +0000101396 00000 n +0000102510 00000 n +0000102583 00000 n +0000102741 00000 n +0000102897 00000 n +0000103054 00000 n +0000103210 00000 n +0000103366 00000 n +0000103523 00000 n +0000103763 00000 n +0000105664 00000 n +0000105721 00000 n +0000105878 00000 n +0000106035 00000 n +0000106191 00000 n +0000106347 00000 n +0000106587 00000 n +0000108703 00000 n +0000108818 00000 n +0000108975 00000 n +0000109132 00000 n +0000109289 00000 n +0000109446 00000 n +0000109603 00000 n +0000109759 00000 n +0000109915 00000 n +0000110073 00000 n +0000110229 00000 n +0000110384 00000 n +0000110539 00000 n +0000110779 00000 n +0000112548 00000 n +0000112647 00000 n +0000112804 00000 n +0000112961 00000 n +0000113117 00000 n +0000113273 00000 n +0000113430 00000 n +0000113587 00000 n +0000113744 00000 n +0000113900 00000 n +0000114056 00000 n +0000114296 00000 n +0000115774 00000 n +0000115815 00000 n +0000115971 00000 n +0000116128 00000 n +0000116368 00000 n +0000118059 00000 n +0000118092 00000 n +0000118249 00000 n +0000118489 00000 n +0000120306 00000 n +0000120339 00000 n +0000120496 00000 n +0000120736 00000 n +0000122124 00000 n +0000122181 00000 n +0000122338 00000 n +0000122495 00000 n +0000122652 00000 n +0000122809 00000 n +0000123049 00000 n +0000124904 00000 n +0000124945 00000 n +0000125102 00000 n +0000125257 00000 n +0000125497 00000 n +0000127487 00000 n +0000127528 00000 n +0000127685 00000 n +0000127842 00000 n +0000128082 00000 n +0000129826 00000 n +0000129875 00000 n +0000130032 00000 n +0000130189 00000 n +0000130346 00000 n +0000130586 00000 n +0000132337 00000 n +0000132378 00000 n +0000132535 00000 n +0000132692 00000 n +0000132932 00000 n +0000134827 00000 n +0000134892 00000 n +0000135049 00000 n +0000135206 00000 n +0000135364 00000 n +0000135519 00000 n +0000135674 00000 n +0000135914 00000 n +0000137715 00000 n +0000137764 00000 n +0000137922 00000 n +0000138079 00000 n +0000138236 00000 n +0000138476 00000 n +0000139991 00000 n +0000140064 00000 n +0000140221 00000 n +0000140378 00000 n +0000140535 00000 n +0000140692 00000 n +0000140848 00000 n +0000141003 00000 n +0000141243 00000 n +0000142762 00000 n +0000142811 00000 n +0000142968 00000 n +0000143125 00000 n +0000143282 00000 n +0000143522 00000 n +0000145146 00000 n +0000145203 00000 n +0000145360 00000 n +0000145517 00000 n +0000145674 00000 n +0000145831 00000 n +0000146071 00000 n +0000147554 00000 n +0000147595 00000 n +0000147752 00000 n +0000147909 00000 n +0000148149 00000 n +0000149862 00000 n +0000149903 00000 n +0000150060 00000 n +0000150217 00000 n +0000150457 00000 n +0000152519 00000 n +0000152568 00000 n +0000152725 00000 n +0000152882 00000 n +0000153039 00000 n +0000153279 00000 n +0000155476 00000 n +0000155533 00000 n +0000155690 00000 n +0000155847 00000 n +0000156004 00000 n +0000156162 00000 n +0000156402 00000 n +0000157880 00000 n +0000157945 00000 n +0000158102 00000 n +0000158259 00000 n +0000158416 00000 n +0000158573 00000 n +0000158730 00000 n +0000158970 00000 n +0000160730 00000 n +0000160771 00000 n +0000160928 00000 n +0000161085 00000 n +0000161325 00000 n +0000163333 00000 n +0000163398 00000 n +0000163555 00000 n +0000163712 00000 n +0000163869 00000 n +0000164024 00000 n +0000164179 00000 n +0000164419 00000 n +0000166078 00000 n +0000166127 00000 n +0000166284 00000 n +0000166441 00000 n +0000166598 00000 n +0000166838 00000 n +0000168640 00000 n +0000168705 00000 n +0000168862 00000 n +0000169020 00000 n +0000169177 00000 n +0000169334 00000 n +0000169489 00000 n +0000169729 00000 n +0000171428 00000 n +0000171485 00000 n +0000171642 00000 n +0000171799 00000 n +0000171956 00000 n +0000172113 00000 n +0000172353 00000 n +0000173794 00000 n +0000173835 00000 n +0000173992 00000 n +0000174149 00000 n +0000174389 00000 n +0000175702 00000 n +0000175759 00000 n +0000175916 00000 n +0000176073 00000 n +0000176230 00000 n +0000176387 00000 n +0000176627 00000 n +0000177235 00000 n +0000177260 00000 n +0000177500 00000 n +0000179230 00000 n +0000179897 00000 n +0000180053 00000 n +0000180210 00000 n +0000180366 00000 n +0000180523 00000 n +0000180680 00000 n +0000180837 00000 n +0000180994 00000 n +0000181151 00000 n +0000181308 00000 n +0000181465 00000 n +0000181622 00000 n +0000181779 00000 n +0000181936 00000 n +0000182093 00000 n +0000182250 00000 n +0000182407 00000 n +0000182563 00000 n +0000182720 00000 n +0000182877 00000 n +0000183034 00000 n +0000183191 00000 n +0000183348 00000 n +0000183505 00000 n +0000183662 00000 n +0000183819 00000 n +0000183975 00000 n +0000184131 00000 n +0000184287 00000 n +0000184443 00000 n +0000184599 00000 n +0000184756 00000 n +0000184913 00000 n +0000185070 00000 n +0000185227 00000 n +0000185384 00000 n +0000185541 00000 n +0000185698 00000 n +0000185854 00000 n +0000186009 00000 n +0000186164 00000 n +0000186322 00000 n +0000186480 00000 n +0000186638 00000 n +0000186796 00000 n +0000186954 00000 n +0000187112 00000 n +0000187270 00000 n +0000187428 00000 n +0000187586 00000 n +0000187744 00000 n +0000187902 00000 n +0000188060 00000 n +0000188218 00000 n +0000188376 00000 n +0000188534 00000 n +0000188692 00000 n +0000188850 00000 n +0000189008 00000 n +0000189166 00000 n +0000189324 00000 n +0000189482 00000 n +0000189640 00000 n +0000189798 00000 n +0000189956 00000 n +0000190114 00000 n +0000190272 00000 n +0000190430 00000 n +0000190588 00000 n +0000190746 00000 n +0000190904 00000 n +0000191062 00000 n +0000191220 00000 n +0000191378 00000 n +0000191536 00000 n +0000191694 00000 n +0000191852 00000 n +0000192010 00000 n +0000192167 00000 n +0000192407 00000 n +0000193069 00000 n +0000193208 00000 n +0000193364 00000 n +0000193521 00000 n +0000193678 00000 n +0000193835 00000 n +0000193992 00000 n +0000194149 00000 n +0000194306 00000 n +0000194463 00000 n +0000194620 00000 n +0000194777 00000 n +0000194934 00000 n +0000195091 00000 n +0000195248 00000 n +0000195405 00000 n +0000195464 00000 n +0000197885 00000 n +0000200311 00000 n +0000202730 00000 n +0000202773 00000 n +0000204189 00000 n +0000204246 00000 n +0000204302 00000 n +0000204358 00000 n +0000204414 00000 n +0000204470 00000 n +0000204526 00000 n +0000204582 00000 n +0000204638 00000 n +0000204694 00000 n +0000204750 00000 n +0000204806 00000 n +0000204862 00000 n +0000204918 00000 n +0000204974 00000 n +0000205030 00000 n +0000205086 00000 n +0000205142 00000 n +0000205198 00000 n +0000205254 00000 n +0000205310 00000 n +0000205366 00000 n +0000205422 00000 n +0000205478 00000 n +0000205534 00000 n +0000205590 00000 n +0000205646 00000 n +0000205702 00000 n +0000205758 00000 n +0000205814 00000 n +0000205870 00000 n +0000205926 00000 n +0000205982 00000 n +0000206038 00000 n +0000206094 00000 n +0000206150 00000 n +0000206206 00000 n +0000206262 00000 n +0000206318 00000 n +0000206374 00000 n +0000206430 00000 n +0000206486 00000 n +0000206542 00000 n +0000206598 00000 n +0000206654 00000 n +0000206710 00000 n +0000206766 00000 n +0000206822 00000 n +0000206878 00000 n +0000206934 00000 n +0000206990 00000 n +0000207046 00000 n +0000207102 00000 n +0000207158 00000 n +0000207214 00000 n +0000207270 00000 n +0000207326 00000 n +0000207382 00000 n +0000207438 00000 n +0000207494 00000 n +0000207550 00000 n +0000207606 00000 n +0000207662 00000 n +0000207718 00000 n +0000207774 00000 n +0000207830 00000 n +0000207886 00000 n +0000207942 00000 n +0000207998 00000 n +0000208054 00000 n +0000208110 00000 n +0000208166 00000 n +0000208222 00000 n +0000208278 00000 n +0000208334 00000 n +0000208390 00000 n +0000208446 00000 n +0000208502 00000 n +0000208558 00000 n +0000208614 00000 n +0000208670 00000 n +0000208726 00000 n +0000208782 00000 n +0000208838 00000 n +0000208894 00000 n +0000208950 00000 n +0000209006 00000 n +0000209062 00000 n +0000209118 00000 n +0000209174 00000 n +0000209230 00000 n +0000209286 00000 n +0000209342 00000 n +0000209398 00000 n +0000209454 00000 n +0000209510 00000 n +0000209566 00000 n +0000209622 00000 n +0000209678 00000 n +0000209735 00000 n + +trailer +<< +/Size 856 +/Root 2 0 R +/Info 1 0 R +>> + +startxref +381292 +%%EOF diff --git a/CyUSBSerial_SDK_Linux/README.txt b/CyUSBSerial_SDK_Linux/README.txt new file mode 100644 index 0000000..96450c3 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/README.txt @@ -0,0 +1,36 @@ +======================================================================================== + Cypress Semiconductor Corporation + CyUSB Serial library. +========================================================================================= +Pre-requisite: +1. libusb-1.0.9 is required for compilation and functioning of the APIs in the library. +2. GNU Make and the GCC tool-chain are used for the build process. + +Installation steps: + +1.cd to the main directory where the library source files are extracted and goto ./linux/library + +2.Type 'sudo make'. + +2.This will generate shared library libcyusbserial.so.1 and its soft link libcyusbserial.so. + Both of them will be copied/installed to /usr/local/lib. + +3.Go to ./linux/testUtility (I2C/SPI test utility program) and type 'sudo make'. +This will generate CyUSBSerialTestUtility binary (Refer to README in testUtility folder). + +4.User can launch the application and test the communication with Cypress USB-Serial DVk in vendor mode. + +Changing USB device node permission: + +By default the USB device node created in linux do not have read/write permission +for normal user. In order to make the USB device node accessable, copy 90-cyusb.rules +which is inside the library folder of release package to /etc/udev/rules.d folder (Default VID mentioned is Cypress VID +which is 0x4B4, if VID is changed then update it in ATTR{idVendor} section of rules file). + +*** IMPORTANT: +Some distribution of linux have libusb (older version) as part of their package. Uninstall +the older version and update it with libusb-1.0.9. + +**Note: +Refer to ./common/doc/CyUSBSerial API documentation.pdf for description of all +the vendor mode APIs. The header file of the library is in ./common/header/CyUSBSerial.h. diff --git a/CyUSBSerial_SDK_Linux/common/doc/CyUSBSerial API Documentation.pdf b/CyUSBSerial_SDK_Linux/common/doc/CyUSBSerial API Documentation.pdf new file mode 100644 index 0000000..8c5a8d0 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/common/doc/CyUSBSerial API Documentation.pdf @@ -0,0 +1,10180 @@ +%PDF-1.3 + +1 0 obj +<< +/CreationDate (20130531173412) +/Producer (Doc-O-Matic 5) +/Author (Cypress Semiconductor Corporation) +/Title (USB Serial Library API Guide) +>> +endobj + +2 0 obj +<< +/Type /Catalog +/Outlines 3 0 R +/Pages 100 0 R +/Names 754 0 R +/PageMode /UseOutlines +/OpenAction [101 0 R /Fit ] +>> +endobj + +3 0 obj +<< +/Type /Outlines +/Count 13 +/First 4 0 R +/Last 4 0 R +>> +endobj + +4 0 obj +<> +endobj + +5 0 obj +<> +endobj + +6 0 obj +<> +endobj + +7 0 obj +<> +endobj + +8 0 obj +<> +endobj + +9 0 obj +<> +endobj + +10 0 obj +<> +endobj + +11 0 obj +<> +endobj + +12 0 obj +<> +endobj + +13 0 obj +<> +endobj + +14 0 obj +<> +endobj + +15 0 obj +<> +endobj + +16 0 obj +<> +endobj + +17 0 obj +<> +endobj + +18 0 obj +<> +endobj + +19 0 obj +<> +endobj + +20 0 obj +<> +endobj + +21 0 obj +<> +endobj + +22 0 obj +<> +endobj + +23 0 obj +<> +endobj + +24 0 obj +<> +endobj + +25 0 obj +<> +endobj + +26 0 obj +<> +endobj + +27 0 obj +<> +endobj + +28 0 obj +<> +endobj + +29 0 obj +<> +endobj + +30 0 obj +<> +endobj + +31 0 obj +<> +endobj + +32 0 obj +<> +endobj + +33 0 obj +<> +endobj + +34 0 obj +<> +endobj + +35 0 obj +<> +endobj + +36 0 obj +<> +endobj + +37 0 obj +<> +endobj + +38 0 obj +<> +endobj + +39 0 obj +<> +endobj + +40 0 obj +<> +endobj + +41 0 obj +<> +endobj + +42 0 obj +<> +endobj + +43 0 obj +<> +endobj + +44 0 obj +<> +endobj + +45 0 obj +<> +endobj + +46 0 obj +<> +endobj + +47 0 obj +<> +endobj + +48 0 obj +<> +endobj + +49 0 obj +<> +endobj + +50 0 obj +<> +endobj + +51 0 obj +<> +endobj + +52 0 obj +<> +endobj + +53 0 obj +<> +endobj + +54 0 obj +<> +endobj + +55 0 obj +<> +endobj + +56 0 obj +<> +endobj + +57 0 obj +<> +endobj + +58 0 obj +<> +endobj + +59 0 obj +<> +endobj + +60 0 obj +<> +endobj + +61 0 obj +<> +endobj + +62 0 obj +<> +endobj + +63 0 obj +<> +endobj + +64 0 obj +<> +endobj + +65 0 obj +<> +endobj + +66 0 obj +<> +endobj + +67 0 obj +<> +endobj + +68 0 obj +<> +endobj + +69 0 obj +<> +endobj + +70 0 obj +<> +endobj + +71 0 obj +<> +endobj + +72 0 obj +<> +endobj + +73 0 obj +<> +endobj + +74 0 obj +<> +endobj + +75 0 obj +<> +endobj + +76 0 obj +<> +endobj + +77 0 obj +<> +endobj + +78 0 obj +<> +endobj + +79 0 obj +<> +endobj + +80 0 obj +<> +endobj + +81 0 obj +<> +endobj + +82 0 obj +<> +endobj + +83 0 obj +<> +endobj + +84 0 obj +<> +endobj + +85 0 obj +<> +endobj + +86 0 obj +<> +endobj + +87 0 obj +<> +endobj + +88 0 obj +<> +endobj + +89 0 obj +<> +endobj + +90 0 obj +<> +endobj + +91 0 obj +<> +endobj + +92 0 obj +<> +endobj + +93 0 obj +<> +endobj + +94 0 obj +<> +endobj + +95 0 obj +<> +endobj + +96 0 obj +<> +endobj + +97 0 obj +<> +endobj + +98 0 obj +<> +endobj + +99 0 obj +<> +endobj + +100 0 obj +<< +/Type /Pages +/Count 56 +/Kids [ 101 0 R 104 0 R + 107 0 R 178 0 R 253 0 R 302 0 R 305 0 R 308 0 R 311 0 R 314 0 R 319 0 R 327 0 R + 338 0 R 349 0 R 359 0 R 372 0 R 382 0 R 388 0 R 402 0 R 408 0 R 417 0 R 429 0 R + 437 0 R 447 0 R 453 0 R 462 0 R 469 0 R 483 0 R 495 0 R 500 0 R 504 0 R 508 0 R + 515 0 R 520 0 R 525 0 R 531 0 R 536 0 R 544 0 R 550 0 R 559 0 R 565 0 R 572 0 R + 577 0 R 582 0 R 588 0 R 595 0 R 603 0 R 608 0 R 616 0 R 622 0 R 630 0 R 637 0 R + 642 0 R 649 0 R 652 0 R 733 0 R ] +>> +endobj + +101 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 102 0 R +/Annots 103 0 R +>> +endobj + +102 0 obj +<< +/Length 56 +/Filter [/FlateDecode] +>> +stream +x3R*23434q M  ,sy \yy;` +endstream +endobj + +103 0 obj +[] +endobj + +104 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 105 0 R +/Annots 106 0 R +>> +endobj + +105 0 obj +<< +/Length 998 +/Filter [/FlateDecode] +>> +stream +xڍU]6}pJ^>BH͗tpFm/{ i4ƾs} [%Rp`OEթBVBREI sh*L~g (LZ]lBt&L xyh+DZԀcU^YA H0UJyʀ(\3'RiY Ӣຉ7w;@n]BՠnJ7X +2=Sג5W +Ѝ;չ6閯dZfdMhTcA7qMhi.ok{ e~0zQ+Lw 2(ǚLgdnϼ;cM;d̘kp|hs{DETS>oiU]kendstream +endobj + +106 0 obj +[] +endobj + +107 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 108 0 R +/Annots 109 0 R +>> +endobj + +108 0 obj +<< +/Length 994 +/Filter [/FlateDecode] +>> +stream +xڍnH>/I]?n 2NCG> .12|G> 4|psߦugy!o4˱ %Z fCt k_I2_mWI[\^j!OM- RKGB&fJòȑ #3C?mV- +< +SJ:EQaȂp|{WcFZnƧe7+=Ə_9?ڈ-F'w6},qQT; yR8"؂q=L +pqX9b Ϛ*m[&{J0#K 7&P:5a##g6H>Krf._6s] +~ݢ +Y;3uVBG(4 2mBU`XbQU_G<(9j,]λ& 9Ǝ\(2]0OTsL091 U|@ȑ!wD(}CStؼH9f|PxHcIa>y^L.& Na4S=i%)zQ(:l5Z}ؾՂ@c̀E+\P坎&v+ +ȉRww(`pV0Wׅ̕~ΒvY=$;z)hoٜ +:8*uʞt8H-bkVʾQB9R14endstream +endobj + +109 0 obj +[110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R +118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R +126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R +134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R +142 0 R 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R +150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R +158 0 R 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R +166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R +174 0 R 175 0 R 176 0 R 177 0 R ] +endobj + +110 0 obj +<> +>> +endobj + +111 0 obj +<> +>> +endobj + +112 0 obj +<> +>> +endobj + +113 0 obj +<> +>> +endobj + +114 0 obj +<> +>> +endobj + +115 0 obj +<> +>> +endobj + +116 0 obj +<> +>> +endobj + +117 0 obj +<> +>> +endobj + +118 0 obj +<> +>> +endobj + +119 0 obj +<> +>> +endobj + +120 0 obj +<> +>> +endobj + +121 0 obj +<> +>> +endobj + +122 0 obj +<> +>> +endobj + +123 0 obj +<> +>> +endobj + +124 0 obj +<> +>> +endobj + +125 0 obj +<> +>> +endobj + +126 0 obj +<> +>> +endobj + +127 0 obj +<> +>> +endobj + +128 0 obj +<> +>> +endobj + +129 0 obj +<> +>> +endobj + +130 0 obj +<> +>> +endobj + +131 0 obj +<> +>> +endobj + +132 0 obj +<> +>> +endobj + +133 0 obj +<> +>> +endobj + +134 0 obj +<> +>> +endobj + +135 0 obj +<> +>> +endobj + +136 0 obj +<> +>> +endobj + +137 0 obj +<> +>> +endobj + +138 0 obj +<> +>> +endobj + +139 0 obj +<> +>> +endobj + +140 0 obj +<> +>> +endobj + +141 0 obj +<> +>> +endobj + +142 0 obj +<> +>> +endobj + +143 0 obj +<> +>> +endobj + +144 0 obj +<> +>> +endobj + +145 0 obj +<> +>> +endobj + +146 0 obj +<> +>> +endobj + +147 0 obj +<> +>> +endobj + +148 0 obj +<> +>> +endobj + +149 0 obj +<> +>> +endobj + +150 0 obj +<> +>> +endobj + +151 0 obj +<> +>> +endobj + +152 0 obj +<> +>> +endobj + +153 0 obj +<> +>> +endobj + +154 0 obj +<> +>> +endobj + +155 0 obj +<> +>> +endobj + +156 0 obj +<> +>> +endobj + +157 0 obj +<> +>> +endobj + +158 0 obj +<> +>> +endobj + +159 0 obj +<> +>> +endobj + +160 0 obj +<> +>> +endobj + +161 0 obj +<> +>> +endobj + +162 0 obj +<> +>> +endobj + +163 0 obj +<> +>> +endobj + +164 0 obj +<> +>> +endobj + +165 0 obj +<> +>> +endobj + +166 0 obj +<> +>> +endobj + +167 0 obj +<> +>> +endobj + +168 0 obj +<> +>> +endobj + +169 0 obj +<> +>> +endobj + +170 0 obj +<> +>> +endobj + +171 0 obj +<> +>> +endobj + +172 0 obj +<> +>> +endobj + +173 0 obj +<> +>> +endobj + +174 0 obj +<> +>> +endobj + +175 0 obj +<> +>> +endobj + +176 0 obj +<> +>> +endobj + +177 0 obj +<> +>> +endobj + +178 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 179 0 R +/Annots 180 0 R +>> +endobj + +179 0 obj +<< +/Length 978 +/Filter [/FlateDecode] +>> +stream +xڍ]oJ{yzݝ$AE\UN0WInj3ݝ`{_~O|>B +,=I˅%~06݌GXw9xnr4Xpm\F5-$ D'A28G6i U\nБkÝ= +}>"eF},`)FuNgd2Rd{P,3r[_xWyU^l`:cu2\ xc &CRocoDJ]䝫E rGYuobyOٖ# hcǛeAi;G4_|I?ZGH +@MVbQD%GķU6-Jj?`= {Z% փ༨` YǓKӝA!M^ev$X(ϛz)o-@!wϳ5TwE/ݽE-`9@1n@f QnPqF?!]A + ArQq΁Nq#nl\+9\cxtqʛUN$+TKY2@t~0K4X .{!OjXl3(OHg8<<$8nmKH#"`2X⫪@bԟWYZ,J{Ǖ#H452t"XHӂ9% غfHp'c?YFd{6"F8U?/>$}\eXx[wb739/)A@T b.*[.q%,bH]mSn>*gljQ'> ~$U08# K4~* EWwxpT1֘PrwGXRŇ/ce]'e?w?ZBendstream +endobj + +180 0 obj +[181 0 R 182 0 R 183 0 R 184 0 R 185 0 R 186 0 R 187 0 R 188 0 R +189 0 R 190 0 R 191 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R +197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R 204 0 R +205 0 R 206 0 R 207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R +213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R +221 0 R 222 0 R 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R +229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R +237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R +245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R +] +endobj + +181 0 obj +<> +>> +endobj + +182 0 obj +<> +>> +endobj + +183 0 obj +<> +>> +endobj + +184 0 obj +<> +>> +endobj + +185 0 obj +<> +>> +endobj + +186 0 obj +<> +>> +endobj + +187 0 obj +<> +>> +endobj + +188 0 obj +<> +>> +endobj + +189 0 obj +<> +>> +endobj + +190 0 obj +<> +>> +endobj + +191 0 obj +<> +>> +endobj + +192 0 obj +<> +>> +endobj + +193 0 obj +<> +>> +endobj + +194 0 obj +<> +>> +endobj + +195 0 obj +<> +>> +endobj + +196 0 obj +<> +>> +endobj + +197 0 obj +<> +>> +endobj + +198 0 obj +<> +>> +endobj + +199 0 obj +<> +>> +endobj + +200 0 obj +<> +>> +endobj + +201 0 obj +<> +>> +endobj + +202 0 obj +<> +>> +endobj + +203 0 obj +<> +>> +endobj + +204 0 obj +<> +>> +endobj + +205 0 obj +<> +>> +endobj + +206 0 obj +<> +>> +endobj + +207 0 obj +<> +>> +endobj + +208 0 obj +<> +>> +endobj + +209 0 obj +<> +>> +endobj + +210 0 obj +<> +>> +endobj + +211 0 obj +<> +>> +endobj + +212 0 obj +<> +>> +endobj + +213 0 obj +<> +>> +endobj + +214 0 obj +<> +>> +endobj + +215 0 obj +<> +>> +endobj + +216 0 obj +<> +>> +endobj + +217 0 obj +<> +>> +endobj + +218 0 obj +<> +>> +endobj + +219 0 obj +<> +>> +endobj + +220 0 obj +<> +>> +endobj + +221 0 obj +<> +>> +endobj + +222 0 obj +<> +>> +endobj + +223 0 obj +<> +>> +endobj + +224 0 obj +<> +>> +endobj + +225 0 obj +<> +>> +endobj + +226 0 obj +<> +>> +endobj + +227 0 obj +<> +>> +endobj + +228 0 obj +<> +>> +endobj + +229 0 obj +<> +>> +endobj + +230 0 obj +<> +>> +endobj + +231 0 obj +<> +>> +endobj + +232 0 obj +<> +>> +endobj + +233 0 obj +<> +>> +endobj + +234 0 obj +<> +>> +endobj + +235 0 obj +<> +>> +endobj + +236 0 obj +<> +>> +endobj + +237 0 obj +<> +>> +endobj + +238 0 obj +<> +>> +endobj + +239 0 obj +<> +>> +endobj + +240 0 obj +<> +>> +endobj + +241 0 obj +<> +>> +endobj + +242 0 obj +<> +>> +endobj + +243 0 obj +<> +>> +endobj + +244 0 obj +<> +>> +endobj + +245 0 obj +<> +>> +endobj + +246 0 obj +<> +>> +endobj + +247 0 obj +<> +>> +endobj + +248 0 obj +<> +>> +endobj + +249 0 obj +<> +>> +endobj + +250 0 obj +<> +>> +endobj + +251 0 obj +<> +>> +endobj + +252 0 obj +<> +>> +endobj + +253 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 254 0 R +/Annots 255 0 R +>> +endobj + +254 0 obj +<< +/Length 747 +/Filter [/FlateDecode] +>> +stream +xڍMO@^߻G$U4"F]bې cJ;NbcE;3;dy2>xe*]o'MYlןYsYɕYc9~>d.'l15Vx W. 1ABYpjlDX,]ŘDiV}YJ*Dp0fe J̆=8-٠Z-̆5˗4A`k2lh9vmCpN]'gߩXkY,etI5n+b/>.rA\6FR֧wFf@ oRڈ;6cWh[u4h)yP=YA(p[gh7|oVٟ k:Ғ{9% 2q;k??; + 9ƬsEIp(NAhza&U JǶzd0YG=z19TX\זLjk pk ܲ 7ks\n˛d~V,Mws̊<]WWUwʭN`HNQ +3Jݮ$)pAv +ǤUT;Q:MXGwS)endstream +endobj + +255 0 obj +[256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R +264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R +272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R +280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R +288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R +296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R ] +endobj + +256 0 obj +<> +>> +endobj + +257 0 obj +<> +>> +endobj + +258 0 obj +<> +>> +endobj + +259 0 obj +<> +>> +endobj + +260 0 obj +<> +>> +endobj + +261 0 obj +<> +>> +endobj + +262 0 obj +<> +>> +endobj + +263 0 obj +<> +>> +endobj + +264 0 obj +<> +>> +endobj + +265 0 obj +<> +>> +endobj + +266 0 obj +<> +>> +endobj + +267 0 obj +<> +>> +endobj + +268 0 obj +<> +>> +endobj + +269 0 obj +<> +>> +endobj + +270 0 obj +<> +>> +endobj + +271 0 obj +<> +>> +endobj + +272 0 obj +<> +>> +endobj + +273 0 obj +<> +>> +endobj + +274 0 obj +<> +>> +endobj + +275 0 obj +<> +>> +endobj + +276 0 obj +<> +>> +endobj + +277 0 obj +<> +>> +endobj + +278 0 obj +<> +>> +endobj + +279 0 obj +<> +>> +endobj + +280 0 obj +<> +>> +endobj + +281 0 obj +<> +>> +endobj + +282 0 obj +<> +>> +endobj + +283 0 obj +<> +>> +endobj + +284 0 obj +<> +>> +endobj + +285 0 obj +<> +>> +endobj + +286 0 obj +<> +>> +endobj + +287 0 obj +<> +>> +endobj + +288 0 obj +<> +>> +endobj + +289 0 obj +<> +>> +endobj + +290 0 obj +<> +>> +endobj + +291 0 obj +<> +>> +endobj + +292 0 obj +<> +>> +endobj + +293 0 obj +<> +>> +endobj + +294 0 obj +<> +>> +endobj + +295 0 obj +<> +>> +endobj + +296 0 obj +<> +>> +endobj + +297 0 obj +<> +>> +endobj + +298 0 obj +<> +>> +endobj + +299 0 obj +<> +>> +endobj + +300 0 obj +<> +>> +endobj + +301 0 obj +<> +>> +endobj + +302 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 303 0 R +/Annots 304 0 R +>> +endobj + +303 0 obj +<< +/Length 13 +/Filter [/FlateDecode] +>> +stream +x3Rendstream +endobj + +304 0 obj +[] +endobj + +305 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 306 0 R +/Annots 307 0 R +>> +endobj + +306 0 obj +<< +/Length 919 +/Filter [/FlateDecode] +>> +stream +xڍVrH}l3"iCƮ> 4I5#!m +N.|ӗs0P~t2[0QvӉ`D:*\ _;<M5ACGwK BMh[z[Y +q-)d]lūm:-E+:"L!~?Z8LyƄD*Ɏߓr(J&ѮG$E="đvh_Z(ʅ]R]+rNCյIϵef7MlPԯ:.FhBCq!4qV.&ɶ?-y;qyaLXZל[3_GG/[yf +-y-]Nr̯ $r/&s=53X98fn#1=Rհz%Jt +v 3LQek+)8\}pꙪOkdƄ ¹xsmHuR=iJgG{%-kn?>l@^^[}ږw\vu1uSI[U1JfVQ/ +}}_^xxHUDP܏s  y~Q,GσHF2Dݻ9H8fyoF +cΘ|N%y֚9V':g휖WHy7FV<*?}[<| V} pKB?e[?٭W<$8)*ؘQ񈯤Ւ +y~%¯B}$r.5K#t[sSendstream +endobj + +307 0 obj +[] +endobj + +308 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 309 0 R +/Annots 310 0 R +>> +endobj + +309 0 obj +<< +/Length 751 +/Filter [/FlateDecode] +>> +stream +xڥKo@HYɼK&uNv06i{ 0\";3cnۭ"eڭ>C0E%jLqy}ESZ1ܪPwE9rW} + i8RF`"׆$Gy<+Mf4GmX(ZvٱO +e1zu_8}p8KgKUE+VS+n옺5JcP>>x 6ŊH̹%^ϲ4{0,(9gyi\]?b|/,nB,$"f]K<tnG&ܒ^- ZU'@}yO-ĊJ]讬 0]εŔUsl518jNt52'f:ް> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 312 0 R +/Annots 313 0 R +>> +endobj + +312 0 obj +<< +/Length 388 +/Filter [/FlateDecode] +>> +stream +x}KO0z8 VM8hJ"$~=bY3;>ME~CtcA;"k<([ԎưϪr0g9Հ2DZ~ +(%-:URҡ/䷏f(VHrX͒pendstream +endobj + +313 0 obj +[] +endobj + +314 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 315 0 R +/Annots 316 0 R +>> +endobj + +315 0 obj +<< +/Length 2773 +/Filter [/FlateDecode] +>> +stream +xڵnle,Pl*QH$'( ŢbRR ?H߷gH9g(FL"}ۏs#9%_ÐJ9%bFMMca|y}'g2U:/sPDnf{ J`e D8UJ쳧z%lނ9#Kkz(LϋY9%Nn_l'dņ,,'|Ga=lKYZ$2P9hۻWS̽y~2y]n#IIOvW +(ey.%3ӢÎ<^^[\tF [alAXX\]1#\n'ٶSrj(D+Wױ8ˆ2cedN5ߤ1alN"fbݜ0JŁ;i8Ml>?0)1鳃gc%p]T܏=F@IxVڃ7jjnjn YHl%\Қ UMD2qޗ{{}R?HD7bk(xNEJpČp&"-&a*  +!T*0"8LQq6g'b8S9C$= 1T🗢LoY0j 5^4Ԝl Jª&)ä́DZ +Hީj6pU`vLmGr]#ݠ,%m~̪cCb2pm3@nbȬ?g77lFJ/&3 .ꡇz|zmټk;|gbaDW8SD \"^-WocFnTk,Z"m( ;{d4OǿvfÂ{,#>PU,n)KK+`+ +{P:`Ehx-WzoR%HҰ%Y ayntx?t %8H&یeGExp${{m~wj`" ^ `R4Pj=F{޷m)5 +t+/ "mHit[{%8H錦ٿPC_Ub2W@WD|ٛ@LvK:[DB|y߶& +" .tHIMp|MLpٗv[,ݤt$Zu/r%P{ yEA/TGhl-WoRYוMJb&C:}@vp4m0M%o64i/l3گlc^lV.`"w/ jV^c\["XpJh XV +ꮻ&}e F*vV' fޮ^0/I:" +P+) +8h &S~햢u \R6mHEuU~##hx KáNwoXvXg77~B*ouAI^_{PyEA Vy;h'_h=Zz޵qOd`Itx )5#>(%ড়Oj>Nj4yU\gi +c lv՛> +>> +endobj + +318 0 obj +<> +>> +endobj + +319 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 320 0 R +/Annots 321 0 R +>> +endobj + +320 0 obj +<< +/Length 2290 +/Filter [/FlateDecode] +>> +stream +xڵY[o~jx<;S3I{(@ +$y!=LDf1@&9x.4E;?Xad}bcLDQC""1D ޞ^ߗo:?[OW#$\aL<1f =׎@) g1yyjW@Fvjp-eǵC!o$8zPkVVH UCgyXzCڏ I0c4Ȟ4`!bgoiL",r}Mrim Ѕ }P.e`X.p + VXrF;A.RC1 evw\˛! yUU~أ(E_Avk$##r +n:RCCu*Ba +PN@7# +$!XHA`(HE䀂 7/J916!jq\Z):€!TCtBaj(EJEX-ި`E@ej5#YK^T3vC"xStFXYǡ :@ BN" `hcx:c"nrYon!CݯIa&QY5X;Ό`cAR+!]KD<>^8P0`=^.V+VCX7 9;1۠m#p=fear(*UVKi7P8Q=Muw47tOyC]5TNk?1B$ +67/Z5kp262/Ŕ"C\ 6BC|$9$cMm}#!0\r1 +.8Q5+c5<1n$5G.03磣ZsNd狱oSEgT)uJPt?_f_s#oV*zP3H{LJeeSQ ́d%gRqBa +c#ĕaQ1NH@K0$l .69`@*"6!Rq\T):#yZǡ9CaR!2PfI۬mTg Œ NER0cPR +8R" ś52(tѫvkgh]>o'I$KoTk Sl8殖4(h,9 /_MoTc%P}jZP5Qsa y{6Jp~)!C1ev }pbeh+C:oLm8=]'윤Ui"|-ncq(0&Թ笚׭rxxo2jx셚8Y&ooؔm1S! :+P}jβ:uy,BAx(zN[gajJ{I _:b;@0sZ*pZEhܤ{UC=l(,sX71h3QD@GzQߎNH'ތoKj}vY&#{"uom۬DߗЭ?VܞDr(v:%Wx#~ٶK8HtMtoaYiͰվ)MڨwN]: +A{ +Wb-F )DJV\FXnLӣ/Pz Znd8=1dR7.G|q^ξD>Bu75oh%dz+';UyFQR)!fNJ"Niٗ_Yendstream +endobj + +321 0 obj +[322 0 R 323 0 R 324 0 R 325 0 R 326 0 R ] +endobj + +322 0 obj +<> +>> +endobj + +323 0 obj +<> +>> +endobj + +324 0 obj +<> +>> +endobj + +325 0 obj +<> +>> +endobj + +326 0 obj +<> +>> +endobj + +327 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 328 0 R +/Annots 329 0 R +>> +endobj + +328 0 obj +<< +/Length 2066 +/Filter [/FlateDecode] +>> +stream +xڵko]~i?9Ml֦.5nʒ!C{8#y(5Up_<$^G0uzå qF&'JPͽ%{Wd2==c^'\@eeΒ$d?oN; pʼDXOk*dU2QԖKnRJjcYrPnTYj-)Pr@J. yjIPIݴ-yY Kѧ^iC +iq;%zY14H]'4(bFkr0,5cYCh eҳvG?ߌlz39 u0'ĉQIR-LR|!Gu,Lqqb`^(#RDDEHZm更}w 0H UFφS +NR)C8ѰX1q[xy/6zHQ:]^zGdِr{1 (DTXg +xb_3" p +6MþjM< +E OV*vJRi dbOÁ *졾\t+p[p' +}.r1BǩuUPUf`$ی2V&a]L!HG!YD!*Ka[xtq?Gi)A8N=7~.Wǻwd}s)M޳yA0=C7 'Qp^Y)(lEh)7i`A,}K~zJܳR)Cpݟ JGxLK(p;p5Ѷ,1{ ޵彤* ̪HAfUt~)""p +6MþB B$/H;B8R#-!}zn| ThzZEofݺoTNRǢ)p|UzJ6_HGj2]^<[7⡦d W8]_+&yUf,$nap16osbgz +d2W1*jQvAAQw0ul](Ick'<퀏:JVdק}siCKP'oj56 }z-!Hb4Zʬs72ƒu9=.}{_ox> +>> +endobj + +331 0 obj +<> +>> +endobj + +332 0 obj +<> +>> +endobj + +333 0 obj +<> +>> +endobj + +334 0 obj +<> +>> +endobj + +335 0 obj +<> +>> +endobj + +336 0 obj +<> +>> +endobj + +337 0 obj +<> +>> +endobj + +338 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 339 0 R +/Annots 340 0 R +>> +endobj + +339 0 obj +<< +/Length 2303 +/Filter [/FlateDecode] +>> +stream +xڵZn8}7=`Xrk-y[1![TDՊYqaR/a3==Qj,1Q"_.f)e],uzrس_-i3I5s}y){*˂ =mM5Ymeo 7 %}\"+2ސ_goZXrDyEnXcQT.Z]"ۻcS{Ydž6bCnƇ#!E-7aWܒ!Eo8Թ.:F$nK>f0zWܧ!Xn%vzE[@fBæZf,*ũ}T0iJ_[rɇV aR=Χ `os}z(|r.76 ˕JQ|4<{yv)5bRDQUfOܪ.-r u#_RϏ=m/yjŚ bVSa3ke%1' [K%pܐ I@'iV8N4ù`˹4r)o'8,6hÀ #6^AV? '-pjdRHz͠deJbȇ]\A|"p0ɮ(K2QbqZ; 5 jxӣJFM@X&BQ?j6y~qƙ@vߵ;RD +iL29pfi)7\$H6WC,*O'iej& +Fap a(ыA*"zDCe.KgF% ؈7`` +Ns% +F7% Ir2 ryW=`Vm X#nB|:D>Ȭ?BxBU1cG;vQA{#†, +f;RRc_>P+#{^c\v#RڟbX^m .&$x` \]!PEd0^RbFBB\_ Ԇ2WQ*+l9tǾhH{x7=y""<[R( 6wF- ط}}XW +WFl |~7%>ga^ wŘ  &zhVax16b?W ;vL9 g׳N]\] 8eTɁͧ= 9zAljeD't?wPY0 ;}gv,Q["` +_V{z+bl1F '̍]L^ 5,l hwHXfEq\xAޙö 8̪}r.U%ɾ= +jEՁ _w!z# Lr,:h#!ؘN` +G%露LƱWo)H˰c$5YwlC?¤V?PNυ̲D9u3FjHCc#ހ}wHlL94Wrb`D)U+g~=$(3AqEtq%Fk:Ehp{l n,$9=pRn"`D)Q~ +f&.&Y;gt8J1忈n:D7`pq(*eGCc#ހ}wHuE̤{NZ8 +F7(Ʊn/' G†:gIZ_EJ m +X:Ehp{l rUc/IeRD^Se3!:U4WA\yEC#i)uEƼl0"޾Vvw%@ 2 F8Gӌ߄'a{`I0ba?4;6V@ϖiΖgk!|r12hv yz)ѥ41L7?OK.G/,@`;`3prbTkFyeIjxwM׳˫[</%zFxGil`hLA0 1(-_AL[: 1#Sn.F4Im,FNl\kendstream +endobj + +340 0 obj +[341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R +] +endobj + +341 0 obj +<> +>> +endobj + +342 0 obj +<> +>> +endobj + +343 0 obj +<> +>> +endobj + +344 0 obj +<> +>> +endobj + +345 0 obj +<> +>> +endobj + +346 0 obj +<> +>> +endobj + +347 0 obj +<> +>> +endobj + +348 0 obj +<> +>> +endobj + +349 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 350 0 R +/Annots 351 0 R +>> +endobj + +350 0 obj +<< +/Length 1307 +/Filter [/FlateDecode] +>> +stream +xڵX[OF~0>!4Uˢ% UU 1DÊߞ3lB™\3g/r:!埧s!-ɱ#Lp5|-NN^VJbj'gi9Ktkϭ3"0Tv#g"[ 0g,5UaIFJ*,c=*VKރo, +.(%AAΊY2ߕ; ڀd %恆ĔZFfv<9O?!2c yY%en1q,S~*3U ΀5nQ^ ̓M9bQ@:͓KsP9YY- +SXN|uVɛ~) QS +--("saHW&.i Nendstream +endobj + +351 0 obj +[352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R ] +endobj + +352 0 obj +<> +>> +endobj + +353 0 obj +<> +>> +endobj + +354 0 obj +<> +>> +endobj + +355 0 obj +<> +>> +endobj + +356 0 obj +<> +>> +endobj + +357 0 obj +<> +>> +endobj + +358 0 obj +<> +>> +endobj + +359 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 360 0 R +/Annots 361 0 R +>> +endobj + +360 0 obj +<< +/Length 1817 +/Filter [/FlateDecode] +>> +stream +xڵYn6}7c[ ^۩ AQk[7؋&v(-%b1:sf9$ N ?70<)A5)S\Of,_L&_Z,NŸO{v5DԒ:$y ׊Z k*$C;Qc}@`}4r) Ψf̵;w쩘M!FC F%,|aUmkƨpRckAHAJQ#k^h0[%%jwJb̻1-.b$U۬kjBMx˼]9*#}KhƈC$a$uy5 ([~))JyxW:C"=b1AZbIB4Fu%h퇢EZ$BMx˼],f>(S<m$^aE Ki$".Pj,iF*8#&A3"[]ۗv =ADZ"JB4FɩqBvĢjc1"޺`WX ^C # $ڈ́$Ӄ1Nb:|ڧ'K64:_]BL^F5Ʒ4/ƠCa U@ًh38nx`:/0_6=ŀ8?^?pb(mBbeP /B U犴["-Xe_HP1vje8a<㰣op?SJǙ|~v{l=smR|'ۧ N<[gNL´w v(̓dn>3ۨ V4^U `zU8]OƟ><__"l\wR3uvJߓopa/AMniR<pe J%8Mn$Yr[u;;Lp~ nh^%?եN.8_]q)vCץj]ejZ)nXI]zUʆ؊V mvxzOpqd1?VoНC#50^NZc@)u' ZCN"-N& e.@Ԣem$^a΢G-_ی$zp@i}DzzZ'&Z)Pa2o j٧pFzƈ^986ݰ9Ϩ;t%y@Rȃ<\-$!j#BY5@TȉT؄qraN$VKTtXlؚNwl~_ RLŔCX$^ + +FdZYF6+gazt63rzø50n4#w5۷J%h:ͼn{x],#u\}͡ӖMt4;E V9wƭ6F#ÖpN+on8Ú!y; meRO˳;<B[Vs}J|6fvzae#?ߝ)HF!&JpK#*B2So%̎)R*"4Im,Fendstream +endobj + +361 0 obj +[362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R +370 0 R 371 0 R ] +endobj + +362 0 obj +<> +>> +endobj + +363 0 obj +<> +>> +endobj + +364 0 obj +<> +>> +endobj + +365 0 obj +<> +>> +endobj + +366 0 obj +<> +>> +endobj + +367 0 obj +<> +>> +endobj + +368 0 obj +<> +>> +endobj + +369 0 obj +<> +>> +endobj + +370 0 obj +<> +>> +endobj + +371 0 obj +<> +>> +endobj + +372 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 373 0 R +/Annots 374 0 R +>> +endobj + +373 0 obj +<< +/Length 1416 +/Filter [/FlateDecode] +>> +stream +xڵXn6}c \+;\$ n((H.!JHJV")pxݝ#/wwñ qFw;RPŝ!9$dzUb+~99:2W9*VY +j8'I]U+ʝvIVίY9ˋj'H¶i S`j6Rwc#_N/.||ty5xN6.R+gT0b5_YN`XT =C9 .=RMgURi}&?JoX)Ef R>?f$ȖeAf1b6X +,ӣ_ r#زFm-sŌgcegQR9j *Uz<Ԣ s[Y HB& +}[od1__g}mTR˚Ok\'-~cjØ{y"#YC~1_lzѵ +ڒp%1\߹'w]:4qP+@/s!8 옊1ۉnkc`ҐE/n:ȮrrTc ԛH +~E'hB +j5VfLJՠWkAb\ +ոZkϜ`nh7 +dWG=~Omhg?^h A(LP Yqv.W#z/T\mYSs,X: MD&*KC1o'HPQ9"qGt"֘bGHGXl+D:o#a,^ZtZT:hq34ah2 m"4}D:NIN{c#۔A:cVj_'#pkH.D>B97n&ٻ(('"dL[QNcFh#5tCo'HPR: YW9W0&1QKIQ Q2Ɇd:PV?4C9 WG9X,8`)si;kzN&>۞`#iTIe C0^`S|N-5\3w^a+ljrxֹ_jR >cy#r2A&aܢ %X Ll8N'A s*7,K"X r8+gd(x[4`?j}Ex5O&fwu>Bāᖁt:_mjATj['Y߃U2EE?{r4:w5 +N>OΧ~0VLC UJ{ScfRˣ!E@Jc-endstream +endobj + +374 0 obj +[375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R ] +endobj + +375 0 obj +<> +>> +endobj + +376 0 obj +<> +>> +endobj + +377 0 obj +<> +>> +endobj + +378 0 obj +<> +>> +endobj + +379 0 obj +<> +>> +endobj + +380 0 obj +<> +>> +endobj + +381 0 obj +<> +>> +endobj + +382 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 383 0 R +/Annots 384 0 R +>> +endobj + +383 0 obj +<< +/Length 2403 +/Filter [/FlateDecode] +>> +stream +xڵnx^-E^I{AQ-'IlC'P2[pAg8$")#|tKD"u9h4}y15!>pĺv,QB1$MRH6Iݪ RG緣ɗp2ݏi0m-XDc {&A׃x6Ez'C%/]Ye*}Lf_GhWfj(/Me}zɶU7xbRDlɫEYlM=B$Bb|sQ*{\l2G*_vS_˓ +T4 }_r~FNRRj qߓϧD$J+II~ ÔA*f +( y"Ҕ_r%0%DŽRQٝu2/u@$ci VL}sfMax)+g}3<< +8z)3F* ObhʱӫA|Mvh*q(sE=2 n1q=5Ceya|Q/r/)[K 1:X'0:gAƊpFg%DZ,&q +֋="T օ8c,\c5*cIvKl0Fuڏ0}.I4.|/g }xCn'/p2 6Ip/y^*]s@{*Y,/OfcEyMFEBZ۰|@7?{U,#4ݢta؞@uabjߤSΠ~|;΍wёS +M4/ 8KbۯJ'0#x W)JRͷju?f0> +>> +endobj + +386 0 obj +<> +>> +endobj + +387 0 obj +<> +>> +endobj + +388 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 389 0 R +/Annots 390 0 R +>> +endobj + +389 0 obj +<< +/Length 1741 +/Filter [/FlateDecode] +>> +stream +xڵYRF}!s$O J((el$G43y==gz.ЯGAQ?|H!@rlHS%ÃOϏ&ǿN^$Q4d"bJ{8|HV#e4ch,]G+QŔ֎~n@ǏmfsuM15X +!z3Nn//>}̈+AwY|{_n=ݯW6zȱbL?gGh|>3#R)lQuȓϳ 0&]!0}@E"}Vi6|i^m.:oGQS Ōf +0c=o4_-# +mP{"(01%gX4:+X\K̳kk#[A4@L:f'A`r_-t*n2aB] +D%qzWRABjrŠY +1J0tۻz\ I[ +`Y'ٵ`le56Z- j%x ԙ6p"/ocF8NYڮ&gɗO'C{)ܩ|^M;4afpћ*Bl{G +\4kkF +jh# )TؐŎrɀ\w Zc!W-fY./QViqM&om)[[]Z\M-].ݿ;Uݕ>Ƹ18\ި6۞<6CƈmڡE{!境 1¶0ާͅ[o~n\}#M`z"|t?dS wij=T WlU֫thOzC?>lÈvRИf]IlHWp/| =qu`:PBy Q5)1V1~v"ƔmD~QG0yv:jM1]ma<[7fp{y3 hA+]U}|KqX{ZeS'nZJx-n?JGu<4읝C;jZ1:4jNLHF͉W.)$0,}n@YH."9K0PuWiZ\Rؘ(xv`.ltuR/u(endstream +endobj + +390 0 obj +[391 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R +399 0 R 400 0 R 401 0 R ] +endobj + +391 0 obj +<> +>> +endobj + +392 0 obj +<> +>> +endobj + +393 0 obj +<> +>> +endobj + +394 0 obj +<> +>> +endobj + +395 0 obj +<> +>> +endobj + +396 0 obj +<> +>> +endobj + +397 0 obj +<> +>> +endobj + +398 0 obj +<> +>> +endobj + +399 0 obj +<> +>> +endobj + +400 0 obj +<> +>> +endobj + +401 0 obj +<> +>> +endobj + +402 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 403 0 R +/Annots 404 0 R +>> +endobj + +403 0 obj +<< +/Length 2498 +/Filter [/FlateDecode] +>> +stream +xڵnx"d +2 ,b0ti-Fw=ȼoac-~n_H#o gL xOܮr5lݬO%:?{{;|\-Nc \) O/.䓇v%;~۬_ˊÖl_|y:j>^|%>AaKA%-&&.MtLCl-ӬV$lE*]Ꮆ\I[fq߹f Z $2+- \[bKbbKbf˶MB uWVQDXS wE*L7k 0[ eһ%O ʬDᏖmtб&fN$ɤWpz +WWQD +k:I:_He)hUov 0^S^!8[/Y)=xYHu-$; ]1swe%L^uL>4 +ʞ> +>> +endobj + +406 0 obj +<> +>> +endobj + +407 0 obj +<> +>> +endobj + +408 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 409 0 R +/Annots 410 0 R +>> +endobj + +409 0 obj +<< +/Length 1977 +/Filter [/FlateDecode] +>> +stream +xڵZ]o}7xȃbˁ$2,EQJU+Y$;Cpwu1{pH #ӓ_.8a32==ђ:$S'ɟvo',3d<~C 8KRW]Z,I¯OS5D5S-'\+j-7/\SɄ$ۊܖ՚Z91Q|sSppʥt/'81WDw^~l.EhhQ!C0:cT8}K\FQ +2RHu fDX N^ly  +b&%xI&}؀_kR,^kƃna. ֖aod¢!"e=7jt}9/qVzY4+Fr>^,wjXܨci <6#qIObaC"-!f :oqb6L(ʼaKxq⚜1Y,A/2Qd +dM$PYg +Dk?\ESCo¾&2bDh<L2dD!2݈q;e2 p i<~ "U%k",nd!h퇢hq56MyX(U>|p|)+vPXH@Bt +oC=G/wSDB(YQ{bX(.Ң!9o&BE{M1J1vPjt6ս,іJ+^ ;vRAiS wj;g[nwՎ]Vw{o97X؇z'o77B +yAS>(YWݞo7sgÀ_3[ZzH`CTBŤB=.UyƚР^|%4!HPl5+1؍PJѸ2dt#[hkfJ X'qnR^q5G"EGided~A#:o*-XHr:P5 ] yċ-⠯\ !ǘmx\eq38<ΞVRNgZՄ,!{ z.U%( Y3jL3^Ёi+OßhQ:$`.Fcw_gXoy\-t S:^ GIjX +?eTendstream +endobj + +410 0 obj +[411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R ] +endobj + +411 0 obj +<> +>> +endobj + +412 0 obj +<> +>> +endobj + +413 0 obj +<> +>> +endobj + +414 0 obj +<> +>> +endobj + +415 0 obj +<> +>> +endobj + +416 0 obj +<> +>> +endobj + +417 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 418 0 R +/Annots 419 0 R +>> +endobj + +418 0 obj +<< +/Length 1933 +/Filter [/FlateDecode] +>> +stream +xڵYn7}7c,Iԭh c#meծmp/\r/ΦuQ HFg ᖡ^-r>}s!HJHS-5-G_0\^_t5x8:Y\@ߏ^/+oNiK8B L+0%)_t_hA߶6H3@P![pKbajh1d `È>:ufMh2Ro!K2diX0(m*t8eӅ0X@Mo>~F:jr0@ z타T@;5 М0M7`3?ƈAqstrMNvŐTI$Z\n3z{(ԙ\CǰA}~sdnEQ/os3Ҥź>67]gJ%upn?񻧆*/誌7- ?~;܂[rYSs͑zxjC#4*lb?'RIG&s礈0]^1NQ$3UA6Og뵻&ӎdQR۱KpPVkUqAA,j: +Bx#w. ACnh#)ؐc' bq q9'Z+;A\ܸ^&i9$jIkA̕p!9}U/iG p_bnip\)HC]oh#)T؀~OI[\"rLbज~b^1Nv &Pbsw{- +DWӄhXU~j*tnI>ɶlׯmFmJiw__t6Tf<8~Npt:Wǐp@.ȳLm# Dk n`#ż=lkx +C ̰pl Cy7FX?Ɍ`'|a(*a!O{`6-rX1~rs!ZrECk)\![*:;v>۵|S@π|cJ~)o݃}HwEt BytrR}U%\"OtY deGU Y)˪eʵ be l^ 3bQ(Nc8610x]dK@ޡƭY/dԀVKc:6%zuM%)m’mqlLj0dG`?Cou)5NQ/ +`crmXi> +>> +endobj + +421 0 obj +<> +>> +endobj + +422 0 obj +<> +>> +endobj + +423 0 obj +<> +>> +endobj + +424 0 obj +<> +>> +endobj + +425 0 obj +<> +>> +endobj + +426 0 obj +<> +>> +endobj + +427 0 obj +<> +>> +endobj + +428 0 obj +<> +>> +endobj + +429 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 430 0 R +/Annots 431 0 R +>> +endobj + +430 0 obj +<< +/Length 1467 +/Filter [/FlateDecode] +>> +stream +xڵX[o6~X/ؓ^ME1CZr͖ KnCIJCC9ΕoW œ B Z./ÒZ1@@^^<☩hųE5Bq7b({:gv&96pZYḬ ?2KQC]?9a,<4TLU+p8DHݸ{CwSB%SPlY!fUv(QN*:% FR'6H +[ kCB!rsL!2*g$3!+KїuV@e]ۼhPKOn1 Uϊ#y?FIԁFB3[ۆvДR`fjʶ^Ͽkb4ܣ%`'{qNE*\rDTĜ0`V=#%R$Ą +ƈYbʹ?8F dY;* >$HM}sF`ms8)@4Z 6^:GX FQl@Tׅ$I8ֿd`KK|,VJCZ6o*Ng@?RBV2 /${XhZ84XEo6A?o)P- ( .D2F +"d01B籭~ǘz0:5J7~iY,I1hHpQl6&bޡt׎a^ظVVN(4JzN Է;vn6k؃c{hDx,V C2*CM;Hb_0(YVG#^ط_o!NA F&𵟻.u\ lݥN8nu\.in +>U Cc93 +3) <V2Ϡa\K"-EZp7ѩՂՉ)M80ӳeYR8mĉ3:kF/ hAۍMꛣJ<2hȉp*fVU`C_޷ h@~ƴIF9LXgaVmq%JY e'.mO g>&5RĨ3X> +>> +endobj + +433 0 obj +<> +>> +endobj + +434 0 obj +<> +>> +endobj + +435 0 obj +<> +>> +endobj + +436 0 obj +<> +>> +endobj + +437 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 438 0 R +/Annots 439 0 R +>> +endobj + +438 0 obj +<< +/Length 2156 +/Filter [/FlateDecode] +>> +stream +xڵYmon/@U$ ٸ4zE jmVJ+E˳way8<)~:?{?{ A +}AWC)Qr00X)oĜ0m@Ċ2e,_bcDŔs%Xͪ.mY\v I3 c)c/,2fnnKIghVg\ig}LBY 46Z$֋|J0@UTT<I^pm*ÔJb1R,42blvǨ,:sՇ%LzS=.Ӗw18dV +?,QRȢ>hP8oT5bZ*D !^ѿOߠBḁU~,x)Ew\cCs i)dFih ށ6PBxy)Ay +Xh'DҞ39ff2$}Gr>S4ؘ /;tW 9ߖkP4( +>!(.6e5pEpFU_* j^'8:SPP͠ܥN\ r;GPbfpoP~~x;U[;%fD${$v8#c?5@0)#Uۼ.ۧʍJprO*N79GHqHhRZ|l wuƀw=XTm(܍"`}?v,9|QbTFL/'*+ʇR&15PC|U)5 &!Gs Ov/ߔώ9Ec˧ŌA*0gb Fnkyy{B1̐e?*w|pS5.>q M͔* +}T}Xq'Dʠ +00=Ya^>؛Ӿ@u-}<q *t\M(g-k&nQ^(CgK:ϚIESJmi99'Y[BcowǢέ@o{]AM k(2zl$Hq +#[nʈ-B'J@ +gq1nJTSI7O!QiiQ*cd1L0FSs͙iB2=m_YH;q7o?,.A7E_@u3li@sUӥXa,R*#?m77'!9Gu2S!:hendstream +endobj + +439 0 obj +[440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R ] +endobj + +440 0 obj +<> +>> +endobj + +441 0 obj +<> +>> +endobj + +442 0 obj +<> +>> +endobj + +443 0 obj +<> +>> +endobj + +444 0 obj +<> +>> +endobj + +445 0 obj +<> +>> +endobj + +446 0 obj +<> +>> +endobj + +447 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 448 0 R +/Annots 449 0 R +>> +endobj + +448 0 obj +<< +/Length 1143 +/Filter [/FlateDecode] +>> +stream +xڵKo6xlk8u6A$^(77*lːnA};-Ѧ`<8 E xa>1+AW3D;G̗|,]||AR Vm4\ؽɗ, +O'Oj Ȯȫ1_|K2nl&O7d/מX)w~eF |#_0Np}z.Mj3sP;T2! .po-5qP6,¹89gNu\ E@}}kHƨun5JQ-Ai0%emJ jʏ4%pMHlJLWk(\*Վ*E=2'$ne4 S8\D+s݁p Ym]U^.,*f$qnnkˮeI"ڼN3{CeQ-'+@cetfh1 c;cza!MAo҄&lzZB3HZ!Lo(ɁP}z#֘jϠրIߜ,TuٹkQmY|=;A4&\򷀷茈z6aiS62-av=1do96@Y5/7c]>? :C* '69f&V(Eg;"މk6bH-LS۷}zaco=eG`$mi h.Fwb]f.Phu!'j:zìLW7Ǯ,+cN'/׾I]e_KKE)8;WNn[1S턫sףU9'kı%/[rH7^'%dp{DI~~]b?ɐTvºөY}mk`Tk'#%]mZ`aS<cOl{}wJbˏVa 1)|R)CDR7T.V>I> +>> +endobj + +451 0 obj +<> +>> +endobj + +452 0 obj +<> +>> +endobj + +453 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 454 0 R +/Annots 455 0 R +>> +endobj + +454 0 obj +<< +/Length 1028 +/Filter [/FlateDecode] +>> +stream +xڝV[oH~G?c2gS (J"cc#_ڲglLcg"w|sc<rx!BAx$( 3 Zmƣ#Z;V^uAiӸ$/,,E7ΑoB4DGZjH)G]\F]X0IP[a ĢG~PxvqmbUehei +qwtPQ8ju.amjEW[*̸–U}\q!R줥$Fji2-**(E_{gy=[<ۛlm8r|=>EYlkCmQu.vbAk2r=qyiH!Lvm>y̪"9|8mB2%aQLlH߸„O{qokbP~6'/O> yYZuyĩ3 a&T PkX` ))nu{0!p +aQ4V7{,f=͖=:2r!`:@>~ؐRt$ +fq@ {ûסQ~%aw2N"\$.+-~i[v9:>]n<ݬ<2DS 3-zqw^> !e F$hyq-Wq2O4H8_;bx%]6hScXS(HW/ V +3b~ë+)8LJt0 wu;63tWśΈI4p=;j.\ v)F'\] DskX}$70U\sK_,"endstream +endobj + +455 0 obj +[456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R ] +endobj + +456 0 obj +<> +>> +endobj + +457 0 obj +<> +>> +endobj + +458 0 obj +<> +>> +endobj + +459 0 obj +<> +>> +endobj + +460 0 obj +<> +>> +endobj + +461 0 obj +<> +>> +endobj + +462 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 463 0 R +/Annots 464 0 R +>> +endobj + +463 0 obj +<< +/Length 1815 +/Filter [/FlateDecode] +>> +stream +xڵXn6}c[,SٺMEbdHr;,-v$1Fgf!Ax~CP3F#e & +X}u"Ui}MMh+9dđ +Sʢw IUSR1A~(_U.̳,YV +Uy y +Y~IUDxnOKJ|.dĴYB~XʖR$ 01P\$(xК<x))0 BǤEi5FH2l1!˥ʫx1ծH$x }ؗBJf@v'E +Q?S Vb[VCB ֌}\ۤJsD}B!{fjk$k ɩBQ9a -%2IC c$Šby2?F D=TI h[3mH6,~7KF +ˈQAsX.QgݎBY T6`cXqT )"/nℛWkb4!T ߋzdaʽk-B5զ"ƞ昽pve%I+ )c% Ah(Mn5Hٸ$lB֕Of{B'~ۤ`taɠT?_IL2=d2m)K(rWH` +Oooon/fkl,wmx0ҒI(Gvt .fo5MP3}2m[M+GJ(ت:<E)Jku +7I\l; +[99Y%ާWSRQ~|Krp\#O'Lƒ; + ==^G0[@tpH EA}Pz),3Ğz<N~ Q+bh|'b ,j%3*]7e2kK%ɪvE?K1ZdU~ȤnI +w1VBcZVc?>xl*N-I +"T +]lc\׈./cnJju?Eg YZ846lPn!=5Mh4cpRpj=?< Z'1jDǍшp_a 0h_1">Kz(dZlP a#lg ⺭+]Ry EDu.4a2gn9}pEAsR^x9z:aKf0W7 [>meѻx#82L,9bog/n/MÌ +v\wN#k=DZ1+O.&?z+MI|P(H 4Xִމ2[;`q℉3bcYw(i |u9x}4\blc p1hrh18K^ JIm]R: +!^@=IfKoAkjors}5^/fo +kbT)5M9)"q#:qtcendstream +endobj + +464 0 obj +[465 0 R 466 0 R 467 0 R 468 0 R ] +endobj + +465 0 obj +<> +>> +endobj + +466 0 obj +<> +>> +endobj + +467 0 obj +<> +>> +endobj + +468 0 obj +<> +>> +endobj + +469 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 470 0 R +/Annots 471 0 R +>> +endobj + +470 0 obj +<< +/Length 2030 +/Filter [/FlateDecode] +>> +stream +xڽY[o6~mu^Ij;"б-ɐtc%BY:EspHR뫟WWOa Zm )B97W}VJe)b頦d:-/7E[6P#A(4̣ ʎYnED]CՁ̞龈%uuAl{(>} .]D-\@TArR:\Z&,*$V +P&txܜbVxiLۇsrFk_GR1ڗo|~{]Eaa}yn\^tuģy,O7K!T yMcR@KG}(#h~z99--AhrV`g0ԛ@ԷN *ZWXǹ[ +@id-_-mAQJb@N5"CDkti{3i0RD 聶gA` £P%5Ic w9HQVK8j/J3 Ճbl-H#_ҍmĊ3aԁќb[B ZJ IqZ 3>U\7(>>s sٱz&vZ"!~$@x{P`64 hRhW:"Rd{f9NaN/`Ű@|UaGʬ3?۲`/=7 >PFMϠd(]C +W~_]n($YWV&i[̙%;vgCSpBsTa7Y~%e^{n@r;d$]*}. Q娔X73Fl~M}R̵'ڹFrC\eCFCJ: XPhPb[ve|a͆(J\(ӥ\KzLW!E!M@hePkUo ;a x8}LTꐨR-쓨CyzC(m5vsE9%n쐨=)P ڴIJН䯣X VQYY%yCBۑ9}5'.Plùߟs͍ >k-kmPaDKC +·{mzA v94lCyyPn `{r,0OѢjqJ\rR] (؁Oŭ2s{v(.ȦiuFqq/j^3Pqs1[=-_iR XPx;Ō;|}^~}-W/ƥ"B9 ӣȈQUVC;-$..>:lG uzp>n~P ?C.i8F@ә\lM c#`oE's |8k Ӂ&bTu =-F*x8JճL )GJ)J )aX–'}S*RBZ֓FL59|r私 +>%piS_qml +](9Op6CD]΁@b.̸*4?w榍tybʴΠendstream +endobj + +471 0 obj +[472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R +480 0 R 481 0 R 482 0 R ] +endobj + +472 0 obj +<> +>> +endobj + +473 0 obj +<> +>> +endobj + +474 0 obj +<> +>> +endobj + +475 0 obj +<> +>> +endobj + +476 0 obj +<> +>> +endobj + +477 0 obj +<> +>> +endobj + +478 0 obj +<> +>> +endobj + +479 0 obj +<> +>> +endobj + +480 0 obj +<> +>> +endobj + +481 0 obj +<> +>> +endobj + +482 0 obj +<> +>> +endobj + +483 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 484 0 R +/Annots 485 0 R +>> +endobj + +484 0 obj +<< +/Length 1683 +/Filter [/FlateDecode] +>> +stream +xڵXn"G}HKDl)F$X̰?򿩞a.=0f6ȒmUNUW7C?]_,r?WSDhi8Ҍ` ޢWE5f*_>8Jx=D09;/?=v3e4ڈ||e.[`ه7q9yAȨB&jTH[XƒP\xbn9'.nGpR (ؠUܴ* !2?>zNxׅX Nx}紏c1wL9&qm `MF_0U=pn.&I$&PD%SS~s8ڇh}A5 ˱V_1X1k+~\QL97c`Ii<rCR%_*PwN9 J[XXeh]+\jt +uZpa2ڰu + +T@5sPCT"(nU߷*ƄL!%+ba 'uoYx-5 9en4YcM<{%+h5]"oӧ E0\%.,Uh^Rl{Z[nlCvh;SMa֓O!VvO xbsP%Z~@T6TU z.ZӒhZvPA&NZRPTiacTFM5ã)E,Xj.A BR=gSCf=rlnlԀ/ +keXcYS,Yՠ"*+_>&jv0p6>fHK{(,%k8#-.)l5dSsQ +wQ-^|}'jг[F)+yU~kW>zZzlimN@"xϲX'Ҹ1qh)%- (MK)5|k5`Cl6=̆ 狇x8p5D`]BRhA؟Lwh!>9X~zBN)lyhrYb8s\^EC˶{7Hp y׉x`6IS$8| &;h}ش1ѢOiuJLd{2o.>p4}FK6"4K[}~o1ַancKٞh0h*@CUޏÇT;dpNx75Ceq6ܴaǻ<IΠV)T+7!<<|M>ZF.sUtvg pkɊ'}ć.o$R2K7?Ɋډf$pY_OI/ 9_ EiS+Q4Ie*.pwfWg8u'!Q%y:_R B  W3 +¹cKMqk0\Usj-ҜbeYv5˧g a!{!3Kh È-.E4*P{͢6 +P laǻԙus; +`n/-x^,^Lm `_'B +U{TtpVMk1o^:y?~1O +2XN10Y-QGr+0!tĥ>_^cendstream +endobj + +485 0 obj +[486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R +494 0 R ] +endobj + +486 0 obj +<> +>> +endobj + +487 0 obj +<> +>> +endobj + +488 0 obj +<> +>> +endobj + +489 0 obj +<> +>> +endobj + +490 0 obj +<> +>> +endobj + +491 0 obj +<> +>> +endobj + +492 0 obj +<> +>> +endobj + +493 0 obj +<> +>> +endobj + +494 0 obj +<> +>> +endobj + +495 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 496 0 R +/Annots 497 0 R +>> +endobj + +496 0 obj +<< +/Length 1392 +/Filter [/FlateDecode] +>> +stream +xڵX[OF~G?C_!b&a[!LWCmߞqe +B +7g9s.G&GCP&#V#e-& +4}hrf8j j|>M%FPL,J +D%q:4oskf)Rz4/z5?(1J$ĴlyJj~I=),BЛ[mߌ`f,VZ1K`ŵN7ky`k6:()PAu5*Up[?\Uٴ”JSsR,u`uTId{n.N.Jf W_wurFku(/:Ρ{F9Je(_[Uf[eQ +qh +CMQ (}RcWUPxS+5`kj9\ɧ$|&پ!v~eFDupZe[(Hu?*Az:uYÕiᘊ(?.G7ËoiY*P8y i 'OF..ac }Kr&ыt~30P~ϓ PxrsN-4]m(8U<2YlQCpfOIӋ٧4vlxmߡ}"ū%k0S)fA@` +ƒPLj\JU[6Cjb MwգK;-*Dwh*a-jbCj}婋[bhoasz(w͑A*C $]r05굢 J(R\R,zQȹ(Nh5jwawsC!kW;WU61#- +h9[^w6{(L3.=|+fS嶝4Rk"*Y +_knQ[kKl-lm Vw VFd`)!H=ZЄV[gVL,BWk?U8yAoa/H^ҏ M1nKH'^~s(C(^ݠY? be5pV,B|3rOT/VF 4(ˊwm!ܾn[ [7tC[~txI> +>> +endobj + +499 0 obj +<> +>> +endobj + +500 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 501 0 R +/Annots 502 0 R +>> +endobj + +501 0 obj +<< +/Length 1605 +/Filter [/FlateDecode] +>> +stream +xڽXmo6 7cMCKTCl?wGKHJr" S=cF|y|$jLqwG_ãN6fFדo(,A%HÑ2)E=YXl -(_obrSmV_Oc.ߠ(Q]lJle~~Mogד7>nCO(B;UfXX2/V_EtQc߯a">])J\HYGi,yNgۋ*ٛzCJ`Uˉ/j^"yhf>ޡYV_-쐚`cH]Ӭ-GW2Bc Q^9C0W\/**_h-Py]f7`f ET +5U7*1'Î2kRb,E*l -ŬmbʹٟKBL` 5 +S"j/([%Zb3noM,a9RfP.Fֺ:GX F!ly7O +w$DzP'ܶ6+ba,s=7ѓp#'?><=Wejfߡ9~iaxԱJ-IЀm؀Xi +6b *EMB18qIE–Ы5FC`Ze].&念O7lruS'5~`2QN7(n"[ohᛆqC}X ߂%Z#$mVwbbq;mNͣ=ݩy{Zu%6t0lM&` QO3[벏7FB@Oל[J Z2>g -0,PnȌK dftWc ³Z]T[H':@r0zj C}"WX!~ s0dЗeg+ k-DkXZi2׆WM~?(cX +cj:Vu5m|m6ȼ jj*Cy>؜Ba'?D#laB:D2*,~_,XhAHЈ>lD8 +mߏ  B~K\vIʖ5FC-Z{6s4GRדw\,%cp W/1+XDkSn<6"CmQ9xj`Gc/&$x)Mm^A2+pF3ڡsr@pu_;˧ҁ [zz(zjiry3Κ/뾈@g0TA.F΢ףx>u6_zlrרNm +y:U,l4NV{wԊw^u`k5#~c >n+C%9T߻@~ ih;/wz 4>@]8X%K`%z[OmWwl&}2 HS~(ak8lr:OFRA 6T)F56VW +]ýdbHnᕞ "]T:FՅendstream +endobj + +502 0 obj +[503 0 R ] +endobj + +503 0 obj +<> +>> +endobj + +504 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 505 0 R +/Annots 506 0 R +>> +endobj + +505 0 obj +<< +/Length 1731 +/Filter [/FlateDecode] +>> +stream +xڵXnF}7Ƕ@{<*pTEae%)ogI/ɥH[AlIٹ윝=k~;=0?=!INO.("X4_H4iF0eӓC?ߧ'yXIL-tz5_ǟGWsP~4wg9J2'xv>D`"~%r"OG_frtm3*J}@8M5ZƏ"nesv`S()6E0,HiA Z1]{an*0tAVB8Ln(5Nd=t{Ym´B+QzTc`:KQOcU*/֌?g= |i?Y+Qn?Z%)Jꃔ Jy<ilKwbb~$՘k@_49t^_751=!վ a, GZS~c8VmH = m0+=lR:?(b~, 1;bH$Ā` +)I.pYV#hf]+MmBY T[#X/0FR})n'{WU6/Pu.VJBt@/[^6۞Lq= \iSMOG:~4,QX=|ֶf+ Rv24l3!$C^xJlo}NfeEtTbKcUm ǰE"e;(*7t/;ijѥ6 +}ؠlm VZ=\% 6=.!vZl=`;eOpri- 4D] (/qn ݌/P|\y]9n=+ДRW_|4ux|@|"h:4Tm$<" $9p4+Ի=5BΌP]tk}xOv9f9tvg Τ5%}e;.ɠ(Bht8N]zhۈ>Mwz02#0 @ }FLe}Et=E˝*(zWc7PNocHRF~PwSsI. zP7٩a+u~"¦cn +~@ a`nW\bGBKjnzά)R }F{mV iAォ*Ҙ:$zz`#%#XC{8)Ԋ"K~k[~h 6 VBm=t (qUm\U1l.5d~3/||5~P~}^lb[>oŝ A\j&Zk Zwcr~1[u~oB* ^*D6)SA+cY#,\k`ёtˉ5p139pxQI0ۑ w 0 T9%,-nUZ/-keIѾ9Y9=aUyXPRV6ԕ/jr1>c?\$R#EoOq{:I1yU+vQ•|t܂4dHngm">qtendstream +endobj + +506 0 obj +[507 0 R ] +endobj + +507 0 obj +<> +>> +endobj + +508 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 509 0 R +/Annots 510 0 R +>> +endobj + +509 0 obj +<< +/Length 1302 +/Filter [/FlateDecode] +>> +stream +xڽWn6}cP.GIfR-Pl&ֱSIb?ۑl]([-}8sfx83d/{UIMcClXz +v*E2_ c VD7VwC#< >8߿{?)%92xWȏx6]:p>R;g~] y0;튁IJ$ АkttwrwOcн* b6ZgխFOcdiy>g0;J1'B|;v\, ݩ綩? ~#XOOj|Nv5J0(UkTBl=F{X3CWsFoE+fLˏ+)N#xtKB+P< %_-<.Z[R-Q׮> Be-wRyxPj +TP]%KvAևRℛ]؇[.FJBƒY[v~U[XP(,=а^ƭJh>TM}a_ҹ3=JƠ~%TLˎZ2в﫥:jqaEnsrP-.p@Z\dh`[eu `O9lCr i2.SnwP_a\fc!:A/2s.!6 ~ xv7ejט :͈ԕO׏7 jRRy G#'8*)ֆ5:<0mq4n)seCh6H}y-^*k]߆S2oBhX ;S|!# iAPo *Uo'0(Lu41_ǻ~z2zDQYМC]"`O< 6P̜@'d buzYl^Id6XOLjREpeM%cPo4_ TW eQaRܶ)Ar#0tej/UJendstream +endobj + +510 0 obj +[511 0 R 512 0 R 513 0 R 514 0 R ] +endobj + +511 0 obj +<> +>> +endobj + +512 0 obj +<> +>> +endobj + +513 0 obj +<> +>> +endobj + +514 0 obj +<> +>> +endobj + +515 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 516 0 R +/Annots 517 0 R +>> +endobj + +516 0 obj +<< +/Length 1769 +/Filter [/FlateDecode] +>> +stream +xڽYn7}7c[ GE]Jr( ^*tqwo+Zk(E'=93s~==y?9=!OOޝ3D%hpz"jDP&'?\O"[gy#uz2I|#XWi +~.Yݦc# }(&QDZS~s83*%Ruhc`ŬqE1ܼKBLYVl=$U SТ.= 2flޗpV\o]BY #T[#X+6 + +KqXDIq8o]U۴”JcR,rxm#l7}#ܿJalsهz.Osz%ʑi:ݣ.k8 S cUdlآubbUvhċmD8-6뱇6tP&$?7.1vaJfx91y,>gy' <\\2Y2ώ’W’` oQ K*k;4J\6|~b(wTD@, Vyc!K~B_MjyrtZ?efa&4t&90'6l췁o:RSfǫ`-P1ӂ2 Am7G%v4M/Q*ōoxVKTlHVDsjt;0<aѬ@'q˶a:mjl{>&۹xf=c& rڬʧǬ-0x2~  ?n&."MV݅g BhۙC!uU<v3On{3)[{?Lgs G,M $C^a,8Po^:Wh1=Z>t12{?5j㹙8b&1\oAInSP!z$ Kwowݻ"[eˎ87- zPGkv풤5u@I6r n1imZn|=nrp9Gt~n{(Tf@6Q2 Yikk낕a:f41E+n!ZaMQwPKD`lh8?V?0oG I`e$Z<;9]c~%> xWRGb%Yx(N/ Yt{,hb(^[]_[l{.p{WódI Ui>iRBhͫXXijܶPИDp5GALrW&'.Ewendstream +endobj + +517 0 obj +[518 0 R 519 0 R ] +endobj + +518 0 obj +<> +>> +endobj + +519 0 obj +<> +>> +endobj + +520 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 521 0 R +/Annots 522 0 R +>> +endobj + +521 0 obj +<< +/Length 1904 +/Filter [/FlateDecode] +>> +stream +xڵY]o6}vXY~S|tgː&!Pl9Lecw)]p}!yxy2 '?zՇ#1RMǤ.Ϟ4Q.4[>YѸ+%6$dgbRk,P8Idyoki!P{Ӿ[ RrDZS>P9a8Y[SRb ERFr!=F"1 ?(ȣ1J$ې^a1$Uƀ@hYW$Q;,Ⲝ[S )%]r jZp`-3 ։p\H 7Yu 6b4!Z{٪Av/v"@ضv|jH^J9 +E:u']JX/Vb)k+peUj ``Pc + ~lWaj f{:`eyd:{oVGvFIV>\p 2$F +x}s|tz +GىS~:qǰO"&`숐WflkҰ Er@kd](y4fx==OBIƋmcaEV xE^ҡ^{`hydBd\b79 o2~JOo$;]䶍Ȅ.2zY9Zc +G:j9sV9A$hWdXYy:W_2u -j  2 +[Wl\+"Pa B)NIF'? >GZ@@-{iu*K&>^cJZ-xC4AY v6mAzgM=rY0S%Zlc<2ߞ-{~zniڇ' YB^aK4/vwtT<#Y/@ܚo l~oppZCt]+o|X+aQavX`>2C:gY(09kGpt" m~iN[= //NNRWGFF5:A^~67Gɍ #:qtU?|endstream +endobj + +522 0 obj +[523 0 R 524 0 R ] +endobj + +523 0 obj +<> +>> +endobj + +524 0 obj +<> +>> +endobj + +525 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 526 0 R +/Annots 527 0 R +>> +endobj + +526 0 obj +<< +/Length 1658 +/Filter [/FlateDecode] +>> +stream +xڽXnF}7ǤH7{<ʖplWESD,tqI*Βe)R 7 033gg^bz~F?RDhnfS(} Q $@(te[<2LwjG_M=2V&hQBK4oH(D"jj'!ꭒmӱE]I3iϷap$΅3ƣ,œYGwK8HƸ/N1F))Z<&w;B_( aҷ v- m7?M`~QdGOiݜUX-WC%4ib6~S0Q+\RQ"2 s5j׽0s]p"@D}1n %!&N2VݸU;ªOa|mҪG@{TePU՚p8w +%?pʫվW=g@RtVŬ@8E>(*Os[ +r@CիJ`B?R?8T-ekf)aù1bbV@rn^( غ\I+ Zg|@ߜd dpcbQ%Tu'ԙ50R[c~@gPsd1)΋nwz6hXTRqRZ,a=׺_!Br-YhlDSv;ATjnk%UV7{jqg'iCX ˧ckq+|9T2E", NJTKͫ2z-dƶu}Cs3+ N_얰".n·Ϝ|Ihm +~}V!}tevhЧ(\|XJk7&*lMSM +Ğ0?J ޡ?)MռJ=E੸'$MA-pw,N '182Tq5SSOQp'NazYSȱxv(*NZRNݫ2zSj< (\?O -#{.t'48rJL-EeA02֛Y?2zq˩ERF}/H@QYZ=ly^g_qvgJNxAhh`+./'!3pO;z)NW ]p!ّG":S[ȊB;[m)<Ep8#4XYf>Vc\uk#v/xv*IFw'@$`N4~4cxh@V(,jbbCVRƣm1?zW~Ya{Z;ڇ]ء,̞a+ uUQqiJ\ MG!Be=pHW'.ZVendstream +endobj + +527 0 obj +[528 0 R 529 0 R 530 0 R ] +endobj + +528 0 obj +<> +>> +endobj + +529 0 obj +<> +>> +endobj + +530 0 obj +<> +>> +endobj + +531 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 532 0 R +/Annots 533 0 R +>> +endobj + +532 0 obj +<< +/Length 1665 +/Filter [/FlateDecode] +>> +stream +xڽXn6}c[\/ISdv("PmyֶRINv(Y)YSd ^p8<!C}e_>1D#h<> Kj5bEw{4hcTzzd|fZꭠ +C3,l<,/,*t#ZDE,8Cf YU,RdQ1rELC=:ym'e<>ˍ"R,eŽk +!5Ɛ]N|%aJ/"L0WSDY8[  +|ߨ;5͒XkOTbNGY&%R$V}m|\QL97/( p69 "S"Ѻ +쎺frm/a9RBSHJM;a-8Rl`CX?:*.IRE֛8>hU9rb!TY, ekodž~E{DZ&pFjvr֭sCյ*YhI -ed8E1bգP[X*ž *EMg0⒊[|v0XB7lqн`k#Gmm.#ힻ1Zm1L-C}վ: h!(GQ뷇m^z|`e Ql A.?>ٹQ6|lc +P5g;IoJb +7YޞSLʷy*[6?Ddr=<8kkUF'<Kʴ7h24'n!'tC8P:`n '@~6W Pm`wOۙȩ,gKH!8ahf2sjfOgwg)z7(Y>K x~(of=DrJUi *O`7`;P jςgپ>Wl_<S!Q67>}j؏CA􍲬mIr YXFfpY`Jrs1hN(p܂j!lY1'pHs%Ԫ~.NE>^Z':԰R(Oq9vM{r 9+jv1 +beL1/ָ ҷCz +̹>KCendstream +endobj + +533 0 obj +[534 0 R 535 0 R ] +endobj + +534 0 obj +<> +>> +endobj + +535 0 obj +<> +>> +endobj + +536 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 537 0 R +/Annots 538 0 R +>> +endobj + +537 0 obj +<< +/Length 1809 +/Filter [/FlateDecode] +>> +stream +xڵXn7}7cZ \>*p,WESkw]*ΕRl:3s8r////r?/o"4\^%5)c0Tf]~\^慆$ǁ 8RÚrZ|%15tP_p8PtZ4HŠ~Gd~܌? nnF(ڠ0^o-R_m=f%R)y¬:0{7>棩>U=fvpg+"(١ddva b!6YF1,ٿ6͜C>4r²-OG,Fz0]moh _b. +hmF+$CtAz$e hM3[j]BP'n8"%\hf!x8)'̆+vS%9\ka)DlzEjw(2 ;ۖ7?%Q (xAѸlZ󹷛-ɟQ1s=AI0YS@7 1 دz4 vJq-Z%qXwLfpK՛w;?'BYzWF $c +rH($B?®9áo$PAiI/zX1c~\QL9^(vGِnFT ]:cC|o.a -\:hV{nY Xl}C*)6Yℛ^z +( # +(p}Vݫּ7Tzp6Q8JS]%7 +\WIً\BwZzqQ˧P`[zi +pJi kRRnE{N0$Ǯ^4Y8欒_pl#{bTo[NlL4`#Z_VqWjx)ؖ{Z?J}B$jI5"b|;,oVU9'V WV +#Ǫ@SIT:2Q/2#9 +[/z3sTֵΪ HA݆V>dzg0FΟa0(DKzg룎0z:g9S'{o0`^fN +|3(~gųm}, }N |TؠZ7 ;ꛘzOK(&Gvw#8yꌦYu~ںX b'xxx8ZN &ۜL~Ggдvپ\a 6_ SnmygW6 +~(ZDţ3ȕjZjp0OnAN$\e/YW΃I}qm(^'dJs-h&~f_MVȳZmx1;- [ Hs7sC]#.jk:Ur31=*$98Uw!x~tfbG gZE̷Ή(_tS[yY-׎^ƟWxpoI 9%o{Gkm!d<9N]\aSŁA+%4pS\ٖ#Cr6wĥ>_ֳendstream +endobj + +538 0 obj +[539 0 R 540 0 R 541 0 R 542 0 R 543 0 R ] +endobj + +539 0 obj +<> +>> +endobj + +540 0 obj +<> +>> +endobj + +541 0 obj +<> +>> +endobj + +542 0 obj +<> +>> +endobj + +543 0 obj +<> +>> +endobj + +544 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 545 0 R +/Annots 546 0 R +>> +endobj + +545 0 obj +<< +/Length 1715 +/Filter [/FlateDecode] +>> +stream +xڵXnF}7Ǥh7{<ʒP$WESD9l%);KD[R0噙3ù_./fˋ B //ÒZ1=yyџJcɏ`2_ϻ0 /:#$3"96pZKϾ гOP5@E@i pbV).s:W .|L8:RM'EArO(L&'2٫z 0ߏqGx_fLZ,L/.O_aY# .ʎ"Jj7G)z\\Ü e7ksd]3]ͯcVYe #B-Ծա4)B YJ>rUz?*L*NۡI!Vط+ӉӤcVfԤC{NPRNt #,PL!\J,BWMr"YwɮBW#j&Ca)Vglvh-Z4)dغ{c~vT [ +D3jR塏=# CF3Pnx,`Սy7b?QC!%R3n:s#ՉX/#lu-c6G]|K&wZzزɴ`O(d!ғlMNބ/ + +P&ob) +tSG(/Aӣ0 +F@2Op+:p>O{&=ef}ԑٛΤ?O0zV|xX)`Jtvw =G!۷9"}y̼izP +K6(XAk+( jCn|۟\ǟ3ʻ`O.ޢ +M,7ȊہSxW>H^aHf̾zag8w;xTOR-Em +/^.G΃kV_ލ͋۽?*~N?geJ74Eg<[PRTq{_[^Lkg'IX9Z{<ʇWM`mMP &( "Ju2CZvoRE)F}  09}nU`f H,9?pM'vqM ه3߱B>@%|Cx im^p v +].$ib B PRg]@3LjzZtq

uǣA? :cWIW``k&~iJ\>AWDȺ4ܣZt~RC%endstream +endobj + +546 0 obj +[547 0 R 548 0 R 549 0 R ] +endobj + +547 0 obj +<> +>> +endobj + +548 0 obj +<> +>> +endobj + +549 0 obj +<> +>> +endobj + +550 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 551 0 R +/Annots 552 0 R +>> +endobj + +551 0 obj +<< +/Length 1429 +/Filter [/FlateDecode] +>> +stream +xXn7}7cPˣbɩ +vU( E^[[jW !Wˬ򺰋"pg9gx~R8#Tso2~n87$l~ƨeΒ$3U}:6jIvpʼkE5LHC +ω>{Q#I)ҝ'81 ؏&yʒbrhn4`Tra2 ^ݑld +'u*հ)Ȃa5Һjt + VI8͡.bfI&}uV9f \cT9e#0¢3"3R +ٮܻ_ |_UC +PL=% HTXXNaпaQKEjq [86զ; # +CAU#ӂQ%}Gqݬc"a~CBaݼ b4 +8\\ c^t;iژYi: `4 B^$IIM[:Agu7}DQȜ>ų!Sy)t=ސ6#6bpܧ!TE.~L(pK,lH,PhˬY8Uf ~ eox5xU0M3?qI?秼~uF&QD"="nBqLztAݚ kG\=_> +>> +endobj + +554 0 obj +<> +>> +endobj + +555 0 obj +<> +>> +endobj + +556 0 obj +<> +>> +endobj + +557 0 obj +<> +>> +endobj + +558 0 obj +<> +>> +endobj + +559 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 560 0 R +/Annots 561 0 R +>> +endobj + +560 0 obj +<< +/Length 1433 +/Filter [/FlateDecode] +>> +stream +xڽXnF}7_[NU8K( EmT HxRd) Ù #'?=p!cܑTsoq>0OO~2LǛR-[0r2&(ʆYJY?ejy ))7HuI +HxTgz Am-ULMi2}(Iy.hϛ\DISt<ϢVUyK"c1]ߎדq`fp,H?9UY@WbPeaI4 .!ZkMB&d%1msf/O-WYnk ൨~+Q"]n=PwxxJ;[D]{-C^CB9—* +]':]41FF]}oFAH`pNRLFendstream +endobj + +561 0 obj +[562 0 R 563 0 R 564 0 R ] +endobj + +562 0 obj +<> +>> +endobj + +563 0 obj +<> +>> +endobj + +564 0 obj +<> +>> +endobj + +565 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 566 0 R +/Annots 567 0 R +>> +endobj + +566 0 obj +<< +/Length 1538 +/Filter [/FlateDecode] +>> +stream +xڽXnF}7_]RJr( FcRT|HܥDKN" ̜=Θ_././rOoB,]^H4iF0eˋE?_Y$Vm2On'_o3{>]<{n +m]-Lߢig-w$y1MI9,K]e +3.ٙ"|W'3 !ٙ"|L\[0-H˰ |_mCAK~C~~,OKt*!dO|vt|\t䋧$OE29j\b )<l:D&^03w[O7\Ux(ხNP|? {B4arэef+4O60ߡQ*R0|*IER;U֟D6<`xf/O`mXSƐ !'Fv6of5=%Td@`B)'DDK@a%cZAx%c +{m]cx(4/F_c(`R&|Ca{ΐEak(S4y*ohS$vsνPxTkd?D ņJ7 +E^`)$gu')'o24#7>!@Vqd;( mÅMBBi Q3U~r~"}v($$]x T6] [ |PDq2Y!O<@ƵnYg2-|*[h Hse妹 +伉5|wq!ONrHD MhtUfS<c+;8'MDHMYB+=SMw,m׃a=vFq,H߈m\([x#?.K\Rjl49,8zshY)#3 "]`i1?yOendstream +endobj + +567 0 obj +[568 0 R 569 0 R 570 0 R 571 0 R ] +endobj + +568 0 obj +<> +>> +endobj + +569 0 obj +<> +>> +endobj + +570 0 obj +<> +>> +endobj + +571 0 obj +<> +>> +endobj + +572 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 573 0 R +/Annots 574 0 R +>> +endobj + +573 0 obj +<< +/Length 1397 +/Filter [/FlateDecode] +>> +stream +xXnF}7Ƕ@7{<ʲpTRE!(:fKR1!Βe)R( ů_./ O GP )f"M%H-//~>6v~t=Џ(b&+]"1Wzt! 2J$ĀG,nV'ndB 8AI,h `PGǤ>_=!pN T +MM! +jy`k;b[ %TR!gI"P pot}RT CX;>f06X}ԂAFJSHDOz]IQ؂i8R@0+ا$V +;m7(-.Mۼ-s 5eh<}gzw׷ߣfr(NQ2_Kq̘U'zA4{[[y2_%)' meh{ +hL' Pu`Y4|?M#QPٹ45!txbb8ys<NhvӃ4}8􌦓+4qI<_/K=?fhGM#k%\"sJg[ +8`;/ͯT}?OI6qٻ':E<\KD.,4%570X +ơUZ}ȤG=@{h1ߠOR8lROIOWΡsA%õKI9Q/:n֪I2[hŀkK閙@80?T>6)=8+> +>> +endobj + +576 0 obj +<> +>> +endobj + +577 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 578 0 R +/Annots 579 0 R +>> +endobj + +578 0 obj +<< +/Length 1627 +/Filter [/FlateDecode] +>> +stream +xڽXn7}7c[ GE]Jr( EZʒCv$Wk+]3pF zz~rzBS|9=yw!D0,HM'?ӓd+9O) Y>Q ~wNHÑ2)srm2ɶhp Py+Y2]zȿ슬\~=-hkTdEzw{<{WlKk741݌ߣqVeEmQeM1X vfrsG:}LoJ 2`cHl3+m^[`y Œ[_㴘gMǟ751}EU]!b0"*֚*3A{h+)f"acb6qE1<KBLCvk@%D2^*P>#.˽y.a9RDcHMc:GX F.ly +DTP'6;j&+ba,֖9Ƽi=eEh8]U﷿.2{67*1[]3|.y]\S(6ZK3#h7&Vmhha!o}MA& N\R%j6ګm|x~ByT%x\+1qǃ2*ҩK4F^0:q6ƈ"X.4{ (keThbds#/Ja0Ccfz?Q!u :oI$D%(Ǯfl7тP?GëOY]4EU4B|xYnI1ިa0ʛl/rd|+Wuֻ./YW`pD2B` v20\Wd%dCpBʒCb +G(h`<= /g] +^L%,IۧVkBi490!Ъ vx}QmIeN5G.O(ҵePըIs^̇'ⰎRtB*mgDpa^a0Uv71Q-\?h&'(of󷟠||9A>?AѲH F[;/  AmlHJe=SS®6q_ud, <0*rbJ>bm{&n;qWlp5.3XA]>O^)JXԑTA ֕)0ָ)4,DЛ[1[z6D> +>> +endobj + +581 0 obj +<> +>> +endobj + +582 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 583 0 R +/Annots 584 0 R +>> +endobj + +583 0 obj +<< +/Length 1976 +/Filter [/FlateDecode] +>> +stream +xڭXn6we8G$Kqz7)"PlD[[J%9A=J$ֱ/C70뫛A'v}CPV뫀aABRkLꇅ)YV* ?Q#"H +i%'ETKC}\>Ǔ d_J,PX[%Aq5<`V,gz#_Fϓda-/focA/QMaEq4C@eQ 9h8Z揫ϓzT<?&/l@x΁ CiFa\=ލ[lm;zXޠh65^^[痤1sE(4`Ivz6hQn>6>系c*S"[)l=Nmme +P~J0}G04~&ڠSOE f^=L%&G6K%k;$}9%L a9u^ܚ|/E&J/Yo r Y,Kٚ4I̺@YilRa5Y[OPb +>ٲ0?xgTO(97OqbOfV)=Nvk5uA<0̶ǧRjqzH +pgl(NJPߗʋh{*fx0)oB˿jt& )dk؊iwޭps=aʋ='4 A.z5(l2{åۆє+׻֜RVr_[ `EBސ ^|>ŗLBn G cC ?z);{;:OgsaVn޴f2`^s,83T@~,翔mז_ax 'CF)%ag25j:uia&Z'ny%vt_գ~'w /%N6[ۏsb,X΍;@ɮa32<w;rÎ\^2.=.̅* Hq +޲eE,vJa (Ѣ,0#uﷁr;ah"h?p<}j;ѡ}d ,/_Ǩu!KudN[7CjװmM>Mc> +>> +endobj + +586 0 obj +<> +>> +endobj + +587 0 obj +<> +>> +endobj + +588 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 589 0 R +/Annots 590 0 R +>> +endobj + +589 0 obj +<< +/Length 2111 +/Filter [/FlateDecode] +>> +stream +xڵYr6}wIjNQY:#3ڤT# +I4HJ୩AbW7+/wB4Z$Ǿ9  ~-s}5ZJb/Gtr2W(5M CqnBB v$DR nƋ`1N2Ai }4ȣ$F&M%>5a{X{xr<IM$AVs*y>G}Kq,>v ;尛/KX|-WXk][n#+cؘ0. rpF3cR Np*f6xnbNR%^d hC2iXRu 09ZGfAgG ;fqXC:ؗ,%V$tR7Wά"bڶlzFe:V)A4!6 d0LMٵhXUhXѼ>0>b:*.wPlC~\}>5d{NGJ 2>J{LSmmcӺŔs}~,A'!E J|_*Pdw#\sk|)nu r {3aOp`Ŷ;(P "&Ym^z k +kPsRja/;^{!օPЊ U &# zc޹QH8n^ $:]'P4X +_JÎZl/~ʭ#,Bmm;pP&舰e :K!xLnB VzbEVwʼ}ٜLK>B^Z!AMvUC:q)ؖ{W^eڣ}#!ߕW˪tȋ + 59| *Vy(ǔVe(1C攼#xCUȫծ~[G2.[c/{؃#/k]yA{`ʪrZ3qTa0 _sE՚fa}je.y܎d +;0}doQV73qh:|YB,_F"rjV&zuXɶݒ;p@T~pO0O9.f8}KMְxs&}o-a"5;Aѿ=ANXiVVJuU MnkWOnvlվ +k$0:eûOˉr>Ѿs `1q׏ʵ?,R[$O[HYXͦu/d1ܻs4el y:Næ9v\/pibþ[Z#ٶ("9Ρn!:q<7rmendstream +endobj + +590 0 obj +[591 0 R 592 0 R 593 0 R 594 0 R ] +endobj + +591 0 obj +<> +>> +endobj + +592 0 obj +<> +>> +endobj + +593 0 obj +<> +>> +endobj + +594 0 obj +<> +>> +endobj + +595 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 596 0 R +/Annots 597 0 R +>> +endobj + +596 0 obj +<< +/Length 1392 +/Filter [/FlateDecode] +>> +stream +xڭWnF }s?F e|H$XZ.Kj$R`f؂FEKkHwP'Je5 b[* +TmI,m%iqm|P}nhX)U X=g3y]TEH@1U_&W7S7~T '5ƛ4*BOHbZ`,`LNaUah.R(- c}~9QXN֏AIpMjvDp D򖾘o=V嘒JtwnHeS"--3en[ }UTR?+h#itM[Jc&3=9.+gdf[`]-//˥[!z):=p4jۯUam(Zy3 +[s{7YLLiQ/:~ zG `x;3t*?EĘܰ|̾LAA HP-\->v?]fzmߏ!oo/f^5 Lh71݆|P:/>>w󻛸=8т e6oT߼7 \ V6c<#|Or ~T +Ppt,<݃<ѡsW# `~pNM/V1+ey )kىh R?'>n1^nz5 f~+ EQbps"Bݔ%!.N\*#? endstream +endobj + +597 0 obj +[598 0 R 599 0 R 600 0 R 601 0 R 602 0 R ] +endobj + +598 0 obj +<> +>> +endobj + +599 0 obj +<> +>> +endobj + +600 0 obj +<> +>> +endobj + +601 0 obj +<> +>> +endobj + +602 0 obj +<> +>> +endobj + +603 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 604 0 R +/Annots 605 0 R +>> +endobj + +604 0 obj +<< +/Length 1674 +/Filter [/FlateDecode] +>> +stream +xڽYN#G}G1޾_'1mVy2/df C{.51f25֧A~9=y?>=a$|'_NOޝ ˜`d^`sV=tIbLk]9҈QF!%1Ed"*dlMMlwF[J[ioE\WI,Fl9PUHZD,[[a_VPŔl| ¼bMVUB=- p+J@\_^HZ\FFyRB@%inbDy$(Pس6–B e΋S>J V/9 dɁ:blYt`kY|0M^(it<{8@(zFн4Jӎ\^}X?Bpx3Ի<+g<?Nz UU]p,B~ {0XNi<#}( +2INz7dSpf`/8Pc7wq(4tI&J,^sBe ك1<z;{W3tx??{ʐ3{~oB;zL)!!UQբrKiq' Q%n/e]QcM!|6vt;+)wTs0`9BAq4$ʒ8z:3C!5̱ s\6bo7p}O㿝{T) ;xxJyyp-z.u5R섖G[,]ؚmPj`GR>\U`a7$-ڐ֖a#^7|ąTBv Ȓ nD%pb |*PċB-"va魰/m+tt^uLI!f}sJ{ [`fn)sQ^Wd:ٷSAJLma+![n,H=P|xP¢W4 dņ"lUjt`nƽz\2E^!g#VrM{Ξ2heJPP-.pbh*hO>BTnۘ]KU0^2C7x.QMlg(eԥlOF jN(;ge +/Bj2xָߴa:۩_! ѕ)ݨڕ+]_-Co,H&2Ijc1_Kendstream +endobj + +605 0 obj +[606 0 R 607 0 R ] +endobj + +606 0 obj +<> +>> +endobj + +607 0 obj +<> +>> +endobj + +608 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 609 0 R +/Annots 610 0 R +>> +endobj + +609 0 obj +<< +/Length 1922 +/Filter [/FlateDecode] +>> +stream +xڽYmo6 -W8օ7Nmg`(%WP6%Qb/wX <>$~]_de/W7B $Zj#2f]_ f{@bjB=L&|7=܍(^0Y#(Nuľ*,H΄PGa{l0mWqD0 7Qe9 +Ai]% hcb>&6φ㧙eTF(EyaR "+ LdUE ~yLgp4C__{kheqF-^D6/%k-/I 4}3%ÒAJ9My6Eڂz gkK\J*8.rZj%lh7[kOam;`8]’ gBjXՃaM$,Gt6B"eEi/? ^*HjId +ZrPo[O.>=ƞ{@]#nKaUzKE+4|qV-}R(ܳl]dX[[b)Z|8_-4Bԃczbi[ZVkGVՑ{TUV,ID>^U$Ӂm+Ļi5S:_Џ`p; +t|B<^j(-Q~1I`;3%-6-¼(Nv|&CLG_pj̔>ӐQ]mCtgj|] /m..=I&(2|KN B;=TWj[;TC8> lm IA"\۞rɋL&Ґ3<o@= endstream +endobj + +610 0 obj +[611 0 R 612 0 R 613 0 R 614 0 R 615 0 R ] +endobj + +611 0 obj +<> +>> +endobj + +612 0 obj +<> +>> +endobj + +613 0 obj +<> +>> +endobj + +614 0 obj +<> +>> +endobj + +615 0 obj +<> +>> +endobj + +616 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 617 0 R +/Annots 618 0 R +>> +endobj + +617 0 obj +<< +/Length 1573 +/Filter [/FlateDecode] +>> +stream +xڵXn7}7c QTc( +c"Q:3Jr6 g"A{y{xyF ;?{=??#%g."4_ %ib1Sܢ#u~6cxw[40A!%FH)KJ]v+!Eh>9tHe;ѧC-4O-~xng%qFK9^8n ?q: )h-B(.ї$`K,mkz0%g)3L,SwhQ[^)gjOp{} JHY0Fi,y<ˢq'RZ *$K؁Y~Ρ줴3R.¥$-? W[jg+K^h_aSVRKQ^E8{DYn*VEnhq")5NWV{^ +1$ڸ%1? gkb4WK Uso@a$PDZS~Iq8 j/NܘHhߏ#+fWS%XbZ{TICD/Ylf|m\bk(Ek4k9n~X T 6m0&(PAu5FrUQ|'Fc`P>rpC(PjA5=!Z +(w/A|MiT>BcXV YJ-Vbs;jU+#IZ*l0o{ 5QjTK< lӓ& Ge5 `LQ2`e;l>L|Bq ,-hqvx6&=,.MFOOQ~x{W1}}G(q5;0Ch{I7Vg#v%K3%Jl;dxq}Q̼w:v<]&Wܫ(&cp`'R="z)S9e39Ftw™՘9)O2E xU{N1 |8ղA|˥\ +H&h)YE~Q9;Ei++8Yp߯Eݥp2[kM ])'xwH׏/q), !z8/thYݝo7$Aٷ03p_η Bk+^f`M L|0*U? ?ie  ܀Z =*Is;|+Bۜ4ૄ=RT´l=k ;T=u aجrh~$4KלbeYs8v-M<{$Vl[롌j 7&=FU,D^Z,1:^NaZz9Q`T_M$X)HY=~5V\U|&5U߸/[Y5+- NVWX) +=S> +>> +endobj + +620 0 obj +<> +>> +endobj + +621 0 obj +<> +>> +endobj + +622 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 623 0 R +/Annots 624 0 R +>> +endobj + +623 0 obj +<< +/Length 1716 +/Filter [/FlateDecode] +>> +stream +xڽXn6}c[\^%IxKEQM'jmٕ;e+Eġ!C./Ɨٟ-CP G֘*xqyd$NG?./q-9s9ɱ#O1SN +IL[_u0M|nҖzzp0zwϽEKƋAQ9\E ajfxwpKϓ'8.z` -tk22 pm2(L̞&A]f%ahq1UL`2Τz SEk`1Kv0e^.i^ +^ +sC.б>&D2-Oާ>DH"BL6ťl +7&'669BRbM6@rĐ&І&Ln4 lzEY D.8JWV&~)Ht%q)Rxg? h0l%yee)ؼ A X嵨+D nzjr{ K2's ܵUF0(͒(~+P[uk'd=~Np0N~׿Z  5UVM + Q)SD%qg"A %=F`L(1 +"x4ˬ IA6b/td{#).պ E8ZK@Ue_@ibVubT~HdP'\wJ@?h) z`հ +BQ67F9e!TMyL±`u=.;b/NTV`UP'.*N` +lCo=PN%nn!- z-*Xk@?}% YšJ6tt{^6O,_V|5LԋÄ6`SvC#:1R( 5Cn|/bv|5E{N|QSIˎ=ߏ9ˇ +*׺R;VXU"ՊzRХJF8Ҷlݟ2}ޕӷ\d} ~=A{cS ߗ_ %4{{tQ_4]A}9&y'81Aczc-'L<I.3޼hv $$ֹI|N {t osvMDϰ|$0,Wv 'sGe/~0*s_`\3re@bDm/(3 )|z~Q |AS~>f+yغnbt\)\T#.Z1m&{wӅ SCRq=*)0{z DZ?04`endstream +endobj + +624 0 obj +[625 0 R 626 0 R 627 0 R 628 0 R 629 0 R ] +endobj + +625 0 obj +<> +>> +endobj + +626 0 obj +<> +>> +endobj + +627 0 obj +<> +>> +endobj + +628 0 obj +<> +>> +endobj + +629 0 obj +<> +>> +endobj + +630 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 631 0 R +/Annots 632 0 R +>> +endobj + +631 0 obj +<< +/Length 1613 +/Filter [/FlateDecode] +>> +stream +xڵXnF }Ƕhgg4G'q^dԗ-d{u$Cˑ[0dUl,Z9X rqcem(ϡG TmF+!ŹM!<\&qlyu +Mmcf϶Ҿ*kgXB/jR`"Q@-ʟѢ2+HuClQʭ:IkW?x1o6/Ga뤈s(9-15(\Ѳ$ǜ)\x3 混ɾnUTHL̞2[8dpxY@, ;9#ǁrዅ|gVD+WCTsԝ 1JQ~30Z VH0 e`LˏI)cJ |_>CP)|)Gϊd_Z[ hrM!\Kt+}9 +ubBjl4b; ( $>d3Z 3aHa|!={b_$" (d 7nlWl[%$-|>fHJRj)&ث*1՜ +v5)> +۱bO7sHǠČTjhB{NPR{CV)q_dԹ'Ϫ.=HhW6Mv7)V:.!7KyK68ldJln=8WG)iy:ZǞQ^\U {>X&E~NW7\ݰSF8ЈC.+*@JkRzv)n޵^EYf-C^w%g@C` ?|Ύ;?om|)Hl_9fbI?-䌞W~qh8A +V +iS^l9&Nh8O#sn0LVLaDX7Tpn奬oW:{pˣ3.L}lexW4@<΢L}f8wz/YnVXD+a`16OPW8Fp,RU0 + +ડCj3 > +>> +endobj + +634 0 obj +<> +>> +endobj + +635 0 obj +<> +>> +endobj + +636 0 obj +<> +>> +endobj + +637 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 638 0 R +/Annots 639 0 R +>> +endobj + +638 0 obj +<< +/Length 1355 +/Filter [/FlateDecode] +>> +stream +xڵXn"G}G?c"%}\ +˜`d(A5X0ғg?$_lE>{{7$CВ:$1NQʗ,r4M6w.d4%_wcJy¹C騇Ċ)NjZ:=gP!9[Zqf&OL䡰Xl^CUUi'R찻$m얛3ڃ#-a^:%۴\ǟ3F-s|#g9j*/3T2!:dQ?ZS+<'9'ޗI)ҝO 5c`c[C ͍b04YgrEyukƨpRgpNVd ?uu + fDXm8%Z̏)pmƘCES*ɤ/6הּe.O^ּ߼r$T(V{ӿG8c,Q^R- ̓YrJ%z+dNbs-3*f l)-6ߢ3η%>lBX7x1 +-UM4k7208\֣n䧴$̣K^) ,S6__m\M7.{xL6O$fIZ݇^p{v0ܽ /ڒo0BӖS&.Bqo&_ :~RzMUtH!Gewx=WÆZ +bp|[*!U9R Xs> +>> +endobj + +641 0 obj +<> +>> +endobj + +642 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 643 0 R +/Annots 644 0 R +>> +endobj + +643 0 obj +<< +/Length 1227 +/Filter [/FlateDecode] +>> +stream +xڵW[oG~G?cZ_ `ʵ]600V~How]J,#t3g}8J+!-7ÁHÑfS&@}G?t++U~wχbx5L'(ܠ{rq^mp7va+P#jk;Z8FVCi9;4+B߮W \ 9E\;/aM*̸4{k,9+ +dVE(WK8r*Zfy c4A(t.F!_>AqnA'cD>VIx_v)&ū(<ʗ,&2N+ѡYO>F Ț !p} 6\mb6 ,?U*0 +`e`VC %P %.jP寿 hү.il%*֚*p.%0ΌP +XF +y+)2 1;T1T,^̃lKSg3e[mK1 Z@D:L-}ꅦb-8Rl`F:J$˦Zp[ޫU1BձX)U lY={Xn{ƹ/I3m;vr3E`޹WGIaYXuqUiREVUI_EhLX4!6طPƙj,bKCzKa)^?n0~|-CcŔF&+a80┶ZicAyKazvr-ղw̔Zi½1#}#Lsj]ńciy)\rpX(bxXŧqr5W7vUO٤.[s: qߔV7zra|+$RS璧oP?‰UY^XG7.4lt\yhAZ\ {68G'XC +,' + |TmlYiIR7uԴ)ml2]F7~L>a-\5u} +-I 7yzB +b4X_[9Lĥ>?حGendstream +endobj + +644 0 obj +[645 0 R 646 0 R 647 0 R 648 0 R ] +endobj + +645 0 obj +<> +>> +endobj + +646 0 obj +<> +>> +endobj + +647 0 obj +<> +>> +endobj + +648 0 obj +<> +>> +endobj + +649 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 650 0 R +/Annots 651 0 R +>> +endobj + +650 0 obj +<< +/Length 523 +/Filter [/FlateDecode] +>> +stream +xڝn@xljIkGڴ8'T*]L ^Vjuf|-8b}C} `L0H6q$* Phr!G/:Ry{_pm:+ ªވH^pbe *i:ʴͫ9G~BV6y`SEЮ i،MǼuYٮmG9 i9∷qB,z']ZkEpJ;t9flo~T!ђd#*@ t<.c Xon $:zĐoc:J"I qǶxmOG턃pn5Cì'#"S5,x܂~yhzA FӴ)Qo{!)vb +W +4Jp!fPkGJ5'`҆BVP{y ˬW\Z._Ov}y;_|&QY=8SvTǣ)TLj;Tv9&T'xPendstream +endobj + +651 0 obj +[] +endobj + +652 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 653 0 R +/Annots 654 0 R +>> +endobj + +653 0 obj +<< +/Length 1644 +/Filter [/FlateDecode] +>> +stream +xڍKsHwevޏ@IYEز] .oK |s͏wO? "^3D5(}`ØFH,(}#Z=?DWa=ZL1cHibfGm'0'_=z/z%2!|Kn 3k՞XW. &$զW57s&=d`2YxNQŔJQ`112F +%G&a6Is)M3/$S& (dl)K)\S6}H +v/h 4M Or +ðڸ_Gݗ 0NGxHe0K6Mx6fI!9H~ +I|ǹRqGl4nB@(Ǵr=q`r$As*̵=y}̙40=n(ry|q.iAH|phj2~ SHdzt6M$B%iModGtgIOg bi6,Q, (f<@J}hQ%3D1fd J̔`:V&.Y|6JjY4yA| 2C0LMV`#AGl|U:,_U(Vt]ct=PۃCǰ.כ+M;}\s\c lozT(h<o\GSӼ|BS)1XM:츬^/M+'%Azb]_hțr}/^ꮥ{F\ JbN80kW[Fp)qj<HI[ DR{I,d]r>JCRQ "*ć).* d\OP}bDMQ#ὂCb1E;ė C>B:qꌺQɿ. >&\.3@& W[u_Aj 5F.F) >ŸeO)Ұ(Z@i\ފ/uxjqy=8\VbB8¡ =0И[,:넆lܸWŦ| ZՉuc kВڷmnS(.nj߂[t_~`q{CwJWN`-9\tcIP9l%k%K {طpSs%67oۛE^ +; $nN?R1lv9HOű7rz nhBa#=Kw'$3679?}VZ{BzTd"sg b@59󬖌YFܸ2:l`>5GgV#bPFytY\t!ҽEL [>5_~ym[b^rMn7Z HCҢeEb4zGWg A`Jv%_DS\Fш}4=)ڱ>՘3vҝ zUN$pxhVgJ Ʒ׎jpN(=fR7M/J̗moOũR8%JU +L/O(Xiܹ%RKs S9lML\;?-Kendstream +endobj + +654 0 obj +[655 0 R 656 0 R 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 662 0 R +663 0 R 664 0 R 665 0 R 666 0 R 667 0 R 668 0 R 669 0 R 670 0 R +671 0 R 672 0 R 673 0 R 674 0 R 675 0 R 676 0 R 677 0 R 678 0 R +679 0 R 680 0 R 681 0 R 682 0 R 683 0 R 684 0 R 685 0 R 686 0 R +687 0 R 688 0 R 689 0 R 690 0 R 691 0 R 692 0 R 693 0 R 694 0 R +695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R +703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R +711 0 R 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R +719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R +727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R ] +endobj + +655 0 obj +<> +>> +endobj + +656 0 obj +<> +>> +endobj + +657 0 obj +<> +>> +endobj + +658 0 obj +<> +>> +endobj + +659 0 obj +<> +>> +endobj + +660 0 obj +<> +>> +endobj + +661 0 obj +<> +>> +endobj + +662 0 obj +<> +>> +endobj + +663 0 obj +<> +>> +endobj + +664 0 obj +<> +>> +endobj + +665 0 obj +<> +>> +endobj + +666 0 obj +<> +>> +endobj + +667 0 obj +<> +>> +endobj + +668 0 obj +<> +>> +endobj + +669 0 obj +<> +>> +endobj + +670 0 obj +<> +>> +endobj + +671 0 obj +<> +>> +endobj + +672 0 obj +<> +>> +endobj + +673 0 obj +<> +>> +endobj + +674 0 obj +<> +>> +endobj + +675 0 obj +<> +>> +endobj + +676 0 obj +<> +>> +endobj + +677 0 obj +<> +>> +endobj + +678 0 obj +<> +>> +endobj + +679 0 obj +<> +>> +endobj + +680 0 obj +<> +>> +endobj + +681 0 obj +<> +>> +endobj + +682 0 obj +<> +>> +endobj + +683 0 obj +<> +>> +endobj + +684 0 obj +<> +>> +endobj + +685 0 obj +<> +>> +endobj + +686 0 obj +<> +>> +endobj + +687 0 obj +<> +>> +endobj + +688 0 obj +<> +>> +endobj + +689 0 obj +<> +>> +endobj + +690 0 obj +<> +>> +endobj + +691 0 obj +<> +>> +endobj + +692 0 obj +<> +>> +endobj + +693 0 obj +<> +>> +endobj + +694 0 obj +<> +>> +endobj + +695 0 obj +<> +>> +endobj + +696 0 obj +<> +>> +endobj + +697 0 obj +<> +>> +endobj + +698 0 obj +<> +>> +endobj + +699 0 obj +<> +>> +endobj + +700 0 obj +<> +>> +endobj + +701 0 obj +<> +>> +endobj + +702 0 obj +<> +>> +endobj + +703 0 obj +<> +>> +endobj + +704 0 obj +<> +>> +endobj + +705 0 obj +<> +>> +endobj + +706 0 obj +<> +>> +endobj + +707 0 obj +<> +>> +endobj + +708 0 obj +<> +>> +endobj + +709 0 obj +<> +>> +endobj + +710 0 obj +<> +>> +endobj + +711 0 obj +<> +>> +endobj + +712 0 obj +<> +>> +endobj + +713 0 obj +<> +>> +endobj + +714 0 obj +<> +>> +endobj + +715 0 obj +<> +>> +endobj + +716 0 obj +<> +>> +endobj + +717 0 obj +<> +>> +endobj + +718 0 obj +<> +>> +endobj + +719 0 obj +<> +>> +endobj + +720 0 obj +<> +>> +endobj + +721 0 obj +<> +>> +endobj + +722 0 obj +<> +>> +endobj + +723 0 obj +<> +>> +endobj + +724 0 obj +<> +>> +endobj + +725 0 obj +<> +>> +endobj + +726 0 obj +<> +>> +endobj + +727 0 obj +<> +>> +endobj + +728 0 obj +<> +>> +endobj + +729 0 obj +<> +>> +endobj + +730 0 obj +<> +>> +endobj + +731 0 obj +<> +>> +endobj + +732 0 obj +<> +>> +endobj + +733 0 obj +<< +/Type /Page +/Parent 100 0 R +/Resources << +/Font << +/F1 751 0 R +/F2 752 0 R +/F3 753 0 R +>> +/XObject 99 0 R +/ProcSet 750 0 R +>> +/MediaBox [0 0 612.2835 793.7008] +/Contents 734 0 R +/Annots 735 0 R +>> +endobj + +734 0 obj +<< +/Length 577 +/Filter [/FlateDecode] +>> +stream +xڍMo@^&;5G6*d UN(rR)JMfμ%8qY=~L2΅d82H 8z|ϊq {CiVx><>&.ѷiҐn5fI&,KsF:H* R؃ҭ;Ȗ̌@&2g(IimT5?^Nw"s&8qNHXPB3y'y?Q%^.ЁFM%Gv+?cnm;)KV)s\)KQˆ]_1W(ZUh]3 +B`WGÑ.)‚ٶcT?ʟWUY`HqZ|?,w8҆@֗#YfHNc~3aT8-PSE/_XM2t*r 6(r̐okq=UUs0ݿ2`5ehSN]wx.MX>M'+R .XHNW[ab WO#aupDRʄJ mgWendstream +endobj + +735 0 obj +[736 0 R 737 0 R 738 0 R 739 0 R 740 0 R 741 0 R 742 0 R 743 0 R +744 0 R 745 0 R 746 0 R 747 0 R 748 0 R 749 0 R ] +endobj + +736 0 obj +<> +>> +endobj + +737 0 obj +<> +>> +endobj + +738 0 obj +<> +>> +endobj + +739 0 obj +<> +>> +endobj + +740 0 obj +<> +>> +endobj + +741 0 obj +<> +>> +endobj + +742 0 obj +<> +>> +endobj + +743 0 obj +<> +>> +endobj + +744 0 obj +<> +>> +endobj + +745 0 obj +<> +>> +endobj + +746 0 obj +<> +>> +endobj + +747 0 obj +<> +>> +endobj + +748 0 obj +<> +>> +endobj + +749 0 obj +<> +>> +endobj + +750 0 obj +[/PDF /Text /ImageB /ImageC /ImageI] +endobj + +751 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F1 +/BaseFont /Helvetica +/FirstChar 0 +/LastChar 255 +/Encoding <> +>> +endobj + +752 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F2 +/BaseFont /Helvetica-Bold +/FirstChar 0 +/LastChar 255 +/Encoding <> +>> +endobj + +753 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F3 +/BaseFont /Courier +/FirstChar 0 +/LastChar 255 +/Encoding <> +>> +endobj + +754 0 obj +<> +endobj + +755 0 obj +<> +endobj + +756 0 obj +[107 0 R /XYZ 230.1367 723.7257 0] +endobj + +757 0 obj +[305 0 R /XYZ 42.5197 729.4939 0] +endobj + +758 0 obj +[311 0 R /XYZ 42.5197 706.7178 0] +endobj + +759 0 obj +[314 0 R /XYZ 42.5197 729.4939 0] +endobj + +760 0 obj +[314 0 R /XYZ 42.5197 657.1125 0] +endobj + +761 0 obj +[483 0 R /XYZ 42.5197 642.3526 0] +endobj + +762 0 obj +[314 0 R /XYZ 42.5197 470.3586 0] +endobj + +763 0 obj +[319 0 R /XYZ 42.5197 584.6804 0] +endobj + +764 0 obj +[319 0 R /XYZ 42.5197 264.7766 0] +endobj + +765 0 obj +[462 0 R /XYZ 42.5197 367.9809 0] +endobj + +766 0 obj +[469 0 R /XYZ 42.5197 530.2436 0] +endobj + +767 0 obj +[349 0 R /XYZ 42.5197 674.4992 0] +endobj + +768 0 obj +[305 0 R /XYZ 42.5197 657.1125 0] +endobj + +769 0 obj +[338 0 R /XYZ 42.5197 399.6334 0] +endobj + +770 0 obj +[327 0 R /XYZ 42.5197 317.0927 0] +endobj + +771 0 obj +[327 0 R /XYZ 42.5197 141.8988 0] +endobj + +772 0 obj +[349 0 R /XYZ 42.5197 400.5933 0] +endobj + +773 0 obj +[349 0 R /XYZ 42.5197 225.3993 0] +endobj + +774 0 obj +[536 0 R /XYZ 42.5197 524.9784 0] +endobj + +775 0 obj +[544 0 R /XYZ 42.5197 706.7178 0] +endobj + +776 0 obj +[582 0 R /XYZ 42.5197 524.9784 0] +endobj + +777 0 obj +[588 0 R /XYZ 42.5197 562.3902 0] +endobj + +778 0 obj +[608 0 R /XYZ 42.5197 578.4635 0] +endobj + +779 0 obj +[308 0 R /XYZ 42.5197 729.4939 0] +endobj + +780 0 obj +[630 0 R /XYZ 42.5197 706.7178 0] +endobj + +781 0 obj +[622 0 R /XYZ 42.5197 541.0517 0] +endobj + +782 0 obj +[359 0 R /XYZ 42.5197 459.1199 0] +endobj + +783 0 obj +[359 0 R /XYZ 42.5197 283.9260 0] +endobj + +784 0 obj +[500 0 R /XYZ 42.5197 645.5525 0] +endobj + +785 0 obj +[372 0 R /XYZ 42.5197 653.1607 0] +endobj + +786 0 obj +[372 0 R /XYZ 42.5197 477.9667 0] +endobj + +787 0 obj +[500 0 R /XYZ 42.5197 330.3641 0] +endobj + +788 0 obj +[372 0 R /XYZ 42.5197 178.6495 0] +endobj + +789 0 obj +[382 0 R /XYZ 42.5197 653.1607 0] +endobj + +790 0 obj +[308 0 R /XYZ 42.5197 657.1125 0] +endobj + +791 0 obj +[504 0 R /XYZ 42.5197 304.5576 0] +endobj + +792 0 obj +[382 0 R /XYZ 42.5197 170.7674 0] +endobj + +793 0 obj +[388 0 R /XYZ 42.5197 641.6007 0] +endobj + +794 0 obj +[531 0 R /XYZ 42.5197 645.5525 0] +endobj + +795 0 obj +[531 0 R /XYZ 42.5197 249.9976 0] +endobj + +796 0 obj +[388 0 R /XYZ 42.5197 107.4339 0] +endobj + +797 0 obj +[402 0 R /XYZ 42.5197 154.3599 0] +endobj + +798 0 obj +[388 0 R /XYZ 42.5197 282.6278 0] +endobj + +799 0 obj +[408 0 R /XYZ 42.5197 472.3885 0] +endobj + +800 0 obj +[408 0 R /XYZ 42.5197 237.0504 0] +endobj + +801 0 obj +[308 0 R /XYZ 42.5197 555.4676 0] +endobj + +802 0 obj +[565 0 R /XYZ 42.5197 610.6101 0] +endobj + +803 0 obj +[565 0 R /XYZ 42.5197 231.1285 0] +endobj + +804 0 obj +[417 0 R /XYZ 42.5197 589.3659 0] +endobj + +805 0 obj +[577 0 R /XYZ 42.5197 259.5376 0] +endobj + +806 0 obj +[577 0 R /XYZ 42.5197 645.5525 0] +endobj + +807 0 obj +[417 0 R /XYZ 42.5197 260.7145 0] +endobj + +808 0 obj +[429 0 R /XYZ 42.5197 706.7178 0] +endobj + +809 0 obj +[429 0 R /XYZ 42.5197 383.1695 0] +endobj + +810 0 obj +[429 0 R /XYZ 42.5197 207.9756 0] +endobj + +811 0 obj +[437 0 R /XYZ 42.5197 129.2391 0] +endobj + +812 0 obj +[308 0 R /XYZ 42.5197 453.8227 0] +endobj + +813 0 obj +[603 0 R /XYZ 42.5197 291.2802 0] +endobj + +814 0 obj +[603 0 R /XYZ 42.5197 645.5525 0] +endobj + +815 0 obj +[437 0 R /XYZ 42.5197 304.4330 0] +endobj + +816 0 obj +[453 0 R /XYZ 42.5197 729.4939 0] +endobj + +817 0 obj +[453 0 R /XYZ 42.5197 657.1125 0] +endobj + +818 0 obj +[453 0 R /XYZ 42.5197 390.3962 0] +endobj + +819 0 obj +[483 0 R /XYZ 42.5197 177.0822 0] +endobj + +820 0 obj +[453 0 R /XYZ 42.5197 119.1666 0] +endobj + +821 0 obj +[495 0 R /XYZ 42.5197 489.4486 0] +endobj + +822 0 obj +[520 0 R /XYZ 42.5197 706.7178 0] +endobj + +823 0 obj +[308 0 R /XYZ 42.5197 352.1778 0] +endobj + +824 0 obj +[500 0 R /XYZ 42.5197 729.4939 0] +endobj + +825 0 obj +[504 0 R /XYZ 42.5197 626.6834 0] +endobj + +826 0 obj +[508 0 R /XYZ 42.5197 508.9051 0] +endobj + +827 0 obj +[508 0 R /XYZ 42.5197 169.9991 0] +endobj + +828 0 obj +[515 0 R /XYZ 42.5197 443.4507 0] +endobj + +829 0 obj +[520 0 R /XYZ 42.5197 351.7384 0] +endobj + +830 0 obj +[525 0 R /XYZ 42.5197 594.5368 0] +endobj + +831 0 obj +[531 0 R /XYZ 42.5197 729.4939 0] +endobj + +832 0 obj +[544 0 R /XYZ 42.5197 208.7874 0] +endobj + +833 0 obj +[559 0 R /XYZ 42.5197 319.5919 0] +endobj + +834 0 obj +[308 0 R /XYZ 42.5197 250.5329 0] +endobj + +835 0 obj +[559 0 R /XYZ 42.5197 706.7178 0] +endobj + +836 0 obj +[550 0 R /XYZ 42.5197 441.2287 0] +endobj + +837 0 obj +[572 0 R /XYZ 42.5197 513.7148 0] +endobj + +838 0 obj +[577 0 R /XYZ 42.5197 729.4939 0] +endobj + +839 0 obj +[595 0 R /XYZ 42.5197 594.5368 0] +endobj + +840 0 obj +[603 0 R /XYZ 42.5197 729.4939 0] +endobj + +841 0 obj +[616 0 R /XYZ 42.5197 729.4939 0] +endobj + +842 0 obj +[616 0 R /XYZ 42.5197 633.9925 0] +endobj + +843 0 obj +[616 0 R /XYZ 42.5197 267.4532 0] +endobj + +844 0 obj +[637 0 R /XYZ 42.5197 729.4939 0] +endobj + +845 0 obj +[308 0 R /XYZ 42.5197 148.8880 0] +endobj + +846 0 obj +[637 0 R /XYZ 42.5197 657.1125 0] +endobj + +847 0 obj +[637 0 R /XYZ 42.5197 302.1332 0] +endobj + +848 0 obj +[642 0 R /XYZ 42.5197 626.6834 0] +endobj + +849 0 obj +[649 0 R /XYZ 42.5197 729.4939 0] +endobj + +850 0 obj +[649 0 R /XYZ 42.5197 682.8458 0] +endobj + +851 0 obj +[649 0 R /XYZ 42.5197 612.9434 0] +endobj + +852 0 obj +[649 0 R /XYZ 42.5197 543.0410 0] +endobj + +853 0 obj +[649 0 R /XYZ 42.5197 473.1386 0] +endobj + +854 0 obj +[652 0 R /XYZ 150.8227 723.7257 0] +endobj + +855 0 obj +<< +/Type /XObject +/Subtype /Image +/Name /G1 +/Width 1275 /Height 1650 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Length 171350 +/Filter [/FlateDecode] +>> +stream +x[pa$V I^:wtMm"B˛hO\U+Kw/: nkr؎ʅn +Bk7l{zMDmWaZ]xH{HQ4[Mb +/ jږ+V841 !niR)UJ 6z aɤrkAa + 7L](vx6y7,B)"#Ub%*։dXHF E&*%ɕE;w3/e'U{yg,B}2ثJ}ҿV 3,, 78D" +sBF8(e4'y%,^'/J-fCONwV>Y͏K"W4}pE*mR"Skof:KDxq\)fjdM啺=ʙXHu&:LލթzkFz[Ϩc,"Ǧr¿ۅ/|8*]w #]{WÅ;CIYX +ojt)jN?J9a[՞_ݿއ CMM;䶏o\M&#w?Xkݛo.-fhà tv(廊]MۇM; +<9/ة8Kv p"I +VRHn˨j3V*ԅWwg5]U?~bsw[Y|ow=iۗu=r}rYnrzZn_鿦4M^_-7d}Kouw*wom-޾/_:䷕7u m~l޻f#SC`Unkv:'ܯc-s!Rc}e׀7Om`675f-޾o?7-nztԢO{~!SP/}( Mroh4j&A=C>8r2A1eݡgp{g{hgGG47(+Њ|F l2߶)L9iR]0Rb*p_;Xwחڶso +uQ9)fyi\Na6ߌDb5/Ǭp]XU24Iqvb +ۈfnR;Iub'x{{R^?>vϏgS:ou5[S?{97^TKެ\ߛ 7t1cS:~BdlЫMrӞL)ݔm 4rlnoN%o=mOu3ݵwxNY+8.+]JR.~EFK9|SQ4'Bv#HƑBcW7_Fn{ζ\eVM}TEɼuEB{fnY_2[%\VOPxұ}_7aOL'_9+^ۣS/yB&N~1/L8qʼniӵ`2NS/Ha/G'_|ibʼnwt^^ىɯ3y_LejM "1{M]Zrp]]3R3L]]j#{gnX]w\LԼGTguA,u>y`O֢yQJ ҬTz?V3sYqv^gm:VBs*S7М-ߓ2#gg|DJ{nB6[5Ipvs$TR{uuB~?XZ;6iqX}C[ܧx\8wh1ֶ֭%mR9x[ MQsipkr2h 7[jA!_XUAa>_煊.mUj6QyzwUy` J@gc$;$`6&3݉fH^@!$$~C81;~>(*T})룺N;Eii& oܞx%gcsOFqsRgccIK)TB"Œr.ħbSĉXh,y$M{YVY8 +z2!  q#foN~tDuLT "TZP#aӃ~Rԁ +葹.iQ Q(ِ ؀uSa5>vWm{Ĭӂ9a"^⋌i&@  +P\)Λ,9B ,^y!P^͉:gq3o9aZ7!|񧛗m]%e:Kt869sXǏ_N|q$oG7s81@ C#HOW-fލ ኆ5m=]vӵѧj{G+"H#ò74Dnh_oﯴWmhyC ")-km]>1XQ穨V} ^:׺Feֽ__P]RhCcO%:Wa2ԟuu`PۈF{)o~mnqk_X9Ǔ@ CxEGחS]EebZ:ڧe]Z[i`2~#0^.3-ˉזv!g2 +393R.š:C˴#@zʉd:X#-BcFedOEN#TS&ĠvCOuhҥ5ӭ]Jв]yQXx|Hy,ҹQl2SN@P㵝/^@ '5ۊ,M2GU~-Q֏B%dtPKuWo)$WB{N-Ra v%ݧZ*f@]L*0 I +^ + /ffߤVr. +ʏz>=aJʽduԡ5S&~Syļ6hplxv=0_بLoavA=@ +舞RjjRiOwݍ,L4@ `x[ob|ڴWt}*?FR#Wl^zLeVD5Y66Y 5LK2vղl1 g~5+fsTM}au詋V6-e{ߖs͢%'pix) *'%3y-\ OZ$q %@ =/2ΊJ [AJ+ +Y(fԼ5]JJ$^8K%Œ% ޾?8&>KĒc.!r BХājyx4~|tؕ-2gy1 %}A%_A87/>ySƏ8?zS,wRCNKMJX@%tcRcNQb)2>+E\9G,lQ(Ӝ l|sm)7vo2ܢ͵߃_02]@ p?]~Y$qq٦/^O t~(3HXMT?>;]%$<#qx4<. Ѯ+XG&ext$8:/#X#G$Bf-r鳢qtLGcE +o'ϷAy^>_a~`p(K+E^@ p^X_S:Ll6rvMطf9Abw+ϓp>΋r\6M "/[AAal.ljb& p(cQbZiW4vk6{{~9%w30,Ϣ&3p; @ Y/}=iNYh\F  W^ؕmGhvq.? ̇{ɘf@ p?{^c|VBm*MoO^Y\DT ++Ap +Q-Dz6(ֱ.VSN-QQէAiqN0 -eP%a:[nAfʽZfKm޿z-/;'W?/3R䧶fO\C>-MBޫIVe y` iQbd,s吳SՙfSkqhhRMEHCws+xx#gJɱyl9x2|fPE+ggq'0;E< ;D_ɸ;Y)<瑿c]*q&@  ܂ŶOHZ{+o-WφWøaߧ0-ۭa;N ۮ+ұ]jڡcZ:}*OW>(n%[ RB(Z,az}J@!QQ^#pֶ~|F,u+׾n\zNN T:_|lNHsbxblupn` /Er$3)qLYQT+ +<7[wѳg%^LAVS]JKkskq-+m;Z_zoR5Nmy?u>ɺp4qw?< x&n&;YXԂ!sqa5fQ\U @ `߼elKc O,KW8=h%X +IyCYkթ3͜l̬: +(w{~~k'kw~Cc:mc-I>{̅+}`{]l MLǟܸY6>67aX¦]X?uϢwYADg[\imWv]{ +JKq]ʽ,K¥o5|z^_7okz3M6uyVK'3)nHp!wp߄8߉,u9?1?1/~sAYҊ(:ݔzOcP?.1_口v=B˄ u.aI".YƯ/~_wf&-]gp\6ih:}u _l>u/׷+.^smW'nN2+g'M5?Ai"zK{1uk3Wl %>%.߷ 0H5/7Y|VV(o#,40u)FU= +羅X%;u +Ώ&yEA ]06l' +^4j҂yAsF +2ϹDz 9rRdЄEMZ|W<|ԫ49w*~!XEuDd)fohǵVƮ,e-շն{MGWevC\b}s=VdAd*/^=/FTUbgO.#׎" lee9ve+0<7xsl@x_aa|- >L #+W/oۯu"' YFe,8ڃhd'A]Y|CVILbaL}1 bRJ?o޲7KߙWm;i+ܳӮ)-۱Q;a= +q"E!h^Ygo@08/Acɚ]9ӬƘ玟l\G 2Jw^n6](^evB[Kh\{LLQBW 5'Z6}L|-aV YV Hvؤ8 qđMNmynGNlam}~zHl234D-Qń_ 91w襎)<^M"t/L`1^HFL ^U&§ +)Q a'V|Yo-̐ğljLN0۾]v-vWolUtoRvEͯbj˲@{ώv﮻[wA08/b<*nWtKAEZG mO)z,z$ZnNVZPGR=~WDIIiQQwg9v끆=OvQ.~MRI+몑jRW&|9[Boc^sͭ{ Z@[SWq J2.ɮfXuHgE--"WhKA ,;N$D0K#&즓e,->cֲ>fkqzޚ7;\D'ڈ( +A)xErQ((²QE(C/Kx@GUv3JX f71RPj>p*?ۭw4lgtp&t)U%'և*W!0ҽڪ(ڧŮ`ܽk]1v6XliX{D`ĵH9梖[WpO~:"e?iޯ>XZAYVay -mvƺ1cۄ!QhziTR!B .l0obI^pqGGʶ)oֻpbm v%f2֕L"]U#amj`QWN䑩_?g HwB"mX8*F徲ٰeeaˣrvZ(mkVBnjdfDWb'w|̺PNk_,|2'<ⱕOy>lƒv:IF91ffxN)65#pi` íXU]V*wWkE=oʷUXUXmȱUlؑWAvk=UlUٶʜ%篷Mᰒ*hP}ڈ;1Q SER1̕Nϫ`~x MXhf}]BC-x๣\2ޮI}}M_ o*^Xiz9ym]֡+s*Y˷Uw砼;fQa>{/ Uk$"Yrb'aWYvШ@sTei@ZFF\QAj2- D2/ +y6>|󮪜Gu }U "`!o1 jƄ *=E>[/f466UEy6v~E!hlTY)b;mgG{ڮ`WZ&W_>lQ|Yw7PCk}ND1s2c c"wZ%&x,=e{WxxWD}}f)߈;ͫ}&0='_Sr4pp*[(wG/'$Uգd6UH.L#/FjHj~᫆[V[VWV_Z}{JO"XG#҆e I1˓˖kbWm>ا);:/rӉ_niaWaA_wz& VUVTU {koC+-u)k &N͓e^TYy;hk\kʙo` K w'²'oq[Z0V~avSu{[9Q7n3.`p +^[A!d,ª$)5jm.I-Idj2Q+v$u\xdcѱu<>>iNHbgN2ʼškJ;_z喃>fZkN|2=3eo*yM;g_|Cj; Tm +X%{h9z 4A)3nĥ$ZP18g`ܼ5tS Hf^YR?Q&+Hľ6,ѧYy6Q4Zƛ*aAT+6a&?}Իĉu Ԋ Qzx1 )b:V2 )F-  +Y12tЕ/4)ftq象ύ,׼(hQ ☐G΍NzLRƛ3>g-1-Ή[?:Gy4"JQf)MU@mK! ō@.%b%>/I>G2 Yz|ޫW1!%!Z J 0(_,1/|Džx\E5N/R R,MoMR\.A^ !-HiQ81ORQQQQQQQQQQ-%*ں n?:ZrZ_96֗oqwirr껳r{3#gDEEEEEEEEEEu2/$ylm4*Sl9`dfRIfwD3s5IQ[I oǿ|,EO$Gi`xpz4d\YB,! KخߡԤD mwhX|vmg %(z!Ik%0IJ2FflgMgxvp +< +~rT\a﮲k=0 C•%P xYɊeDhy@ +G0ST(O2xTp9B&h]#<mA Sc5$䇳lN8 cɹ,~KdG2H2?JQƥDvDb7cTWmxnkeq@YtOQ, GW{Wk̦V .)پ0n3 SqtYD#}>4ni*=p|豗+~sɧ#U +.&YT; xE:Dj]!:~~NJ?_3P(V`l͎b\l%C^iQl&1J6Sɒk#% &Cp-0@8aJbHŐ݁RE_ ud@C$ !  0 I-0ш4 [A d 9O +U_`k@%S>J# 8tii4%/@1I& N _"&Q$B.pK֝U*XJjKpF5D}s.'<c 0[Wb3Y&QZ{K:~{FNTf.3wtc82Veiciol+CJ*@\TC&Ilr*XxߏAx }3.i7~]Prscau}$`ktͅW=kE}G[.B4и|>O^3մ.oGyݏ&-\rZAVǿװ#0`!ļ^)l5hx=_0Wgl{10tmYg^N@;47j A C(XͶ) +Vș|3Q\*OHHK KȒi"5Yr6K>͊VeŨcT9 +UV熫"lMSJ&U+H&[d}fBfo2C Zbg**e~ /z}-7/\5KϬK]FJ\AdB.8PX$)~z8g&g@==) t {+{l\C=֥3)ܗpGlY]ג^-9ЅxLj4ţII+=l 'c0_}WR֯'EܗQQwp&YA`#ko+M8ꉯ\qpU'c@QE x=ܿ8Wg<@,0< +9Tx~?.ТU+rUyl#'3/T;Wn^<#zeMt}lyrqyw*ig)W59ѷ. H!i! @/"m]=\SUC~cI^Zj5ޮ}m{sV@ `]ԵZ $Hm룺jWv o( !$IH H2sg&i Luwgw笮E-WBH2sɝ!g)gydνwN>nڎuEwsg>ԟߓBfQS}AN:$ f(/l0] G^ImQWo'Fgc yB&FLw:4u1B'%%%%%%%%u /š*j{ +==D )rwwƌW'8Ƨ\;Ξ;ޑCxmm8[x0',^4.ԼIoޗ}#K)r`p1}/6oo^ 6D. gdC[g/U=㖞pz`nIo_`_G3]U-}yS&Νj_}=-%+W?mc3f>Gs_-Z5a{]cEeU;Z*v{'s{qΙOVxZ6+{2^g3맛6lwUykwwmQyN #ihRHjL:{EC(tH<˱WFܫG lQe1}c6dùݗ$:.]QZe({cMyiJIIIIIIII%]ПZ4bOU= fA(0M}.{9K':W,Fv IlNt¹zҳnN^01-71mti7ϭn |{>SYoGzC`ZWbKϷi܅u GBzws^  ǒI^9 Q/m۷ٻ½ƿѽ{gc9^oVc=[TW*-vYow۶.*":toݛ 4SUU0p %UւLY2Z%9Jܡ +WޫW^~FdB_$m])@F#U#1^N8l`,1.nB PCϊh,(E0\k hîbg'rwz(Pz +Dd/(J' +ߡߛyߔݳ(uj˟{nW;m7Cr(ȯ.o/٦(ݦP߽@is\bߡro杍C==Lk==5͗`LJP@xX!^W{1uՃ0 f0ltxdR%ky-gy3L\b_4vT,J@C{Kc2z>ѶoԤj{5xGQR<86yfჯX\oSl +~O^ԍ0W&iw[ 5 +eyBiڠ4z[ʔr`ǩnPVVVn)WZJєR 4(V%,I_i '-5 qN4Is9"ؙUJ=%J#޻e힆-ӈ~6LK={!5H`6tl:0Bl`!An#ax1YCFK0F*fZ'>D'|ك +4B]18׮}6֐1qt^ϗ㱀J\}l$% (k~S /,XŹ$|ҜQTk+%%%%%%%%u/I1Bn{6)$ٖ'ٗ$%_Ir̝;%}TdiڮhZ)ilK'͟\7r$IvD)IE)EE%9'M궴Nɘ79cQsEw?dsv﫬>g! +W3tFy@°g]^S)%}|z̧z3?eNs8OCO%-A:a@`a 6y| e_ab2Rϋ"&fx 5浘#;7bb`L"<_>E[idkݹ:Z_ +b:lD.X~eX=~Z$g=]6#)~P 4`7#dl$NмfBo ѐyW11F$%jD 03f=}k/-It١Rcusqҗ'8VtZF}$ 8gu7;֌K5.Z*9޹q8x{V-+XssF95qoɾ F gN '1myƳk?<;'?SPgwY\s/ݻ`w V ONhmLi\Ws&ρMަo~X^.ey<u`  YB `Hc{XgK bA +;A*Ru ?jČ.`ee/Б&} ~1{SFX0U£% cj2)F]ę:; 18C2Px@, t]cln=ũx-ȹC=4$-6 %D-k@^= a":3#^v<!M61p1sj<̀$Ɏ3XWN/\\\ ;^s,dG[5z#kBF-y;/fB^?8sbNMqvM9S+x!E:w'oS=AD?:rvVe W{'t/f<_?Ou/M=#t>'JpRp'Q\)1bLm^$/у@DCTSCp0ӹ;!.̀7s43qG,fȎ6 ;P,:1낭n:PV,@!HPXbI[&R[HUG+g3-kqXTjXE=UX]E p?s pµhgt+cd5'M/!לepnO OgF2_sґ|/*V:@^m+W]OfM睏gMvɼ+.o+`Kƃ3ё3ѹ.Ι}ĸˌuq6WyO4P.\s:(lWb!Ic/住>yOXu?jl4w-{:{Ք9ٓ˧V*4 1 +YskH0CXLDD iHa3M9oaW _R5(F g"7(y)4 A}bm$q-B,6pkpc^+Ff9Hƣ3[0*:԰`ߑ1FedHkZX/o;b"= VaD}To:8UӴ7'p7]p I/|>))))))))x/, _ӋGݗg;aXľ׶ :o:?9mY̔ٙ)SRW%HJ[bmycdDzII8!gLILt.5c}Ϭ)j*(U^?Lχh0n!qGo|]SY|r!xG6* JʲNϟ$!׉wd>`"(&c45gfxaFcQHT:#;$pXӓeWi<%b#!le8b˽SMA1-` !p5xDunɪ"XdP,n@ɀؔ<ލADIߐlf0[,EQ&ކO2/AD2A +5qHZe0 1JvkFW8P!X0Ο &l`lULސ #`2e`@p]ICb~m{J;(԰ jzjzyvv; ܁|O O *#ؙ<wzoWAuݓW: +wxrž׽ DX`Diq@H|ż0&^@OTsLi̯i+T:\6̢_ꂎ!M[ kW$@~t)c'̀ty0 Mև)c %!vsq ^#͔fGZLqx#JU¯*N@6ݢU+M{RRRRRRRRR7Du.f"ڇ9D/RB/`; ‚Ǵ÷(zicz? D7\瘞 ػ!14R+ `F10a&,_J`z +/[(dң'44 rW#~n?sϠ1A[_}0[y`H_-E!UNR`8&nPX9J dcQ ? ?,+ 5jww;#:LLpdvy8ak(e ޙgn7bb\7zv}֧X0/,^Lc@~ \f)))))))))D@40RuW._G?dQ[W`!/^u#Pu;;r9\wMt%tz;rv7}R ; +NOoB9:gԊFq*ccKj*Jw@vy(z]뽝.OG-wW:=.3s[C /%4-mO4 Ч6ۼבWzE[JK³%=ڽ+jZ?V Z* pN t!P$R#$8"kmkֶ[d!Ù]ϵ?\[gŬp>''<VvtC!YwRmMXs`y-g/>\]@Mez -**-?]ҾWbXS]RPT^_m(ԖjkpB ^#]\v¦Xб3k&IkDSb8 ![3wNr]*B.Ǥ:9!m oL#" +wO#i4rb麭iŻ)|nS,IB] n#h~C{2"-I%k'.A2g| LilIL߻25d$"xT=rb[ +@*S$ASEM["?w2Gygun%s K&R]eUYOZv*O=T]r~wceh.>zhuIC/k(>\=},\,*k8?}sުsچM]@[W[&S**w[BEZjOo­jȥsߨ7%G>_Pv@Ӹ2P[O[GN+]pVeV|xNF }ͺX٧=eUI{ D;.SW6oik+j4 55+v=eSjbJv.; _垞ڣm(,ӜۏnQYGwOwF,;{J5C` ,;dtb O4'uOye'*jhihA'zt{zx@$2G7ѐfNӊ%˶eZiR$Nm#5Zk%VʒǒqBT3Xh̀`AJu'r!pX+rk4Z%BOV7)6D$MQ\LN6D{пPܓҘQo/DÝ^i¸&t@cRF Y %DꦁǪ[Ƌ*tj%4C[Ф㈍]yӯC$4 µn[@Mg˯vM NS2 ~n͖vLϭ XBUMsGk.Fxn[FΤ~x;ₓdm>tPȐy..-(i~c13]ӗ{L(',ufiҷ[;gL;E n-4aaKmNk} 4u}/t:gyV{}H2Ch'x82X6wΣ>Io'%!^e 6?6-]iReFu&tzCdz.f?><%H*2 +|xBTkT:8*#`*EJD~J8#=3vE}OP5/, e Aeɋ6S>a\vl$+Ƌ>KË4*Wxn~[#֒Ƌ6>)9T&ᬀ=fʄ!!k>C*р},~fzr/v L&7 +3S4(Ebm]FR86o53?_Cd)lZ47sπ}H~)˃@G1D,eW N"j8vaDžS #hl/ 3T RP)|=; &І"L3-L .F?mRD2hVK%w0c $DX+3Y򏺞1¹'/boФ9S!p~6Âٌ2Ќ &xE&u֝bTuG*gKW͝_5uheS~y]w^kjK?|v < LC t&mi{w&Q\g +'Bw7Y4I'AB )@-!!8.oeek502>sH#Љc;}{*⪥j诞hzT}|rޣ怋=q7}'.w1mxD2h% ?\|7~~z~t}y+00/ +_`&#U`ĂħDC6&سxEFA +j@U2gVMkS4YX!QmP;fϯ^>dРW(zA ٰޔ_ui 5)EC"(fƒ_G:Ɯ%-݆|+ Yc!łHd50kshqG:Մ40\9o$GAʏ> )2`Eoʘv*e7EK:쏟g=,L?_G"]4=6-~?XơCp>2{)n\dę,H<3-S`cqZaVXaVXb*n?~8cCl^|>^Z?^Z $HyIL_7Y/D7EKQhWIkm6Y(ooz4#ݥQM|XWI41<,U4;J"e%rD `:#z&/s,MX3U I&8WxP.sns%Wź&NqXWrCPu7KyŒE%RG UC үzyNHzz] cťc>*M" =yڜ \NCjS}M]cp`,r<VK4Am.~D7UF}mڏ4SN[w.PK (,(b"ja}YiWoO)MX,g*e*2KAH4DSFtvB=) +nU=7lH}h{Qnsֆ50WU"U)G9+GuT.W*B]m1нWYks4Bl\1]⪎s]էS, T6Bac>ysY.ҵ1B;Deare\"ׅ9@+*]*7F8+c3=nЩV$֤]"\(厾QR{QJPo!`J#g X`^0IM5 ZZ{CݫWTp sC+r+qT<~ JEXXz0i*zp?Ej#Y"] QIghAO?;t܂nu|?߲$ɪ|t_&FihO ^ax'r~| +6ܬ6 ++ ++ ++D͊ew0{3JpGE:UV'HU뼷!U8"RkgM"])WEl9qDJM|Fm&WE:ݕ1iehwgؙա)?] +B@ +&1s,Sо?pvTY;N ʱ|/nLz8זqPwm1Z*s,.{(  ETAjDa'8פnbW%PM\"%Fen> ꇂقŠɏde*h9vXdTu/Lt/NvڭZhE8-ũsW^5r ++ơ5!n~>ɞE;oƩT5r,GBw>$-߾C 06~+i#)lEc< &FS+hh7]܌gVV*sI +Ѫg.A;A5P,|a̡!ғx&3kskkc!C^: ?]AOnxOUUljhب4g\vo©JXdVXaVXaF`"^=)婞Uos+z1}g5fg5dkf^㜂1;wUisJy͉eQRyTh C[B\6 +owG2BdNQȴhgٵ37EZ̈a> ϣ焥*::!`[5]5]1u cqP"<&eVO<FK b,%I$89E@`^$t. .ti&ZB9ϟM3}ȈpLΫu.}3 +tg.:{G6"w$4^rd{$B"aX`oLtj{ P/\hw6E@0pquȺ;u2`ָ@w4BzIPΘ-ޞҲ-_T@ÍO҅&6Y Wa#L`s]!NB9?kO]h[X%ad.ZE)2l=ǠORNq۟{}"20(V .9=ݻ ů&5q(): + pu.Į>dgM*Fb`Tu@#Fm3}Ck'YF %V!AZں1FrOҪmZ  EPb.԰J3YrAnyaKeUYaVXaVX@ <1#膵U +ULA ޝ`Я`0+,լ&9eK{KԢF[VGvE{^tzKyMf)_gT yU:P.P$`EtO6+BFYZ⣐].sO̾2%cp=^X=Ѿl[&X[A 55 vq:8f,(lnvwkOS"Aj[5Nu* ض W::;npEZWh ΠY6UTsW5f +BKga`Z($ccR3?"-X]39}pۿ.xo 9 Hنa2??%u9ogHLgWfkz$>>M{w8omB"84=@86㫷vx9ſwH bJ89Dx_uHKs>F. /x {ԙm)BE;ڋ^sVkڪ EE.*"3ݝ>;}3U}fۛjQb3V A +$XD䒐s~$g;}'圓'~}*9x()^kSvҽ/6ɒu+]}tu>>Xy n8QBr~q_L\s֞I缫N+}dC.̧**dQ *ďɟ~غ&iծ;s'k-K>ֹWɕk~'hTEHE>)ӿ~:0n.>(lGz6+u\1/~`ۿsgf*tC:tСZiq+xHkUA?j䔍IbE\ZmX#V 0㧰bR6CO)7&IlvPn+LFI猓*cmF[DǪI Ƥ1Vċr PR]:z\`ArD F#AI$ ueZcZ!23& 4^r"32^XĦQb2 FA;`̙0DBԔ.57ahg )XR |O tK'q8QE^zk`js[v:9c{Ph7euMRVBЊVVugXpfx'\G`EEU'!?kt]svX2ωD?X^ٕy2?rU@:tСC[Ejڌ&DE -<0W*H2Qn*h:b,FkU:숷8 -&d2M驎Dk\:R\b⬥ByPijӄHks!]j9vh#$-6g I; +jyC5傏GuR{ۤv-2j>SM +/1"؏h׵L6QRbK5"(RbsuWxpxi4qGTV䞟9t+ZEP\P,&aYQl-! :$P0[ 7%(<;NV_13iԵA<½0Mg+6 K2ok^Z嘉_%ZY~w@z0vgЏsɍw-qǯ^yG]a/&{_8`]cb}i{D{,؛Mk:SjQQ۫Gv⥁.wT4{Y}W[Z۰8qQNeY{|t?߻ȇ_.ee=F >DB0経K6H\d쿽w_ ^SA/; eĝDWك*:B(j}=d-w~_/PݥY:tСCǭ/eb^*-psUc WXݜ՘+=kgc읶1Qcٗ.\eiDX[#0 e +wRcd2|Y["H&?lmقjAD +n&6L"H:2oDc}e(TSDʠ;Ց,0 e.DZwGYvG[vKRLAk#Hm+Z#:BESSQXs +a/e-^_!tFʆ *g*Te+dޖ -L}$ :fˍngf99|qՃiAZ<'`B(mh][ou7{9v{rAݫ/zHU_v9~X!a@dCgZn17)zO=moKl>jH+ +\2M8ϻ Zq ]/%>;Igσˊ}ՠBe+`i[XEBa }+*:u+%4%͝sƆ֣#X.@ +־88 ^p%7UCp8!*{ wfJޯ^?ym`-\СC:tq `w͋0 +@0J(y[~_G_;de: ÝkNu~G=vK2<'ސޜq_V&G0!lj}e/ ]ZNi鱍;1 >c +V΄ogb&$/VE2<5 lK|`ݼ'~tS!Xiۚy5OV#_LBefj;).Ά&=:tСC`)R"cbaT!D|*|px8oკ5?hi p熷^Bob}Krv<טӘגז1fo[m6{K9ޒnߝ'#woF>v˷ø7=wz5;;;-d4ٲӳӳ4>ۼkPkS@$do܋Ui6؛Z-k[MF$[{ךgA.V!AmXvwzvӂew)2ϡṰ+nzL%TrAN5ؠNVd!*kRe1y'@p}8"v$ӭੋ {F쌒X"ۊ~>H+!5a޵;y~0Rqc??@yI8lsVۋFآHCCٕ}oRyG,˭{?dU`a0M勝}鶷OԱsgw_n``o&s[mћ*}hgrf^qsa^{tСC:t*R k^`Y;Ҍ#'L=R =tSzug5*vO] n>uN䦬DQqhx7TU{bd됉N +^Ȏw`ĈmA +7IVIHL%#%&_  Rְ5Ƶ*=SHPDZ)LU*AKB(K6#KT/<Ӷ]%;U LhL/YYu9BgOo|SLT@kPV0ȋ! XcĠ,˪=/ gry8);\!燎]0̄y{HZ)WkiJv{oƩYQ#yV7z/a;h'TNS/@7ېÈ be/v$IN;쳆t!1.Dq7mxcP(|eEA![ }#jDToi֡C:tq މ%)`QH}.v}tsJ)'Oϙ+WgS8<taL]?r9fR@fYV.@.Q}"@HMg= :ۻz%UC:KL09DY={UQP+BsH#v],(\lfѸ:7`<ᱧAZ5+`%#0#0ˆ%|$A/'YTrSUo8c3/^e +יӬ8j#!Hy220?>Yp[>dEK +cC^E}DUt2 +d||Bg:*3c8rϸ{EL ӻ{x@Љ5Gm+ڻaP#{58N؊ I/\~xw{W{4Հ4 x1=ufؾza,-*})OO<-oXOe tU(:X + $ ³ 2 $e0@ǒz{mֽСkO~O˵u;cm˷;8 ,֖] nY;H& +¬@N+ۯ\ݯdUӛglG GPAl j*?'X3Ӿp}GԱ ~֭M/ z0<86=-?bpsWdk9w%͊y9?\y4WfVm\)T; +"Gy& ,|Qkvhiך3/7yns5FsR #\M#),*#mَ[wQLit*Mޱ\Q,=7{=pGs-&&f35Gϝh׎?Gc +mšƸwjd03K4CͿB̅G҅Weh@hJ7P LKDW//|`i6@ +b6(9ʒDM_UϽϽxX95R¡kc oc +x< XX0PF(qZA5*AC^!:3Ѻb`R@+YEf1hzE9Kw{w@[%v ԆI[{[s֏?>9v g:C~+vbbE 7/v2[JՃRz2hDQ@PV?BMfLoؙk'; }*3]dV WeͪxcP +pj#]eܡW!Q0aFaF@]C{:Oa"`I&N@``'<Ȩ.bºWрnTҸi@HB\n˴ܤj-V3uQ=2ajz)iI [Ant#OzabZEՏ/{vm1"D*+"4^^pVNW5㧭I&/lLzGlytat:͓7<2}au3YW>ކCqh0 D%f4pK7{qyQOdu?U*$7#0(`P)*EJϯ}C4eNQ( +4)Ժ%a5-0ζv|ʆ67cxM{7`i*<6i.& \ݬȆUBqH3֒# Yc{~xJO ? ++Aߙd&43!*=`и}'~;~9 jDL9q6ӞDVFtXW匥7*Ҙ=i@( R=?e'-?bbJ^z98 K#x0& + SD,Zg{EU;n^瀟 5#0#05u\x"0Z +'D`IW$`RdBQ"%CPy- $z}b{{tǞ#;~W}'O IG>}߇[l]ou tP*@ (|Wtlshoȇw_/io>zmϑ]{?8]P$@c0!J2C֯ ^vaw524F2!See"V-?{܉3W&/˽ +,W9$p^S1(~CFp2"sb= [Hk@f"ZOU_ے{Hb@psK-(D&؏?{YV@:haL ,siB EfSxncʲV[Q$Wz7}Z *z 4FX ek&V\Ʌ_|}6 ++jAX걋=g)% +pyF]O0#0#07 EJ +pkB;;Ϸ_>={=;wy. U! +Q䳗.9 ==>wXgωޓ6w{$&spѿR0?: <^@@=3ֵ˟۾lKH gaq靚n}͓\: aیۦ', +e, d0J*I[SIHk-jj!ˬ:'j+N )SG +ׇ}p05iEA D2B?V=_eX P`E ygމ M7f~ń:39-h VO~g~!`ƙv9+Ec"$ 1\GO F[ԥݒ)(%fD' 4OW[AJPoNpUf'=*jp L3(&A>I5 X +l:p1ѰFaFaF<{i`dfՌ̘ck~$+ţmmyz gh[a2ZgOL. +cl4⸪8&V>,^iUD*Uti/ebYltp8/|A8mk{Ub` ŨU-(`MQ>'"-Npn%Q֢%1QG:͎X>;nΚI̕;{1Щ/CLX])ûȐԠ +eo)~!70r1Ik=g_]9mYϕk~]cE*ҿu'#geDK[lA,iuz# ?f#K?V C6"71*RJNvz)pP$U)6be %" D <ݷPRdrA 2|ϲXd +_Vc7P`TM8!/+NtԼHw@#"F +A2r3.9_'ܐT@jw8@.{ۛ8'7uI/t/V>&9uk ˶g}~+w׵[B19݈}ހ٥޿ttv=+3=ިj9j&]=dWxRy4yex1 wvKtwU?v~ ^8Zov5잉F?ŐRT֞Sm.u aּd9D-{)[)۸Ԣ-m]wG[TC]a^Izkj&8r!Eown&)Ws-/*UW=0e\B<qυ?6<<1Ww9\h>k?\w^]sȝfqӻh~׀X$NY200000000zI+~cQL/Cɨ +RyoW\ 2E:CN$!!`z7A|z>oiQpTnpa1ńTݜ`Sv9n ukXBLA97Xr_o.d, ֗F549%("Bg<NxaƅEY +Y|rs!!C B" LцNHX_RbIʼ(@1L*$$@«RG;w*)&퐐 +exKeΈ#iiaa0cHì0ψ|(ӗ.B[[Q*YP/$1qY渜?L\}UIY4ߟp^ֺ~}nNKgۄg%dJTzcMQE^E 1ڏ2i)nI% eQeNO+_Q%Bv +HMZw_D=17⑅ys[t>~s&e\%I%.2?Rf|d>.#ƚi1N[,o\lT5:pBe>E! jSJ)1ef,ZSɅƔ"}rOf?̐b +(HLXs K E ˆKnοU7qZbq; i݉y16f}}N1'Ę; 3 SjX3/ "Dո(HGb=!폿X+:?7.HPCΜ7ؔw)P˂Q +Zd}@SocGy^K٨qekBd j r+aO+ +~=㳢}7* 0aRķz[K@(m>Y>rEï%/<hg1TKjd(ehDI>MLN-_+1 I\, +k6zIj +V'jRjȇZq1+yiQ 5}JCWj[zC064&̒2(I*\RjJ^nL}8uUt2q֬>IWPDՈ]cj>+ɲ prob޸ŦB}R>MgEeDF (B"Ӄ"҂3׍ynpTzp\ݘ'G|{K%Ӑ5SAw)u Xn9pmQ7EdߗNjLح$"iV ^ Rܧ} 2:|4YA#viPzP۴H5{~GWt*]{E*V; Lګxi[A]2RIxgѧWO*McfJn3f c,J :Sβ$$vIys.`!/HO- XuƂA!"x!?Ę32/||שE '+I*N59ቘ9>NUnBO@(-HDQ>枒f3 F[%,׋nA…9_9׿ ttSsb{P_/v:aދe^yL0+kf`````````JN55ZU״ԶW׶nUGZ2p,mmz[8ԝ=c<#UΪ5h9zXKcۅ.,w#e'mf``````````dQv*2d~CS1VqչUX323M٦Kr%)DLbnk^5ϒ8Ј.$,7y +br{lᄤ܍7`^Lxe(gZ$vER!\, ,3)cE^,0/xju)S^OJy31mkқ4Io$Z_OL$+7 aq%޷/.;U'& uS8mJad KNQ謬7UGXK)8֢BL9 7tk8:ك`8G/eAД)$Z-[UKz.N {ax!twd$'9ssr\>ۗWt.rH7p9;`OO҅;H ^'9,pH"Qݟ5 \&G>3K`Fp0RٰT7*ByD(EVދK е#,3-IoU~au-tQC2ƣl=ۗ:?pT;ƒx'g_/ַ>{-$['KF~i +nK +39fj- +Og! nE[4 qB(TdH + dQ"Ow!z'[2@YLZa2Ϋpdva#7Uʞ20pTEF}{U2/8"cE=\\ezx`?4*z^"2$$T(D)۪[W`U[ml۪n-IJrF! ( 0a@!K{Mw:s{y QVbY!w[2\=?\J?</D"H$tÚ`7ʻ $Ώf[5x'*GHe:XVd'*^pĤx_o&蜕.K} l&e?9wP[e?kW_=LO빌+sXx:?"jWt*f8G˝#3g;%X<ݻ^~~W@ z(`ƽ<=]l9Awzثpt:3)>~H$D"HxE:*dOwM.zi{`ġ# Dc`$H@4 16L)~wv6=2p E!&`y=љ΃{ ttK0R!S`"=;Zsv=a ak'?v8Ǡ#3)%-p+-ܗYt꼎I꧶Y I_/xD"H$D"IuQ(egΐe(: \oʔ1> 9g, &c/\4tkCSϽSӜ{ + áSykİwK-1j^ɨo|롟Toڤ1~/u]$cBz +xN'?{ +JV{A7:u:pter6g^~A JF1n13Ǿ>Ke+4^Na/:)і&>qEɛ_<`YQ`tHxU]cA+g q cE} ű:FFmKodؿ*~2j亁>{䧩S`: ]ӊvf +bm6Nӛ'6l*8|*8{bp]{ΰݓUQaUpyQq/c?eU̚H%xl˼9MZ'gMO*Ca8rj렱"رJ?=,?=XJWLEwnYrm@]5VB!>}}™ziLӮWj 4&]Ǚ՜[X sǛ^50VnDB<9"c==[]e Ë;xpcB<9 ExT\^55(x4mri&H$D"HW*,{miaWyez MmjhwjɸpaۖPhx:IFj`JtDA5jL1W Vfk3ޗ~/f΀f+< =8fjpRm'l -|tܲ}gOB4-K0]21AG h߻sխw!71Pc 0c~pvBBD*֌ׂq-ThhaP{7eppU.ԝ뚭A$sDWqm42w>@qt/D"H$D2iՖIgS:U%c7vX X-V[&>nbdq0#ա:fl*̄PVl|wlWCm`*w8 +e&L +x]U›n( +DYϕp-`B؝D h;srZ΁Ypہ-apE\⿔\l:R<:6HxǂsWShhǎz}5u,= -Ӧ$ݴv=7B}ĚK 8Y`k,]JBKC_w@4c8ګsD3UGL"H$D"`~%$5/MG~,0*eCK˪S^,Ծ "MXFZQVAƀ#bDhk6a|Nn\ "l|'48)㼊";;{3bG@9h};N<ĉ~b4'#ct;5N>:MP!Ҷ`#=5SǕB*L@c]tշMu`U~I)c +.vnspdL/xf~[gDN5=l?w >4k) +q8~ji +L8~怽X<`hg|UPU ) Xq߻olX vU~=2D"H$D"]{Tl;Ȟ~Ij* g>i }v^27GZX޻K#;i%S:x"QW <# +)6`1#8)a ?1yhtLTM'á}Ckbʕ" +w6cdoF>y9209#nbA@c> D +#\y`q{wat6قLDvX~$`v4l 3miSܷNŌG|ˍPj﹋.2DQ3Ѥ +C˺.Oס?pР}csN+vѶ=cZC8 Y^M"H$D"HW^Ff6Ռ]0V+?3xY\3#[+v+2mmfR̅xl˄ +fl\4qv |Զ ++ƒ廜wsJ *]Zg? $Rq}@N’gzl*@$*-GL]4i TK^a2wӧ{b u'6w!n([qp KuYg ^ۑxlӫT+ܞ7)?x+S+GؾXf@7\L^pX8SӰmݢ|x8~ +fρd +g.&%H$D"HW._HiaTb,,_clab< u8 b(V +PSccF%TJ7 +:lVkwu/\ 5`cL݈90B H$D"H$>ߢՒspu<!9%5;Q ^5(Yb&dj'70"㹺ɑ}Sׁq]Di)TCC jk)p3XmV;4+Z㜹%qs`^ġЯ5rK^P-j۶sر +p +6HV*h`AY5n/U5vhTNY:0ʿp"}Sc^ |WXR/^]EXY,kYY.XX F! +$ ܕbPTٕ I͑x;[w6^}aȶhGk8-57>;/<rOxt(8 otdj5Z)/n{?qw>XS|۩ ~$'(Fԛ_75>||uhhF譓z= >Uc]/忸8P jŷw{]G/9;vTѱ5+u]ܵVU2J*xbveBؼWn~W{;|w}ռaŵh*d\kt4G ~ּ57on62ViNVŵ}||iGmѨxx=߯n|99س+7yؙsDͱGHT^࠮ WVoS55k?Eߝ]kLTF>WC94[G?q{sXs[BumN6J (lL5ǫPgG_nD4ww_^llK2/Tܱh0:<ͶEw׭6͗65wnVNj8գnۈM݃]UVhfe93 j=6u!shMjH#^+7o5_s3N=;/onSsHFB%T6VHvmjnzmSH}R +Sb盻wE''dr(8nUjSc!PqG#ըU ~&&W6ZݻJ-7D1\62ލj+Ak6415` +cѱH2VW*Dtpm"^9zcx\U]땩a'˓''FGõw<':J#](Z^362yx/W{jͭ[[67BFύN4G75F5ףFN{/1=QЊYd7[\vnV%w5LNF>9o56-4=Sm6GceiWJb5[* x)h8nx.q( f/zUVk:ƫd\!jUnL+/7 Ps* MG j2z\xv#Lsjwj|;z}.gp2W=QEM$4xFu|cdVCԘ)E˄=,^:<3Y9>rZS? ;ک"AQoTZ2b_d6h.z}6j䞵 6W۸&õJqm~6R^>YM$# ג{/E3bVjg'&xr28n1sƾkSv#7[W6[`%s|{o/ػ֍h4W7Z_#?]OF#ek:~oPOzR;eƍa+W<)e_4BOSНGc?i:JzD׫*[geX2,XB ]kyU_«wxO=./3u{yЇBw;ėv?ľ o]^WwSZK,A:oo`u^WwrʾbvxW):PWwšP[+un{m@-XB->v9yɺ[۾hx9}g4YXx3kݔ +oq͗NsKZ@h\KZ; _8 +o϶-|n +?e^U Q73xw?M(v5[[J{sC%OM7.s\wxuaiaNS:/uhQpo߮mwtY+rU~ͥEڞy^OM?oZvOO;f %4@mDsk,Y2ј΋.{uCW\rPJNi.,izj:=B{xyZ f'Y_ʿZjd澛o[w:5-fk2|-xos<m{=5o]ݩDE-Yc9פZ咱7_ҷk{gR@[fl8oɊ2=kQx০? /Wr(=&Uq iutb{w{ew*]{h~8/3y;s57}l xkZݶp'C3y3`$^> jo;7`uzK{h͵̷3wi۩zɨnhص̚ ~m^в{&-Ӫ=V#R/T^OMsmǦ?M]ϣ(['\ig5{hz֍t7?iLsQX5},\Uc8P\p{NI-% Qv-ԝu3(]?޷T*P'qnNk-+y{TY$0*? uK\T/Q2PUf~4H|opZǩqô^͟,w:NMb>Vi.s2!ZO1Z֟?] j!{*u)sp %)٪ޞNM~6%C߅Dzuu qfEv=JR^^xmU%1&UO&y;MS͟m8V{KK +_R-a[-m[/ ӻJ*o^ fBSkn[x g]r +c +oi:JG{v;C_o*d-7S?}N3g 켡:oZ4x}Fi;C/eZ2Y(]fԔb\\8%iwJnk_H.(OzBw(3  oZ8y͙[OMq g$s<&?bvOg`H +'|?ﯶ$!ǏZF;w{$0^;BlȄdvXp۝&yL+B]; z=VZ|8 a['(9{I}6pw](c{x,TFp_0 `?g^nki3p *^rU;˛(۲\* ,0ܞh}_9(G("""""+""""" +/("""""+""""" +/(""""" +( +( +(("""""+""""" +/("""""+""""" +/("""""+""""" +/ +( +l9tђÏ?>$on^Y|K++o7N'o鯖XK92//փSota6ñC+"""2܄6Q?hN /~x(/quO|s̉g~{=|EKyl3ۙ9 +/(""""ӑӖސ~87Qտx?µϾ|7* +/(""""=zcֺWMw]~=~*Ǽ_I}g[m;V~Ï?32:Wo4rP<Û Gޏ^tqKGrYξտ䟵+ +/(""""+Wt֮?i_:5G.?Tk?i ޏsm^Co3V[t +/(""""ӝu7wjzP)o8ܙ,<%]f.X5?3ztcc ۷GꦍOw omZc]?G+"""2M9eOVS|ϻ쮙,j3Px>Bzoy3p +W mw|83 ӡd*߂` +/ +46__#m'3Vx3ǟ{Qgec~o՚6m]v=N]n8鿍VfY=-Y*sæp5ΫHz/}kжNTw3Px{?/zz}׉_OojE^mտm=Ǟ +pЧf/m ru^~)y/zILop* 1T;vvZ8ݰFɋ.(d]2Uq»dŪ>+j\}O?}Yq}1<;׶ + +/(""""N\ +.OZx'*y m&eSnok[Ȓi;97uFTԺM/ ǒr:m ׏+/=<8] +Ƃ;޾; +o~k;=7sUv}W7HcMo󃟾LWDDDd(ӆZ֭\~+`'(EK^QKnm)›^;*ohR|Α_} +ɬH|[>Ool=7O=7}wێ=XU[xO?Jvo.6障~7 @ɄszOxRWDDDd\}a\d ,P0rIhO= S"*p(zi/oz +Ȁy͑;U^"W>f>~Vx>S›o*(|?NrYs3AWWDDDʃ=(UՋo3oI 9αLopѩ+^Li.6W;+"""Gp̹FQj?F[}jݦ9Vx3c>,,ǝ~ 7TrGJhf`) 7KVJ3Wt:sFͶ›YM",ydߓ_4[{LWDDDdd Z'*s ҟnTx_ +o?;r(x̸,sp|aYˮGWDDD\CoIo$s.ސst-]휶N!Sӊ͔ +9VpODE3] e"xg|WE9h:DCԎ] \K+-.YpTOwҳ|;c6yyg7G/^WG?S]_Y~5w(}nJ3(""""}'PyTF{sʖ92:S.O? ?,{–OkmK-L5w#NXֶDWx]$=\o4>-2/^k <c]'r+(""""RfX0s<+!˯739m=׭߼uƚ6Uk^{ٝ^(sQm3^iU,:uEةϿiֵ /n]xcO,7ދCMWuw(I|~2;|)(""""gx҅t.{ϙ{7d)K_BzoC:m^Z o) oȗVYhlƟd)(""""gλ'+n f.]b՜,IWoԊHܱk4adt}g)V82>Q)vXWDDDLғ`w| fp\-,:uŭ=Vjg_Xv=]oS;~Fb}u +YxJzȾ%g.A X};>7{5? +PxA>?|)Bk U1dɊUCNzep'ϻ>/-P6۵n}k7'{7poyǝ~y؅d_M.(("""""2' +( +(‹+""""" +/("""""+""""" +/("""""+""""" +/(""""" +( +( +(("""""+""""" +/("""""+""""" +/("""""[DDDDDUPxEDDDDDWDDDDD^PxEDDDDDWDDDDD^PxEDDDDDE^QxA^Qxa@jmR9(Gp@XrI/^|wӓ熍gq֑ yGtW0o޼жf]}i-}Wh`̡ު{|> :uԩ{N71ލH?xΡܗs6kxkK p 6q^ow~,'nuOA(!7"6{= 7b`yee8\{"U).4 ojhtur&s49\my$̔~+i oܜ:sVEmS-sUqs9gKS{ +eѭs&joږ0z-QsI5V|ﻅ2\^#XIռYX|Q$[U֒[^K\a$۬gS:e?*tixޒRkO&jlU˺]j-hޞoe\@\K|T%cW,v9ikUmqȀks<نljIo}{y\]Әߞ>}+y^x#ܽ{w۶mo[hѢÇ?{L7nظq[c;vxդْ׳^YsQk ###[lYjUnYx^+K򝘘xEMsUccc9R?T?zhŊy^|9۷~[{Qz&)^ŋ&''{gffr={;jݺuv7x#):t_ؕibHFs83fDY,5#w}scb%KZ.jW Gw5|݅r.źW>RKhj)PZo D<ȤɓzΝjR8uTqfK.Ůsdy˖-.GGG˳###e&9޺u4rӦMuƚƍW%5-[,ʿ{/6lmTm(k{mEN|L94s\Y&DQ"䖌WOt\J|62O>]tiSrh駟޼y_8Q3;;wsUǨ!c]RѣGqeFLHKKm۶՚WꏍK3*ߖ qf.vIo+wBkRXr܅ J)kqjR>j>|X-311q;kjtt{dƗ Z'GL~̏=Ĉ̡jkU#GZ׮]F6;gWyokx;^`x#bW9||RԩST\\sk5UE\2Bױ؜";v,Nj&WڽQѪwsoϠ]]+\+SbfSkIPCގ3vh968PX.5gVCƊ۷$poݺUQ̙3ͅ:(_tLuh|Yg7#[{y=joyKXm^|9_x;^K_[Wܹse{O67^~=W_?Zj㚻z])|4wnd xϪ?55Rlɒ%=Z۞hyl.)jGGGǻwnI@--?~ڵ={[j/ Zr׬Yrެܹs6u1N.h7˔!4[@ګ]ʫ|憐?8Gl>9.eέ[Ʈ3gδ$!x)~sNqb2i=:\Y@_`|5b{ܬ-ce.z|oDi[ /t>[@._=d&J޽{+@3$F\Щ:E.s橿8o-ܬ!X p{ƺrQ7Gĵ/.ʗuEWXsI=|pLyl)o.]T3v@IމǏwܿ˗/ceJ|Qv۶m+% /^3^z"cVE%z:qD6&j-2G>!d/)ȑ#XkjcWY|c-[(/o ~{u{Z^{MW+/P?H98kˆZV*[._cǎeH]"dٰaC$96V:N>]4Άn_Ys'bpСAѵķ8<(^n{6𾨌G6oޜ{/ވ捾 16Ʈ.w֒Ǐ疕+W=|pA)w^x--J?jo_ .]ޛgϞK47Pq/2޽{k=tܺukƍՆEjf6m;p{n\Qƨbڵ/^.F]av{sqXm7DOo[3~'ٳ/<Zn߾t,P8^Qtzz"Tߞ>}+t5pz_5kD%Kر-%ׯ_%~ܹs6ݻ۶mE>|ٳgѲI˻wmx6]bEco5>}V2Iϒ{'%ylٲeժUeŏ?x@]MLLD mff&n;:: ݻyիW%@޽{4fll,Ge=ьx`_/0/Z 6{r/RJK.-["eɩZs^x1KNNN 9vϞ=^Mtڵ+?y极ѣ}˖-vü-ٳcxY|y;tP'-'stuvvvΎ͒S{㤥OԽ!z>x/ 2*nE^|wީ-_G|XKrJy4WZo߾Z ߯eZgff%KК/ # .bvW#9ټJ.˱׮]+k-_ؼ!ou [^eC9s8}OyV,_7ܹsj4[|ָeAs]ݱy333Yl̥K^ +!{F[xqu/SRntK$U_#bll,DuǏ#\g >D]hÇü%.H Xu|mZZUV37/U|޽lt@{ evˣX&ka)yF_ZdIեro522g,JŖ˗/Ww~[-[uFCe#v 6D'ϱ-ov`Z.H7ĉծL.q=WQ/=ofޜW,955iӦ2kHM=}j%|S[7x7d@Kr:{{-T/ Dܻwom_˛866V wЮ޼ٳg_ h۷˒blڳ=ǡ4J-.ZXsvhd;c_OòUx@^=|zz~{dWƍ7n|ޱcǏ_Ffþ7޽m۶ɋ-:|gpB߽{_fMdɒ'0G!xrh/۷TG(av޽׭[#?|d6 $RVGWXQmvj,!GS7op^}mo 6TtZB_־rJ|r5gϞݽ{Y?{.ҕߢl۶m=t+>s{s@ bhfK͛=#խ[2pecܺukmRn />ۘ a 7bN;wSec>|rӧOslΟ?_=o.T|"99qUO˪B9նnWm+VOY-('͗\x_G C|~BGl۷"AѲ>mUV۷v2ښ?1XspF>%`t,G 775p'TmŰjk_-DnŔ*/;x iK|Q?k~roy<ÇRC1 bŊ27_K>|zlí[-#>~̙3Ya""p XӪc>h ;~\[ev_~Y |ʕѫ-U5V_>- ssja_{Eǥ"~g9Ըf͚ǏǯG|^er؜!zϞ=y9PcK.AۥU9ˑ_{>yt]]/˧V~"Reڵkڅ =~zmn|.hk"ge6)QK?LMMvF-ɨ4.KW ]֭[0VGHvYrfffKCKUy_Z쳑=ogW jY7 D}﵎/駟0cF͖gxϞ=[}6"ms Ν;ۓr$1"vkn!ƁəIEE==x#V~~29:&}BoW_E}K|AKEwy+`g~^nOϗ6hϟsp3-T-2UKY޹-=,TIeiyΝھ눟=wͩ<[}SA;q5f P֯βqV#[ssc@XFdKZ-󻔥K5㞿UysB?=<|64ܽWĉ"`Şq?-deu0+w;w?ʑJfШƊƮ2):S=<hu 5}j/fWsEj2F\+k׮惽|ETU>m]_q/^\[|QKi:F5OKޚf~Łe2|hj">'k~^w",D09on\lY]:˰<?,Ɖr 4|7ن0/e"ZfwÆ Qgl|)v s\]+&ȢnZʚJ_˥Mbƍw׾)/_^[R߼ys?SVR3`+e +Ae,Zޜj޽WݻzbڵfSDLe{-HQ}QD,955!kλU+ɥY["l֊UЉҥKn=G{쩎䖷#͹Q%/\ލ낼8u՝;wnVWt->|Xrb -f4.Hgtga$pڞt;OMXt{sA9ۿ4mPS7vIqٍ xrk(ʇau{+._s bxMNN6~ӧzuV˖-۰aٳg#ʕr~W^}#V;W>v7nlܸuQ;?~ކ .dݻw+bŊ#G,%_>?;w_K.ŭu%n޽{\c't&0P&ߙ?S]xq5Hx#vEEH 9(MLL4SV͛Q 2|7*_zuF獨,v/9DXFW]+V< w:әwx9+a1g +۶m[ti5 x/_Zݻ7w=xg?˗/߽{wGGG?Nݻ%~(m۶56e˧~[f ]KΧ=++WDWZ*~;6:{zYy&ocL`u[M*t+rk?Ν;K2ec_~\)竍/&gCē'O?~|̙lƗ_~o<|0.,|֭AD/Q9{ʕ_V*zƷ|Kܱms.a]/]T:սսk-] غuݻ9M:^eޞv>ܺ uv 9 T@u0J:YO୽*i|e/2ya٘--]5t9x`ܹ3v5Z{.Zե|"n- uv 9QUu&ޖ|6ce%3^:vEwlUY![Ν-ǿ%;CCv@_S۫_t/9xKo, 1t&ޖgxs-bW嫏q>w>'j3?$𶿇7v5y޽rꃮ/^y/Y{xCZ(ꉜUm㇉N8k=i7s˵kjon) طo_ϖ{x/^~'Nˋ>WZ.'ΘM]j;l6{{W +vsA w]_8Don^&''3D})#pl]y s˖--XOC?,L=͗ԤUVE{23^KiӦزq)%wV5oDv#2eƗӰ;)ZG͛7Yʗhٽ.Rٽ$ zؓ'OS["6V\ɨKy~+ ={,Rs%j}g-#wwލ +3k׮N?.TNӧY… ecN,<\y#מOCG'ٳZ2~y]JkdܹsgUk9;PٽJuzzz:魉(i;D峳yԂH^W4\YU)ٽߵ=yG3_+!? `7oݻ'Owۺuk!ҥK54;;/x:99[oݸq]W۵w V\y! !Dze6lpϟWoY|Ete˖w +={V먎bŊ#G,%_|9.ҥK=o422үX_~}48JΝކ8v͚5q%KvԩSYg|b?ǏwoO޳gʕ+E\7(zcǎ;{I`o5V]'/yމK3 xo޼FZKDjȞk"Ek;gYcO>=tk׮my….}r̙m۶u+Vgi$03MD`x#,]xC*h^r }ܹ7{n6gʻ{nnظwY_^;իõ>LMM'ɓYMO<Ȓ =z4_sN6>k^X"dՍ[}Ql/w]7zڵkՍbʕ+˖gϞ> զA{e_~ӧZ}K믿V{رc}F>=g.[";J{^xẃJS-~-a4K]t~KQl'g׮]qvTҪ.@X~}3b}yڼܔS7W_5wMLLĮgp'Y_k7Wĺ}vtfx,pΝZ@˥zW^y$B-MNNfl/kUk[>j93ݼysԙ#bQaHG5瑶Vx缨~7._|>7Uz駟ylsW>3[[)~~K3Z< VsՍ7jSṔ֭[sNi3-^޽{e{,>vYXgH1FΟ?_md.UT*l,=٪v?ep~Pvff&~89J[zƼEo^D=y >ۆsa\ܥU!7\xqr?\Ưhp9P wPM%]rZOYDn4rn6Zʖws~hVC=D5-9[x<%/?5e>36dɞ^|wީ˗hoL.}UC.ZU;KǖW0)_ŔYv+^Ė8݉'_AO'2omD^-mذ\qTU`۷cWJs}%٪;-7F?Ai$ic%dxǏϜ9_~e{rJ.gH|]~R_ ?\[&Z36Gx\R{˜2z^RrM۱v=%O[tC#+bk3F>s-ZTK/*<ٳo$wfx[Fx߿+-w=6n*WرcG۷Ǯj >(fǏ/^8ZnNԽ3^ o#+|yZRO?43`o%_2oyf=9AL߭[9K\Kw|@-?xUz;vrKڍa19Q!:{I _}Ugz^hY믿^re]p47wU]cFay7sqG(]|mݧ|ڵkhy¬ڧk=n5rǵd_3* =+պWx޽rjtxb^z9V8{x<;w6fksdx>sz˛cW5x'|R^ܳbUu7++y-/yZgtEkuԚT_R8Ɵ63g}vy޽{$cε<{/+ +)~݌_kOU;Qd޸Sջ6-a峳5:/Ljs[7O4Pgv/ Hv4pk׮d1ܬvquўȃ͇^_=:SC4/Bb3* +z]3_7o[mqC0[.Zu;:22sah1;;/x=799[oݸqÝ`PW^}a^++W(%7lؐ7ڹbŊ}Ϟ=W~7JĄe˖'N x#]6~Xn]$HЙb?~%F/_1BJ'T =z4[R N*/^̣"Do޼9"X,0333G̃_~@8l썰Ţ@ .\ZI$cLĸ_38H;[7%GS)U 7nΉ]#/eʕ+٪hdg /w^8op)72̍y2SGJ.Y3U7FR-PtzzDWyTccHeGcٳgsKvT5f9ݷ{'[4#\5?z'OG"j56O>]ti -Q,Ν;KmVmms7޹s|3Smd^l7so\rJu{'C .5s.9EH7y25#aĺʬw}G57G-_|S毹u#U7vr޽[;;b?lG}TfZD~[[8I؞rj1|嗹Ns+8skfԯ\Bê;v숤\Mq|pq ص=snm/=?Tlniy7.^w !NdY@}9ͬ "UVe,kJGz_s&pseWyTUԶlkFpΕr-}5oNnţ殯:N\fs-lrUWXQ}Y j d!b9m۶fekY8bQu"S{jb/ldyȑ#{ svr-L8P2ŋyҫWӑ[e~ZX3= oa*EoƌV2lذ!BPk/e쫽֧"g;7-^v9g|ry朦-رcVNneAHr-2?Κ8QǙáCJU왎299֎86ƮZ vo^tin߻wo%nܿD$9'A]scY5#j9{f_QÇK˞9|pi{'/_'|*V\ Z&MjeΟ?_c=ӱ[j-ÙhPKUՍ133yYc=92y[t/6tT, ຼl..]T]|X'96X'ok׮E+WˊOt2oOZ O׾oڴP ݻ222c 2[ʕ+1z˖-ky@}^:Fŋd޷̅ b$׭[gy~ɋ/ӧO-c#>2ϟ?{c 39b-uD^maV}y*C_qCT(%7o\dIڵ_acw]re`xPZ˼~իWsW\ر#{ƢװUЊ[߿?~_u[Nqqߩ]Pѣ 6={Tj=G<|J_&GwڵQp}]L˗/ؒ掍QXŐw:= O>$sjҥK{׶UτY2k.^xƍ%06wwС|wٲe=3oAnϼ'Ow F˱LLL$-ǿSR}K#qXr۱Wc%ʼ0̛q֭[jL\L[lnE>:uz2EX6[??eڡ p}Wpzz:* +8P].ݜܽ{y r)sNgϞs/_1wj_~%;VkLajpo^vI) ʼ2/ y{Ffact\Mݚ+k,,qxŊ6gϞe?/?LCVU9a ׮]kntddd۶mݻ{fYG>|o][333)c _/W\l!q\yμՙb֩SZ_zup(Μ9;w.3oyn?k|+O?Q855L)}eydIl&9O? Tma 5>}+yƚmގ;ZDnY+W䁔K/^!16gmU]NMV@}z88rE :,-޽˼2/ѱ]*%iFů?|ׯրz[ 2/_<_q>Nq)o߿V]`rj KK1ʼ2/љ\hZdnݺW5~!J{| 䵲 +׹UMyLgGU@W'oܸQ-\fͩSرR- +˼2/Q9fޞ9孯ͧ'Nh/Sn\rJ&[ GέjԞ7̔#V})=%kn͛%S.]j6Rt6ϛQl/'=3Çe^m7rJٳgY^V'~9e2dݻwK"CIrl^~&`ONѾέ"|duES~FR})}vm"tϰex߿_޽{{Xmaj=m!epjkjٵ-'}9qd^ҙwѢEw՜F4F׿UE.[K͇ئ|4mZ7.P+²XSl:jv 1dq8YA.\[LG gϞرcՅ֬Y/Ȓ%KjXmai>ou281`oݺUv2Vyx3ofqrGjyQhUĊ%qlذ!/v(466i%Mjb'/^د0IpIjロέzsŋoܸ1׭rl94ʏ=: )3SQ-*xxܹjܼy3srsM8_QsR.c%MMMeot"j_>'}%K.e9Av d^̛2D6(ƻ"w#w4y󡴹r||O-o]mZϫݻLٳ|P.\(Bw={^73NMME … d6hɓYD؉,t,|I7]6-|wy3-_μb/هWJ&lŋfEf-[V\/k~ٟƍrѢE=jo!?3ohj?t5yx333Yl߾^[lܔwoΝ;YgϞt3:oٳgysnb%O>r MnjcV5eϪ?11d΃Ƕ$+~=姫ft~+hvoR9Wow7ok׮b0 yxrfn Iuopll,t7|322jI~j,̛O?ˉy39>xZx]ĆfNڶ|ΝիWOխu…fZdj?V^BAsȼwݺuZΛUB#bݣRۛy?(/:̉Mq~]4Q!_nݺzQom۶%ƱT'd"Ϲzw+VD6:w>P=ʉLǸSv튷<8`v y{dUG`Ywh# Volo޼yciW4w3fȝ6s2{s|/FҬ\;_]v}0Dͼ=W]n6ұRۗy͒e)'N|_W ر#.L%[e"u޽=/ ۷o:ޱϟǎrͱUVGetȕzN7̔%Ȫ+q>|rD^yɼ(.]o%Faocy7n!kw>{{'vmyofyS=ou^^/믿v\uoܸzw&e^r) \4ؼ`f0yfAׯq?﬽jϼn>fͱʼaϞ=DǏ#:u*8zh{r6"mdeNtyݻwm۶eR<^_Ӑ+fydms/cccm0ފ +\T+ov믿y3F<|dpXjUJ^דy˗fFyœWf F. V^:TmfW-Oeu~wڵώ1~as´Z[~ОÛ6߻woО_zuʕ ZUaʄrpKͧ)ܹY3p!z2`v ysPPӒ}rA3c8\N9(W_}5/;˖-k^אrgkgpΝS{~PaU[{˚i'j]GEO>VvmsyHVqE`T?"FvڢECގ-M˼ccc-Ip4S}̙\k+^I^y] 5?>Ur/eVl{zG#jfU{w^ܿ^?p@rSG㿈,uVvv}r^gK.& FƉQ5s̼ .̛3%^͋K橞VM6) jڵ^a۞gtteĉdwԌ?Μ9ӽm. xw=oǏ6G bsT޹sg`j9k׮ŷ#:t>k"  2/ȼ  ]~3۷:YpW_}wujj*_vYؼysd/^%z;::dg d^K*}vtرcȼ^xɓyZ6p%}xwgffryAY`ܛ-6kSf6<s6 <~c }m}.\hgϲsJӧĉ՚'y"e;wVk˞ߥfNvϭ[֮][8ٳg:et|6;2/oH杚$p±W⏌-pm?cG-Z>,Y[E*uVX,9zXbKH=`GW;Q|2oDdk'yK|(*Xg'ŋ嗇7^ru-vos}ؑyxC23n߾ēc˖-eۼsNfΟ?1xٳ[j3>}zff& ɒj9r$X{ѹsr>(K\{{=^{ru Tf>:hQoU ߟGZ']vdV9_30#a|;./#dޯ:^\_+Huosll,f7|322jT|맟~}]~?ܼ2$]v]ܪԩSzܤ9^^8NDN}0QvZؽ+?5Sc\vԒyLd^̻nݺ~f +ŋ|9덓dtXnݚ76uTضm[-2)ܯ%~tڵko_|ŠGs(T"* Zs.ٻw+:ԬW3\vԯ͹ &2/V9uUx{Z6Sjr.BVmwUˑndժU6)!̙3YRĉv͛=ڀ˞-5ҟ~u4.ˎ率Ld^s垍tlTk7\m[EMWBkV=z47~)I4\v{j46㏛om߾=*-SV;h͹g[Fc^O粣~me0yywQsto6tmͻVˍ,iNҖ˕̳/\Pލ?#D'[K<{ |lπAEZW\E,/-=ow>}H[mK捷@ccc?Zx~7\op6/.[pk1KlqիW\KsϼCHy3o7oZ>]hѝ;wJ\ziqyO2믿ѣ gϞvرc>5eO:ksAȳׯ_oFYɪZ-s\8.]Z?ys?̱Wr"wWy֭[9|rۜ{zGڜ`"0[ڭ[tڵ9/3#GTʫ߈xT+m45kŋg_~Ym<6*lܸ$h͛lN&μx{Ŭ~:Vz4e:沚h[l|A)iY1V]jΥ?%_t)zŊwuo׷o2wԱ9&2/sɼ +&&&2WVx:68Pmӽ{6lPkMy3y&runի^~sm;frxmbY{k6Ր޽\bl=w6{hOolQ62ȼW/5dzz}/^xJǫL_fTիW7gT˼[e-!u>svxٲeݻw=qe\>|o5ҟϤoc'6//޸qc3;Ў:9D`իY!"Wo=w̛4|Zkg5ݻs3GFF:W_ w~שLߵksV5ҟ9J.]:ٳ3}Ѭme0y:Ʒk׮-Zs҇e˖%KTpK㏌j3gj`eH^y 93{>}[;)Ch62ȼtɼ-.]Zhz;2L1|uSsxtttӦMW&ה-Wkrʕ+g6:o$V|H@5ҟ$iU >9##juQ{sLd^˼u׭[w7#˗/G,w Hׯ__h9ʣGP֠ޱcG:|.N8);9s_ .ĩ_J5Ϯ]62111clض|Ѭme0e^ŋHOy@d^y@d^d^y@d^yy?Ǐȼx%KȼVzȼU}u?zٳYkFt{ݨ3k糵jGT:cOk;k8y{95(ʇaۛ6mZ`;W駟j5ۅ :k׮~z8q"^Y-g_qì ڵk˗//;Zlٳg{| =olѣZf7nX~}ŋkb⭁2 {j1;w&VTno-ʚΝkX._ܳ[laسgOGGGmvC o[>_S/{IqF5hSX"ŋ$2K??YtҨoeL޷o_/Im_WVfcG%MD՜>D~{%#yV/(Kg}V/֭[yW^] \fċ̒ 7:_-[dj2D"n/ewɾ7ϟ?ժ3w]=>>vrrZ/4ܽ{7 \%Wtg۽{wK%KWQe> +sb0H1yjj<5?1ۃZvtwxkqF5+ag׮]=+D0n^6ג\2ofZ6 _uD ?^ݶy m(}7###=ߚUB|7b`bWg3:u_ֲ͖  ڵ/ԩSQ?lwˇ8#m۶-pZ_sFիW j;y̫W֮nN\%S\ ܨhѢ\KF)}¬R֭[esgySjCs=Yrҥ{,4_wZiiف8jڵyvn>9s&/|mּu7[4/_|EUV>|8^=k9_O>Mr +\Ky;̌=OPvUο{rN{6=qyu/4BGo?m۶^sm;^Dލ7Yi͚5N<$E˴`?y7uO>]Ogm$Eo\].mypÇyﯿ6rm>i跆X^=gr[S8˼ܻwСCynQ}VQ?efmy̼-f0)w###.]2<؛7oV.S'oy\RQP"3j{ۜWlUB;MNNݻܹs2nyl^{יyj?k^sӵ efҫrHmCAJY]eYe:wqΝ)0kȼ/Qg \Ü3_s3oD͛7ey-ZW]v wp|\* sرcH1$Gѝ={تZw;v56SV7shի22| +U^\X;˗/oYeը;] ҥK`_OO)?={n:8#?~<ݻ̽dhyL̪}/7G, _~d055JDeqn󈣫7n3SG7o|poK +zUKԶwRW^t)>"YEN,WN>|957yUE U|kqF5˰w$g<)"!.au#4;?~<>>^O՘"}e{9ݻaÆZkC}\ZF)fffnݺ3f/d.W,_Nb93;::7N<{>6p~NN<9hsU o5cccQX!bqFlIO}\;b??srά=֢3,[,o߾~5̥91STKyam^sytYÇ7n\zuʕ͋ @5fҫblck]}a <#g,ot/=ԖQz3󞏂;wݻswpqe1/_[)Be+;6~ٌ~NJ%ߪ97wgU??5-–3ճ08#~w/^zSoD_4:Pm +-\Y+W?Ư^% (|rψ| z6iüÇf]\>ĹnpR̙39zeEmL32/DvtttӦMyc|sE3o^\**R5r::^UD\>㡏z{rHPOn(͛7,Yb*y#fXlYT+Q.rMT仌9c,^8C_ե 7o\hqŊŋåɒKFrvu߾}Hy/_[.!rϞ70cm%:ݻwȑPe޵k探2/A7>Rr֭EEaΓ Q:911V+T3CMNNV=zzHw"eEge2j2o&2Q7ܖ-[Zz2Bn߾U[e+y^2Cݽ{Y:9{ΝltϼIA?"FdTKΝG$^Df7]8]\x1C/|7:WǿCd|ټ +?՜[ k3ĕ[= `$xy{i\… eA/Җy2^-j!n֭\Vֶm9kΝ*rf͚xyȑZy3ҥK O:կ֭ӧJʼC u[~W7-κI .O) }ŋG>x鯄իW?S\x3Xcǎ~=K~8BS2+=zKگnɼE;;w̼囪=<|𬙷Ӫ?}fٵkֶ>Q77Dm+ɼW^W5^Vtw}:#lٲ;0ttR{Y^+Vؽ{wyӧOٿ6=Y;+Z^esUuݻ/8qȹTy rʕ+j333={>/Cݱ{Cd[+kμyYE>"lfdWrw|||ևر:9h]hѝ;wJyt6zƍtU.\).5:S oݺURcJ w5mcG׿^ռT~`5u~Zpviӿtͩ?k+_LƜ7O>ɓ/^Ysڵ/^Nݴiӊ+2eҙM@CMNNFd^Ç :qĪUrѧm۶x{U,X9sfܾ}{˖-ei eoN;ʼs}_|/,o\'ٳgP#  2/ȼGxq2w͌<~g>*lڴp !W\0lٲ2/ȼYzu|x 2/e.\߁׭[' o/^LOO?yӧ]?w\G ͼ1W_}U6C(2q^2$%:fr)cǎ_ 殫EjXBVuV)x2 ۭ̣Ekadd2[۶m?v3VH5Ȕ/wD87|ͷfffS-ݫT\i؛yϼǏIV׮]ˬ/xrf2Q;fmyЪX^(ʼ2/o;wW!E~zO?4<855U %-]f^J}ԩTq; >|8QDf3}eck1:?7掶m'+'="fյ;fޞV (%,롕F:KϽw<@W-VGŋ/X "Fjgm3>t^Y(\D*ܺukK*S-7nܨYԩSͼӱZwq.\(;O6u-9FVPyxe9;k֫-[JPj7?*I}1ޞ߼ys}KjTu6{:t("s5֞UԽ9PU>|x̛z3rٟ0~geyk_[ȼVy_y#6'siRXιsjy9`$Z}vfE3|'Vybrrr޽սw"jɒ%۱;_vt>6~^8q<:YETʕZv;ש>vX˼gx>{ȼv3S*-2( _Wlm5ʕQwNұٳg;ʧVW)jzYj';V\ÜӲ|սebdl[ʾ.O!O +΃0_[^i? +]w캺w^==ލh?cf&R8tPuZFߟ4Y(R{ӯTxhTﳇ _Wvz9k5Wmn?nÎDռu/2/şmk ?x ܢE,s V}]ŋSu%ן+ظ'ʼ^ݴiӊ+j7+k4Q5[*Iye^[l)+eۿުk׮_&R', ZoYYZIϞ=3D6Jȼ  2/ȼ   2/ȼ  ky@d^y@@d^y@d^y@d^d^y@d^yy@d^y@@d^y@d^y@d^d^ 2/ȼ  2/2/ȼ  2/ȼȼ  2/ȼ   2/ȼ  2/ȼ  2/2/ȼ  2/ȼȼ  2/ȼ  d^y@d^yy@d^y@@d^y@<<޿"% P"B 8* LKCj\^Lxb*,I(6܂(ŀ[C ǻ`h0r{#F=z8/<眹׾G?U=wޮ=3g4/4/h^мy@y@ 4/4/h^мy@y@ 4/ד 4/h^мh^мy@  4/h^мh^мy@  4/h^мh^мyɰt9zɉ%_} uI' ڜmݦ{5↎:׬YSkapWWX[#h^ Š*m +Qhz=C46;V6Cy9T&~oVXҢXkդ84<\{[aq7[\魯ջqH5o@v4oToW YA]:p GiաGn&n3Yi^Uakϒ8rI +CM/onWI'-^z>H-ȯZl:-pn˛zww> IΉ6FJ $>U+Kvnjs߆jN6}Ij^4/S&0h-Zn|VD&> X=Hy5/0}wNlmU:pq1ܦM19cţ.ۢ@5Q6] ~#mS ._thOz/]jƗ,!drqrsǗoz*4ch~YͶak_?\ͺ.kaxuko+*֞& !ӯxf;o5ob7aXJ Kwk/~Vwt  Dֵ9_^[iqI g5$%motA\wki qnO4o?{՗U +ӈyeiE7C׾ VQZ(ੌmš;U1A^ ˴ qm8];|m)[P PasBjM9{9C3Yuڐ3'\h^мh^мy@  4/h^мh^мy@d߾ۻ.Gw,?}.GW󚙙ռh^33333ӼkfffffWyLj^4i^͋533333ͫy5i^͋533333ͫyѼfffffy5/4E󚙙ռh^33333ӼW󚙙ռh^33333ӼkfffffWyLj^4i^͋533333ͫy5i^Iмfffffy5/4E󚙙ռh^33333ӼkfffffWj^33333Ӽh^kfffffWyLj^4i^͋533333ͫyѼfffffy5533333͋ռfffffy5/̬g}s9͂;hU%+>[GrQ?˗> nk$W'O|拋Ͽλpz^'>wy70+?ƭi^͋5333'6gQ+ _w.BFŷI}gGnnGօ7?tWt3<իݽgVx™ 8y"\ӯ8-}j^͋53339uOu'־_ŷǯyo[d'ϝm90^o^*ijҋWznB9 ּ̜kW{@5Fۿ2 Nn+.5E󚙙|ArH͡հѧ^ͿmybӺyKBdeó:[jy?&̖߾}g/^m-;_<~ ܶT:(\j^4YϕJgeEW5יּKK/}z̜z.#>r޳7q>[nxekίSy>+5E󚙙YVzÕlܼBWN=򔋶m;Uw; >xfޡ}7l-CM?yL%izpko}>G1}o (>ʼn_q n/=\[Wj^33336V_^:鳾5N{3P 7+w]=7~u(gͥ߶ռ̎=PVu/p!ؼ`zbKțw4o֡3HyL~WYj^4d/|lJ$K0f_pK O^<3H7Z?#y4E󚙙hf7;wIu:68;y5/ټGy553330ٹ`7w5'g/u/k^ͫyѼffffq?Xdϟh7Klѭ͂;fsгO^cټڳw_퍖NuOo{t^=ռh^333Q߶Q@qK=ߟ-ZcfΟ-][ɝ]5$j?*qe`sgn}Xj^4٨vw?SpąC#N 㳾yP7ڦcnxek^{3a݉_3O]_矜Lj^4٨v^3UT۶l{K +Җ߾tZM}(4f\.lO}ƿ?7~kdeW+ (*S Ϥռh^333ڐs6?q൩y3O .XtOo4onv|yO8sa|{>}r޲wtǞvY˗=0Ql^{O3y55333xX5knKWzk_ʼ[w{Nvk?/ח>>C⃶3^Qr朲Lj^kffffrۻVu2GrQ|ʣܼ;V yK精24{?񝿯^l9׾zGzi|ɽ?hzu#y&5ռffffVM?yq]>"t9?oMؗ.m?ɧ˭y5/̬6nǝ~Eqn=lޗz]Sм_,gpPkA~*-ٵw0Fxuɩxtݨj^ͫy̬iCx',OoUvy8p3?vgKǷxG3s!ռE>j?y;-yWY/77$WWyF͸$~[.j;?/)n{-;=S:ܵgAOBϞw%+ó |k7Ņުy}svw^ͫy5ڪտ.~ڛ?ÿvNԳy;jd4i_Y_}O8sa|UXҭyxWj^3333ݬ⟯/gg?`=SܼK}d4o3Ͽ:I{_ǥ,^n=5*qqBj#OhO-ͫy5/`->e:Yۼw;8Qb sCGcjCoMs*]>[H pHIhtEөlA5R81y=#oޜ7~Mͨ59jO}Jtףy5xֵ[&RSt}DMmVOۺ7\[5vn YT#i9I}63mWᇋmx4oP4`MchȽYL_?K)?Džc) UARh|cT=RVXN6Vg͛s|tmC?[ۧkjRg pfMU9d[§ӣ)T:6}!wjͥ/[%o{w`j^Xf^g#loNϋ"+;Qϰ|޽7KNƷo"5w 0~JiFyv6WڼI知+kߚom!_CU·swz +5y4o}^?wh4gNl;ڼ駥8xSgνռ5 $r~0^u8Wh^Թ9 Uߡ4˯;MJ7Z{&mOt)~ڼm&-hPN/zyмColnAu0KQ},M6ڼײ$E0xq~~GQ{/EUVߚSZ{yr N>xS@mWVJ޼7=y{9?xOnS jʼWEoMjN|;iڼ4tuoA +k>g.F͛yK% U/U{ŔS܃r?)tW}׾53>985oo9&[Dn9bh^çyǏ⛈fΜnTL?(.5Q~ޞ;6͛<{niۆ̷z.^ެy4oC7N^C4&|m:с6|7cyw9T4goMMn)j痬7k^͛@ཊAr圳e6TONП  SSI9sS&0oH<@|Oã:[{7}իFX6/h^{KkRϦvhڷOv{+b#fJj_|YӼyƵy4|` ^hj4k:PCwupFo.LRǮyѼ[֞GW>Tӗ:|vA4Vy4o|HwcRj^4/yfo"x7o'){ռ yGؼ>xi3^3?rO[isu5E0sWtb NykheR8 WlT;yO$=KnD;́@ 4/h^4/h^мy@@ 4/h^4/h^мy@  4/h^мh^мy@  4/h^мh^мy@  4/h^мh^мy@  4/h^мyмy@  4/h^мyмy@  4/h^мyмy@  4/h^мyмy@ 4/4/h^мy@y@ 4/4/h^мy@y@ 4/4/h^мy@y@ 4/4/h^мy@@ 4/h^4/h^мy@@ 4/h^4/h^мy@@ 4/h^4/h^мy@@ 4/h^мh^мy@  4/h^мh^мy@  4/h^мh^мy@  4/h^мh^мy@  4/h^мyмy@  4/h^мyмy@  4/h^мyмy@  4/h^мy@y@ 4/4/h^мy@y@ 4/4/h^мy@y@ 4/4/h^мy@y@ 4/h^4/h^мy@@ 4/h^4/h^мy@@ 4/h^4/h^мy@@ 4/h^4/h^мy@  4/h^мh^мy@  4/h^мh^мy@  4/h^мh^мy@  4/h^мyмy@  4/h^мyмy@  4/h^мyмy@  4/h^мyмy@ 4/4/h^мy@y@ 4/4/h^мy@y@ 4/4/h^мy@y@ 4/4/h^мy@@ 4/h^4/h^мy@@ 4/h^4/h^мy@@ 4/h^4/h^мy@@ 4/h^мh^мy@  4/h^мh^мy@  4/h^мh^мy@  4/h^мh^мy@  4/h^мyмy@  4/h^мyмy@  4/h^мyмy@  4/h^мy@y@ 4/4/h^мy@y@ 4/4/h^мy@y@ 4/4/s T&<AA&Ɖ!LU3e'DFAA@/DGt4yo=ZksTRy}9/_~w8/p^ y8/p^ y8/1#ǙJj[S9R{h3y SjC<+yAw}=7>ʺ6Q'߸Gyg'=o7Wھ+w3I>o|}o60W} ʤ0RڿSJ4=D/j2b+´eEAD^La=MR(mNv0l{Z(ߘNGh5)WJ 31|l~)_5{+)ĸRV5ܼZ +2OݾZ-kƮ^@^c74/= nNvv3;qs$ o4GEGu"ɢ7L-tJ;1tD9SH^SZʗ*4 lN{PUVL,=[ #Vp#<`ctfd\Wڹ/DڍN"${#JVs+39bF9aMfqc^ƈ\lD-߿r$KK/K:P<-/'tssKGj +±F8/cy֢5eئfg*@{BB_WkV|(wNƉr+"e|^&pG`[B&fPXrX'De(/tyȰvQ] J.veƑ*礵%#٩XX(u5B;s;͂a )[Uʹ&b'CeOXsCl&Y$["/yެ%ccI9_ Ry|L5|q1K }īp^ƶd,8>,JҹӔL$9ϸԝe +G¾&;~n+>9Cy4TkEWV(\"JCT +TSyU* \24e@&tNJ24 +e'd;`#Vmåu]'}[cW'VTR%pڂ€+怸OcMn\|m6J:)MvzpNSѳmϲyCKce;E>#+V)3H:eRdTq^8/cv\$VTd s)ܮ셥@mݕhoTS,[xi]/72ys^ܜ~gegI5BhmE4pgIݽݫ"yʚg[~潭Z|ds6.[Sg׼#ϯrEHMsl}[TaR'|yQq('6n]㬍W,~i=WUKiyk^EZ?{]@^5SGٳ<~R \v#g+,\D!5ȯұURTzu߼{̥BtBNnO +iDQX8EěWMR.ZS{:o*GBk#/|x߾7m<PLi3ylҤR"pVP~ʗ{|G*յckq(諞ȉSy*F;o:6n-/5 ^9 CC=tnNzJ~u 6u+ ȱ=#YW=NYۓ:!0ɑ٫ֈm7\wשXPXҨ.@X7#.UW\im*!U#|~t\ MS޺&(pc7WNFzJm 3>Zv=N'[ߚ3.ST=)9oSj@ǻޘSr'~qF,|ĕ)I]m0}(ybȒbAr-pvU~?~kVVUwY&i6-J|k dooz -}QRkiyk$jެk"V,)L$g~{ѤS?W=qP9;wџ~:㩷2Y:js#sS!/b 9n50&7-l1\E*N6G,_+eMkw-hg}أ4د#OЊVRI +U\*q^CQt|%7 $ťTkq|7/]"˺Iizbۖ,~?CV's/'井Lڞwg̤EC9:sW3i˛}q!srTIƮu8/17Yue -wg絿M%oˮz}_Mj5^YvSTrO!{kI\q7n|eT  +_-GaRZKJz: 7S544u #ZeASw-lJλ9fMk{A:M"/ >7D~M\k5q ߽k߄|H|e݌_\7-ox;v +خ?kZTsJԺ 'ɴٯ]*955Qd㾵eNM'It؊9k/3];M˺zzYj?_IUJ| \2*0^Ƒ̑]7&ݛUlכ.xlEQke8ksQ$zITw ˍT:.tO_>cWXqLnhVZ-.z?>b9hZ5%ݛ7jcFi-,mh;?M>as5l+/~dzֺ 2)Kry۬(6_ϿG<-[^~Җ44Lm\n1+'>BġR)O}'zN6ErE3b\Y\W=huҁ]'ቧ~JuplLZ-r]e!w=t~@{RGuet2E_s'_E*gņ'(B +ソ冥tn,UcJl?oVvRd'~?1M)okՆb?{dOWQw'L_m4qŴL㨆Jwsx\*Bz6֍}qtCx<$=f?9ܛ$Ro}ks{9ɺ}pgj;`Ҽe͕#bk^vCCBy4U<˔2ƂE#g׳^y%hk +K0D|*N1KD"73rK 5=0o=ns{?FzO`ǹO@^H79;O9g=>'`0e#[V=pILM iHFb;Ѱ 2 ; O4hw~ʺ3%Eݗ EvlyvX!gAhٽ{q!AuaUL-aJ̉z7^= (JM,h v?}ϜwhQGfy@ `]AebI[OɬB;bw+7y[箿;QqI9ð^+Skh0ض iL(gG؅=qfXÛn^u7̞-AVVRٶCR6QT:i|4k4Î`8p~ZzWA +liho{vwᅝ7ֽ2k~(887Z:W.!q77+rcڸ[^˺A%|p+MԐzQb9*fI7.1D EI<* /7bD9ew whmki9/@ u%s~s>]wſ:{-(|T]E(%'}\E]Vc0 zɩ7ˍ0&n}b.\9pK/]:x%F|eHL%|S1XBMe*cnj{u?yAO]\⢁|cnTQU ©5eRn{h/hvАŃC/+5ᑵK +*)2ёX-oE,0PK칿>Q\pQK,xK/Xk`^s*y yub,sQ۲^2dU,}H1X ˷:9vې .fhvRD~Id%2 @ dMbxb>y'1^/eW|4n]d oǼLJ4i߫nL+vʤGRSozƳ>$Jp\cRR=*R&84kfƥ0DbMʤ$Ґ4%Ys\: &f8cDu2p,1+tmuRҢ)ԥ;H~_`E-َQv9x LKrQ/M%"% hA{i9RҐ[ qo" pM~*Zbt⺖9DRoM1(1pw.{"@ QB.,y#ٜ|n&C}>M{#ɞEI༾u2T%F(L2u,]D۴ u+q;dz'۰ =z)G0ݡ>8b'Сr"(0J:tҪ~Y^ pfQ"̡kr^@  NRrx7;I]EGݱܲ =k(d|4oLP =W3O(ϪyY-WYn]MW-^1x-A;j#5eNl1rdw[QJQvE*TU,ɿ*V{Un3r^@ D= +,R-tg%̍;vg$C&(5*U!ԭjǕ +cYUL5oWMccXiu.{W㘻Hkv%hu +9?Ƹ~ӣ,OP 9/r^@ D^7!.A ۑq}ݎjS~;^u:ˢ\ځ*͠{W}ksHqGYcec.qW:{b-e s>A&G՘sϏx?#Gz$]mgeޝ@ qbWU7SQ]O̍#ex|dif{oNwÉdԒ iFG`pWu )e *"g +Ruw3?V.H»%drGd^f녒W&$A>,k<""@ zfv2wISHޚ`pC+4-|֗/frEmCEaê 5eXUCeUCEuwmXʪî~Ũ<)Wxꈚ)OuK~WJ\aFq\d~UzjsEuL>H/tAmԵӐhRXiԍCMݣuWӾҸ &B< 8e˹CmU*EleʫU~ zІ5)զtCB3tiwU:lZ~hr #& cE`LLw>!#n6r\͘O[1)S0`bs©S*8-`rmGc4=SV[lK4 ,J#%,eJK~Eʓhɯhwيc`(wj1jɽa3r^@ qHK,q۽a\{K5c_5쒟+y%ڠq_4'1dB ((j/wPCA؂ݲ! ۧd|*N/=C^$)3I26̘ mq݆S.>ksC?-1qIW֌ͷnc*u^J +:B󼽖N?|<~^0mFYEE3yNV5|E~\\'i&}0y@ Gx;hZrx*N$c&,i&I%ʃ %aJXI+#q;u'q1Q4)-iJY%1듸'n}E̽Qkoڝw%I1Ij0T D2JcIh%bqs_O'?OaR* uUa~Xq㼒Yn0Uv4Zَ<*N.Âǔ~I{'zkR2BB}^uWSA_1Wze3bSŶ5#E @}+RE4P'nJQ)e+ VIאQ,-T.!ܮJ( qM͋WV{OE]7mٗή[^{oB/S:jUK⺶LܿG̴P? W,fViϩ~nyеS~6]zS0wy&64 +_u(DzlG֡.5[9ʓh4)߲sQu70`+QqJ/ur^@ x0I2G{4>`Kosxa b)%󶙲vdx&! R]}uXY%#pWO;^: 49?4;&jI}:OSC63V~{Ɉ?(9nhJ+@g^RկyCN-o8|)IS +*?o e+O4+se̾wp&RV9ъOOz4A!Ť v!)$M:{'3܁݀jGww@cGTsjr\c^2e= ˋ-#͸YV+>L5f\ZOSu^uΉJ,B@@BTD;0\9VKf-&Sw/( DiG&nhƔܙ+3ge@΋@ IILdץ8 yL*>E Qu]^;fVY՜yk慪 [V3nNi.j;;(lDP@Qc41zD1*(FAP@DňK4y^&1ɼ7$qCBwBwK{߽9mn׽U9-,LK|W/UK2JEEbբQQپT lu:K]lxijzAK[GnU@e0eTg'!ƼE\kjmgRV/_VO[9H= +WzG @XN<L NpP6yvg͡k0HsjEC{| BL, L{kvvLxF_x쓵Vcbstr$2x0 ChrWJ0h~$};ߝnvș*?6s]Dj,?i8\zow|Sc'/]5X1D%s^H{?]9~xٖC9zԅ[M{pHv'{!4j-ߞY~yˡܴ816Bdt8Qwኦ[{뱳mGδ3h8rKyEs?{GNY9mf݈mW~!bV촥/$C:_ ĹBL+z$ )*E=hCIt +Ў`BY;>IodЭ\R &5@E7Rg%l~'m!$&H@t 5$ņV~Ș mfe\y{cw3Sbk'I/&ͼsgK'n`\M\b?_TՐ.IN<|J|*xp'Or^fPNnW6dM6dPD`y@~N?:"iԌLo&^!ުB}|kr1uA)0_U)f +|/ ՅB¼M39+OW[[GSYx:_4< *1cV%B4)Y~U>k7h7V{`a +boU~mnlouZF9/s\90G T@J$CtVLO ?N}>vg"qO'Y's,W^ks6^6xrȥC9Q\grk忭Tz 2o}v,fNi$BAH>IzzᖹyJbqдQpᡃ〔$ %5u{E1?OS̗nYG֫k^,/*i;P/Yo?[/7L-mNDp,$,4psP~EkLM7 -ϗM[RtίV-箷16e2i01+ [֋7U CWlA">+ː5]0?z{x|Wgoӡ+FK]ZeKEg!xֆo—MP3Lo2+DSS&IB\ɇǪM*BRh={Lff:9Y9D$mZ6 +R1IzCr|~7.&HW fmv@Eꠐ kjW$0C$,Lνh2[m ݏQxUv] A4#aӔ؂K^|mkwn/sB'OYM w64X=$rmԒK$<qE줺IKUDc d: ;ml:i^1RdZLV]}+Di#`@6T+[ ԀwC qF- +Ԭ +[Shu k䣤 +XԉGk1Fn2iA%Azg$\KJn(P&u߁GyR*5!ҤN%Nd\m{aH%}c !]5_bVh?c$O{Q',h0iK&ڰyy2 fRTg)VDĥ]C:|@E\">Ụ-+ b3BCTt+V w*v2sENMj eA~y ?[1R 2&l&l=?KK艽ϼ"yS^Z_Pj<M~lC)a@ԥ=JA>g|=㑏ʷ~_}ݟ۳o7'~"͘"VT ؋~'Kk{x[zxIM<3]Z`$N ҭLQ+yrdW6dM6d'Zv>x%%!@$ *ݨ)3__>UaڢN'O[2mAS,LOȐ|B왑>U!y$#2#_f;ਮ+[;0Il'mPb1qʩ1LX!hf$TbCxb$6qq[ʱHh-޹ERa>NjwҪݳSٗ*7'-RKju-NڝbZZݎw:%].'YMqSqIr{uρJ{ؐ.4MQDނ\FLR)4X,dҹ mtp5_vr&K8؝"vȔ2{ ++(Mq]~3;y`żq\̛9SЫm\Ļ'X5nBHXquWP–WCN+M}_U4 =`, w4Ƕd۳ŧЁ坫2UϋYo+#:IDV>[p'caFaj)c*Bys7+A8^##mZށ8:W_Xb . g`Iͼ☀P\pLn[D =)?Y1iQhgN>Kn/H.;? J Rz"]HQ5IԙmGԉRaZE$zcV [[R=;nJg+!6ym6l6P +j TJi\'d{/yvHU+d +B}PzII҄twMzn]zn}P*Ԥ +{d0_ e#}۞buPF?.8{>b;kܝ$u'J]PG8`OҗznK= ru$9NC/uW];Iius75^\6+A?;%%*My yBSu ;fK-Q~%]j)r42T1˂IEf(cYkB8qj,Ӏ23RϽjFBв GV҅41Yhu +m.[RĶ=MN7d> &6sw-6M?UirI]bKs >H!9X$!5;&6mO[+M FH?a1 $r7; Rt2Sj!;PkLrӽ!U'uŗ$5(-s NwC%Jy/QivxZbϾ%ggiRU-pMqsL Vy[EH5 =O9G;*.F +#zt &rJ[Y62zM"DY@%1e^_FErŧC(ˆģz,Fafz313}"DMuczW5kK9t)V͌08RF1_p YuR9fKM]yn HxhXSy"*nxU}6φ+yd˾2fX')TCu;b#LA9H@'߹̽vL>^g}QM ecb,MͰɷ,zOD),G#Ƭyg3mfmf۝Hm֡րÀVG ;+% =ܻ<5){2=4i_P!e Yžl2KI5tFLޣ[3rr@YADyP6AE1ˋ?'wCc\ubKۈ,wuF +3=z췔y8̺0ΕQT1yo5{{;9 !M 6/w<{!.>6W "PL!XO$U|pl`ԯQF b5|q0PA8Bt Lҗ?iBq5& +|9pW'(hĤ@wT5Vg\mZxc^mym6l6l-,>E婲tې_;wa 7p فgyx oP~}N;?5?98}IꈟaOcOގ32)ar8p,X5HOT= 8=O83<~z=OCð'Cx-Fa5: +RG#B).t&Vd+;N}u9ƒsoZyVC(%Dݪ}!]":L濮13<'+5KżǞ_,;MƼy43BC]äٗ(8+aBisXڧL֙A_ fW*b'&ҌPٙDPM/ؐ FX nbƽyIkú3{iceG,h)A,,@; +PL0- S0!ym6l6l[:&)@9p ƢaKjT8C Tcsm@KgLfڸA盘||qRGбy˄bpqs;n\ CFu擈\Itza7u|)dMc:g;2LJz(k\Ո?B&ff f+csׄR_&СgD._b+s6̃bes5P1[Aysw/TQ&Ss HD)Rȝ5M K Z5\ +R~U&BI1!hL/ BAe?Am~qW',f +V5EC OǦ*zN,~+Q<0gC +eNC'$1Z hBP9LUaS=% +5~B5H1gx5 Ӵ1Hk|J\ tt/ U<{(8CW :z- 5d|Z7O6kmfmvgZ x5KkQ(JBhMuH_!k\hR#|`S7jU!FX܋ L;ђUE%=ޒCޒ{JyJ<Ҟnoi7`~#aog򊟆KJ{Jvt.OA[жͿfY6IF_z_.+ml~hkЊnS}¶i[S.K{CRa}RIRܱz[kuuN jX #2{z^S݈!E7?ړtOIe׉ ˯ 'Fw"5+XhR B s4삎6e^ƊU߹wU%z ͼfmfmẃ{0!#j@-d6*Ʉq@|^7q WUrMlAdT%bOM6]nv]bSjrĽ!w>\\R]T,R%EhMZdv]hNaqJ>\|SjLRĆT>MMPs +.] ] A)6Wh ”]MNٗ$7$MN%6`N}:$_.Ent֧}oRߑi, *$nLdAY)⬇u}z32o틍pd[8f+_z]7}X/5x?k q[sHՂG)%YH[Ա3wK5M75-l^W-_i]сv&:C"Xg V>D@ݛ?,tFuvVYsx"7U o2eG߿p}6b+:xJQ]?w!hFT5duOv~@"L1YJfR C-01T!i %Y:GOݟ_ꩋ,FI Gn"=į$"2fD>M#a_LLgQnOvfH.j:kmݳ6l6lγ[TXXvZ'ek7_yMAǪ[-nj+YU|гc¶-Wmi[sզޕ{ttS/l{ +;NXt$ke:oܝt&(ŽcҖWZ'ʭYbFb*HoAHH<[) rgx IHRZD_Ҙr:ӝm[BZ^PNHeibChq*LIu/{gUAȾ/PGQrN I'!$@ҁ+!D=}9:?:raU;5xc=qC5j?صgִOe@H +~A7-/.|yڜu}AѨDtD·u2yƏvhf%^MV' +?w]UYѤ$+n&Y\e'+"VF78Զ3=]{ߒ{^Q0oG@3nh?U*ڤ4tk(hPT<ɶőӗL4*7Fa=E7*ҙW=C= +m?BiHYU>xKQ8UJpKIF[6FY6EQ=Re)֒*M&{g)663%hz&8. ˈ[PMlvrqV*S~kQ_B޳98"Z?hFZeܖ =0dȬ\2_qt^eSa` BM8`Km S7gljY~RRxoH$cIQ\+&ɋ숢LJbt" {,JCc(j:ʼHiH7Њ '0퀬dF&E>W$]v5S1Zǚl.\@jxuVx}C'{gWT?;3B-ˠ%{duXO1;fd,6Zr܆YKg/ȼhSaa;;\I%NUDt$VUE(\[+Z8dYqΒ9ud6w4ϿHr5i.\K&KzWhdfyvy9*UWЙW=C=b^UEp@d|4ɸX5<ƔFuKIx&b2nH`6EG[KyELIUM{4d4"4<$<,i\ncǰ%QL~F7){,/AXPFҥk~s"\hXj{,]KISS6( !GeG$o&tɩ%W6tVEW +HYle$ HJqYCY b~֘VZ-)r%&,QQ.\ 2:aF5կO..fVZXr⒤wFZRj~lu:V$E&Nt:1IDo ,xEbt㔫nڪ7K K|) I"[8&?PN$XPfe(|]IG%Ts74]n'ȂD\~4v#v"p=κ:њO-5MJ^3Zt7>>hrJ'|uMCdQ@v +o%DT8I$A$c!5þ`vX y!*h]5-珟u9Tr Ҭp<,w|3~]I=14);Ҳ*Չy=Up9J63z衇z_E\0"1;s {Ъ5Ӓjʘ-rxsvgȸ4f$PY1&;Ί4ŘmIXcnA͜-80(`H0d'3ӟYUf ٱ[!nJEJ #Z a.e^kNyD-ʈMJhȈOJO0bQQI-Ƙ4>)'Δ>l<=~odD8L] sĩ2g#%ʍ,cjѰD\bG?m#LBT5W AYe(EQDF1 +JWRjcyRˏ_pqPE2gU5"kݲ2c)IiN&#!ee?\(ڱ+ޔ{,HFwHQc<¶:N\;:=;]vZ=x犊W)Q/J$)*:{N{ҩ:pvttt<><>zyn%:{9z9𓎮xqN}pK0*"sH`9v+puUtF~Gν~p\QzDG:5/ ]|~v5hԳfC3ּ{ 8(3Ų`=7dهXAfEY038>;/^Ixmlۉ]껟(Z6,R=O9;@[5!rY{5%"mLwZ雗0 3Lo9pS흮{aUXiV߈\TۺLA9g6BOS]-/#H+ƏCg^=C=C; $3#. q#Oy^MQ n/UJpE~QVrJYLg~cniIm2n6godHrn%k+ek6gPSr_Nnͪ.݆I-PRT+}:jfzf&ce{9k>4KV:'b̈́ZMk`2R3/)hrڌ41a|cn5\_Q4)Ɣ7c~V[ʲKj'D?]4"cRW# +#} +"߄ĔO[ɩhZ~#EbI5UIWRB&>D) M6@WUڟDXU0]&l}";$^Boӽ3 erNGV&1՜{]ׇ[ވMʲUՃnuk_T{oieʂu,u)򰂎9.O-/G F .8;komΫ.ژVtsK"]̈g"CDc9"_Y`{Ͽr9/ԑqIa0TYQFjKjH^yC=C=W^X"w,:Lhd._ƣnb,yf)]>%9&*B@!Ur]3R22YT2ք™́TjBԬZSÁ"+оDGbBZ"[[-[,Atm0]̔iY9OWT$# Y-}5"(*a^{)~ڐyK5hίyeJJ9gFuԓ%V.Zh\x)c}+0pd?3iIYK_Y{gv}x=#]9}C]SLRm|W;yǗ=_|}*"(p $'wN},'Ycjl>u_'rT@JYNvN&cBU1;7$*{vKWeHF,)w|*x[ h -}3z衇zǝu(yb9YSstFlI5Ͱ5Snqinfelj36Sv˃ @s)RT@#Y{;@YC!MQt}v?}Pl'CNFV}dyG` Z_ ! %hQ*6̫z衇zq1LЄy1#os[%Tq(UdV35!H. +,Te.86nԄ+¬T @L5 C(ց[/]e ]b)V",aֺ, xBn GߗS÷DQx0WoW<pkيe~U4 +BU,jlWmPEhs-*j#eB^ѮD2$fjo(I*VFژ =2(rI"?Xb<h̼ͯ3m4Mj*,(NiLV166z0wFދWnp+Ξj:}0ɋS$bB,(~(IHmnK?Os 9*>0=1r(h@@RKY_՛p6yEF(6]FmП9ehB&t;=tC=C='s4I$ꡗl)2jnbَt +t[(d](etM gͮ0v[05u3`v +S3 j,p3̂Y15w-d6ئRS)LOi`jl]^T?&+C_uLy]}2LSAl]B#,E)y[U&SJ.dTUW B-;ĸ5`F^Q "hߕoUah*hI^Ō/Z{|*C4 H-w(cmc%ݖMmz۾ OE%)"Gk'z+g;h2HUP[Tm~}yK@s15K5yw#'I +<2,c a(zfE{뺆#Œ*%*Ͳ8֨ ѤYZS&:aneZ|Nu?-϶ A~L*iKd`LTG_ݣA&m(&q "//{'b ZIPA(#kᣭrw3z衇zǽ¼<47#YF7` h_5:*l-(KRjvG[KMtIhbiXbEj +زp4AoJ#ͥQ[#+ Tyi];Pl*[VF0aSաL\m"Eze{TduHB-zgXkMFHo6REQTN@UsBiGSmb6?~VCˋhVUV?^4`ZR)\52|e'*VV%AԔ@FpwDxn *yzS< LZAFK]Z|j?dUp%Θy35.\-7xB1rM%/H;#btnB0;?_0IGFwcw\  ƓAP%̘ uW?N\W>mC% <ޥ&|p[5\TC8ZK@W8hLBǿ9 ?1mxhZº+@5h G~-e`otIyȁUЙW=C=@ȟ[~{\L'~-ώQz/_vOvOtOtώ'[ݟO?kZ[ZG-m-Gt?mv> Wy%90byxtW]XlD `O^v>y}/>~xǵ:zuʳ L>)h?KZڡ=W{GkK[5B| lжqz5;?MӁ=C ̫3z衇z=ļ R$" "/*P@l4&O/H"H\W%'u9ii9Y rӳҳ׻;ɺ9 rrrrrrfoKt,)?¹Sih +[t;=,-fʦml[ӸӕXcrI%Yq紐%/t]캁o yxۘ$R*%=S%|g3/iy +CzC3jrӏH8R"}iXM AC88{-Lϓ9c-E;0 /!HvIp;6 -БVӤ}䀸(i%qх[Bw_jNዕ˄O_1YpEuic8> *̀kh Χ!{=]b͏;ȥe8@ YQ~qBWOOX\+@:̫z衇zqJʒ>1x0(f9J&'|$wHDm,wc&fJ1଎JYcLR\za֚XJ;I6*d7&U1lu cfbXWlR4xfAvGj`ޙ)kETjbluŰi-ccUxQɶ +cre:)3 /@ 0Fd-x p"E9ҷ&?oo'īx ˘~U1 + 2֦6LEį9rg9܊ +rLC׽ >VښUĒ2H\KS8,EOuIHIȩ?Sf$,?͏+_͢@_E<<˺4;D\EhǮwf;;Z Ky}c_?nZxA/UhXb;s!3& +H$FH8%nV;2D}1+|Wւ֒ſOB\feDUa9wg4?kD=2oI}/ki~|^k2ĖdE@c՛s2Jb6`7> dzWg^=C=C{,G"%5cM•[W/ZYxE|{F##;E+l+S jRW~&. *"Bن < u8m v=m 6[Cg8툠\TcB7[hv|;fCc4Q,) w&]o`l04OB gSY>d+8fJRM㌤jlQB|nhD^ ~Vċ~|E[/fyG+k=`+1*8]oݔPG6ƙg Ovy +)k毣EAbuA/>DIU2 + q hKBKvթkàO8ě YUN TU{H{SRw;`^R_1Sy*PԪ] Ū]ܕҪ(+cðs_I)}w)CW8O ?a[μz衇z衇D` & HQd|N@mb hd,U&j.1[T& EX[H֩Tuy:SW횊яvL9~n#cc&1PK\h 7;?aOԄ€%>b[l^iü0zS0c0n Z!#vN^$1jB)lNMp W|PTӸ^B?1%yy#+=ٰyY)m}O<0s 4'l瓗WQ /m|Ƅ5-{ +1:RuȜ&k +c+*DJ"9{Yۻ10tPM&;ӭK~A&8L^7om3glz87{nA_P~I g4!qUk3k y'e,,+&-wRaL{Gn?Dv= w7q2.l٧{o7Mmߺx#*`H?NɷQkb̫aO> +9ph^gY\5 yHI}`ÑJhLD x&#=xsE0oNtxuC=C=N0ieǰ!~Rtu8UA,+ltE8]Dv@NB([[D3;BV"hd;1CX- B6,=A|xy\328# KPP${Ϝhlتg%;>>2g}S}:Ph)nH+k|nstVǞy/_T {erKdT׍}6jHȒJ3͵E{ }śbiUK&\7(ߐU{*2ٶ,#ȲUUTmq^])_}/Qa@DnL[5[׿ꬭE Y,kn{-L{mfFNΩ~iَ'l{<P;g"r+\o]ї3&UleUUe{l9\K>ku*^^q;!+-LpCu+\f%M{&bڂݶlz/{ߏ;J*wY {c|; `۩^ fXOi Ӌ솇4izVs[}vNϧwثh&-dV*=z`rt'4L34L34SW:#N)m* + Ygoc7bQ~HC{5#|p." 0F#|a [g\oXٰuE÷= v6a`{,oĥd!KnJ"J^3~tXng.ܹ(jxì`G&67쵷\.qnOJ%I DP i̫fifiv@D<""e\Ra*0MfimȎSJ+ϧ)֘bkH-m65'ʚlIdo`boL5b9n5ژPVt.^kb`;g9_ڔloL4v%{URZڀUs;oԥ[ZӬiV-ֶtskFIVkܘlO>ВKfbXcs칕M=eQ o + NJ* 2TrbXreÇ9,[cRƮkr7Yl36!7%JU/^rPpRo;gʵZXjŖʫ׺(U; i,g-ϳUV+T+-;]GOiuK"Zgͱj>ϳV+)./GTudQRK;c***)vbMՑkb&o̳8P|t{Ge'%.hDDاJGWIiyRv:L,ȵU½À0=Zɖo~iP(L>;d=Ykf.aj؞Wgc\Kd@~iv&!bZ)]\\n:0-CfMS|WH^.1|'Nat:6j:ƼififwA%),DUyP%T*=Ɍ]xM EI@E0gT>Os/KpzYOYi*_\5 4aI)AقP{+^^rE n2/1dD>ARd|ٯ[A);HE{^}0 +`MЏN><~o/tDtCj(R`ܾv˷GR]@fMξSC2F/q$ж9%%C0dWV/Nm]Z?[HnA%Ԃ$uETQJOn Vsr?]D- d IPDCOdZkUOG]34@P0 q{ CX3y5L34L3 #f?fr!PPr4ž/.IEs]Zִ-ŭ-%i%MKS)l&&sSZIVkKfSI[%Ҙ^ذ\lbV^=[U /0r+#a׉KWXfGUBuy􋓙GjQ}TRbeKߴс ubIA譝zO$Lv"蘂@ 1+/CR<zȀ%IJ(`Hlt +* +ƴF em$Q@mb\t#é +#*˘Ö0GcQVR);1$dSdTQ&L> _{WVƀ1XZDdzB]=PKrQPr0E`w^1D_"^ȃ 2SäLb0B 0_t^y5L34L3S1 ^zwۍQ/*S7)]!˗e ?hxkDȪЈAA!#Ď 42$&($zDh$.Ÿ8k`Q74k3:ksZ^Mj⠣Nj +j$aN Wg/_[홙5-WDΣ ̻ذ,CFW1.iXٜrF$9R!UuAHSѻ \ 0 A=<?4' f,U +p% X K -M]Dv p7˘`kH-vpwWVT +DXI)\G*PIQuS-Ƌ2 ]4Do}?qPg.,.DAc%vRʎGtxQ} 062/Kq] + " qƋVp06|`vܵfjfif1+b]VjiL4XZR-- kc!ZfO5ZoۛLmE^}|_jѥR|u>$øa|7q/c]S՘3p)r1_5|/?]E~p(z%jtR#7Eg{uOziKKO]4bi,k|/;rYe.~{,G=^ +-z$U{QL%541/E#P!`nG? +*/AgX C耞yOQpH^1LN0%nBEZ1}ܯ٢x}/?NǠ_Ic7;J)UP3{=T1S0b5Zun#ˮ D`rXef/1zn7L,!K1X9:RY1%T*+Y ZJJָB%DMK!^]GXȷpB+DH +QCEdF\ F_MU @\E&}LӃ6pAYj˜2 +X{ b}yTu^T2VXmVv|0C1m ߮7Cu|PC=f/C1˰iC^|7SCcga w|QO'FuSӦsϯLJ+CJ[J!eItPyukG7zbחBfħ48Kg5jw^kԈQ8]((()DT HK"\EyA1%S h7q ,J1?oI$K$HQHxN?LAp_I[1!L޾ yE!hCyա f`^ cXuK[jA2ؿɡLUW+waTRBi:+Ԋz(є}$E=WthFc')Qy)N7Ej1fifi{(2cnܪ)F"G9;趪;I;Ұ +@ ЦS8RHBVHۉZ,ٖ{OoKa)Mafsiв%M޽sӓ-rl3gr=?ޑ[$8|?yJŁUkGIZ+Y|.#wHE^-9F~,2*+dV9eW_-EoZ);Zz8JrKjՊ5W_'[{ 2jUчxhAMϗ͵u b"  +ȱk&3^5yBeްٻ<{?eJnoy_0 + +Wq+/!M{HN;< ECblVܯrNOɨq +^N??TzRuŢ̇yŔ(K/ǜ z{<<-j^y +roqEkœZ "JxgOsռ7̊=g +{iσ &فz90ąg_ x̋’f-eњT. ա;r<-neZLԞt\/-<ZCgSM瘻TtiW٘V ӒhS3h}>vEM[LKӢbft=jcbRS<S.0m*R9l_څ=C/o X4tܫb:}РƝmq/vx+ !i+ZJaq^K"!8i{gݭs e;.ܶP].4o=?4Þ7ۀl]pFo y2­ -qպD$ysb&޿=9?3iL0/üb !lu#K69+<@k~=X#'u.98_aɑVl?*;"=&K &K#p$KdBe (u\qiAИ1IwH~+Dk=gzѻ|iQp?~&3PVpq勑w}_ +%?H +u1ߵq%;":1bkKDIU}|.U3TQڢ]EuR\ْS^,jPVv֋TF՗W9\n'n\#{+8Ӊ[ºo߁Z'^({Z8}Xx;?K/cޅ'+KÉ+L̉Zgޙ5swѫFLz"B +ɛ+cNږrۙCb4!T6Lr*R.;"98\$Kg(`iV$+DW\L[nX.K45X.=3OBY}k%,t?Q{mh*8?WoM|~MMį%DHN^8x׶C$ؖu}݅vOQ*jt]H U|oFx|ga2s.[1]_T՚mhﱣ!_Y]R]_Vxr61myDQRbvWGk`}[~`"2>lHOw}\x}=IBwSi7]ݗgM)hK*h~x׉@[y֗{ْ\Ok^A~6_WpU:CͺN8n[^-X/ p}<,k|[eQWtQW''`8peʛ M݅Ӈ_jE*:vJ + Ǽ>XnvhMo]JM?yk*\f|NmcG-3j x zfKD6Cyax֓0Yf,-Lv6Lޞ|{CCqaKFO^)9R.I + =$9'OE#dᲄpYR,.=6xgyC"3$!G3'Wž}ܵi页v:4?{= zFM:bZcS2'3w΢ >JWkBy,!ЋL!ϢimY&[6[81:1Oi2}*ʪ4HjG}|;Tw;9xmxX_llmw 9@ۛ3x`r󓸍JWv]y{LzCiԛ45gyi鮣si͛vZlw^19>y?]kG+S7eZӌ]ƾ7<6S95&st ?Cb\E kQ xRmnzDop&J> ; fa@h¼yn38鶳tń5ŚP!oEN҂.~C, Aڲp#n8žxgI ?CnwH>S$hќg\g/ZaP:8"ne atn\ ;łi{L/pr+/eY9,iI f"Έ86>~;sxNw9u"6pb7hVeIS+ݵy^th|oMɴԤjw\ +eyAYn9p@=[^\)=)9{"J~|1q_|@ƧW 93=|C.&,Q·yx lyb)v+To!>7i[њMi|+MgS65gQ-CF1T#e, t*[VϦFT>;إ:Ǝ\=j1i)-CKzKu =JʚE2Lc_FEأ5vk TsEMǧWF(ˏsyN +Y#3N +u F%/6 +$ZE~>5!#yDPZoUV4}.Xs?g–;c^+fڍ4fMEmݔ{\eOfn{M>#ҠSٗSi2vcO3|=<: 9w_`A (""¼DDDDDDDDD8Nn*a,zcSQeG>ӡ7u mBs' +̭z!U큧W#g%)pyZlLt,~{*RCp0řP!BpqqbDlGVmG$K#cN߰qwl{G_9Uhϩhˣr69>CQc%o\+ZshW\ \\c#~64QTg,tCP[LX<2TDIs?ުLU I_НRT\H)5v2ʚ⒍jco?|W ++KfyvGMO25'IS>6I1CXL޴yݲ#i_}ݑ`^Ӹݧ)?UT/oϝ={_2gyeM~&>! I^0"taEOαҵƪ&[5< i& kfD" @ ̋fbKgY.HdLL-=ܖ2Şa_aO%E֏6n$O^~#+EX'9n6YsL)̛9ymia0{d{d[ɚe2gFXg,U{^^9-]WՑ(?rSaUCbPHXB"OСSg]{պ<|/ +ro+f1QF{UY +!~,"Uڽ>յӸ+wwcaʦ{yfS TÝ^֐w}|E\fW!uߞb^YC[&M9k @ MlQ*¦z쎇e]>}hKJ9M.*ʘbKDؓ#퉑([R5yeKf_i[H_&̱&  SSxSp{iai"IQ QĹN}̟yۋ+O>+poT"[r'"[`?/S"Y3@ٙ|ڙxy~D5z͏ξת{\Ti?}jP&J)ɽ8s 27 7*iX؋xH2(X&vڳc]ZE%3J[vno$#={WԕxP2qĺ`D9a1ȖWzFBGyA @x% #4cYՕ:>>~%s"s\PZ\YoꓳFwtF1![[fIɾ\,Hdޔ0֦hcGUt}<04D?D)!|7x'OBT^ V(V<4991+r`ަ=U g?J]svW5.m zf>ų_fqc9I /|>,CU8(yA @yN}گ"v ϔߊAWzBObWHl"c."eEYwy 0U\N4HEӠQU)3"jZJ LҘoHP1`,|U5sޓe];m%lXtM3M 8}hƲsyA @yrF'LTtꘃ[s4HO3nX]+%bW{YZj+r*vwTy;;"wsu rU[qe6Wɷ V諿}wGe]^|Gf& 8ci]>]_V^5אV^sjq0Gcg|H/nRB9`" +K ǜeS+x)ْО%Zi12`FK +tƲ,W a^n@ &.j1#bS/5$ED82vAa~9۶|i N]7=61z~ 3筞=scOgm1?nւ1+c0w~bWO;*u`K|KJ3JlTwB d8Pޠd0|OEJɣ[F@ADtȘa(Y`&ePM?;V V!ާҐX໽umz.wkYUaװsUt|-> )C A @Mns5nn/=W+YY,v{xxꮬGq&oC'2#oh +H/@ 4a~Ui۞d]?\aA/@ 4armE%ـjw7vtyZ{[J-%[Vnz[VݲӾ۾VZVTp^®)TبH$ a=&Z,AHUc"z0jZvtP.Ւ;z-ec|%Az{ikXAM2/ L8h#XvqS4r +U:j2XKʪ; 5%~fƭ/jY۶RRZRWmsO'Bh#^?E@ MLIî!DQ]Ċ\`4H %Ì疊aƮɝzˈ]cF;c`\o~"3J5A#*-O"Ҷ\K*(IX,|}N0 sIcW .{L?4_3[C(jQJ,D:eƦ^`bŐ };pոbm۞ڶҪX̶xi_01X\yK]yA @ypԐ_ GD*Y( F1/׭eƮփ̶ڲw6}έUj.^FL#"I}4:,\Ha(,Ȝ`P vͩb_DO oaA!=yPypQ'K??m]>]I8z6*M|aib*rX/b5Ϳ{ޓkW瞺 =8b""A%ˏW/020/@ 4WMXQ !4;vVmw5mqTʭuu经:Gn,tw;stu仏UvUu?W^x"Yu߉Ϫy}•!$w +Gx@͐ n1SbW0hu&^&G* ~̫Ipw uι:Oц +-ײhD2ƚb\#4&|]E`V}Z?[$xXx*.FOWņu]͛Z%uNwGIMVW߮ŏ8@~n 3@ &*r yLGOgfM4ŦL[3-&pp[ۺTui~LGF R<mΘzͫϪzO/ ܍]ۼ+^[}Yrar@K.hfŒ~RjđqC7>70sa-$3roK$YW)8~)r׆| Ymz{3>_-嵇}*ek*c*]e,eyn'S*D mk=^0/@ hBH9#fѽ.Wt%9Җ?ytTUl*:IRIm$$$D$lPQ[G89N3A}_T%- ;WU,;/U^W|/_ IC:VP2 +ED ¹Ȅ06 +ӕEŋsZ|coPֿ,əþ./.iy"nJPp2eY“drd8t[=[:IeNӽ`mXl~[7-k'nҷk m $VMI?S¹G:l]}.Ө[TIQTuDB\YQe5VV>Zl,3+ƿDn%4h -N 8wqk Ѧhm^ۺbg"㒃Y闏w6V{cKuKJ[|ir՛g=-o?ăOkO{闞M-YQoI1OKk:5dZ埿6>2NGc/ /5\ +aqL2/{IE.y"<\_ʗkPXOfB+!&~sXbA - ++Cٚ0nk05,=k/!kA5q\C_ja~}LvkPBk[̔GrEL5f3_nl0u0uݼ3(a7v`ܺthH&.]TGq }>+,ΕHhC'Ϭ)[08͏ + )M( "Hm܄䜶^i.Ѿ֗-KlVeo(=';n}_˾31^+B #ڑv&䬿(RQQQQQQQQ3Ы@Wג ({;vYMSTOej 2L*eA|&4L_Ɨ0šlY0S᪃P}C0_nB{HUB7j4|}XBc0[N#*Lvḋ7ܖ[UEKc/SBvKݷHЏ[#Jkӎc^<+Һ)+eJ}bDʊ$y$萁N| sN~u d+:!|mpZ (2[?H.l}g;L^f`\6߼` 鴞4X' S1Pz@'zk7Č== =:l+EceL qȚ`$|XsP{K˲ +04c4$ߚ\wk#۲_kWkSޥKEEEEEEEEuSep⫄ۘ"vHn &$'ur3Pi[`2fgDs/F/GQh.oO*ofG"r"  zBpvcϏ¹|n$1AGGѡG_IʉdE1kgqsuvmv]7exr֐57Y1Wstkgk1+*^s~Ctڙh{ia@>;L![8Gek0~s$_mbrf$dG1kfg!DE|Iޅ:}Knߎ R{R#:x%¼jH*g^o%V=?Ɉb/e^********{{:}Sð $8Wiܴn;aC7N:e:Suh%F]s6EC! \i_pu^âm!V|Uj娂ʂ݊,2ܾޯ.O6#n?zgl`_LJ]930Ҿ8+UkJ W̕Ձ|m _LMX~_R IJ) Sk5LE8Wo6Խ.Ə N7y)~/}JQQQ楢a^y 鳘qYs؍3&D1Ltvc4m@eGq9WL㲧b<~UnÜ-6k7ELaWa˃A 81k4Oe[%m8(Ţj|{ZFU]Wgև%ԅsR0?{guqť(Jlh"AΛcy咶l>$E. E/AjFFFY9lWƒxH$[)q;;3%-N¿>yvw8?_{b +}/ykZ~- u_5>晋/Vq75y39i25RFnf1ĎB,-|†bvqpa + >b (إQ?d |eh$Y:h 43Jn6!i2U6ȧL|ʀbFwh6)ac&Z߸$BE,|)nIC;chFĬѓ7JYHi4 Id=t'EZri?dCt^lOmÿߛ2?, TB(3L$.Mh!AH۸Ǡ3`;ES kH-b +A7_1@ٶKIu!@Iڨ墵 MR^Ps6&RB:w_!a#7pIADO6&<7\BYꭕkE}n@N>`m ~8haovaTELa)\(Ro7o6pnN>BQgC?{躢ﮬ?+ 4}zاBwy#;R]i/yzM=`/#soG͛meZt7UqGgbgWfGgngw͗o国C;t}]{}]V_'f-]Vo՛i̵zsM~U[:D[w3썴]jsgpGWdWw3kڼ]ɝLK{rgw~+싈~z?;؀x[W_'ܓH6⭾{ M;&➞ǂҧ̰& kV%, +J.^=^+*HTX9Zc*,^T'/܅ggN;1>_oԳ1wbb7y 3o_2VOON̟ss'Γɹ㟰1oOЫgV{8>1^z||=5ə_\^WX"2/6^RÈdYfei[^CT„]QƟ-,uydVZ憢ь|WpSwzꅠ|ԍu(Rp +ֲ}NwU+ wUvN>BwKa7hktKJpzqN諓ܳ.>L߷Y[*;zkQ l@-WUلxKCȼZɼ+eY5ckI& +gf?:wsyznÉ3gsxI/~@ǩ3b想3Ō*^xr!3>T옶 +I+q*Đj"F7+DWOل]؄4=闤bƊ"ά%Mzg.ĭ(SO%vffYHIJY[-(U%7=',cR԰emYET.TȼI^U&4j~o5u}6srR7עg\)Zn䞾;pT=:P?Yp眨bXZz)ޓ]Jx҆t'Q#& 4 +)42릙BƼ*hauS+C3 +y0bB蠅;hAV4jG°,(csV(c3FOz5 Ivsۑ2{+h*x2/F0Sgd//鵠uB̄&2rA7qz +q+3sQV [1dG.Hup!=mZ⦆1Sr:O~]S6O6)}ML3)gsz,eLIa#OUړ3j.f d C넑!w_6Kڛ3GcoV( Ro={FڟshoNhI==9sQg!j7+䥇Q^F#\(QG:x :^h|m+neqP6ƶV=%v9Q1jCtxwhKW۾֮VoyrM l#/~E 4(l:8˼ru94 4ȼX#WH5c YU80YV eoT]-kezFU8`j~k +;.S*0eETR vqY_sK<[ sJUgW/|z*^^7)OTQ,iYxe]VeqD-*pW.d^ ԋR.ieR+ce\YR& cYeU2P\ʴfm:w=nr2\P"SrM&?qܥ7~:q??ctl4u#fӯ1gzV|9ʱWU|93/~M:`f_=:׎NvlcS;O}lO|˩>eQSX]ƥ xI-/hE=.oBȼBӗ*+"UaR5\VҊ +)l/)c29;ߓSO?>uz ӫ~w'.3q6ޣ=Fp*{g=7OLdwSpJva& ĀU XĠ2{º2QhgW Ű]Pmb&i&UJ'`T栽zw" +l/fM"++ihWeM+j +,ȼWWD5i=QWb=*ͼRMxF>LC۟7=#t-%f͞}wH]=MNc_߅:oNqFo71Ksܔ1Y/Ju.mdo]/eT62C9zWfrWy1II+M|)ݒ]=Q# )`mI]l/)YժTᲦUp +*ȼZkF.iˣy$2tG#g"v!bv)nA'w +ظ:"&!kr_PiyHdtF4ئAl `؛],d2/I*T\g4RlEaFȹk/7NM]#pK֞CRm +neoy(ݿ[vmݝ[1̶TћoiъK_8]##wmPE;h*GN[a=^A;֏~ (q#cRݼ`ZCT  y1÷M?o/xGiS[DKYRMcm{OzcH\ֶ1SUl|m6skz.TxVyK˚#x[I>Ö6.u^\bmgpd_> {Vr_|tEy[R-Z ms_ 9^ +yu^輍)>#@e]#iǜ_Z/iS#u#|k[[}ksu3h^nԼcyκkS}OM/"o:.?'k^мܳy^soV~g76<6V4/h^мy@y@ 4/4/h^мy@y@ 4/4/h^мy@@ 4/h^4/h^мy@@ 4/h^4/h^мy@@ 4/h^4/h^мy@@ 4/h^мh^мy@  4/h^4ALendstream +>> +endobj + +xref +0 856 +0000000000 65535 f +0000000012 00000 n +0000000182 00000 n +0000000327 00000 n +0000000409 00000 n +0000000543 00000 n +0000000635 00000 n +0000000769 00000 n +0000000848 00000 n +0000000985 00000 n +0000001074 00000 n +0000001183 00000 n +0000001293 00000 n +0000001403 00000 n +0000001513 00000 n +0000001627 00000 n +0000001730 00000 n +0000001872 00000 n +0000001960 00000 n +0000002069 00000 n +0000002177 00000 n +0000002284 00000 n +0000002392 00000 n +0000002507 00000 n +0000002614 00000 n +0000002717 00000 n +0000002821 00000 n +0000002928 00000 n +0000003036 00000 n +0000003147 00000 n +0000003259 00000 n +0000003371 00000 n +0000003484 00000 n +0000003595 00000 n +0000003715 00000 n +0000003822 00000 n +0000003930 00000 n +0000004040 00000 n +0000004152 00000 n +0000004261 00000 n +0000004375 00000 n +0000004481 00000 n +0000004588 00000 n +0000004699 00000 n +0000004811 00000 n +0000004917 00000 n +0000005024 00000 n +0000005118 00000 n +0000005272 00000 n +0000005364 00000 n +0000005470 00000 n +0000005581 00000 n +0000005689 00000 n +0000005803 00000 n +0000005902 00000 n +0000006002 00000 n +0000006092 00000 n +0000006236 00000 n +0000006334 00000 n +0000006447 00000 n +0000006554 00000 n +0000006669 00000 n +0000006786 00000 n +0000006893 00000 n +0000007000 00000 n +0000007106 00000 n +0000007214 00000 n +0000007308 00000 n +0000007449 00000 n +0000007543 00000 n +0000007651 00000 n +0000007754 00000 n +0000007858 00000 n +0000007963 00000 n +0000008070 00000 n +0000008175 00000 n +0000008282 00000 n +0000008397 00000 n +0000008512 00000 n +0000008605 00000 n +0000008744 00000 n +0000008837 00000 n +0000008944 00000 n +0000009046 00000 n +0000009149 00000 n +0000009238 00000 n +0000009377 00000 n +0000009470 00000 n +0000009577 00000 n +0000009670 00000 n +0000009810 00000 n +0000009901 00000 n +0000010007 00000 n +0000010110 00000 n +0000010200 00000 n +0000010340 00000 n +0000010435 00000 n +0000010544 00000 n +0000010638 00000 n +0000010721 00000 n +0000010760 00000 n +0000011287 00000 n +0000011527 00000 n +0000011667 00000 n +0000011692 00000 n +0000011932 00000 n +0000013015 00000 n +0000013040 00000 n +0000013280 00000 n +0000014359 00000 n +0000014944 00000 n +0000015100 00000 n +0000015257 00000 n +0000015413 00000 n +0000015570 00000 n +0000015726 00000 n +0000015883 00000 n +0000016039 00000 n +0000016196 00000 n +0000016352 00000 n +0000016509 00000 n +0000016665 00000 n +0000016822 00000 n +0000016978 00000 n +0000017135 00000 n +0000017291 00000 n +0000017448 00000 n +0000017604 00000 n +0000017761 00000 n +0000017918 00000 n +0000018076 00000 n +0000018233 00000 n +0000018391 00000 n +0000018548 00000 n +0000018706 00000 n +0000018863 00000 n +0000019021 00000 n +0000019178 00000 n +0000019336 00000 n +0000019493 00000 n +0000019651 00000 n +0000019808 00000 n +0000019966 00000 n +0000020123 00000 n +0000020281 00000 n +0000020438 00000 n +0000020596 00000 n +0000020753 00000 n +0000020911 00000 n +0000021068 00000 n +0000021226 00000 n +0000021383 00000 n +0000021541 00000 n +0000021698 00000 n +0000021856 00000 n +0000022013 00000 n +0000022171 00000 n +0000022328 00000 n +0000022486 00000 n +0000022643 00000 n +0000022801 00000 n +0000022958 00000 n +0000023116 00000 n +0000023273 00000 n +0000023431 00000 n +0000023588 00000 n +0000023746 00000 n +0000023903 00000 n +0000024061 00000 n +0000024218 00000 n +0000024376 00000 n +0000024533 00000 n +0000024691 00000 n +0000024847 00000 n +0000025004 00000 n +0000025159 00000 n +0000025315 00000 n +0000025470 00000 n +0000025626 00000 n +0000025866 00000 n +0000026929 00000 n +0000027548 00000 n +0000027705 00000 n +0000027863 00000 n +0000028020 00000 n +0000028178 00000 n +0000028335 00000 n +0000028493 00000 n +0000028650 00000 n +0000028808 00000 n +0000028965 00000 n +0000029123 00000 n +0000029280 00000 n +0000029438 00000 n +0000029595 00000 n +0000029753 00000 n +0000029910 00000 n +0000030068 00000 n +0000030225 00000 n +0000030383 00000 n +0000030540 00000 n +0000030698 00000 n +0000030855 00000 n +0000031013 00000 n +0000031170 00000 n +0000031328 00000 n +0000031485 00000 n +0000031643 00000 n +0000031800 00000 n +0000031958 00000 n +0000032115 00000 n +0000032273 00000 n +0000032430 00000 n +0000032588 00000 n +0000032745 00000 n +0000032903 00000 n +0000033060 00000 n +0000033218 00000 n +0000033375 00000 n +0000033533 00000 n +0000033690 00000 n +0000033848 00000 n +0000034005 00000 n +0000034163 00000 n +0000034320 00000 n +0000034478 00000 n +0000034635 00000 n +0000034793 00000 n +0000034950 00000 n +0000035108 00000 n +0000035265 00000 n +0000035423 00000 n +0000035580 00000 n +0000035738 00000 n +0000035895 00000 n +0000036053 00000 n +0000036210 00000 n +0000036368 00000 n +0000036525 00000 n +0000036683 00000 n +0000036840 00000 n +0000036998 00000 n +0000037155 00000 n +0000037313 00000 n +0000037470 00000 n +0000037628 00000 n +0000037785 00000 n +0000037943 00000 n +0000038100 00000 n +0000038258 00000 n +0000038413 00000 n +0000038569 00000 n +0000038724 00000 n +0000038880 00000 n +0000039120 00000 n +0000039952 00000 n +0000040355 00000 n +0000040512 00000 n +0000040670 00000 n +0000040827 00000 n +0000040985 00000 n +0000041142 00000 n +0000041300 00000 n +0000041457 00000 n +0000041615 00000 n +0000041772 00000 n +0000041930 00000 n +0000042087 00000 n +0000042245 00000 n +0000042402 00000 n +0000042560 00000 n +0000042717 00000 n +0000042875 00000 n +0000043032 00000 n +0000043190 00000 n +0000043347 00000 n +0000043505 00000 n +0000043662 00000 n +0000043820 00000 n +0000043977 00000 n +0000044135 00000 n +0000044292 00000 n +0000044450 00000 n +0000044607 00000 n +0000044765 00000 n +0000044922 00000 n +0000045080 00000 n +0000045237 00000 n +0000045395 00000 n +0000045552 00000 n +0000045710 00000 n +0000045867 00000 n +0000046025 00000 n +0000046182 00000 n +0000046340 00000 n +0000046497 00000 n +0000046655 00000 n +0000046812 00000 n +0000046970 00000 n +0000047127 00000 n +0000047285 00000 n +0000047441 00000 n +0000047599 00000 n +0000047839 00000 n +0000047936 00000 n +0000047961 00000 n +0000048201 00000 n +0000049205 00000 n +0000049230 00000 n +0000049470 00000 n +0000050306 00000 n +0000050331 00000 n +0000050571 00000 n +0000051044 00000 n +0000051069 00000 n +0000051309 00000 n +0000054168 00000 n +0000054209 00000 n +0000054365 00000 n +0000054521 00000 n +0000054761 00000 n +0000057137 00000 n +0000057202 00000 n +0000057359 00000 n +0000057516 00000 n +0000057673 00000 n +0000057830 00000 n +0000057988 00000 n +0000058228 00000 n +0000060380 00000 n +0000060471 00000 n +0000060628 00000 n +0000060785 00000 n +0000060942 00000 n +0000061099 00000 n +0000061256 00000 n +0000061413 00000 n +0000061571 00000 n +0000061728 00000 n +0000061968 00000 n +0000064357 00000 n +0000064448 00000 n +0000064606 00000 n +0000064763 00000 n +0000064920 00000 n +0000065077 00000 n +0000065235 00000 n +0000065392 00000 n +0000065550 00000 n +0000065705 00000 n +0000065945 00000 n +0000067338 00000 n +0000067419 00000 n +0000067576 00000 n +0000067733 00000 n +0000067890 00000 n +0000068047 00000 n +0000068204 00000 n +0000068362 00000 n +0000068519 00000 n +0000068759 00000 n +0000070662 00000 n +0000070769 00000 n +0000070926 00000 n +0000071083 00000 n +0000071240 00000 n +0000071397 00000 n +0000071554 00000 n +0000071711 00000 n +0000071868 00000 n +0000072025 00000 n +0000072183 00000 n +0000072340 00000 n +0000072580 00000 n +0000074082 00000 n +0000074163 00000 n +0000074320 00000 n +0000074477 00000 n +0000074635 00000 n +0000074792 00000 n +0000074949 00000 n +0000075106 00000 n +0000075262 00000 n +0000075502 00000 n +0000077991 00000 n +0000078040 00000 n +0000078197 00000 n +0000078354 00000 n +0000078510 00000 n +0000078750 00000 n +0000080577 00000 n +0000080692 00000 n +0000080849 00000 n +0000081006 00000 n +0000081164 00000 n +0000081322 00000 n +0000081480 00000 n +0000081638 00000 n +0000081795 00000 n +0000081952 00000 n +0000082109 00000 n +0000082267 00000 n +0000082424 00000 n +0000082664 00000 n +0000085248 00000 n +0000085297 00000 n +0000085454 00000 n +0000085611 00000 n +0000085768 00000 n +0000086008 00000 n +0000088071 00000 n +0000088144 00000 n +0000088301 00000 n +0000088458 00000 n +0000088615 00000 n +0000088772 00000 n +0000088929 00000 n +0000089086 00000 n +0000089326 00000 n +0000091345 00000 n +0000091444 00000 n +0000091601 00000 n +0000091758 00000 n +0000091915 00000 n +0000092073 00000 n +0000092230 00000 n +0000092387 00000 n +0000092544 00000 n +0000092702 00000 n +0000092859 00000 n +0000093099 00000 n +0000094652 00000 n +0000094717 00000 n +0000094874 00000 n +0000095031 00000 n +0000095188 00000 n +0000095346 00000 n +0000095503 00000 n +0000095743 00000 n +0000097985 00000 n +0000098066 00000 n +0000098224 00000 n +0000098381 00000 n +0000098538 00000 n +0000098695 00000 n +0000098852 00000 n +0000099010 00000 n +0000099167 00000 n +0000099407 00000 n +0000100636 00000 n +0000100685 00000 n +0000100842 00000 n +0000100999 00000 n +0000101156 00000 n +0000101396 00000 n +0000102510 00000 n +0000102583 00000 n +0000102741 00000 n +0000102897 00000 n +0000103054 00000 n +0000103210 00000 n +0000103366 00000 n +0000103523 00000 n +0000103763 00000 n +0000105664 00000 n +0000105721 00000 n +0000105878 00000 n +0000106035 00000 n +0000106191 00000 n +0000106347 00000 n +0000106587 00000 n +0000108703 00000 n +0000108818 00000 n +0000108975 00000 n +0000109132 00000 n +0000109289 00000 n +0000109446 00000 n +0000109603 00000 n +0000109759 00000 n +0000109915 00000 n +0000110073 00000 n +0000110229 00000 n +0000110384 00000 n +0000110539 00000 n +0000110779 00000 n +0000112548 00000 n +0000112647 00000 n +0000112804 00000 n +0000112961 00000 n +0000113117 00000 n +0000113273 00000 n +0000113430 00000 n +0000113587 00000 n +0000113744 00000 n +0000113900 00000 n +0000114056 00000 n +0000114296 00000 n +0000115774 00000 n +0000115815 00000 n +0000115971 00000 n +0000116128 00000 n +0000116368 00000 n +0000118059 00000 n +0000118092 00000 n +0000118249 00000 n +0000118489 00000 n +0000120306 00000 n +0000120339 00000 n +0000120496 00000 n +0000120736 00000 n +0000122124 00000 n +0000122181 00000 n +0000122338 00000 n +0000122495 00000 n +0000122652 00000 n +0000122809 00000 n +0000123049 00000 n +0000124904 00000 n +0000124945 00000 n +0000125102 00000 n +0000125257 00000 n +0000125497 00000 n +0000127487 00000 n +0000127528 00000 n +0000127685 00000 n +0000127842 00000 n +0000128082 00000 n +0000129826 00000 n +0000129875 00000 n +0000130032 00000 n +0000130189 00000 n +0000130346 00000 n +0000130586 00000 n +0000132337 00000 n +0000132378 00000 n +0000132535 00000 n +0000132692 00000 n +0000132932 00000 n +0000134827 00000 n +0000134892 00000 n +0000135049 00000 n +0000135206 00000 n +0000135364 00000 n +0000135519 00000 n +0000135674 00000 n +0000135914 00000 n +0000137715 00000 n +0000137764 00000 n +0000137922 00000 n +0000138079 00000 n +0000138236 00000 n +0000138476 00000 n +0000139991 00000 n +0000140064 00000 n +0000140221 00000 n +0000140378 00000 n +0000140535 00000 n +0000140692 00000 n +0000140848 00000 n +0000141003 00000 n +0000141243 00000 n +0000142762 00000 n +0000142811 00000 n +0000142968 00000 n +0000143125 00000 n +0000143282 00000 n +0000143522 00000 n +0000145146 00000 n +0000145203 00000 n +0000145360 00000 n +0000145517 00000 n +0000145674 00000 n +0000145831 00000 n +0000146071 00000 n +0000147554 00000 n +0000147595 00000 n +0000147752 00000 n +0000147909 00000 n +0000148149 00000 n +0000149862 00000 n +0000149903 00000 n +0000150060 00000 n +0000150217 00000 n +0000150457 00000 n +0000152519 00000 n +0000152568 00000 n +0000152725 00000 n +0000152882 00000 n +0000153039 00000 n +0000153279 00000 n +0000155476 00000 n +0000155533 00000 n +0000155690 00000 n +0000155847 00000 n +0000156004 00000 n +0000156162 00000 n +0000156402 00000 n +0000157880 00000 n +0000157945 00000 n +0000158102 00000 n +0000158259 00000 n +0000158416 00000 n +0000158573 00000 n +0000158730 00000 n +0000158970 00000 n +0000160730 00000 n +0000160771 00000 n +0000160928 00000 n +0000161085 00000 n +0000161325 00000 n +0000163333 00000 n +0000163398 00000 n +0000163555 00000 n +0000163712 00000 n +0000163869 00000 n +0000164024 00000 n +0000164179 00000 n +0000164419 00000 n +0000166078 00000 n +0000166127 00000 n +0000166284 00000 n +0000166441 00000 n +0000166598 00000 n +0000166838 00000 n +0000168640 00000 n +0000168705 00000 n +0000168862 00000 n +0000169020 00000 n +0000169177 00000 n +0000169334 00000 n +0000169489 00000 n +0000169729 00000 n +0000171428 00000 n +0000171485 00000 n +0000171642 00000 n +0000171799 00000 n +0000171956 00000 n +0000172113 00000 n +0000172353 00000 n +0000173794 00000 n +0000173835 00000 n +0000173992 00000 n +0000174149 00000 n +0000174389 00000 n +0000175702 00000 n +0000175759 00000 n +0000175916 00000 n +0000176073 00000 n +0000176230 00000 n +0000176387 00000 n +0000176627 00000 n +0000177235 00000 n +0000177260 00000 n +0000177500 00000 n +0000179230 00000 n +0000179897 00000 n +0000180053 00000 n +0000180210 00000 n +0000180366 00000 n +0000180523 00000 n +0000180680 00000 n +0000180837 00000 n +0000180994 00000 n +0000181151 00000 n +0000181308 00000 n +0000181465 00000 n +0000181622 00000 n +0000181779 00000 n +0000181936 00000 n +0000182093 00000 n +0000182250 00000 n +0000182407 00000 n +0000182563 00000 n +0000182720 00000 n +0000182877 00000 n +0000183034 00000 n +0000183191 00000 n +0000183348 00000 n +0000183505 00000 n +0000183662 00000 n +0000183819 00000 n +0000183975 00000 n +0000184131 00000 n +0000184287 00000 n +0000184443 00000 n +0000184599 00000 n +0000184756 00000 n +0000184913 00000 n +0000185070 00000 n +0000185227 00000 n +0000185384 00000 n +0000185541 00000 n +0000185698 00000 n +0000185854 00000 n +0000186009 00000 n +0000186164 00000 n +0000186322 00000 n +0000186480 00000 n +0000186638 00000 n +0000186796 00000 n +0000186954 00000 n +0000187112 00000 n +0000187270 00000 n +0000187428 00000 n +0000187586 00000 n +0000187744 00000 n +0000187902 00000 n +0000188060 00000 n +0000188218 00000 n +0000188376 00000 n +0000188534 00000 n +0000188692 00000 n +0000188850 00000 n +0000189008 00000 n +0000189166 00000 n +0000189324 00000 n +0000189482 00000 n +0000189640 00000 n +0000189798 00000 n +0000189956 00000 n +0000190114 00000 n +0000190272 00000 n +0000190430 00000 n +0000190588 00000 n +0000190746 00000 n +0000190904 00000 n +0000191062 00000 n +0000191220 00000 n +0000191378 00000 n +0000191536 00000 n +0000191694 00000 n +0000191852 00000 n +0000192010 00000 n +0000192167 00000 n +0000192407 00000 n +0000193069 00000 n +0000193208 00000 n +0000193364 00000 n +0000193521 00000 n +0000193678 00000 n +0000193835 00000 n +0000193992 00000 n +0000194149 00000 n +0000194306 00000 n +0000194463 00000 n +0000194620 00000 n +0000194777 00000 n +0000194934 00000 n +0000195091 00000 n +0000195248 00000 n +0000195405 00000 n +0000195464 00000 n +0000197885 00000 n +0000200311 00000 n +0000202730 00000 n +0000202773 00000 n +0000204189 00000 n +0000204246 00000 n +0000204302 00000 n +0000204358 00000 n +0000204414 00000 n +0000204470 00000 n +0000204526 00000 n +0000204582 00000 n +0000204638 00000 n +0000204694 00000 n +0000204750 00000 n +0000204806 00000 n +0000204862 00000 n +0000204918 00000 n +0000204974 00000 n +0000205030 00000 n +0000205086 00000 n +0000205142 00000 n +0000205198 00000 n +0000205254 00000 n +0000205310 00000 n +0000205366 00000 n +0000205422 00000 n +0000205478 00000 n +0000205534 00000 n +0000205590 00000 n +0000205646 00000 n +0000205702 00000 n +0000205758 00000 n +0000205814 00000 n +0000205870 00000 n +0000205926 00000 n +0000205982 00000 n +0000206038 00000 n +0000206094 00000 n +0000206150 00000 n +0000206206 00000 n +0000206262 00000 n +0000206318 00000 n +0000206374 00000 n +0000206430 00000 n +0000206486 00000 n +0000206542 00000 n +0000206598 00000 n +0000206654 00000 n +0000206710 00000 n +0000206766 00000 n +0000206822 00000 n +0000206878 00000 n +0000206934 00000 n +0000206990 00000 n +0000207046 00000 n +0000207102 00000 n +0000207158 00000 n +0000207214 00000 n +0000207270 00000 n +0000207326 00000 n +0000207382 00000 n +0000207438 00000 n +0000207494 00000 n +0000207550 00000 n +0000207606 00000 n +0000207662 00000 n +0000207718 00000 n +0000207774 00000 n +0000207830 00000 n +0000207886 00000 n +0000207942 00000 n +0000207998 00000 n +0000208054 00000 n +0000208110 00000 n +0000208166 00000 n +0000208222 00000 n +0000208278 00000 n +0000208334 00000 n +0000208390 00000 n +0000208446 00000 n +0000208502 00000 n +0000208558 00000 n +0000208614 00000 n +0000208670 00000 n +0000208726 00000 n +0000208782 00000 n +0000208838 00000 n +0000208894 00000 n +0000208950 00000 n +0000209006 00000 n +0000209062 00000 n +0000209118 00000 n +0000209174 00000 n +0000209230 00000 n +0000209286 00000 n +0000209342 00000 n +0000209398 00000 n +0000209454 00000 n +0000209510 00000 n +0000209566 00000 n +0000209622 00000 n +0000209678 00000 n +0000209735 00000 n + +trailer +<< +/Size 856 +/Root 2 0 R +/Info 1 0 R +>> + +startxref +381292 +%%EOF diff --git a/CyUSBSerial_SDK_Linux/common/header/CyUSBSerial.h b/CyUSBSerial_SDK_Linux/common/header/CyUSBSerial.h new file mode 100644 index 0000000..6324b3f --- /dev/null +++ b/CyUSBSerial_SDK_Linux/common/header/CyUSBSerial.h @@ -0,0 +1,1842 @@ +/* +## Cypress USB Serial Library header file (CyUSBSerial.h) +## =========================== +## +## Copyright Cypress Semiconductor Corporation, 2012-2013, +## All Rights Reserved +## UNPUBLISHED, LICENSED SOFTWARE. +## +## CONFIDENTIAL AND PROPRIETARY INFORMATION +## WHICH IS THE PROPERTY OF CYPRESS. +## +## Use of this file is governed +## by the license agreement included in the file +## +## /license/license.txt +## +## where is the Cypress software +## installation root directory path. +## +## =========================== +*/ +#ifndef _INCLUDED_CYUSBSERIAL_H_ +#define _INCLUDED_CYUSBSERIAL_H_ + +#ifdef __cplusplus + #define CppCALLCONVEN extern "C" +#else + #define CppCALLCONVEN +#endif + +/*This is to export Windows API*/ +#ifdef WIN32 + #ifdef CYUSBSERIAL_EXPORTS + #define CYWINEXPORT CppCALLCONVEN __declspec(dllexport) + #define WINCALLCONVEN + #define LINUXCALLCONVEN + #else + #define CYWINEXPORT CppCALLCONVEN __declspec(dllimport) + #define WINCALLCONVEN + #define LINUXCALLCONVEN + #endif +#else /*Linux and MAC*/ + #define CYWINEXPORT CppCALLCONVEN + #define WINCALLCONVEN + #define LINUXCALLCONVEN + #ifndef BOOL + typedef bool BOOL; + #endif +#endif +/*************************************************************************************/ +/*******************************Constants*********************************************/ +/*************************************************************************************/ + +/*@@Constants +This section contains details of the all the constants +that are part of Cypress USB Serial driver library. +*/ +#define CY_STRING_DESCRIPTOR_SIZE 256 /*String descriptor size */ +#define CY_MAX_DEVICE_INTERFACE 5 /*Maximum number of interfaces */ + +/* +Summary +This section contains USB Serial library version information. +*/ + +/* Major version number for library. */ +#define CY_US_VERSION_MAJOR (1) + +/* Minor version number for library. */ +#define CY_US_VERSION_MINOR (0) + +/* Patch version number for library. */ +#define CY_US_VERSION_PATCH (0) + +/* Version number for the device. */ +#define CY_US_VERSION ((CY_US_VERSION_MAJOR) | \ + (CY_US_VERSION_MINOR << 8) | \ + (CY_US_VERSION_PATCH << 16)) +/* Library build number. */ +#define CY_US_VERSION_BUILD (59) + + +/*************************************************************************************/ +/****************************Data Type Definitions************************************/ +/*************************************************************************************/ + +/*@@Data Types +This section defines the data types that are used by +Cypress USB Serial driver library. +*/ +#ifndef UINT32 + typedef unsigned int UINT32; +#endif +#ifndef UINT8 + typedef unsigned char UINT8; +#endif +#ifndef UINT16 + typedef unsigned short UINT16; +#endif +#ifndef CHAR + typedef char CHAR; +#endif +#ifndef UCHAR + typedef unsigned char UCHAR; +#endif + +/* Summary + CyUSB Device Handle. + + Description + The handle is used by application to communicate with USB serial device. + The handle is obtained by calling CyOpen. + + See Also + * CyOpen +*/ +typedef void* CY_HANDLE; + +/* +Summary +Function pointer for getting async error/success notification on UART/SPI + +Description +This function pointer that will be passed to CySetEventNotification and get +a callback with a 2 byte value bit map that reports error/events triggered during UART/SPI transaction. +The bit map is defined in CY_CALLBACK_EVENTS. + +See also +* CY_CALLBACK_EVENTS +*/ +typedef void (*CY_EVENT_NOTIFICATION_CB_FN)(UINT16 eventsNotified); + +/* +Summary +This structure is used to hold VID and PID of USB device + +Description +This Strucuture holds the VID and PID of a USB device. + +See Also +* CY_DEVICE_INFO +* CyGetDeviceInfoVidPid +*/ +typedef struct _CY_VID_PID { + + UINT16 vid; /*Holds the VID of the device*/ + UINT16 pid; /*Holds the PID of the device*/ + +} CY_VID_PID, *PCY_VID_PID; + +/* Summary +This structure is used to hold version information of the library. + +Description +This structure can be used to retrive the version information of the library. + +See Also +* CyGetLibraryVersion +*/ +typedef struct _CY_LIBRARY_VERSION { + + UINT8 majorVersion; /*The major version of the library*/ + UINT8 minorVersion; /*The minor version of the library*/ + UINT16 patch; /*The patch number of the library*/ + UINT8 buildNumber; /*The build number of the library*/ + +} CY_LIBRARY_VERSION, *PCY_LIBRARY_VERSION; + +/* +Summary +This structure is used to hold firmware version of the USB Serial device. + +Description +This structure holds the version information of the USB serial device. +It has major version, minor version, patch number and build number. + +See Also +* CyGetFirmwareVersion +*/ +typedef struct _CY_FIRMWARE_VERSION { + + UINT8 majorVersion; /*Major version of the Firmware*/ + UINT8 minorVersion; /*Minor version of the Firmware*/ + UINT16 patchNumber; /*Patch Number of the Firmware*/ + UINT32 buildNumber; /*Build Number of the Firmware*/ + +} CY_FIRMWARE_VERSION, *PCY_FIRMWARE_VERSION; + +/* Summary +Enumeration defining list of USB device classes supported by USB Serial device. + +Description +This is the list of USB device classes supported by USB Serial device. + +See Also +* CY_DEVICE_INFO +* CyGetDeviceInfo +* CyGetDeviceInfoVidPid +*/ +typedef enum _CY_DEVICE_CLASS{ + + CY_CLASS_DISABLED = 0, /*None or the interface is disabled */ + CY_CLASS_CDC = 0x02, /*CDC ACM class*/ + CY_CLASS_PHDC = 0x0F, /*PHDC class */ + CY_CLASS_VENDOR = 0xFF /*VENDOR specific class*/ + +} CY_DEVICE_CLASS; + +/* Summary +Enumeration defining list of device types supported by USB Serial device in each interface. + +Description +This is the list of device types supported by USB Serial device when the interface type is +configured as CY_CLASS_VENDOR. The interface type can be queried from the device by using CyGetDeviceInfo +and CyGetDeviceInfoVidPid APIs. + +The member of CY_DEVICE_INFO structure contains the interface type. + +See Also +* CY_DEVICE_INFO +* CyGetDeviceInfo +* CyGetDeviceInfoVidPid +*/ +typedef enum _CY_DEVICE_TYPE { + + CY_TYPE_DISABLED = 0, /*Invalid device type or interface is not CY_CLASS_VENDOR*/ + CY_TYPE_UART, /*Interface of device is of type UART*/ + CY_TYPE_SPI, /*Interface of device is of type SPI */ + CY_TYPE_I2C, /*Interface of device is of type I2C */ + CY_TYPE_JTAG, /*Interface of device is of type JTAG*/ + CY_TYPE_MFG /*Interface of device is in Manufacturing mode*/ + +} CY_DEVICE_TYPE; + +/* Summary +This enumeration type defines the available device serial blocks. + +Description +USB Serial device has up to two configurable serial blocks. UART, SPI, I2C or JTAG functionality can be +configured and used in these serial block. Windows driver binds to a serial block rather than the entire device. +So, it is essential to find out which serial block to which current communications are directed. These enumeration +structure provides the possible SERIAL BLOCK Options. + +This enumration data type is a member of CY_DEVICE_INFO structure. + +This data type information doesn't apply for non-windows operating system. + +See Also +CY_DEVICE_INFO +CyGetDeviceInfo +CyGetDeviceInfoVidPid +*/ + +typedef enum _CY_DEVICE_SERIAL_BLOCK +{ + SerialBlock_SCB0 = 0, /*Serial Block Number 0*/ + SerialBlock_SCB1, /*Serial Block Number 1*/ + SerialBlock_MFG /*Serial Block Manufacturing Interface.*/ + +} CY_DEVICE_SERIAL_BLOCK; + +/* Summary +Structure to hold information of the device connected to host. + +Description +The structure holds the information about device currently connected to host. The information +can be obtained by using CyGetDeviceInfo and CyGetDeviceInfoVidPid APIs. + +The information includes VID, PID, number of interfaces, string descriptors, device type +and device class supported by each interface. Device type is valid only if the interface is CY_CLASS_VENDOR. + +See Also +CY_VID_PID +CY_DEVICE_CLASS +CY_DEVICE_TYPE +CyGetDeviceInfo +CyGetDeviceInfoVidPid +*/ +typedef struct _CY_DEVICE_INFO { + + CY_VID_PID vidPid; /*VID and PID*/ + UCHAR numInterfaces; /*Number of interfaces supported*/ + UCHAR manufacturerName [CY_STRING_DESCRIPTOR_SIZE]; /*Manufacturer name*/ + UCHAR productName [CY_STRING_DESCRIPTOR_SIZE]; /*Product name*/ + UCHAR serialNum [CY_STRING_DESCRIPTOR_SIZE]; /*Serial number*/ + UCHAR deviceFriendlyName [CY_STRING_DESCRIPTOR_SIZE]; /*Device friendly name : Windows only*/ + CY_DEVICE_TYPE deviceType [CY_MAX_DEVICE_INTERFACE]; /*Type of the device each interface has(Valid only + for USB Serial Device) and interface in vendor class*/ + CY_DEVICE_CLASS deviceClass [CY_MAX_DEVICE_INTERFACE]; /*Interface class of each interface*/ + +#ifdef WIN32 + CY_DEVICE_SERIAL_BLOCK deviceBlock; /* On Windows, each USB Serial device interface is associated with a + separate driver instance. This variable represents the present driver + interface instance that is associated with a serial block. */ +#endif + +} CY_DEVICE_INFO,*PCY_DEVICE_INFO; + +/* Summary +This structure is used to hold data buffer information. + +Description +This strucuture is used by all the data transaction APIs in the library to perform read, write +operations. +Before using a variable of this strucutre users need to initialize various members appropriately. + +See Also +* CyUartRead +* CyUartWrite +* CyI2cRead +* CyI2cWrite +* CySpiReadWrite +* CyJtagWrite +* CyJtagRead +*/ +typedef struct _CY_DATA_BUFFER { + + UCHAR *buffer; /*Pointer to the buffer from where the data is read/written */ + UINT32 length; /*Length of the buffer */ + UINT32 transferCount; /*Number of bytes actually read/written*/ + +} CY_DATA_BUFFER,*PCY_DATA_BUFFER; + +/* Summary +Enumeration defining return status of USB serial library APIs + +Description +The enumeration CY_RETURN_STATUS holds the different return status of all the +APIs supported by USB Serial library. +*/ +typedef enum _CY_RETURN_STATUS{ + + CY_SUCCESS = 0, /*API returned successfully without any errors.*/ + CY_ERROR_ACCESS_DENIED, /*Access of the API is denied for the application */ + CY_ERROR_DRIVER_INIT_FAILED, /*Driver initialisation failed*/ + CY_ERROR_DEVICE_INFO_FETCH_FAILED, /*Device information fetch failed */ + CY_ERROR_DRIVER_OPEN_FAILED, /*Failed to open a device in the library */ + CY_ERROR_INVALID_PARAMETER, /*One or more parameters sent to the API was invalid*/ + CY_ERROR_REQUEST_FAILED, /*Request sent to USB Serial device failed */ + CY_ERROR_DOWNLOAD_FAILED, /*Firmware download to the device failed */ + CY_ERROR_FIRMWARE_INVALID_SIGNATURE, /*Invalid Firmware signature in firmware file*/ + CY_ERROR_INVALID_FIRMWARE, /*Invalid firmware */ + CY_ERROR_DEVICE_NOT_FOUND, /*Device disconnected */ + CY_ERROR_IO_TIMEOUT, /*Timed out while processing a user request*/ + CY_ERROR_PIPE_HALTED, /*Pipe halted while trying to transfer data*/ + CY_ERROR_BUFFER_OVERFLOW, /*OverFlow of buffer while trying to read/write data */ + CY_ERROR_INVALID_HANDLE, /*Device handle is invalid */ + CY_ERROR_ALLOCATION_FAILED, /*Error in Allocation of the resource inside the library*/ + CY_ERROR_I2C_DEVICE_BUSY, /*I2C device busy*/ + CY_ERROR_I2C_NAK_ERROR, /*I2C device NAK*/ + CY_ERROR_I2C_ARBITRATION_ERROR, /*I2C bus arbitration error*/ + CY_ERROR_I2C_BUS_ERROR, /*I2C bus error*/ + CY_ERROR_I2C_BUS_BUSY, /*I2C bus is busy*/ + CY_ERROR_I2C_STOP_BIT_SET, /*I2C master has sent a stop bit during a transaction*/ + CY_ERROR_STATUS_MONITOR_EXIST /*API Failed because the SPI/UART status monitor thread already exists*/ +} CY_RETURN_STATUS; + +/* Summary +This structure is used to store configuration of I2C module. + +Description +The structure contains parameters that are used in configuring I2C module of +Cypress USB Serial device. CyGetI2cConfig and CySetI2cConfig APIs can be used to +retrieve and configure I2C module respectively. + +See Also +* CyGetI2cConfig +* CySetI2cConfig +*/ +typedef struct _CY_I2C_CONFIG{ + + UINT32 frequency; /* I2C clock frequency 1KHz to 400KHz*/ + UINT8 slaveAddress; /* Slave address of the I2C module, when it is configured as slave*/ + BOOL isMaster; /* true- Master , false- slave*/ + BOOL isClockStretch; /* true- Stretch clock in case of no data availability + (Valid only for slave mode) + false- Do not Stretch clock*/ +} CY_I2C_CONFIG,*PCY_I2C_CONFIG; + +/* Summary +This structure is used to configure each I2C data transaction. + +Description +This structure defines parameters that are used for configuring +I2C module during each data transaction. Which includes setting slave address +(when device is in I2C slave mode), stopbit (to enable or disable) and +Nak bit (to enable or disable). + +See Also +* CyI2cWrite +* CyI2cRead +*/ +typedef struct _CY_I2C_DATA_CONFIG +{ + UCHAR slaveAddress; /*Slave address the master will communicate with*/ + BOOL isStopBit; /*Set when stop bit is used*/ + BOOL isNakBit; /*Set when I2C master wants to NAK the slave after read + Applicable only when doing I2C read*/ +} CY_I2C_DATA_CONFIG, *PCY_I2C_DATA_CONFIG; + +/* Summary +Enumeration defining SPI protocol types supported by USB Serial SPI module. + +Description +These are the different protocols supported by USB-Serial SPI module. + +See Also +* CY_SPI_CONFIG +* CyGetSpiConfig +* CySetSpiConfig +*/ +typedef enum _CY_SPI_PROTOCOL { + + CY_SPI_MOTOROLA = 0, /*In master mode, when not transmitting data (SELECT is inactive), SCLK is stable at CPOL. + In slave mode, when not selected, SCLK is ignored; i.e. it can be either stable or clocking. + In master mode, when there is no data to transmit (TX FIFO is empty), SELECT is inactive. + */ + CY_SPI_TI, /*In master mode, when not transmitting data, SCLK is stable at '0'. + In slave mode, when not selected, SCLK is ignored - i.e. it can be either stable or clocking. + In master mode, when there is no data to transmit (TX FIFO is empty), SELECT is inactive - + i.e. no pulse is generated. + *** It supports only mode 1 whose polarity values are + CPOL = 0 + CPHA = 1 + */ + CY_SPI_NS /*In master mode, when not transmitting data, SCLK is stable at '0'. In slave mode, + when not selected, SCLK is ignored; i.e. it can be either stable or clocking. + In master mode, when there is no data to transmit (TX FIFO is empty), SELECT is inactive. + *** It supports only mode 0 whose polarity values are + CPOL = 0 + CPHA = 0 + */ +} CY_SPI_PROTOCOL; + +/* Summary +This structure is used to configure the SPI module of USB Serial device. + +Description +This structure defines configuration parameters that are used for configuring the SPI module . + +See Also +* CY_SPI_PROTOCOL +* CY_SPI_DATA_TRANSFER_MODE +* CyGetSpiConfig +* CySetSpiConfig +*/ +typedef struct _CY_SPI_CONFIG +{ + + UINT32 frequency; /*SPI clock frequency. + ** IMPORTANT: The frequency range supported by SPI module is + 1000(1KHz) to 3000000(3MHz) + */ + + UCHAR dataWidth; /*Data width in bits. The valid values are from 4 to 16.*/ + + CY_SPI_PROTOCOL protocol ; /*SPI Protocols to be used as defined in CY_SPI_PROTOCOL*/ + + BOOL isMsbFirst; /*false -> least significant bit is sent out first + true -> most significant bit is sent out first */ + + BOOL isMaster; /*false --> Slave mode selected: + true --> Master mode selected*/ + + BOOL isContinuousMode; /*true - Slave select line is not asserted i.e + de-asserted for every word. + false- Slave select line is always asserted*/ + + BOOL isSelectPrecede; /*Valid only in TI mode. + true - The start pulse precedes the first data + false - The start pulse is in sync with first data. */ + + BOOL isCpha; /*false - Clock phase is 0; true - Clock phase is 1. */ + + BOOL isCpol; /*false - Clock polarity is 0;true - Clock polarity is 1.*/ + +}CY_SPI_CONFIG,*PCY_SPI_CONFIG; + +/* Summary +Enumeration defines UART baud rates supported by UART module of USB Serial device. + +Description +The enumeration lists the various baud rates supported by the UART when it is in UART +vendor mode. + +See Also +* CY_UART_CONFIG +* CySetUartConfig +* CyGetUartConfig +*/ +typedef enum _CY_UART_BAUD_RATE +{ + CY_UART_BAUD_300 = 300, /* Baud rate of 300. */ + CY_UART_BAUD_600 = 600, /* Baud rate of 600. */ + CY_UART_BAUD_1200 = 1200, /* Baud rate of 1200. */ + CY_UART_BAUD_2400 = 2400, /* Baud rate of 2400. */ + CY_UART_BAUD_4800 = 4800, /* Baud rate of 4800. */ + CY_UART_BAUD_9600 = 9600, /* Baud rate of 9600. */ + CY_UART_BAUD_14400 = 14400, /* Baud rate of 14400. */ + CY_UART_BAUD_19200 = 19200, /* Baud rate of 19200. */ + CY_UART_BAUD_38400 = 38400, /* Baud rate of 38400. */ + CY_UART_BAUD_56000 = 56000, /* Baud rate of 56000. */ + CY_UART_BAUD_57600 = 57600, /* Baud rate of 57600. */ + CY_UART_BAUD_115200 = 115200, /* Baud rate of 115200. */ + CY_UART_BAUD_230400 = 230400, /* Baud rate of 230400. */ + CY_UART_BAUD_460800 = 460800, /* Baud rate of 460800. */ + CY_UART_BAUD_921600 = 921600, /* Baud rate of 921600. */ + CY_UART_BAUD_1000000 = 1000000, /* Baud rate of 1000000. */ + CY_UART_BAUD_3000000 = 3000000, /* Baud rate of 3000000. */ + +}CY_UART_BAUD_RATE; + +/* +Summary +Enumeration defines the different parity modes supported by UART module of USB Serial device. + +Description +This enumeration defines the different parity modes of USB Serial UART module. +It supports odd, even, mark and space parity modes. + +See Also +* CY_UART_CONFIG +* CySetUartConfig +* CyGetUartConfig +*/ +typedef enum _CY_UART_PARITY_MODE { + + CY_DATA_PARITY_DISABLE = 0, /*Data parity disabled*/ + CY_DATA_PARITY_ODD, /*Odd Parity*/ + CY_DATA_PARITY_EVEN, /*Even Parity*/ + CY_DATA_PARITY_MARK, /*Mark parity*/ + CY_DATA_PARITY_SPACE /*Space parity*/ + +} CY_UART_PARITY_MODE; + +/* +Summary +Enumeration defines the different stop bit values supported by UART module of USB Serial device. + +See Also +* CY_UART_CONFIG +* CySetUartConfig +* CyGetUartConfig +*/ +typedef enum _CY_UART_STOP_BIT { + + CY_UART_ONE_STOP_BIT = 1, /*One stop bit*/ + CY_UART_TWO_STOP_BIT /*Two stop bits*/ + +} CY_UART_STOP_BIT; + +/* +Summary +Enumeration defines flow control modes supported by UART module of USB Serial device. + +Description +The list provides the various flow control modes supported by USB Serial device. + +See Also +* CyUartSetHwFlowControl +* CyUartGetHwFlowControl +*/ +typedef enum _CY_FLOW_CONTROL_MODES { + + CY_UART_FLOW_CONTROL_DISABLE = 0, /*Disable Flow control*/ + CY_UART_FLOW_CONTROL_DSR, /*Enable DSR mode of flow control*/ + CY_UART_FLOW_CONTROL_RTS_CTS, /*Enable RTS CTS mode of flow control*/ + CY_UART_FLOW_CONTROL_ALL /*Enable RTS CTS and DSR flow control */ + +} CY_FLOW_CONTROL_MODES; + +/* +Summary +Structure holds configuration of UART module of USB Serial device. + +Description +This structure defines parameters used for configuring the UART module. +CySetUartConfig and CyGetUartConfig APIs are used to configure and retrieve +the UART configuration information. + +See Also +* CySetUartConfig +* CyGetUartConfig +*/ +typedef struct _CY_UART_CONFIG { + + CY_UART_BAUD_RATE baudRate; /*Baud rate as defined in CY_UART_BAUD_RATE*/ + UINT8 dataWidth; /*Data width: valid values 7 or 8*/ + CY_UART_STOP_BIT stopBits; /*Number of stop bits to be used 1 or 2*/ + CY_UART_PARITY_MODE parityMode; /*UART parity mode as defined in CY_UART_PARITY_MODE*/ + BOOL isDropOnRxErrors; /*Whether to ignore framing as well as parity errors and receive data */ + +} CY_UART_CONFIG,*PCY_UART_CONFIG; + +/* +Summary +Enumeration defining UART/SPI transfer error or status bit maps. + +Description +Enumeration lists the bit maps that are used to report error or status during +UART/SPI transfer. + +See Also +* CySetEventNotification +*/ +typedef enum _CY_CALLBACK_EVENTS { + + CY_UART_CTS_BIT = 0x01, /*CTS pin notification bit*/ + CY_UART_DSR_BIT = 0x02, /*State of transmission carrier. This signal + corresponds to V.24 signal 106 and RS-232 signal DSR.*/ + CY_UART_BREAK_BIT = 0x04, /*State of break detection mechanism of the device */ + CY_UART_RING_SIGNAL_BIT = 0x08, /*State of ring signal detection of the device*/ + CY_UART_FRAME_ERROR_BIT = 0x10, /*A framing error has occurred*/ + CY_UART_PARITY_ERROR_BIT = 0x20, /*A parity error has occured*/ + CY_UART_DATA_OVERRUN_BIT = 0x40, /*Received data has been discarded due to overrun in + the device*/ + CY_UART_DCD_BIT = 0x100, /*State of receiver carrier detection mechanism of + device. This signal corresponds to V.24 signal 109 + and RS-232 signal DCD*/ + CY_SPI_TX_UNDERFLOW_BIT = 0x200, /*Notification sent when SPI fifo is empty*/ + CY_SPI_BUS_ERROR_BIT = 0x400, /*Spi bus error has been detected*/ + CY_ERROR_EVENT_FAILED_BIT = 0x800 /*Event thread failed*/ + +} CY_CALLBACK_EVENTS; + +/*************************************************************************************/ +/*********************USB Initialization APIs************************************/ +/*************************************************************************************/ + +/*@@USB Initialization API +This section has all the APIs that handle device initialization and +fetching information about the device connected. +*/ + +/* + Summary + This API is used to initialize the library. + + Description + The API is used to initialize the underlying libusb library and + is expected to be called when the application is being started. + + Note: The API is used only in Linux and Mac OS. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_DRIVER_INIT_FAILED on failure + (Failure could be because of not calling CyLibraryExit previously) + + See Also + * CyOpen + * CyLibraryExit +*/ +CYWINEXPORT CY_RETURN_STATUS LINUXCALLCONVEN CyLibraryInit (); + +/* + Summary + This API is used to free the library. + + Description + The API is used to free the library and should be called + when exiting the application. + + Note: This API is used only in Linux and Mac library. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_REQUEST_FAILED on failure + + See Also + * CyOpen + * CyClose + * CyLibraryInit +*/ +CYWINEXPORT CY_RETURN_STATUS LINUXCALLCONVEN CyLibraryExit (); + +/* + Summary + This API retrieves number of USB devices connected to the host. + + Description + This API retrieves the number of devices connected to the host. + In Windows family of operating systems the API retrieves only the number of devices that are attached + to CyUSB3.SYS driver. For other operating systems, it retrieves the total number of USB devices present + on the bus. It includes both USB Serial device as well as other devices. + + Note: In case of Linux and Mac apart from providing number of devices connected, it builds the + device list which is used for opening the device and obtaining device handle. Thus the API should be + called during device discovery in the application. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_DEVICE_NOT_FOUND if there are no devices attached. + * CY_ERROR_REQUEST_FAILED if library was not initialized. + + See Also + * CyGetDeviceInfo + * CyGetDeviceInfoVidPid + * CyOpen + * CyClose +*/ +CYWINEXPORT CY_RETURN_STATUS CyGetListofDevices ( + UINT8* numDevices /*Number of Devices connected*/ + ); + +/* + Summary + This API retrieves the device information of a USB device. + + Description + This API retrieves information about a device connected to host. In order to + get the device information on particular device user needs to provide the device number. + To identify the device of interest, the application needs to loop through all devices connected + and obtain the information. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_REQUEST_FAILED if library is not initialized (Only for Linux and Mac). + * CY_ERROR_INVALID_PARAMETER if the input parameters are invalid. + * CY_ERROR_DEVICE_INFO_FETCH_FAILED if failed to fetch device information. + * CY_ERROR_ACCESS_DENIED if access is denied by operating system. + * CY_ERROR_DEVICE_NOT_FOUND if specified device number is invalid. + + See Also + * CY_DEVICE_INFO + * CY_DEVICE_TYPE + * CY_DEVICE_CLASS + * CyGetListofDevices + * CyGetDeviceInfoVidPid + * CyOpen + * CyClose +*/ +CYWINEXPORT CY_RETURN_STATUS CyGetDeviceInfo( + UINT8 deviceNumber, /*Device number of the device of interest*/ + CY_DEVICE_INFO *deviceInfo /*Info of device returned*/ + ); + +/* + Summary + This API is used to retrieve the information of all devices with specified Vendor ID and Product ID. + + Description + For a given VID and PID, the API returns deviceIdList and deviceInfoList. + The deviceIdList contains the device numbers of all the devices with specified VID and PID. + Using deviceInfoList application can identify the device of interest. + Information that is provided includes interface number, string descriptor, deviceType and deviceClass. + + + Return Value + * CY_SUCCESS on success else error codes as defined in the enumeration CY_RETURN_STATUS. + * CY_ERROR_REQUEST_FAILED on if library is not initialized (Only for Linux and Mac) + * CY_ERROR_INVALID_PARAMETER if the input parameters are invalid. + * CY_ERROR_DEVICE_INFO_FETCH_FAILED if failed to fetch device information. + * CY_ERROR_ACCESS_DENIED if access is denied by operating system. + * CY_ERROR_DEVICE_NOT_FOUND if specified device number is invalid. + + See Also + * CY_DEVICE_INFO + * CY_DEVICE_CLASS + * CY_DEVICE_TYPE + * CyGetListofDevices + * CyGetDeviceInfo + * CyOpen + * CyClose +*/ +CYWINEXPORT CY_RETURN_STATUS CyGetDeviceInfoVidPid ( + CY_VID_PID vidPid, /*VID and PID of device of interest*/ + UINT8 *deviceIdList, /*Array of device ID's returned*/ + CY_DEVICE_INFO *deviceInfoList, /*Array of pointers to device info list*/ + UINT8 *deviceCount, /*Count of devices with specified VID PID*/ + UINT8 infoListLength /*Total length of the deviceInfoList allocated + (Size of deviceInfoList array)*/ + ); + +/* + Summary + This API is used to open the USB Serial device. + + Description + This API is used to open USB Serial device based on the device number. + + Note: The argument interfaceNum is used on Linux and Mac OS while obtaining handle for specific + interface. In Windows family of operating systems, this argument should be set to zero. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_REQUEST_FAILED on if library is not initialized (Only for Linux and Mac) + * CY_ERROR_INVALID_PARAMETER if the input parameters are invalid. + * CY_ERROR_DRIVER_OPEN_FAILED if open was unsuccessful. + * CY_ERROR_ACCESS_DENIED if access is denied by operating system. + * CY_ERROR_ALLOCATION_FAILED if memory allocation was failed. + * CY_ERROR_DEVICE_NOT_FOUND if specified device number is invalid. + + See Also + * CyGetListofDevices + * CyGetDeviceInfoVidPid + * CyGetDeviceInfo + * CyClose +*/ +CYWINEXPORT CY_RETURN_STATUS CyOpen ( + UINT8 deviceNumber, /*Device number of device that needs to be opened*/ + UINT8 interfaceNum, /*Interface Number*/ + CY_HANDLE *handle /*Handle returned by the API*/ + ); + +/* + Summary + This API closes the specified device handle and releases all resources associated with it. + + Description + This API closes the device handle and releases all the resources allocated internally in the + library. This API should be invoked using a valid device handle and upon successful return + of CyOpen. + + Return Value + * CY_SUCCESS on success. + * CY_ERROR_INVALID_HANDLE if handle is invalid in case of Linux/Mac. + * CY_ERROR_INVALID_PARAMETER if handle is invalid in case of Windows. + * CY_ERROR_REQUEST_FAILED on error in case of library being not initialized (Only for Linux and Mac). + + See Also + * CyOpen +*/ +CYWINEXPORT CY_RETURN_STATUS CyClose ( + CY_HANDLE handle /*Handle of the device that needs to be closed*/ + ); + +/* + Summary + This API is used to power cycle the host port. + + Description + This API will power cycle the upstream port. It will reenumerate the device after the power cycle. + + Note: This API is not supported on Linux and Mac + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid in case of Linux/Mac. + * CY_ERROR_INVALID_PARAMETER if handle is invalid in case of Windows. + * CY_ERROR_REQUEST_FAILED on error if request was failed by driver. + + See Also + * CyResetDevice +*/ +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyCyclePort ( + CY_HANDLE handle /*Valid device handle */ + ); + +/*************************************************************************************/ +/********************************Common APIs*********************************************/ +/*************************************************************************************/ + +/*@@Common APIs + + These APIs provide an interface for accessing GPIO pins, error status notification on UART/SPI, + getting library and firmware version and signature. +*/ + +/* + Summary + This API sets the value of a GPIO. + + Description + This API is used to set the value of a GPIO. It can only set the value of a + GPIO that is configured as an output. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED on error when request is failed by USB Serial device. + + See Also + * CyGetGpioValue +*/ +CYWINEXPORT CY_RETURN_STATUS CySetGpioValue ( + CY_HANDLE handle, /*Valid device handle*/ + UINT8 gpioNumber, /*GPIO number*/ + UINT8 value /*Value that needs to be set*/ + ); + +/* + Summary + This API retrieves the value of a GPIO. + + Description + This API retrieves the value of a GPIO. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range and + also when handle is invalid in case of Windows. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device. + + See Also + * CySetGpioValue +*/ +CYWINEXPORT CY_RETURN_STATUS CyGetGpioValue ( + CY_HANDLE handle, /*Valid device handle*/ + UINT8 gpioNumber, /*GPIO number*/ + UINT8 *value /*Current state of the GPIO*/ + ); + + +/* + Summary + This API is used to register a callback for error/event notifications + during UART/SPI data transfers. + + Description + The API is used to register a callback for error/event notifications while + doing data transfer on UART or SPI. A callback will be issued based on the + error/events sent by the device. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_STATUS_MONITOR_EXIST if notification callback is already registered. + + See Also + * CY_CALLBACK_EVENTS + * CY_EVENT_NOTIFICATION_CB_FN + * CyAbortEventNotification +*/ +CYWINEXPORT CY_RETURN_STATUS CySetEventNotification( + CY_HANDLE handle, /*Valid device handle*/ + CY_EVENT_NOTIFICATION_CB_FN notificationCbFn /*Callback function pointer*/ + ); + +/* + Summary + The API is used to unregister the event callback. + + Description + The API is used to unregister the event callback. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_REQUEST_FAILED if API is called before registering callback. + + See Also + * CySetEventNotification +*/ +CYWINEXPORT CY_RETURN_STATUS CyAbortEventNotification( + CY_HANDLE handle /*Valid device handle*/ + ); + +/* + Summary + This API retrieves the version of USB Serial library. + + Description + This API retrieves the version of USB Serial library. + + Return Value + * CY_SUCCESS + + See Also + * CyGetFirmwareVersion +*/ +CYWINEXPORT CY_RETURN_STATUS CyGetLibraryVersion ( + CY_HANDLE handle, /*Valid device handle*/ + PCY_LIBRARY_VERSION version /*Library version of the current library*/ + ); + +/* + Summary + This API retrieves the firmware version of the USB Serial device. + + Description + This API retrieves the firmware version of the USB Serial device. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device. + + See Also + * CyGetLibraryVersion +*/ +CYWINEXPORT CY_RETURN_STATUS CyGetFirmwareVersion ( + CY_HANDLE handle, /*Valid device handle*/ + PCY_FIRMWARE_VERSION firmwareVersion /*Firmware version.*/ + ); + +/* + Summary + This API resets the device by sending a vendor request. + + Description + The API will reset the device by sending a vendor request to the firmware. The device + will be re-enumerated. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device. + + See Also + * CyCyclePort +*/ +CYWINEXPORT CY_RETURN_STATUS CyResetDevice ( + CY_HANDLE handle /*Valid device handle*/ + ); + +/* + Summary + The API writes to the user flash area on the USB Serial device. + + Description + The API programs user flash area. The total space available is 512 bytes. + The flash area address offset is from 0x0000 to 0x00200 and should be written + page wise (page size is 128 bytes). + On return, transferCount parameter in CY_DATA_BUFFER will specify the number of bytes actually + programmed. + + Note: Length and page address needs to be 128 bytes aligned. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device. + + See Also + * CyReadUserFlash +*/ +CYWINEXPORT CY_RETURN_STATUS CyProgUserFlash ( + CY_HANDLE handle, /*Valid device handle*/ + CY_DATA_BUFFER *progBuffer, /*Data buffer containing buffer address, length to write*/ + UINT32 flashAddress, /*Address to the data is written*/ + UINT32 timeout /*Timeout value of the API*/ + ); + +/* + Summary + The API reads from the flash address specified. + + Description + Read from user flash area.The total space available is 512 bytes. + The flash area address offset is from 0x0000 to 0x00200 and should be read + page wise (page size is 128 bytes). + On return transferCount parameter in CY_DATA_BUFFER will specify the number of bytes actually + read. + + Note: Length and page address needs to be 128 bytes aligned. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device. + + See Also + * CyProgUserFlash +*/ +CYWINEXPORT CY_RETURN_STATUS CyReadUserFlash ( + CY_HANDLE handle, /*Valid device handle*/ + CY_DATA_BUFFER *readBuffer, /*data buffer containing buffer address, length to read*/ + UINT32 flashAddress, /*Address from which the data is read*/ + UINT32 timeout /*Timeout value of the API*/ + ); + +/* + Summary + This API retrieves the signature of the device firmware. + + Description + This API retrieves the signature of the device firmware. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device. + */ +CYWINEXPORT CY_RETURN_STATUS CyGetSignature ( + CY_HANDLE handle, /*Valid device handle*/ + UCHAR *pSignature /*Signature returned*/ + ); + +/****************************************************************************************/ +/********************************UART API's**********************************************/ +/****************************************************************************************/ + +/*@@UART API + APIs used to communicate with UART module of the USB Serial device. + These APIs provide support for configuration, data transfer and flow control. +*/ + +/* + Summary + This API retrieves the UART configuration from the USB Serial device. + + Description + This API retrieves the UART configuration from the USB Serial device. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device or when device type is + not UART. + + See Also + * CY_UART_CONFIG + * CySetUartConfig +*/ +CYWINEXPORT CY_RETURN_STATUS CyGetUartConfig ( + CY_HANDLE handle, /*Valid device handle*/ + CY_UART_CONFIG *uartConfig /*UART configuration value read back*/ + ); + +/* + Summary + This API sets the UART configuration of USB Serial device. + + Description + This API sets the UART configuration of USB Serial device. + + Note: Using this API during an active transaction of UART may result in data loss. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device or when device type is + not UART. + + See Also + * CY_UART_CONFIG + * CyGetUartConfig +*/ +CYWINEXPORT CY_RETURN_STATUS CySetUartConfig ( + CY_HANDLE handle, /*Valid device handle*/ + CY_UART_CONFIG *uartConfig /*UART configuration value */ + ); + +/* + Summary + This API reads data from UART device. + + Description + This API is used to read data from UART device. User needs to initialize the readBuffer with buffer pointer, + number of bytes to read before invoking this API. + On return the transferCount parameter in CY_DATA_BUFFER will contain the number of bytes read. + + Return Value + * CY_SUCCESS on success. + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if input parameters were invalid. + * CY_ERROR_REQUEST_FAILED if the device type is not UART. + * CY_ERROR_IO_TIMEOUT if transfer was timed out. + * CY_ERROR_PIPE_HALTED if pipe was stalled during data transfer. + * CY_ERROR_DEVICE_NOT_FOUND if device was disconnected. + * CY_ERROR_BUFFER_OVERFLOW if data received from USB Serial device is more than requested. + * CY_ERROR_ALLOCATION_FAILED if transaction transmit buffer allocation was failed (Only in Windows). + + See Also + * CY_DATA_BUFFER + * CyUartWrite +*/ +CYWINEXPORT CY_RETURN_STATUS CyUartRead ( + CY_HANDLE handle, /*Valid device handle*/ + CY_DATA_BUFFER* readBuffer, /*Read buffer details*/ + UINT32 timeout /*API timeout value*/ + ); + +/* + Summary + This API writes the data to UART device. + + Description + This API writes the data to UART device. User need to initialize the + writeBuffer with buffer pointer, number of bytes to write before invoking the API. + On return the transferCount parameter in CY_DATA_BUFFER will contain the number + of bytes written. + + Return Value + * CY_SUCCESS on success. + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if input parameters were invalid. + * CY_ERROR_REQUEST_FAILED if the device type is not UART. + * CY_ERROR_IO_TIMEOUT if transfer was timed out. + * CY_ERROR_PIPE_HALTED if pipe was stalled during data transfer. + * CY_ERROR_DEVICE_NOT_FOUND if device was disconnected. + * CY_ERROR_BUFFER_OVERFLOW if data received from USB Serial device is more than requested. + * CY_ERROR_ALLOCATION_FAILED if transaction transmit buffer allocation was failed (Only in Windows). + + See Also + * CY_DATA_BUFFER + * CyUartRead +*/ +CYWINEXPORT CY_RETURN_STATUS CyUartWrite ( + CY_HANDLE handle, /*Valid device handle*/ + CY_DATA_BUFFER* writeBuffer, /*Write buffer details*/ + UINT32 timeout /*API timeout value*/ + ); + +/* + Summary + This API enables hardware flow control. + + Description + This API enables hardware flow control. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE on error if handle is invalid in case of Linux/Mac. + * CY_ERROR_INVALID_PARAMETER on error if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT on error if request was timed out. + * CY_ERROR_REQUEST_FAILED on error if request was failed by device or if device type + is not UART. + + See Also + * CyUartGetHwFlowControl +*/ +CYWINEXPORT CY_RETURN_STATUS CyUartSetHwFlowControl( + CY_HANDLE handle, /*Valid device handle*/ + CY_FLOW_CONTROL_MODES mode /*Flow control mode*/ + ); + +/* + Summary + This API retrieves the current hardware flow control status. + + Description + This API retrieves the current hardware flow control status. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device or when device type is + not UART. + + See Also + * CyUartSetHwFlowControl +*/ +CYWINEXPORT CY_RETURN_STATUS CyUartGetHwFlowControl( + CY_HANDLE handle, /*Valid device handle*/ + CY_FLOW_CONTROL_MODES *mode /*Flow control mode*/ + ); + +/* + Summary + This API sets RTS signal in UART module. + + Description + This API is used to set the RTS pin to logical low.. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device or when device type is + not UART. + + See Also + * CyUartClearRts + * CyUartSetDtr + * CyUartClearDtr +*/ +CYWINEXPORT CY_RETURN_STATUS CyUartSetRts( + CY_HANDLE handle /*Valid device handle*/ + ); + +/* + Summary + This API can be used to clear RTS signal in UART module. + + Description + This API used clear the RTS. It sets the RTS pin to logical high. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device or when device type is + not UART. + + See Also + * CyUartSetRts + * CyUartSetDtr + * CyUartClearDtr +*/ +CYWINEXPORT CY_RETURN_STATUS CyUartClearRts( + CY_HANDLE handle /*Valid device handle*/ + ); + +/* + Summary + This API sets DTR signal in UART. + + Description + This API used set the DTR. It sets the DTR pin to logical low. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device or when device type is + not UART. + + See Also + * CyUartClearRts + * CyUartSetRts + * CyUartClearDtr +*/ +CYWINEXPORT CY_RETURN_STATUS CyUartSetDtr( + CY_HANDLE handle /*Valid device handle*/ + ); + +/* + Summary + This API can be used to clear DTR signal in UART. + + Description + This API can be used clear the DTR. It sets the DTR pin to logical high. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device or when device type is + not UART. + + See Also + * CyUartSetRts + * CyUartSetDtr + * CyUartClearRts +*/ +CYWINEXPORT CY_RETURN_STATUS CyUartClearDtr( + CY_HANDLE handle /*Valid device handle*/ + ); + +/* + Summary + This API can be used to set break timeout value . + + Description + This API can be used to set break timeout value . + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device or when device type is + not UART. + + See Also + * CyUartSetFlowControl +*/ +CYWINEXPORT CY_RETURN_STATUS CyUartSetBreak( + CY_HANDLE handle, /*Valid device handle*/ + UINT16 timeout /*Break timeout value in milliseconds */ + ); + +/***********************************************************************************************/ +/**********************************I2C API's****************************************************/ +/***********************************************************************************************/ + +/*@@I2C API + + These set of APIs provide an interface to configure I2C module and do + read/write on the I2C device connected to USB Serial device. +*/ + +/* + Summary + This API retrieves the configuration of I2C module of USB Serial device. + + Description + This API retrieves the configuration of I2C module of USB Serial device. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device or when device type is + not I2C. + + See Also + * CY_I2C_CONFIG + * CySetI2cConfig +*/ +CYWINEXPORT CY_RETURN_STATUS CyGetI2cConfig ( + CY_HANDLE handle, /*Valid device handle*/ + CY_I2C_CONFIG *i2cConfig /*I2C configuration value read back*/ + ); + +/* + Summary + This API configures the I2C module of USB Serial device. + + Description + This API configures the I2C module of USB Serial device. + + Note: Using this API during an active transaction of I2C may result in data loss. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device or when device type is + not I2C. + + See Also + * CY_I2C_CONFIG + * CySetI2cConfig +*/ +CYWINEXPORT CY_RETURN_STATUS CySetI2cConfig ( + CY_HANDLE handle, /*Valid device handle*/ + CY_I2C_CONFIG *i2cConfig /*I2C configuration value*/ + ); + +/* + Summary + This API reads data from the USB Serial I2C module. + + Description + This API provides an interface to read data from the I2C device + connected to USB Serial. + + The readBuffer parameter needs to be initialized with buffer pointer, number of bytes to be read + before invoking the API. On return, the transferCount field will contain the number of bytes + read back from device. + CY_I2C_DATA_CONFIG structure specifies parameters such as setting stop bit, NAK and + slave address of the I2C device. + + Return Value + * CY_SUCCESS on success. + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if input parameters were invalid. + * CY_ERROR_REQUEST_FAILED if the device type is not I2C + * CY_ERROR_IO_TIMEOUT if transfer was timed out. + * CY_ERROR_DEVICE_NOT_FOUND if device was disconnected. + * CY_ERROR_BUFFER_OVERFLOW if data received from USB Serial device is more than requested. + * CY_ERROR_ALLOCATION_FAILED if transaction transmit buffer allocation was failed (Only in Windows). + * CY_ERROR_I2C_DEVICE_BUSY if I2C device was busy processing previous request. + * CY_ERROR_I2C_NAK_ERROR if request was nacked by I2C device. + * CY_ERROR_I2C_ARBITRATION_ERROR if a I2C bus arbitration error occured. + * CY_ERROR_I2C_BUS_ERROR if there was any I2C bus error while an on going transaction. + * CY_ERROR_I2C_STOP_BIT_SET if stop bit was set by I2C master. + + See Also + * CY_DATA_BUFFER + * CY_DATA_CONFIG + * CyI2cCWrite +*/ +CYWINEXPORT CY_RETURN_STATUS CyI2cRead ( + CY_HANDLE handle, /*Valid device handle*/ + CY_I2C_DATA_CONFIG *dataConfig, /*I2C data config*/ + CY_DATA_BUFFER *readBuffer, /*Read buffer details*/ + UINT32 timeout /*API timeout value*/ + ); + +/* + Summary + This API writes data to USB Serial I2C module . + + Description + This API provides an interface to write data to the I2C device + connected to USB Serial. + The writeBuffer parameter needs to be initialized with buffer pointer, number of bytes to be written + before invoking the API. On return, transferCount field contains number of bytes actually written to the device. + CY_I2C_DATA_CONFIG structure specifies parameter such as setting stop bit, Nak and slave address + of the I2C device being communicated when USB Serial is master. + + Return Value + * CY_SUCCESS on success. + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if input parameters were invalid. + * CY_ERROR_REQUEST_FAILED if the device type is not I2C + * CY_ERROR_IO_TIMEOUT if transfer was timed out. + * CY_ERROR_PIPE_HALTED if pipe was stalled during data transfer. + * CY_ERROR_DEVICE_NOT_FOUND if device was disconnected. + * CY_ERROR_BUFFER_OVERFLOW if data received from USB Serial device is more than requested. + * CY_ERROR_ALLOCATION_FAILED if transaction transmit buffer allocation was failed (Only in Windows). + * CY_ERROR_I2C_DEVICE_BUSY if I2C device was busy processing previous request. + * CY_ERROR_I2C_NAK_ERROR if request was nacked by I2C device. + * CY_ERROR_I2C_ARBITRATION_ERROR if a I2C bus arbitration error occured. + * CY_ERROR_I2C_BUS_ERROR if there was any I2C bus error while an on going transaction. + * CY_ERROR_I2C_STOP_BIT_SET if stop bit was set by I2C master. + + See Also + * CY_DATA_BUFFER + * CY_DATA_CONFIG + * CyI2cRead +*/ +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyI2cWrite ( + CY_HANDLE handle, /*Valid device handle*/ + CY_I2C_DATA_CONFIG *dataConfig, /*I2C Slave address */ + CY_DATA_BUFFER *writeBuffer, /*Write buffer details*/ + UINT32 timeout /*API timeout value*/ + ); + +/* + Summary + This API resets the I2C module in USB Serial device. + + Description + This API resets the I2C module whenever there is an error in data transaction. + + If resetMode = 0 the I2C read module will be reset. + If resetMode = 1 the I2C write module will be reset. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device or when device type is + not I2C. + + See Also + * CyI2CRead + * CyI2CWrite +*/ +CYWINEXPORT CY_RETURN_STATUS CyI2cReset( + CY_HANDLE handle, /*Valid device handle*/ + BOOL resetMode /*Reset mode*/ + ); + +/***********************************************************************************************/ +/**********************************SPI APIs****************************************************/ +/***********************************************************************************************/ + +/*@@SPI API + These set of APIs provide an interface to configure SPI module and perform + read/write operations with the SPI device connected to USB Serial device. +*/ + +/* + Summary + This API retrieves the configuration of SPI module of USB Serial device. + + Description + This API retrieves the configuration of SPI module of USB Serial device. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device or when device type is + not SPI. + + See Also + * CY_SPI_CONFIG + * CySetSpiConfig +*/ +CYWINEXPORT CY_RETURN_STATUS CyGetSpiConfig ( + CY_HANDLE handle, /*Valid device handle*/ + CY_SPI_CONFIG *spiConfig /*SPI configuration structure value read back*/ + ); + +/* + Summary + This API sets the configuration of the SPI module on USB Serial device. + + Description; + This API sets the configuration of the SPI module in USB Serial device. + + NOTE: Using this API during an active transaction of SPI may result in data loss. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if the request is timed out. + * CY_ERROR_REQUEST_FAILED when request is failed by USB Serial device or when device type is + not SPI. + + See Also + * CY_SPI_CONFIG + * CyGetSpiConfig +*/ +CYWINEXPORT CY_RETURN_STATUS CySetSpiConfig ( + CY_HANDLE handle, /*Valid device handle*/ + CY_SPI_CONFIG *spiConfig /*SPI configuration structure value*/ + ); + +/* + Summary + This API reads and writes data to SPI device connected to USB Serial device. + + Description + This API provides an interface to do data transfer with the SPI slave/master + connected to USB Serial device. + To perform read only operation, pass NULL as argument for writeBuffer and to perform + write only operation pass NULL as an argument for readBuffer. + On return, the transferCount field will contain the number of bytes read and/or written. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid in case of Linux/Mac. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_REQUEST_FAILED if the device type is not SPI or when libusb reported + unknown error in case of Linux/Mac. + * CY_ERROR_IO_TIMEOUT if transfer was timed out. + * CY_ERROR_PIPE_HALTED if pipe was stalled during data transfer. + * CY_ERROR_DEVICE_NOT_FOUND if device was disconnected. + * CY_ERROR_BUFFER_OVERFLOW if data received from USB Serial device is more than requested. + + See Also + * CY_DATA_BUFFER + * CyGetSpiConfig + * CySetSpiConfig +*/ +CYWINEXPORT CY_RETURN_STATUS CySpiReadWrite ( + CY_HANDLE handle, /*Valid device handle*/ + CY_DATA_BUFFER* readBuffer, /*Read data buffer*/ + CY_DATA_BUFFER* writeBuffer, /*Write data buffer*/ + UINT32 timeout /*Time out value of the API*/ + ); + +/**************************************************************************************/ +/*****************************************JTAG APIs***********************************/ +/**************************************************************************************/ + +/*@@JTAG API + These set of APIs can be used to enable or disable JTAG module on the USB Serial device. + Once the JTAG is enabled, read and write operations can be performed. + When JTAG is enabled other modules in the USB Serial device cannot be used. +*/ + +/* + Summary + This API enables JTAG module. + + Description + This API enables JTAG module in USB Serial device and the function disables all other functionality + till CyJtagDisable is invoked. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid in case of Linux/Mac. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if request was timed out. + * CY_ERROR_REQUEST_FAILED if request was failed by device or if device type + is not JTAG. + + See Also + * CyJtagDisable +*/ +CYWINEXPORT CY_RETURN_STATUS CyJtagEnable ( + CY_HANDLE handle /*Valid device handle*/ + ); + +/* + Summary + This API disables JTAG module. + + Description + This API disables Jtag interface in USB Serial device. This API must be invoked before exiting the + application if CyJtagEnable was previously invoked. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid in case of Linux/Mac. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_IO_TIMEOUT if request was timed out. + * CY_ERROR_REQUEST_FAILED if request was failed by device or if device type + is not JTAG. + + See Also + * CyJtagEnable +*/ +CYWINEXPORT CY_RETURN_STATUS CyJtagDisable ( + CY_HANDLE handle /*Valid device handle*/ + ); + +/* + Summary + This API can be used to write data to JTAG module. + + Description + This API provides an interface to write data to JTAG device connected to USB Serial device. + The writeBuffer need to be initialized with buffer and length of data to be written before invoking + the API. Upon return, transferCount field in CY_DATA_BUFFER is updated with actual number of bytes written. + + Note: CyJtagEnable must be called before invoking this API. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid in case of Linux/Mac. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_REQUEST_FAILED if device type is not JTAG or when encountered + unknown libusb errors in Linux/Mac. + * CY_ERROR_PIPE_HALTED if there was any pipe error during transaction. + * CY_ERROR_IO_TIMEOUT if transfer was timed out. + * CY_ERROR_DEVICE_NOT_FOUND if device was disconnected. + + See Also + * CY_DATA_BUFFER + * CyJtagRead + * CyJtagEnable +*/ +CYWINEXPORT CY_RETURN_STATUS CyJtagWrite ( + CY_HANDLE handle, /*Valid device handle*/ + CY_DATA_BUFFER *writeBuffer, /*Write buffer details*/ + UINT32 timeout /*API timeout value*/ + ); + +/* + Summary + This API reads data from JTAG device. + + Description + This API provides an interface to read data from JTAG device. + The readBuffer need to be initialized with buffer and length of data to be written before invoking + the API. Upon return, transferCount field in CY_DATA_BUFFER structure + is updated with actual number of bytes read. + + Note: CyJtagEnable must be called before invoking this API. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle is invalid in case of Linux/Mac. + * CY_ERROR_INVALID_PARAMETER if specified parameters are invalid or out of range. + * CY_ERROR_REQUEST_FAILED if device type is not JTAG or when encountered + unknown libusb errors in Linux/Mac. + * CY_ERROR_IO_TIMEOUT if transfer was timed out. + * CY_ERROR_DEVICE_NOT_FOUND if device was disconnected. + * CY_ERROR_BUFFER_OVERFLOW if data received from USB Serial device is more than requested. + + See Also + * CY_DATA_BUFFER + * CyJtagWrite + * CyJtagEnable +*/ +CYWINEXPORT CY_RETURN_STATUS CyJtagRead ( + CY_HANDLE handle, /*Valid device handle*/ + CY_DATA_BUFFER *readBuffer, /*Read buffer parameters*/ + UINT32 timeout /*API timeout value*/ + ); + +/**************************************************************************************/ +/*****************************************PHDC APIs***********************************/ +/**************************************************************************************/ + +/*@@PHDC API + Set of PHDC class request APIs. The PHDC class requests include set, clear feature and + PHDC get status. +*/ + +/* + Summary + This API sends a PHDC clear feature command. + + Description + This API sends a PHDC clear feature command. + + Note: Meta data feature is not supported by USB Serial device. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle was invalid. + * CY_ERROR_IO_TIMEOUT if request timed out. + * CY_ERROR_REQUEST_FAILED if request was failed by device. + + See Also + * CyPhdcSetFeature + * CyPhdcGetStatus +*/ +CYWINEXPORT CY_RETURN_STATUS CyPhdcClrFeature ( + CY_HANDLE handle /*Valid device handle*/ + ); + +/* + Summary + This API sends a PHDC set feature command. + + Description + This API sends a PHDC set feature command. + + Note: Meta data feature is not supported by USB Serial device. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle was invalid. + * CY_ERROR_IO_TIMEOUT if request timed out. + * CY_ERROR_REQUEST_FAILED if request was failed by device. + + See Also + * CyPhdcClrFeature + * CyPhdcGetStatus +*/ +CYWINEXPORT CY_RETURN_STATUS CyPhdcSetFeature ( + CY_HANDLE handle /*Valid device handle*/ + ); + +/* + Summary + This API retrieves the endpoint status of PHDC transaction. + + Description + The API retrieves the status of PHDC transaction. It returns 2 bytes of data pending bit map + which is defined as per PHDC spec. + + Return Value + * CY_SUCCESS on success + * CY_ERROR_INVALID_HANDLE if handle was invalid. + * CY_ERROR_IO_TIMEOUT if request timed out. + * CY_ERROR_REQUEST_FAILED if request was failed by device. + + See Also + * CyPhdcClrFeature + * CyPhdcSetFeature +*/ +CYWINEXPORT CY_RETURN_STATUS CyPhdcGetStatus ( + CY_HANDLE handle, /*Valid device handle*/ + UINT16 *dataStatus /*Data pending status bit map*/ + ); + +#endif /*_INCLUDED_Cypress USB Serial_H_*/ diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9.tar.bz2 b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..0c5da3264c80e4cbeb3b4b2dfecbb4c9175a5927 GIT binary patch literal 421971 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

`qQRABpl;W6d8{s*~V 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 W{`H_g*s`hr_`8xR!i0fE@SeauVJZ>; literal 0 HcmV?d00001 diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/AUTHORS b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/AUTHORS new file mode 100644 index 0000000..b43d995 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/AUTHORS @@ -0,0 +1,45 @@ +Copyright (C) 2007-2009 Daniel Drake +Copyright (c) 2001 Johannes Erdfelt +Copyright (C) 2008-2012 Nathan Hjelm +Copyright (C) 2009-2012 Pete Batard +Copyright (C) 2010 Michael Plante +Copyright (C) 2010-2012 Peter Stuge +Copyright (C) 2011-2012 Hans de Goede +Copyright (C) 2012 Martin Pieuchot + +Other contributors: +Alan Ott +Alan Stern +Alex Vatchenko +Artem Egorkine +Aurelien Jarno +Bastien Nocera +Brian Shirley +David Engraf +David Moore +Felipe Balbi +Graeme Gill +Hans de Goede +Hans Ulrich Niedermann +Hector Martin +Hoi-Ho Chan +James Hanko +Konrad Rzepecki +Ludovic Rousseau +Martin Koegler +Martin Pieuchot +Mike Frysinger +Mikhail Gusarov +Orin Eman +Pekka Nikander +Peter Stuge +Rob Walker +Sean McBride +Sebastian Pipping +Stephan Meyer +Thomas Röfer +Toby Peterson +Trygve Laugstøl +Vasily Khoruzhick +Vitali Lovich +Xiaofan Chen diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/COPYING b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/COPYING new file mode 100644 index 0000000..5ab7695 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/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/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/ChangeLog b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/ChangeLog new file mode 100644 index 0000000..298a7b2 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/ChangeLog @@ -0,0 +1,4377 @@ +commit ab9cd5a7be637f7b793987971a706b1d11c27ded +Author: Peter Stuge +Date: Fri Apr 20 08:10:11 2012 +0200 + + libusb-1.0.9 + +commit 696400ad83531bcf944c71164a46f9ccb6a33df3 +Author: Peter Stuge +Date: Fri Apr 20 08:08:34 2012 +0200 + + AUTHORS: Update list of contributors + +commit 19f94537ea55586dd85f8d627fcfaa6173069ea1 +Author: Peter Stuge +Date: Fri Apr 20 06:41:34 2012 +0200 + + AUTHORS: Add Martin Pieuchot as copyright holder + +commit 1a1c633d7912a2565f6af0c9294e10a759d40e05 +Author: Peter Stuge +Date: Fri Apr 20 06:41:12 2012 +0200 + + AUTHORS: Add Hans de Goede as copyright holder + +commit 9477f793341d59cc861acb283e6cb03b5730ac91 +Author: Peter Stuge +Date: Fri Apr 20 06:40:45 2012 +0200 + + AUTHORS: Add Peter Stuge as copyright holder + +commit 4b0dfe9770356af3c51103a9b3d63c5f8cc63d8b +Author: Pete Batard +Date: Mon Apr 2 15:47:53 2012 +0100 + + AUTHORS: Update Pete Batard's copyright years and email address + + libusbx.git commit f98eaca0985364be00fcfde3fd3884075092a4e9 + + [stuge: Remove unrelated changes] + +commit 9f0ea78357b7b1654cb3e7de6ff57f5f378b68f1 +Author: Peter Stuge +Date: Fri Apr 20 08:35:04 2012 +0200 + + AUTHORS: Update Nathan Hjelm's copyright years + +commit 8d38506ebc9fb57a40113e5a7739572a42b826d8 +Author: Peter Stuge +Date: Fri Apr 20 06:36:08 2012 +0200 + + README: Add the BSDs, punctuation, mailinglist link, and remove Daniel + +commit 05cbe2de45806db309343cdf298d8569c55863e5 +Author: James Hanko +Date: Wed Oct 19 17:32:34 2011 -0700 + + Linux: Search for /dev/usbdev. USB device special files + + If neither the (now deprecated) usbfs filesystem nor udev is available + then libusb searches for device nodes also in /dev where they may be + created if the kernel was built with the option CONFIG_USB_DEVICE_CLASS. + This helps on embedded systems such as Android, and all mdev users. + + Fixes #119. + +commit a806d169e6b5f675289cb9307fcd6b908edd9219 +Author: Peter Stuge +Date: Fri Apr 20 04:32:47 2012 +0200 + + Add a timestamp in log messages + + Fixes #34. + +commit 03f4d40c748506c85f88427dd53afd5c663a2929 +Author: Peter Stuge +Date: Fri Apr 20 02:24:44 2012 +0200 + + Include library version in the very first libusb_init() debug message + +commit 84d5eafd1f24a1c6f77f0c2a2ad40e1fbfdea381 +Author: Martin Pieuchot +Date: Thu Apr 19 13:33:36 2012 +0200 + + OpenBSD: Provide libusb_get_device_speed() data + + Because the different speed values used by the libusb and OpenBSD's + usb_device_info structure are compatible, keep the code simple and + just copy the value returned by the USB_GET_DEVICEINFO ioctl() call. + + Fixes #45. + +commit c145ec09732fac2eef53accc07314040d22b64a5 +Author: Peter Stuge +Date: Fri Apr 20 00:11:01 2012 +0200 + + doc/Makefile.am: Remove username from SF web rsync upload command + + Commit c407a2d97b6f8715d3452257a0adac40a20178e6 did it for tarballs. + + libusbx.git commit ca159f15737e9097a4d031c9950f281c42af040a + +commit 6506013c6d4face34cfec79dd0584e9f528cbc6a +Author: Pete Batard +Date: Tue Apr 10 13:30:24 2012 +0100 + + Windows: Remove #define compile time options in the backend source code + + * The DYNAMIC_FDS, AUTO_CLAIM and FORCE_INSTANT_TIMEOUTS options + were introduced for development/testing and don't appear to be + used by the Windows backend users => remove them. + + libusbx.git commit 4cccbed825fe1dc138121640a6497d7d05aac159 + +commit e291e369b975692dfa1a0f029244af597fa61220 +Author: Pete Batard +Date: Tue Apr 10 13:05:37 2012 +0100 + + Windows: Warn on one libusb_get_device_list() memory allocation failure + + libusbx.git commit 24d595aa71e7fd0f14d40e933a33f852f7269c8b + +commit 2f40a03ea0552cd8b5ce3d7667b20dc04da061da +Author: Pete Batard +Date: Tue Apr 10 13:05:37 2012 +0100 + + Windows: Add textual error name to debug message on auto-release errors + + libusbx.git commit 24d595aa71e7fd0f14d40e933a33f852f7269c8b + +commit 3c7f85a49b42ac36c6d41294858518c554ac4694 +Author: Pete Batard +Date: Tue Apr 10 13:05:37 2012 +0100 + + Windows: Silence warning about unused function guid_to_string() + + Commit 6b1982b1bd321b55698ce537e64648e8aec85f6f removed the #ifdef + around guid_to_string() but this ended up causing a warning when + the function wasn't being called. Add it back with correct _MSC_VER. + + libusbx.git commit 24d595aa71e7fd0f14d40e933a33f852f7269c8b + + [stuge: Rewrite commit message for libusb.git] + +commit eb55963a6b33799ea76c34f538f21e86f235ea62 +Author: Pete Batard +Date: Tue Apr 10 13:05:37 2012 +0100 + + Windows: Base DUMMY_HANDLE on LONG_PTR instead of LONG + + libusbx.git commit 24d595aa71e7fd0f14d40e933a33f852f7269c8b + +commit d930865987de523061eca259a7fed11aea626831 +Author: Pete Batard +Date: Tue Apr 10 13:05:37 2012 +0100 + + Windows: Prefer calloc() over malloc() and cast all allocations + + This silences VS2010 intellisense warnings on memory allocation. + + libusbx.git commit 24d595aa71e7fd0f14d40e933a33f852f7269c8b + +commit df35117ce58b74fa530baaaccc30adaf432398ea +Author: Peter Stuge +Date: Thu Apr 19 22:55:44 2012 +0200 + + Add libusb_get_version() API function + + Let's see how this will be used. Fixes #53. + + libusbx.git commit 37dfd16c8c2f36c81c86de303072def0dc405e32 + + [stuge: Remove unrelated changes] + [stuge: Add struct libusb_version member rc for release candidate suffix] + [stuge: Add struct libusb_version member describe for git describe output] + +commit 29d5f63c5765f36ea65b55c4cd5f36e1f10a4dae +Author: Peter Stuge +Date: Thu Apr 19 22:25:07 2012 +0200 + + Windows: Rename VS2005 solution and add VS2010 project files + + libusbx.git commit fcad0941e52eb2fd6d57d3327f420db14dfabf0b + + [stuge: Remove xusb references] + [stuge: Add newlines at end of new files] + [stuge: Rename libusb_20??.sln to libusb_vs20??.sln] + +commit b217ec1f904c4382010a3a834a7c58d595b594cf +Author: Pete Batard +Date: Sat Mar 31 22:32:56 2012 +0100 + + libusb/Makefile.am: Fix missing DLL .def file from make dist + + libusbx.git commit 10dc1ea9a799b13b7423968130da812aa97289bf + + [stuge: Use EXTRA_DIST in libusb/Makefile.am instead] + +commit 54cb51d8417e0128eb9088bf628db138c9daa2a0 +Author: Pete Batard +Date: Sat Mar 31 22:14:47 2012 +0100 + + Makefile.am: Fix msvc dir not being included in make dist + + libusbx.git commit a8a80b60a14e3a8269e42dedf34fda66da8e0e50 + +commit 38d5ba472c6cb728ec818a0c8d964b632c8a7992 +Author: Hans de Goede +Date: Fri Mar 30 13:40:32 2012 +0100 + + Linux: Don't spam the console with 'device unconfigured' errors + + libusbx.git commit 3c968be61befc47d33562843e5479ff67303b0c4 + +commit 93f14087b2e79d71ba1e53c0b9c7da655dd1258e +Author: Nathan Hjelm +Date: Thu Apr 19 05:52:58 2012 -0600 + + Darwin: Silence warning: cast from pointer to integer of different size + + As per http://marc.info/?m=133483651109899 + + Reported-by: Xiaofan Chen + +commit 0efc2086646200d8dee86cbbb1e98136383a05c3 +Author: Pete Batard +Date: Thu Mar 29 23:21:25 2012 +0100 + + .gitattributes: Add export-ignore for .gitattributs and .gitignore + + This keeps the git files out of archives created by gitweb. + + libusbx.git commit 2250152b251243f75c951533ae7b1139a785cfe6 + + [stuge: Removed unrelated whitespace changes] + +commit a7ef55c02f0116b94cb75831e5d90ad258c662f8 +Author: Pete Batard +Date: Wed Mar 28 01:02:02 2012 +0100 + + Windows: fix Clang warnings about unused assignations + + libusbx.git commit c0e7b289fdb35687b90263b14426319d2b96b132 + +commit ac8eed67e1595ee5a069623e48362d8a85dcb252 +Author: Pete Batard +Date: Mon Mar 26 23:34:25 2012 +0100 + + configure.ac: LT_LANG([Windows Resource]) makes windres check redundant + + libusbx.git commit 4f9fd6a29a712b0e3312983e9ff153e6d7ed0822 + +commit 89ce6f7d05dc8ff4a441a01b192d2e20857f6c48 +Author: Pete Batard +Date: Tue Mar 27 00:03:07 2012 +0100 + + Windows: Bring .vcproj x86_64 output directories in line with x86_32 + + libusbx.git commit abdb4437ea1897226076fa706651e350dba1cfd5 + +commit 77743c6f5b3cfa2d06dcb32204bc65d8bd4fec80 +Author: Hans de Goede +Date: Fri Mar 9 11:31:11 2012 +0100 + + Linux: Fix a comment in handle_iso_completion() + + Fix the comment at the end of handle_iso_completion, we don't stop on + urbs / isoc packets with less data then requested, which is a good + thing since it is a normal condition for isoc transfers. + + Signed-off-by: Hans de Goede + +commit 5b87c2c7475a8d68270e19336afec0c5a08579ca +Author: Hans de Goede +Date: Fri Mar 9 11:31:10 2012 +0100 + + Linux: Remove bogus status handling from handle_iso_completion() + + Remove a useless check+set of status because: + 1. The check is always true; and + 2. The new value is never used + + Signed-off-by: Hans de Goede + +commit e23d8f67eab947e5d41216e0139f0a50d1342ef8 +Author: Hans de Goede +Date: Fri Mar 9 11:31:09 2012 +0100 + + Linux: Translate isoc packet status codes to LIBUSB_TRANSFER_ codes + + During testing of my usbredir code I hit a scenario where my libusb + app was seeing EXDEV as status in the transfer's iso_packet_desc. + + This happened because we didn't translate linux negative errno errors + in each isoc packet's status to LIBUSB_TRANSFER_ status codes! This + patch adds these translations. + + Signed-off-by: Hans de Goede + +commit 7199bc2c9c351b553b6175a588237ee793719281 +Author: Hans de Goede +Date: Fri Mar 9 11:31:08 2012 +0100 + + Linux: Fix URB return code handling + + During testing of my usbredir code I hit a case where EOVERFLOW was not + handled in handle_control_completion(). Instead of just fixing this one + case I've audited (and fixed where necessary) all handle_foo_completion() + functions to know about all errors documented in + linux/Documentation/usb/error-codes.txt. + + Note that for handle_iso_completion() this patch actually removes the + handling of some codes, since these can never occur on an iso urb (they + can only occur on the iso packets included in the urb, see the next patch + in this series). Also, in case an unknown status is encountered on an iso + urb this patch sets the urb's status to ERROR rather then leaving it at + completed. + + Signed-off-by: Hans de Goede + +commit 98bc7b8d125c2756deadfc889dcefd4e6f2fcd02 +Author: Hans de Goede +Date: Fri Mar 9 11:31:07 2012 +0100 + + Don't print an error when libusb_cancel_transfer() fails with NOT_FOUND + + As stated in the documentation for libusb_cancel_transfer(), + LIBUSB_ERROR_NOT_FOUND is an expected return value for + libusb_cancel_transfer() under certain circumstances, so + printing an error every time this happens is undesirable. + + Even more so because under Linux IOCTL_USBFS_DISCARDURB sets errno + to EINVAL when the kernel can't not find the urb in the kernel's + urbs-in-flight list, which means that the urb has already completed + at the host controller level but it has not necessarily been reaped + yet. IOW under Linux libusb_cancel_transfer() may yield a result of + LIBUSB_ERROR_NOT_FOUND *before* the transfer's callback has been + called! In conclusion there is no way for applications to avoid + calling libusb_cancel_transfer() on already completed transfers, + and these errors can and do happen frequently for some USB traffic. + + Signed-off-by: Hans de Goede + +commit 4db8275da59996eb1c22d2e9e9c527fa58b288ad +Author: Hans de Goede +Date: Fri Mar 9 11:31:06 2012 +0100 + + Linux: Fix cancel_transfer return value when cancelling a multi-urb transfer + + If we fail to cancel the last urb of a multi-urb transfer because it + has already completed (errno == EINVAL on DISCARD_URB), then the entire + transfer has already completed, so returning NOT_FOUND is consistent + with what the documentation for libusb_cancel_transfer() says. + + But if we've successfully cancelled the last urb, and then another urb + fails with errno == EINVAL, this means that we've still cancelled the + transfer, as it has only *partially* completed. + + Signed-off-by: Hans de Goede + +commit b22253ba9cbd399299b534a8c5e3bbac3f240963 +Author: Peter Stuge +Date: Thu Apr 19 04:05:29 2012 +0200 + + libusb-1.0.pc: Mention OpenBSD and NetBSD in description + +commit 6aa0fc60d94e3123de230d3fbc9196814c0e466e +Author: Peter Stuge +Date: Mon Apr 16 05:59:44 2012 +0200 + + io.c: Add debug message with the callback address on completed transfer + +commit de41604560a57b2279ac1d0a10b8192a9224d284 +Author: Xiaofan Chen +Date: Sun Apr 15 11:50:27 2012 +0800 + + Experimental support for NetBSD using the OpenBSD backend + + Signed-off-by: Xiaofan Chen + +commit 404054cb508881c9bd6bc575b66c4f509046b4af +Author: Peter Stuge +Date: Thu Apr 19 00:41:45 2012 +0200 + + configure.ac: Separate per-OS backend selection from per-backend settings + +commit 2eba7e4197cf9afa77451186e1a116ee3ae91adc +Author: Xiaofan Chen +Date: Sun Apr 15 07:17:18 2012 +0800 + + Linux: Silence unused variable warnings when without CLOCK_MONOTONIC + + Signed-off-by: Xiaofan Chen + +commit bc790a9c414871cc1d33f1c7686048434a700e45 +Author: Peter Stuge +Date: Sat Apr 7 05:20:36 2012 +0200 + + examples: Use snprintf() instead of sprintf() in dpfp and dpfp_threaded + + The OpenBSD C compiler generates a warning for every use of sprintf() + and for a good reason. Reported in http://marc.info/?m=133376187514495 + + Reported-by: Xiaofan Chen + +commit bffa232dca51bcc41df71c5735fa56370b7509ad +Author: Peter Stuge +Date: Sat Apr 7 03:55:36 2012 +0200 + + OpenBSD: Fix warning: 'hpriv' may be used uninitialized + + As reported in http://marc.info/?m=133376187514495 + + The variable would be used uninitialized when the internal list of + open devices is empty as obsd_handle_events() checks which device + the event fd belongs to, which can not actually happen, but if it + ever does happen then we will now return LIBUSB_ERROR_NO_DEVICE. + + Reported-by: Xiaofan Chen + +commit 6b1982b1bd321b55698ce537e64648e8aec85f6f +Author: Moses McKnight +Date: Fri Mar 30 21:53:20 2012 -0500 + + Windows: Fix build on VC++2003 which doesn't support variadic macros + + Change _MSC_VER tests to check for >= 1400 instead of > 1200 because + Visual C++ did not support variadic macros until VC++2005, as per + http://msdn.microsoft.com/en-us/library/ms177415%28v=VS.80%29.aspx + + Since usbi_dbg() is a function and not a macro with the old MS C + compilers the functions guid_to_string() and windows_error_str() + need to be compiled unconditionally, and the compiler should remove + the dead code when debug logging is disabled on newer compilers. + +commit 58ac0355e547080c82d02685a32480b891383d3d +Author: Peter Stuge +Date: Sat Mar 31 03:44:40 2012 +0200 + + Windows: Don't use a log function body macro for old MS compilers + + The duplication is a lot more straightforward than the previous LOG_BODY + macro, which also didn't handle the special debug case correctly. The + duplicated code is fortunately not very long. + +commit 76af4c99bd6122c1dd7b58858b669c919d8c8806 +Author: Peter Stuge +Date: Thu Mar 22 01:52:59 2012 +0100 + + libusbi.h: Add IS_EPIN() IS_EPOUT() IS_XFERIN() and IS_XFEROUT() macros + + The macros make backend code a little simpler to read, since the + transfer and endpoint direction is checked in several places across + the supported platforms. + +commit e3d0a4cb9e2f9872c9fdbb22d7ded169e111fc8f +Author: Peter Stuge +Date: Wed Feb 22 14:21:54 2012 +0100 + + Add LIBUSB_TRANSFER_ADD_ZERO_PACKET flag to indicate need for ZLP + + Some protocols which use USB require an extra zero length data packet + to signal end-of-transfer on bulk endpoints, if the last data packet + is exactly wMaxPacketSize bytes long. + + This flag allows applications to inform libusb about this requirement, + so that libusb can handle the issue transparently. + + At the moment the new flag is only supported on Linux, and submitting + a transfer with the flag set returns an error at submit time on other + systems. Hopefully implementations will soon follow for other systems. + + References #6. + +commit 7e0c747cc5ed0a31f38dff5eb5f03d4043b05ada +Author: Peter Stuge +Date: Sun Feb 19 06:58:16 2012 +0100 + + libusb.h: Add comma after last value in enums to ease future expansion + +commit c20ec7a927c05e0b960269751c26ab2b6e0b39ab +Author: Peter Stuge +Date: Sun Feb 19 05:39:33 2012 +0100 + + Linux: Rework bulk continuation check to generic kernel version check + + The old check_flag_bulk_continuation() tested for one specific running + kernel version. The new kernel_version_ge() instead allows to test the + running kernel version against major, minor and sublevel parameters. + +commit cf8f5a7be821099b143fcea8e4ba553daa22818b +Author: Peter Stuge +Date: Sun Feb 19 05:32:10 2012 +0100 + + OpenBSD: Correctly catch attempts to do isochronous OUT transfers + + LIBUSB_ENDPOINT_OUT is the value of the direction bit, which is 0 for + OUT transfers, so the previous condition could never evaluate to true. + +commit ae8e86cffb81858af5eeddbf2ea1aec6d55f573d +Author: Peter Stuge +Date: Sun Feb 19 00:42:20 2012 +0100 + + Darwin: Do not reject devices with product id 0x0000 + + Fixes #128. + +commit 4630fc22cff8ad3e1afa9b223378c0aabe282b5c +Author: Peter Stuge +Date: Mon Feb 13 16:59:51 2012 +0100 + + Do not call timerfd functions when timerfd is not being used + + When libusb was built with timerfd support but used on a system + without timerfd support the library would hang indefinitely on + completion of the first transfer, since timerfd functions were + being called unconditionally and the error returned when timerfd + was not being used caused a confused internal state. + + Many thanks to Ivo Smits for looking into the issue, proposing + an initial solution, and helping with testing! Fixes #73. + +commit c40f3df1efbb9232b525e5f675746762ca2304b8 +Author: Michael Plante +Date: Sun Feb 12 13:49:35 2012 -0500 + + Windows: Fix MSVC6 IDE warning on line continuation in libusb-1.0.rc + + * libusb\libusb-1.0.rc(21): Could not find the file LIBUSB_RC. + * only shows up first time after opening workspace. + * shows up on either build or clean. + * not actually due to rc.exe, but prior to it. + * probably an IDE bug. + * does not show up when running an exported makefile. + + Signed-off-by: Michael Plante + +commit 5526841023101bafa280755c3bd19fc44b9c32a0 +Author: Pete Batard +Date: Sat Jan 7 23:30:23 2012 +0000 + + Windows: Add Renesas SuperSpeed support for libusb_get_device_speed() + + * tests conducted using a Renesas PCIE USB 3.0 controller and driver and + a mass storage USB 3.0 confirm that USB_NODE_CONNECTION_INFORMATION_EX + uses (undocumented) value 3 for SuperSpeed + +commit 3df437680f8f5406795ec5f32d96612d327b2ca4 +Author: Peter Stuge +Date: Fri Feb 10 18:06:43 2012 +0100 + + autogen.sh: Try to use libtoolize before trying glibtoolize + + This helps on Mac OS X where an old glibtoolize is included in the + system and newer, manually installed, versions provide libtoolize. + + See also http://marc.info/?m=132490560131894 + +commit 4afbc78fe09bfc3dd7a609e5f82e9272c9e6226d +Author: Peter Stuge +Date: Wed Feb 8 15:54:21 2012 +0100 + + Rename the lsusb example program to listdevs + + This is intended to reduce confusion with the much more significant + lsusb utility which is part of the usbutils package. + +commit 57ab55159298b7057e0dd9b3854f7fd1550588ed +Author: Sean McBride +Date: Fri Dec 9 13:44:21 2011 -0500 + + core.c: Fix clang warning about useless store to a variable + +commit 32bbbd133e24c24d02646c0f7d1963404d4955f2 +Author: Sean McBride +Date: Fri Dec 9 13:43:46 2011 -0500 + + Darwin: Clarify comments on event thread creation and termination + +commit 6cf3285a4e0dfaec0fe53b8eb6a9281e3c5bcb6c +Author: Sean McBride +Date: Fri Dec 9 13:43:46 2011 -0500 + + Darwin: Fix incorrect mutex protection of libusb_darwin_acfl global + +commit 662ced422cf1ffce68753296a81dccf87f3a1c57 +Author: Sean McBride +Date: Fri Dec 9 13:43:46 2011 -0500 + + Darwin: Use retained runloop variable instead of CFRunLoopGetCurrent() + +commit 952a9bb6116afc69c4bae4714c2eb0713bf62a6d +Author: Sean McBride +Date: Fri Dec 9 13:37:22 2011 -0500 + + Darwin: Fix libusb_init() and libusb_exit() refcount race condition + + Use OSAtomicIncrement32Barrier() and OSAtomicDecrement32Barrier() + in darwin_init() and darwin_exit() to be thread safe. + +commit 721cc1c19fc8e88c4482ab3d1e8a34fa100c403c +Author: Sean McBride +Date: Fri Dec 9 13:33:28 2011 -0500 + + threads_posix.c: Fix prototype warning by including threads_posix.h + +commit f6ef0fca4b36657c1a0885c18cc4c4afcb4f7339 +Author: Dave Camarillo +Date: Fri Sep 23 11:56:58 2011 +0100 + + Windows: Fix crash during enumeration with >= 64 connected devices + + * indexes were outgrowing the unref_list array before realloc, + resulting in out of bound access and crash. + +commit e280760331e8b39ad3530235653644654166b322 +Author: Pete Batard +Date: Tue Oct 26 16:31:13 2010 +0100 + + Windows MSVC6: Remove SetupAPI, AdvAPI32 and OLE32 dependencies + + * this ensures that libusb dependent applications only need + to link with libusb on Windows + * (copied from Pete's msvc08 mods to msvc6 by Michael) + +commit fa66c93253855c9146011a6854d65df6d390039f +Author: Pete Batard +Date: Tue Dec 13 21:18:10 2011 -0500 + + Windows: Output an error message on calls to libusb_get_pollfds() + + Signed-off-by: Michael Plante + +commit 637145ed29ee7c7b13ac45d10cf1f798fc06cbd9 +Author: Pete Batard +Date: Thu Jun 3 22:14:20 2010 -0500 + + io.c: Fix comment since pthreads isn't the only threading libusb uses + +commit bb37939ab44a54a054f73e2f381808b12fb9cb33 +Author: Michael Plante +Date: Mon Aug 2 19:59:12 2010 -0500 + + libusb.h: Cast in libusb_get_string_descriptor() to avoid MSVC6 warning + + On MSVC6 bitwise OR promotes to int, causing the warning. + +commit ca09754471acba9a22fe8fc09170e5660d1d5c5d +Author: Michael Plante +Date: Fri Dec 23 16:50:21 2011 -0600 + + Windows: guid_to_string() is only discarded when macro-usbi_dbg used + + * usbi_dbg encloses all references to guid_to_string + * MinGW/cygwin warn about an unused function, so the #if + squelches this warning + * MSVC6 uses a variadic function form of usbi_dbg instead + of a macro, so the compiler still "sees" guid_to_string + and it therefore needs to always be defined for MSVC6, + even if it's only a stub. + * So we define it if usbi_dbg is used OR if MSVC6 is used. + + Signed-off-by: Michael Plante + +commit 8e15adcb0089882d10269ab77d35e193770ab90e +Author: Pete Batard +Date: Tue Nov 15 01:11:12 2011 +0000 + + Windows: Fix undefined datatype 'LONG_PTR' in MSVC6 + + * issue reported by Elmi + + Signed-off-by: Michael Plante + +commit 17ad642cae618cc09c5516612fa3880d4b6b8635 +Author: Pete Batard +Date: Sun Nov 13 23:10:15 2011 +0000 + + Windows: Fix for MSVC6 preprocessor not accepting blank parameters + + * unlike later iterations of Visual Studio, MSVC6 does not accept + blank parameters on macro calls [eg. CALL(a, ,b)] + * blank params were used with the DLL_DECLARE and DLL_LOAD macros + * issue reported by Elmi + +commit c591a7cbf7dbc6fbb4368e65cf58a8cd02582aeb +Author: Michael Plante +Date: Tue Oct 26 11:39:38 2010 +0100 + + Windows: Switch MSVC6 .dsp project files from MBCS to Unicode + + * MBCS (which is different from UTF-8) only makes sense if + supporting Windows 95/98, which we don't + * (try to match Pete's vcproj changes in MSVC6) + +commit 536e424fd7d057fc3f20f9939f9de4572e51c815 +Author: Michael Plante +Date: Tue Dec 13 21:39:40 2011 -0500 + + Windows: Add missing MSVC6 lsusb.dsp project file + + Signed-off-by: Michael Plante + +commit c56828857eb7ba6fb4f7701693dbb3fe4e75d5f6 +Author: Martin Pieuchot +Date: Mon Jan 30 09:59:30 2012 +0100 + + OpenBSD backend + +commit d2285744c7fa4007bb411be354268209d350b0f2 +Author: Xiaofan Chen +Date: Fri Jan 13 18:07:34 2012 +0100 + + configure.ac: Darwin: Move -lobjc from LIBS to PC_LIBS_PRIVATE + + Since commit 40327cd134718475f6cec8935b856d4fdff2099c it is neccessary + to explicitly include -lobjc not only when linking libusb itself, but + also for programs linking statically against libusb. References #63. + + See also http://marc.info/?m=132505900202378 + +commit 93b0e09d53ed1d177631af9182378492481a790a +Author: Xiaofan Chen +Date: Fri Jan 13 13:04:00 2012 +0100 + + examples: Link only with ../libusb/libusb-1.0.la and not with -lusb-1.0 + + Previous _LDFLAGS included both the freshly built libusb in ../libusb + and -lusb-1.0, where libtool would usually resolve the latter to an + already-installed libusb library in the system. The extra reference + to a second libusb library resulted in failure to build examples on + Mac OS X in some cases, and is plain wrong. + + See also the thread at http://marc.info/?m=132637593623667 + +commit cdc5df8f1b206a7c19bc221e8a9a97d5d98deb85 +Author: Peter Stuge +Date: Thu Jan 12 10:34:55 2012 +0100 + + libusb/Makefile.am: Avoid recursive variables in .rc silent-rule + + Not every make supports recursive variable expansion so some automake + versions complain about non-POSIX variable names ever since commit + 70bec4a9f8ec28d36c731011fa24d37c74ad3523 which added support for + silent-rules in our rule to compile the Windows .rc file. + + This commit removes the recursive variables and instead uses the + simple and generic GEN message and associated variable. + +commit a8e2e7cab278fbfcba91909eaf762cf66da9eda5 +Author: Ludovic Rousseau +Date: Sat Sep 24 18:27:54 2011 +0200 + + Core: Fix #122 warning: no previous prototype for ‘usbi_log_v’ + + Declare the usbi_log_v() function before using it. + +commit e88ecb1e65604c222f82da586bb9e9066d66fbba +Author: Sean McBride +Date: Fri Oct 14 14:40:29 2011 -0400 + + Darwin: Set a name for the background thread on Mac OS X 10.6 and later + + The call to pthread_setname_np() makes it easy to identify the + background thread in the Xcode debugger and in crash reports. + +commit 60bad550dcb31a315a667a6614c52f712c82f45f +Author: Peter Stuge +Date: Thu Sep 22 21:42:35 2011 +0200 + + libusb/Makefile.am: Add libusb-1.0.rc dependency on version.h + +commit 70bec4a9f8ec28d36c731011fa24d37c74ad3523 +Author: Peter Stuge +Date: Thu Sep 22 21:38:29 2011 +0200 + + libusb/Makefile.am: Make the libusb-1.0.rc rule support silent-rules + +commit fa9b682a638e54a4556ef6bd343ef56d6300a520 +Author: Peter Stuge +Date: Thu Sep 22 21:17:37 2011 +0200 + + configure.ac: Enable libtool support for Windows Resource language + +commit 58c73ddca310f757fc7ca75197bf3d7ca58ce29a +Author: Sean McBride +Date: Mon Sep 19 12:52:44 2011 -0400 + + descriptor.c: Use size_t for minor 64 bit compliance improvement + + Fixes #121. + +commit 27ec326a9f1bff4481702b35f39897c65a5db586 +Author: Sean McBride +Date: Mon Sep 19 12:42:33 2011 -0400 + + Darwin: Fix warnings about mismatched signed/unsigned compare + + References #121. + +commit 59cc79f2c8e5da41fe2c761bf1e1d9cd18ddac81 +Author: Sean McBride +Date: Mon Sep 19 12:38:20 2011 -0400 + + Fix unused variable warnings when without timerfd and/or when on Darwin + + References #121. + +commit 1cc5b4a9fb984e83681ae5c797fa6b22bc20f809 +Author: Ludovic Rousseau +Date: Fri Sep 16 18:07:56 2011 +0200 + + Correctly handle LIBUSB_TRANSFER_OVERFLOW in libusb_control_transfer() + + sync.c: In function `libusb_control_transfer': + sync.c:122: warning: enumeration value `LIBUSB_TRANSFER_OVERFLOW' not + handled in switch + + Fixes #120. + +commit c55f581f43885f8576d8e2ebf4d46cd7ff3c1030 +Author: Pete Batard +Date: Mon Sep 19 16:01:37 2011 +0100 + + Windows: do not set altsetting 0 as part of libusb_release_interface() + + * pointed out by Travis Robinson and Xiaofan Chen + * similar to a change advised by Alan Stern for the Linux kernel: + http://marc.info/?m=122790204410765 + +commit efd3fae8f95ef7797ecd4b5731b198f100007d6a +Author: Pete Batard +Date: Mon Sep 19 15:45:35 2011 +0100 + + Windows: fix communication with hubs + + * issue reported by René Haunstrup in http://marc.info/?m=130503019227814 + +commit a8d1eb7963e5811e16e8fb7e157cf3a00d888347 +Author: Pete Batard +Date: Mon Sep 19 15:41:39 2011 +0100 + + Windows: add USB 3.0 controller support + + * Windows 8, NEC/Renesas, TI, Fresco Logic, Etron, VIA, ASMedia + (some of which untested!) + * includes workaround for NEC/Renesas USB 3.0 root hubs + +commit 48a19497bdd14325738ac9197d8cf4ebe1daa2d4 +Author: Pete Batard +Date: Mon Sep 19 15:28:03 2011 +0100 + + Windows: add static keywords and drop duplicated or unneeded code + +commit af407286ba2fd346755297e56e365d84b98090d5 +Author: Pete Batard +Date: Mon Sep 19 13:59:46 2011 +0100 + + Windows: fix 'windows_error_str' defined but not used when not logging + +commit abc3143ba1989a48f62246c2afb0eb4c3c5f7917 +Author: Peter Stuge +Date: Thu Sep 22 10:19:17 2011 +0200 + + libusbi.h: Silence unused context variable warnings when not logging + +commit 69b71c896a153a307360cf21be67b3b6e1e09a2d +Author: Pete Batard +Date: Mon Sep 19 13:06:22 2011 +0100 + + Windows: copy DLL file regardless of ddk_build.cmd dll argument case + +commit fdbac8971212bda3a42feeeaeb92fd8e49c7e904 +Author: Pete Batard +Date: Sun Sep 18 20:06:45 2011 +0100 + + Windows: Add uint32_t typedef for old MSC so that DDK can build lsusb + +commit c471d55e909d84012f065715703dad454d1fa421 +Author: Vitali Lovich +Date: Fri Sep 16 08:53:25 2011 -0600 + + Darwin: fix port leak in darwin_clock_gettime() + +commit 477f3917f8c123e36993f9c0ba8156ca0f16ccfa +Author: Vitali Lovich +Date: Fri Sep 16 08:50:40 2011 -0600 + + Darwin: remove unnecessary run loop invalidation during libusb_exit() + +commit f52094f37ccaff8137f5ce39867d2dba9b0f6bf9 +Author: Vitali Lovich +Date: Fri Sep 16 08:49:54 2011 -0600 + + Darwin: fix port leak during libusb_exit() + +commit 8a2f7b5c0520e6099f2c624cd0994c60867c1628 +Author: Vitali Lovich +Date: Fri Sep 16 08:48:28 2011 -0600 + + Darwin: fix potential leak on libusb_claim_interface() error + +commit b1ee2ef8d0b67dcc51c15742cb2decb386cffd9b +Author: Nathan Hjelm +Date: Fri Sep 16 08:41:01 2011 -0600 + + Darwin: Fix #117 transfer size 64/32 bit issue for transfer callbacks + + The transfer size is now always truncated to 32 bits. + +commit c407a2d97b6f8715d3452257a0adac40a20178e6 +Author: Peter Stuge +Date: Thu Sep 15 17:04:43 2011 +0200 + + Remove username from SF FRS rsync upload command + +commit cbc2d7b2de58cf5fb02d9e5a39be0870527f8632 +Author: Peter Stuge +Date: Thu Sep 15 16:48:35 2011 +0200 + + Support release candidate versions in configure.ac and libusb-1.0.rc + +commit 384a528ed7adde935681313dacc5cd79e4be9ea1 +Author: Peter Stuge +Date: Thu Sep 15 16:32:47 2011 +0200 + + Tidy .gitignore a little + + There's no xusb, we need a glob pattern for matching .exe files, and + fpusb tarballs aren't very common in the libusb source dir. + +commit 9ad3643391a7fc6ce97aa77ffaf97d244fd9e613 +Author: Hans de Goede +Date: Wed Sep 14 10:53:48 2011 +0200 + + Docs: Clarify that libusb_handle_events_timeout() tv param can't be NULL + + The example code and API doc for libusb_handle_events_timeout() could be + interpreted as it being OK to pass a NULL pointer for the tv argument (I + interpreted it like that when I first started coding for libusb). + + This patch changes the docs to make it clear that one must always supply + a tv struct to libusb_handle_events_timeout. + + Signed-off-by: Hans de Goede + +commit e1c06fb070c1328a3b78c7da8b9e779d466edd97 +Author: Peter Stuge +Date: Wed Sep 14 08:23:43 2011 +0200 + + Makefile.am: Do not remove ChangeLog on make distclean, fixes #116 + + [pbatard: Remove it on make maintainer-clean instead] + +commit 0c5bf03eb829e51dcf19562fc4f745937235ea51 +Author: Vitali Lovich +Date: Wed Sep 14 07:02:06 2011 +0200 + + Darwin: Reduce race likelihood between cancellation and device disconnect + + References #88. The race condition still remains, but this change + makes it less likely to trigger. + +commit 3e6e257f55156c4600f3116a0befba8cee62872a +Author: Peter Stuge +Date: Wed Sep 14 04:00:33 2011 +0200 + + Document that libusb_get_device_list() can return any libusb_error code + + Fixes #87. + +commit 737ba04ea40f19564b445fbb489907529e75edc9 +Author: Pete Batard +Date: Thu Jun 16 10:49:13 2011 +0100 + + Linux: Fix #81 URB double free race condition on device disconnect + + A submitted transfer that has just been failed by the kernel could be + picked up by an event handler to be cleaned up, where freeing of URB + memory would race with the submit function doing it's own cleanup and + freeing as a result of the submit failing. + + libusb_submit_transfer() always holds itransfer->lock, so the race can + be avoided by taking that lock also in the cleanup path and checking + that the URB memory has not already been freed before freeing it there. + + As http://libusb.org/ticket/81#comment:14 notes there is still another + possible, but unlikely, race condition between libusb_submit_transfer() + and an event handling thread. That will require more work to solve. + + [stuge: Add check in cleanup path that URBs have not already been freed] + +commit 1b0f758a334d78d3832d17d694ac0c931da36050 +Author: Peter Stuge +Date: Wed Sep 14 03:00:14 2011 +0200 + + Add libusb_error_name() API function + + Until we have i18ned error messages we can at least offer easy + translation from numeric error code to the error code's name. + + [hansg: switch() on enum to get a compiler warning if a case is missing] + [hansg: Better return value when called with an unknown error code] + [hansg: Fix DEFAULT_VISIBILITY in definition to compile on all platforms] + +commit e16805130a04b2642891e86b8f479e6343ca17da +Author: Peter Stuge +Date: Wed Sep 14 02:30:18 2011 +0200 + + Add libusb_has_capability() API function + + Since it is currently not planned to change the filename of the libusb + library between libusb-1.0 versions at least on Windows systems it's + important to have a capability API. + + Currently there exists only one capability; LIBUSB_CAP_HAS_CAPABILITY, + which tests support for the libusb_has_capability() API. + +commit 2dc2fa2a56408e515d25359323b4ea2f1bbec14a +Author: Sebastian Pipping +Date: Tue Sep 13 20:38:26 2011 +0200 + + Fix typos in introductory documentation + +commit 0a828082aeedc6d19b6de4e3b10cc9762352fa7f +Author: Pekka Nikander +Date: Tue Sep 13 18:57:43 2011 +0200 + + Linux: Add libusb_open() debug and error messages with the device path + + Fixes #109. + +commit 6583372125d73543fe0db9fdc59850b9c6aa50d9 +Author: Pekka Nikander +Date: Tue Sep 13 18:52:36 2011 +0200 + + Add debug message with libusb_open() error code + + References #109. + +commit f797ecb3b4e653594f8ebc0c9d9e2ca579062779 +Author: Hans de Goede +Date: Mon Sep 12 18:11:20 2011 +0200 + + Document libusb_handle_events_completed() and _timeout_completed() + + Signed-off-by: Hans de Goede + [stuge: Note that the old racy functions should be avoided by new code] + +commit 6696512aade99bb15d6792af90ae329af270eba6 +Author: Graeme Gill +Date: Sat Sep 10 15:47:05 2011 +0200 + + Fix #56 race condition causing delayed completion of sync transfers + + The sync API had a race where it would check a condition to know if it + needed to call a libusb_handle_events() function. However, the check + was done outside of the lock that is held while the condition is set, + so another thread could completely serve whatever was needed to make + the condition true between it being checked and the event handler being + called. This situation would be detected after a libusb-internal timeout + of 60 seconds, after which the transfer would be completed without + error, but with significant delay. + + Original patch at http://marc.info/?l=libusb-devel&m=127252114815709 + + Changes by Hans de Goede: + - Renamed the "race-proof" functions from libusb_handle_events*_check() + to libusb_handle_events*_completed() + - Drop r = 0 setting in libusb_handle_events_timeout_completed() + (to make both completed checking cases identical flow wise) + + Signed-off-by: Hans de Goede + [stuge: Simplify libusb_handle_events_timeout() change with a goto] + [pbatard: Fix _handle_events_timeout() and _completed() definitions] + +commit cfee5446cdb2974c1e90c7c379a365c495975aef +Author: Nathan Hjelm +Date: Fri Aug 26 23:06:40 2011 -0600 + + Darwin: Use a condition to signal async thread ready in libusb_init() + +commit d1bd234f7e1b1ff4168b8f605e2038e87a0e361f +Author: Nathan Hjelm +Date: Thu Jul 21 22:34:12 2011 -0600 + + Fix #64 use of reserved identifiers throughout libusb + +commit a97762a8a121de1ad3deb9e861088b69bb6a155b +Author: Nathan Hjelm +Date: Thu Jul 21 22:31:09 2011 -0600 + + Darwin: fix libusb_get_device_list() and libusb_claim_interface() leaks + +commit 8723df191fcedc6161732fd06d12df392c6dea3f +Author: Nathan Hjelm +Date: Thu Jul 21 22:28:47 2011 -0600 + + Darwin: use kIOMasterPortDefault instead of creating a master port + +commit 0eb7e43759003610d1afe6148aa6ff4f5859ccb0 +Author: Peter Stuge +Date: Wed Jul 27 03:15:03 2011 +0200 + + Allow devices with zero configurations to be discovered + + At least in Linux, wireless USB devices have zero configurations until + they have been authorized. This device state can be set for any USB + device using: + + echo 0 > /sys/bus/usb/devices/?-?/authorized + + An unauthorized device would previously make usbi_sanitize_device() + return LIBUSB_ERROR_IO, although there really was no I/O error. + + Reported-by: Carl-Daniel Hailfinger + +commit 5010c3e80423d13acee6eeb4af974e8a9bcdd006 +Author: Peter Stuge +Date: Wed Jul 27 06:17:48 2011 +0200 + + Linux: Continue enumeration even if one device returns an error + +commit 2bf8848fb5c85ace0f445c0820a0c173cf76bf43 +Author: Hans de Goede +Date: Fri Jun 17 10:19:00 2011 +0200 + + Linux: Handle single- and two-digit kernel versions like 3.0 and 4 + + The code has been tested with various version strings. + + [stuge: Remove bogus string length check and optimize for newer kernels] + +commit 0288bf24f91eca9f433ebad91a7eb6c0e3e29133 +Author: Pete Batard +Date: Thu Mar 3 18:35:35 2011 +0000 + + Windows: Provide libusb_get_device_speed() data + + * use (currently superspeed unaware) USB_NODE_CONNECTION_INFORMATION_EX + + Fixes #45. + + [stuge: Explicitly convert OS device speeds to libusb device speeds] + [pbatard: Add breaks overlooked when adding explicit conversion] + +commit 382b7deaadd7e2f1d08c9e921e460bb3abf130b2 +Author: Trygve Laugstøl +Date: Tue Jul 19 23:20:40 2011 +0200 + + Darwin: Provide libusb_get_device_speed() data + + References #45. + +commit 44d6319f57e7e2c77347da228ed032e62716b438 +Author: Hans de Goede +Date: Thu Feb 17 15:06:40 2011 +0100 + + Linux: Provide libusb_get_device_speed() data from sysfs + + References #45. + + Signed-off-by: Hans de Goede + +commit c8c40bcbd22abca922ff31c4ed6a75fd7af78b59 +Author: Hans de Goede +Date: Thu Feb 17 13:17:55 2011 +0100 + + Add new API function libusb_get_device_speed() + + Reworked version of my earlier patch, largely modelled after (if not + copy and pasted from) Trygve Laugstøl's similar + commit 5a6541e0d80fb1f21e2b960bc2337a612f9d74fb in + git://git.libusb.org/libusb-trygvis.git + http://git.libusb.org/libusb-trygvis.git + http://git.libusb.org/?p=libusb-trygvis.git;a=commitdiff;h=5a6541e0d + + This patch does not add any OS specific code. The supporting code in + each backend follows in separate patches. References #45. + + Signed-off-By: Hans de Goede + +commit 0db8cba7f2c372f0127c7df9724e5a35e93f2069 +Author: Nathan Hjelm +Date: Sun Mar 20 00:25:44 2011 -0600 + + Darwin: Improve device enumeration performance + + The device location is saved, and later used whenever iterating over + devices. Fixes #111 and #112. + + [stuge: Formatting fixes and split out libusb_get_device_speed() change] + [stuge: Combine with patch that uses the saved device location] + +commit 511ec4301deb516691e39e3df5b90fe28cb2bb0f +Author: Hans de Goede +Date: Thu Feb 17 12:49:36 2011 +0100 + + Linux: Use __read_sysfs_attr() to get busnum and devaddr + + Remove code duplication. + + Signed-off-by: Hans de Goede + +commit e05bbc59ca7b896e2b825bde59bf883ac8c09f5c +Author: Hans de Goede +Date: Thu Feb 17 12:45:10 2011 +0100 + + Linux: Add __read_sysfs_attr() helper function + + On Linux we often need to read (postive) integers from sysfs. This patch + adds a helper function for this. This is a preparation patch for adding + a libusb_get_device_speed() function to libusb. + + Signed-off-by: Hans de Goede + +commit 20e26dda0f86dafa3436b152e090b5f3410c8ce4 +Author: Hans de Goede +Date: Tue Feb 8 16:37:18 2011 +0100 + + Linux: Stop kernel from re-attaching in-kernel driver after reset + + When an interface is bound to the usbfs driver (iow claimed), the + kernel will unbind it, and then after the reset do a device_attach + on the interface, which will bind the default in kernel driver to + the interface. + + So if an app has detached the in kernel driver, and claimed the + interface and then does a libusb_reset_device. Things end up with + the interface no longer being bound to the usbfs driver (so no longer + claimed) and instead it is bound to the in kernel driver (iow the in + kernel driver is re-attached). + + We can stop this from happening by releasing all claimed interfaces + before the reset, as the kernel will not do the device attach after + reset, if no driver was bound to the interface before the reset. + + Signed-off-by: Hans de Goede + +commit 4e294dc9848aab86b31d2fff228cf97e7eadf913 +Author: Hans de Goede +Date: Thu Feb 17 12:35:46 2011 +0100 + + Core: Use USB_MAXINTERFACES rather then sizeof(claimed_interfaces) + + claimed_interfaces is a long and thus its size differs on 32 + versus 64 bits, this patch uses USB_MAXINTERFACES instead of + sizeof(claimed_interfaces) on interface number range checks + for consistent behavior independent of the arch. + + Signed-off-by: Hans de Goede + +commit a68f956dd4c29d6ed799f04f07a3346317843999 +Author: Hans de Goede +Date: Wed Feb 9 12:40:35 2011 +0100 + + Linux: Fix warnings seen when compiling with gcc-4.6 + + Compiling with gcc-4.6 results in the following warnings: + os/linux_usbfs.c: In function 'op_get_configuration': + os/linux_usbfs.c:1144:6: warning: variable 'r' set but not used ... + os/linux_usbfs.c: In function 'op_handle_events': + os/linux_usbfs.c:2091:40: warning: 'status' may be used uninitialized ... + os/linux_usbfs.c:2044:6: note: 'status' was declared here + dpfp.c: In function 'save_to_file': + dpfp.c:228:9: warning: variable 'ignore' set but not used ... + dpfp_threaded.c: In function 'save_to_file': + dpfp_threaded.c:257:9: warning: variable 'ignore' set but not used ... + + This patch fixes these. (The second comes from handle_control_completion() + which gcc seems to inline into op_handle_events().) + + Signed-off-by: Hans de Goede + [stuge: Add fixes for dpfp examples and update source references] + +commit 209b5ccd827039b933b730e3f29abd0d72d3c6c6 +Author: Vitali Lovich +Date: Tue Jun 14 08:51:57 2011 +0200 + + Darwin: Fix #108 crash when a device is unplugged + +commit d3543e9140536a9751811b44f8496489be1e6bb7 +Author: Peter Stuge +Date: Mon Jun 13 22:58:23 2011 +0200 + + libusb.h: Add missing LIBUSB_CLASS_ codes currently defined by usb.org + + LIBUSB_CLASS_PHYSICAL + LIBUSB_CLASS_SMART_CARD + LIBUSB_CLASS_CONTENT_SECURITY + LIBUSB_CLASS_VIDEO + LIBUSB_CLASS_PERSONAL_HEALTHCARE + LIBUSB_CLASS_DIAGNOSTIC_DEVICE + + Per http://www.usb.org/developers/defined_class + +commit 08bc7ffb6a3b65afc6795cd048a890ee8da7d954 +Author: Peter Stuge +Date: Mon Jun 13 22:53:40 2011 +0200 + + libusb.h: Add LIBUSB_CLASS_IMAGE in addition to LIBUSB_CLASS_PTP + + The old LIBUSB_CLASS_PTP name is kept for compatibility. Fixes #106. + +commit 3d7938d85a33cd98553c0c898a8dd0490826b077 +Author: Peter Stuge +Date: Mon Jun 13 22:52:48 2011 +0200 + + libusb.h: Fix LIBUSB_CLASS_PRINTER description typo + + References #106. + +commit 5d0526af1a922afab02cdbdf4bb7078702759571 +Author: Sean McBride +Date: Fri Feb 11 11:28:04 2011 -0500 + + Darwin: Fix #100 warning cast to pointer from integer of different size + +commit bb8854ff5680136e29b57505300f131c2646f258 +Author: Sean McBride +Date: Mon Jun 13 22:26:43 2011 +0200 + + configure.ac: Fix #97 clang warning about -fgnu89-inline + + Remove the test that sets the flag since GNU89 inline semantics are not + required by libusb. + + [stuge: Also remove reference to the test result] + +commit cb3c2e488f298b78027c9d5fc0bec0e5ba27d761 +Author: Pete Batard +Date: Wed Jun 15 01:38:58 2011 +0200 + + Windows: Make cancel_io() in poll_windows.c static + + References #97. + +commit 6635dbb4acb5ee556a020e431b15c954edfcbd29 +Author: Peter Stuge +Date: Mon Jun 13 22:21:02 2011 +0200 + + Windows: Make upperize() in windows_usb.h static + + References #97. + +commit 9479ce9dae3d0dbe2ce693bd02ccceb018a75fe9 +Author: Vitali Lovich +Date: Wed Mar 16 17:33:57 2011 -0700 + + descriptor.c: Fix buffer read overflow caught by valgrind + + In parse_interface() an unexpected descriptor would be parsed without + validating the descriptor's length. It is possible for size to be 0 at + this point, which means that the parsing would read past the end of the + source buffer. Fix #83 by checking the length of the remaining buffer + before parsing. + +commit c775c2f43037cd235b65410583179195e25f9c4a +Author: Vitali Lovich +Date: Wed Mar 16 19:51:40 2011 -0700 + + Clean up in-flight transfers and device handle when closing a device + + Any in-flight transfers should properly invalidate their references + to device handles that are being closed. Additionally, they should be + removed from the transfer-in-flight list. This is done with the events + lock held to protect against another thread processing the same transfer. + The events lock is initialized as a recursive mutex, because the device + close code might itself be called while an event is being handled. + Fixes #82. + + [stuge: Trivial rework to reduce indenting] + +commit 74282582cc879f091ad1d847411337bc3fa78a2b +Author: Vitali Lovich +Date: Wed Mar 16 19:43:30 2011 -0700 + + Add recursive mutexes to threading abstraction + + This is necessary for the device close path which needs to attain the + events lock, but which might itself be called while handling an event. + The events lock is necessary to properly clean up transfers which might + still be pointing to the device. References #82. + + [stuge: Move usbi_mutex_init_recursive() into threads_posix.c] + [stuge: Must also #define _XOPEN_SOURCE 500 to be able to build] + [pbatard: Un-inline usbi_mutex_init_recursive() to make Cygwin happy] + +commit 8f1bc0659136faf312dabe8fe67380a798299d33 +Author: Vitali Lovich +Date: Wed Mar 16 19:48:35 2011 -0700 + + Add USBI_TRANSFER_CANCELLING and _DEVICE_DISAPPEARED status flags + + The flags are used to indicate if a cancellation has started, and if + a cancellation has failed because the device is no longer available. + References #82. + +commit 87ba8a9ead4fd9e81ae3c5a894f698779de1f2c2 +Author: Vitali Lovich +Date: Wed Mar 16 19:50:04 2011 -0700 + + Linux: Detect and report that device has gone away while discarding URBs + + Return LIBUSB_ERROR_NO_DEVICE if the device is no longer available + (ENODEV) to discard the urbs. References #82. + +commit 2c85c363cddd72b9ab425f05e2ee03e0b1df24f1 +Author: Peter Stuge +Date: Mon Jun 6 02:46:46 2011 +0200 + + libusbi.h: Add comma after last value in enum usbi_transfer_flags + +commit 5d7be3e1337f2444097504931ac0f2f0997b2b05 +Author: Peter Stuge +Date: Sun Jun 5 23:28:07 2011 +0200 + + threads_posix.h: Whitespace fix + +commit 18db4813e844fc6929680afcc9b793abcb06876a +Author: Peter Stuge +Date: Sun Jun 5 23:21:08 2011 +0200 + + libusb/Makefile.am: Correct threading files in libusb_1_0_la_SOURCES + +commit 5f30c81f66e8dd61f8eae16de548697708f9bd18 +Author: Alan Ott +Date: Thu Jul 21 16:37:48 2011 +0200 + + Linux: Fix #70 race condition in sysfs_get_device_list() + + Change the way libusb chooses between using sysfs and usbfs for information + about the attached devies. Using the old method, a race condition could + occur if a device was unplugged just before (or during) the call to + libusb_get_device_list(), corrupting the internal sysfs_can_relate_devices + and sysfs_has_descriptors variables and preventing libusb_get_device_list() + from working in future calls. + + The old method was based on the assumption that if certain sysfs files + (eg: busnum) could not be opened, that indicated an inadequacy of sysfs + (ie: the running kernel's sysfs version did not contain those files), + when in reality those files couldn't be opened because the device had + been unplugged. + + The new method checks the adequacy of sysfs during libusb_init() + (op_init()) and if a sysfs file cannot be opened, it is now assumed that + it is because the device has been unplugged, not because sysfs is + inadequate. + + Signed-off-by: Alan Ott + [stuge: Include closedir() bugfix posted in ticket by Arne Laansoo] + [stuge: Remove dead code in sysfs_scan_device() found by Hans de Goede] + +commit 40327cd134718475f6cec8935b856d4fdff2099c +Author: Sean McBride +Date: Thu Feb 10 17:11:29 2011 -0500 + + Darwin: Fix #63 error when apps use Objective-C garbage collection + +commit 3ba2fae24886fec89410e5f2295f65363edcc2df +Author: Sean McBride +Date: Fri Feb 5 11:50:34 2010 -0500 + + Darwin: Fix #28 clang analyzer warning about unbalanced retain/release + +commit b67120f047f7eafa15c88c66fa61cef40805ec1f +Author: Sean McBride +Date: Fri Feb 5 11:50:34 2010 -0500 + + io.c: Fix clang analyzer warning about unused variable + + References #28. + +commit 51af85d03a098d7d99ea544e8e9535b5476bab33 +Author: Peter Stuge +Date: Tue May 10 10:44:18 2011 +0200 + + .gitignore: Add m4 subdirectory created by libtool + +commit c569e5b3b314538f45d0b3b6f14ce3dbdfee1be9 +Author: Ludovic Rousseau +Date: Mon Nov 15 14:45:50 2010 +0100 + + Linux: Do not include useless pthread.h + + The code does not use threads so no need to #include + Fixes #74. + +commit 82af9f9d440ef49015652c699157cf62020f097a +Author: Pete Batard +Date: Tue Mar 8 17:41:05 2011 +0000 + + Windows: minor code improvements + + * mostly warnings from VS2010's Intellisense + +commit 7e636dbe06001b9ac68e452a2fdc05e33fbb4e3a +Author: Pete Batard +Date: Tue Mar 8 17:40:39 2011 +0000 + + Windows: prevent set_configuration request from being sent using WinUSB + + * multiple WinUSB set configuration requests can stall a device and + WinUSB does not support setting of alt configuration in the first place + * issue reported and investigated by Xiaofan Chen + +commit 578c50c99646e5ebbcfbea653524a519b843ebcd +Author: Graeme Gill +Date: Tue Mar 8 17:39:16 2011 +0000 + + Windows: fixed default WinUSB timeout and ineffective policy settings + + * default WinUSB timeout was 5 seconds, which may be to small. + PIPE_TRANSFER_TIMEOUT policy is now set to infinite for all EPs. + * other WinUSB policy settings were called before the endpoints + had been set. This is now fixed. + +commit 25fa63ea1cfe02e784cb62d3b869fd15e62b5b6e +Author: Pete Batard +Date: Tue Mar 8 17:37:40 2011 +0000 + + Windows: Don't leak pipe fds + + use _open() and _close() rather than _open_osfhandle() and CloseHandle() + + * use of CloseHandle() prevented the pipe fds from being + relinquished on libusb_exit() + * leaked fds could lead to the OS running out of new fds + and LIBUSB_ERROR_NO_MEM being returned as a result + * using _open() avoids _open_osfhandle() redef for cygwin + * issue reported by Stephano Antonelli + +commit 3ccd9bddec316ee4b867959fd7f616eb4d410997 +Author: Peter Stuge +Date: Tue May 10 10:05:29 2011 +0200 + + Windows: enumeration overhaul + + * uses multiple passes in a single call + * uses a hash table, in anticipation for hotplug + * adds a (dummy) HUB interface for harmonization + * adds calloc on device struct creation in core + (to detect and avoid unnecessary double initialization) + +commit bb108cbe39802785d10fe025b74ca5ee19734151 +Author: Pete Batard +Date: Tue May 10 00:56:18 2011 +0100 + + Windows: MS project files part 4 - MSVC6 project files + + Fixes #57 and #1. + +commit 78896ae99b9c2d5672fc93c5bad0f5e8e75c53ea +Author: Pete Batard +Date: Tue May 10 00:53:09 2011 +0100 + + Windows: MS project files part 3 - VS2005 project files + + References #57. + +commit 9e5f4277e379a82f5d32e81db1bd0ffaa6637596 +Author: Pete Batard +Date: Tue May 10 00:38:49 2011 +0100 + + Windows: MS project files part 2 - WDK project files + + References #57. + +commit c1e75431418cdfc10ec963d823fce479cdae6840 +Author: Pete Batard +Date: Tue May 10 00:38:12 2011 +0100 + + Windows: MS project files part 1 - support files & preliminaries + + * adds the MSVC support files used by MSVC6, VS2005 and WDK + * also adds missing defines required by MS compilers in libusb.h + * also anticipatory sets .gitattributes for CRLF handling + * also adds manually maintained .def file for import lib generation + + References #57. + +commit 85a14f43e0ce27cd47f84fdaeacbaa81cebdb886 +Author: Peter Stuge +Date: Mon May 9 08:12:24 2011 +0200 + + Move library version number from configure.ac to libusb/version.h + + This is neccessary to support native MS builds. The Windows resource + file libusb/libusb-1.0.rc must include the release version, which was + previously only available after configure had run and had substituted + the numbers into a generated libusb/libusb-1.0.rc file. + + The version atoms are now stored as CPP style #defines in libusb/version.h + so that the .rc no longer needs to be generated but can simply include the + header file and access the version information directly. + + The m4 macro LU_DEFINE_VERSION_ATOM() was added to configure.ac to get + version atoms from libusb/version.h for use in AC_INIT(). The macro + handles C and C++ style comments in version.h, but can easily be made + to fail by obscuring the file. Please don't do that. + + Tested with MinGW using autoconf, and manual compile of libusb-1.0.rc + using RC.EXE Version 5.2.3690.0 from Visual C++ 2005 Express Edition. + +commit 3481f52b014110f6c291e5a15e79ba774dcdfacf +Author: Peter Stuge +Date: Tue May 10 08:36:32 2011 +0200 + + Windows: Debug builds create the same .dll file name as non-debug + + Thanks to Pete for pointing this out! + +commit 9da8cf5c9ed9bd381a77d8170fc0556edbcce4dc +Author: Pete Batard +Date: Tue Mar 8 17:18:48 2011 +0000 + + Windows: explicit use of ANSI or WideChar calls + + * This is in anticipation of adding MSVC project files + that use Unicode rather than MBCS + +commit ae675c1f49dc00b695fce7296903f60998cc28ed +Author: Pete Batard +Date: Tue Mar 8 17:16:23 2011 +0000 + + Windows: Remove SetupAPI, AdvAPI32 and OLE32 link-time dependencies + + * this ensures that libusb dependent applications only need + to explicitly link against libusb on Windows + + The run-time dependency on Cfgmgr32.dll, OLE32.dll and SetupAPI.dll remains. + +commit 356e312511e4892977636da52ec497ad2c716032 +Author: Pete Batard +Date: Tue Mar 8 17:12:33 2011 +0000 + + Add .gitattributes to avoid Windows line ending issues with autocrlf + +commit 61c120f025f3dee04eeb88159d7c0403a8bf91fe +Author: Peter Stuge +Date: Sun Feb 27 09:37:54 2011 +0100 + + Windows: Touch up FileDescription and ProductName resource strings + +commit 99b4ddcd893834a4be8b5884037b650e57ba0ba2 +Author: Peter Stuge +Date: Sun Feb 27 07:20:40 2011 +0100 + + Windows: Remove emulated direct device access via HID API + + Either use a library such as HIDAPI to communicate with HID class + devices, or replace the kernel driver for the device with one that + offers support for the complete libusb API. + +commit 4be84ab49c838d534d3a1b8a64ffa89774984ee7 +Author: Peter Stuge +Date: Sun Feb 27 06:59:15 2011 +0100 + + Revert libusb_strerror() until we have i18n and l10n + +commit 0e177f22fcc69d9aab6fb410e85f3413f478c94c +Author: Pete Batard +Date: Wed Jan 19 14:00:12 2011 +0000 + + dpfp_threaded: return instead of pthread_exit() to avoid Cygwin warning + +commit e65878f21b0a0bb96debcb292dc03ce3c4ebb701 +Author: Pete Batard +Date: Wed Jan 19 13:52:08 2011 +0000 + + Windows: Rename various variables named "index" to avoid shadow warnings + +commit 019bf73bb2677dc7720bc8280527316adcbaa506 +Author: Pete Batard +Date: Tue Oct 5 12:50:53 2010 +0100 + + Windows: Fix logic in enumeration of driver name and port number + +commit 24494ed5db27737fc607fc35dda722521c9fe4d4 +Author: Pete Batard +Date: Tue Oct 5 12:50:13 2010 +0100 + + Windows: Allow claiming any interface in composite device using WinUSB + + Issue reported by Benjamin Dobell, see #48. The call to + WinUsb_QueryInterfaceSettings() is removed since it doesn't work + on any other interface but the first (a WinUSB limitation). + + This allows the use of WinUSB.sys in lieu of the usbccgp.sys + "USB Generic Parent" default driver for composite devices. + +commit 9c8e6545f2fbb171f81a9451eaf2d09e1fbc13b3 +Author: Pete Batard +Date: Tue Oct 5 12:47:15 2010 +0100 + + Windows: Allow arbitrary bConfigurationValue in config descriptors + + Unlike bInterfaceNumber, bConfigurationValue does not have to be + either sequential or contiguous. The bConfigurationValue is now + included in debug output. Fixes #48 reported by Benjamin Dobell. + +commit dcd002974e511879320233fd5b0600e06bdc5620 +Author: Thomas Röfer +Date: Fri Nov 19 22:03:11 2010 +0100 + + Darwin: Schedule isochronous transfers further in the future + + This is required to make OpenKinect transfer data at 30 fps. This + change was originally made by Theo Watson, and Thomas improved on it. + The commit came via OpenKinect into libusb thanks to Kyle Machulis and + Hector Martin. Fixes #66. + +commit e83fad33dbaf9f37811da6d4cd9d3be554817944 +Author: Thomas Röfer +Date: Fri Nov 19 22:03:11 2010 +0100 + + Darwin: Fix #65 memory leak in submit_iso_transfer() + + This was also independently fixed by Hoi-Ho Chan, but Thomas caught + an additional problem with his fix. + + This commit came via OpenKinect into libusb thanks to Kyle Machulis + and Hector Martin. + +commit 1a2d21fe42ad5a157651c787e2f500fc162c325b +Author: Peter Stuge +Date: Sat Feb 26 04:21:05 2011 +0100 + + configure.ac: Refactor Windows backend settings into one occurence + + The Windows backend is used both with MinGW and Cygwin, and since most + settings are identical they can be set in one place. + +commit 717f47621d18de16b87e237f3740299f43e4ca1c +Author: Peter Stuge +Date: Mon Nov 15 19:58:51 2010 +0100 + + configure.ac: Rename AM_LDFLAGS to LTLDFLAGS and actually use them + + The new variable name tries to clarify that libtool is being used. + Linker flags must thus always be specified with -Wl. + + Factor out the libtool flag -no-undefined from host specific cases. + The flag is required to build a Windows DLL, but is correct also for + the other supported systems. + + Also, start actually using LTLDFLAGS in libusb/Makefile.am, so that + libtool will see the options set by configure. + +commit 3cbe5736469c1c52049752c137ae11387e9b079d +Author: Peter Stuge +Date: Sun Nov 21 23:38:46 2010 +0100 + + configure.ac: Clean up PC_LIBS_PRIVATE and AM_LDFLAGS + + Move linker options for when linking the library itself from + PC_LIBS_PRIVATE into AM_LDFLAGS. PC_LIBS_PRIVATE should only + contain flags needed to link applications statically against libusb. + Fixes #72. + +commit ef39d1510580b9fcbacf13443fa7a4e553a9a88e +Author: Peter Stuge +Date: Fri Feb 25 02:33:29 2011 +0100 + + configure.ac: Call AC_CONFIG_FILES() for each output file + + This avoids a problem with Windows line endings. + +commit 6e52ea067711e6e7e1b2882757fb61b11b6f8feb +Author: Peter Stuge +Date: Sun Nov 21 23:37:27 2010 +0100 + + configure.ac: Whitespace changes and trivial reordering + +commit 44b85dabc3f4efe0918a598f981675aa3765cc26 +Author: Peter Stuge +Date: Sun Nov 21 23:10:35 2010 +0100 + + configure.ac: Quote AC_COMPILE_IFELSE() input + +commit 19d5882c398e49a453ff78494db23b7f4d13c37c +Author: Peter Stuge +Date: Sun Nov 21 23:09:02 2010 +0100 + + configure.ac: Define booleans to 1 when set, instead of an empty string + + This makes the generated config.h look a lot nicer. + +commit c24649d796c8b5c97af79a41856422def2e593bc +Author: Peter Stuge +Date: Sat Oct 30 22:28:59 2010 +0200 + + configure.ac: Clean up redundancy and fix LIBS on Linux + + LIBS, AM_LDFLAGS, OS_ conditionals and THREADS_POSIX had a bit of + redundancy throughout the file, and on Linux LIBS ended up missing + the -pthread flag. + +commit 0bd4a4dd89ff64b99ab55bfc0c5782502c10c676 +Author: Peter Stuge +Date: Sat Feb 26 04:08:38 2011 +0100 + + configure.ac: Touch up Darwin and Cygwin OS messages + +commit 16cf11a1213272afd616598fa3aba0941e66ec3c +Author: Peter Stuge +Date: Sat Oct 30 22:13:05 2010 +0200 + + configure.ac: Do not use -pthread on Darwin + + It's not needed because Darwin has POSIX Threads in libc. Fixes #96. + +commit a120747d561929682cd0276ea4c13fb22fad8554 +Author: Peter Stuge +Date: Sat Oct 30 22:07:37 2010 +0200 + + configure.ac: Check for poll.h, and for nfds_t on Darwin + + On Linux, assume nfds_t is always available. + + On Darwin, fall back to unsigned int when poll() exists but there + is no nfds_t, such as on Mac OS X before 10.4. + + On Windows (both MinGW and Cygwin), always use unsigned int instead + of nfds_t, and don't check for poll.h because we use our own poll() + implementation. + +commit 21d03d12f92c0d9bd7990861ca0ebf5009f82799 +Author: Nathan Hjelm +Date: Tue Oct 5 20:08:08 2010 -0600 + + Darwin: Add support for control requests on endpoints other than 0 + + Signed-off-by: Nathan Hjelm + +commit 9bfacd760b40f1137a7835198c6028cbdaddeb18 +Author: Nathan Hjelm +Date: Tue Oct 5 23:11:50 2010 -0600 + + Darwin: Add more error checking for libusb_open() + + Now also check the CreateDeviceAsyncEventSource() return code for errors. + + Signed-off-by: Nathan Hjelm + +commit 478cd4a30728595fd742aa192d8149ee4216d4bc +Author: Peter Stuge +Date: Wed Nov 3 21:46:53 2010 +0100 + + Core: libusb_get_next_timeout() must consider all flying transfers + + If transfer->flags indicated that a transfer had a timeout, but no + timeout was actually set, then libusb_get_next_timeout() would look + no further for a timeout, ignoring any transfers later in the list + which had a timeout set. + + Since libusb has an internal 60 second timeout this bug could not + cause complete lockup, but it could cause a 60 second timeout even + when a transfer was submitted with a shorter timeout. + +commit 7802e4a3e38bcefccf96ae510ec2c6b7a959b8b5 +Author: Ludovic Rousseau +Date: Mon Nov 15 14:55:51 2010 +0100 + + Linux: Correctly catch read() errors for sysfs config descriptors + + read(2) returns ssize_t (signed) and not size_t (unsigned) or int. + + Silence "warning: comparison of unsigned expression < 0 is always false" + and fix #75. + +commit 4c7f3c8c3012bddba058afd2abdda792944fcda1 +Author: Peter Stuge +Date: Sun Jan 23 04:01:25 2011 +0100 + + Linux: Refactor cancellation into one function for all transfer types + +commit 011f1f297bc134188fab9960da1b1b9f0bd541aa +Author: Peter Stuge +Date: Sun Oct 17 08:19:56 2010 +0200 + + Linux: Refactor discarding of URBs into a function and return all errors + + The Linux backend did not always return errors according to the + libusb_cancel_transfer() documentation. + +commit 26246df19cb4d88954a5aa9ed5f6b859e451df85 +Author: Peter Stuge +Date: Sun Jan 23 04:01:01 2011 +0100 + + Linux: Set private number of URBs also for control transfers + +commit 295c9d12e25bc2dbdd8b42bd67a1f7120f0631a1 +Author: Alan Stern +Date: Sun Oct 17 06:57:06 2010 +0200 + + Linux: cancel URBs in reverse order + + In a multi-URB transfer, URBs should be cancelled in reverse order of + submission. This prevents races that might otherwise occur (after URB N + is cancelled, data may be transferred for URB N+1 before it too can be + cancelled). Fixes #8. + +commit 07df377a5df25e9c1811b554dc00eb8c40e5b995 +Author: Alan Stern +Date: Sun Oct 17 04:17:32 2010 +0200 + + Linux: report correct value for urb->actual_length + + Transferred bytes are returned correctly by the kernel for every URB, + even when an error occurs. Hence they should always be included in + the transfer statistics. The same is true for isochronous packet + length and status. + + [stuge: set itransfer->transferred so data is stored at correct offset] + +commit b26db49208c7a6ef0a99645142af21ce80c57c22 +Author: Alan Stern +Date: Fri Oct 22 11:13:34 2010 +0200 + + Linux: improve reporting of URB error status codes + + Fix the way overflow errors are handled (they can occur in any + transaction, not just the last one in a transfer) and add tests + for other commonly-occuring error statuses. + +commit efc29733ad31f81883a7ac51a6cc6cda9ad4feb9 +Author: Alan Stern +Date: Tue Oct 5 11:08:40 2010 -0400 + + Linux: improve detection of BULK_CONTINUATION kernel support + + Clarify the comments describing the BULK_CONTINATION flag, and improve + the subroutine that checks whether the flag is supported by making it + "future-proof", i.e., by working properly with kernel version numbers + higher than 2.6. + +commit bd267cf92269e0c4cd8eef795b91eefb2c63452e +Author: Peter Stuge +Date: Mon Nov 22 05:14:00 2010 +0100 + + README: Update webpage URL and add Peter's email address + +commit 845b715675703c5f1bc907f6302ece416c9f112c +Author: Peter Stuge +Date: Wed Aug 4 07:30:22 2010 +0200 + + libusb is not just for Linux! + +commit 67d9ef7b6877e17f2deec81cd41dc0948f6bed4b +Author: Nathan Hjelm +Date: Tue Oct 5 19:48:39 2010 -0600 + + Remove USBI_OS_HANDLES_TIMEOUT and fix int/isoc timeouts on Darwin + + Backends set USBI_TRANSFER_OS_HANDLES_TIMEOUT for transfers instead. + Darwin only handles timeouts for bulk and control transfers, so the + backend now sets that flag accordingly, making libusb core handle + timeouts for interrupt and isochronous transfers. Fixes #31. + + Signed-off-by: Nathan Hjelm + + [stuge: rework libusb_get_next_timeout() and enum usbi_transfer_flags] + [stuge: fix typo; set USBI_TRANSFER_TIMED_OUT flag correctly] + +commit 370922dfbe0964c0b8a0c1974bb1d7b85ac10607 +Author: Peter Stuge +Date: Sun Nov 14 03:14:00 2010 +0100 + + Silence "warning: suggest braces around empty body in an 'if' statement" + +commit 0f85015bdf87f3bca0d86ed87c9b976176640922 +Author: Konrad Rzepecki +Date: Sat Nov 13 14:09:22 2010 +0100 + + Disallow libusb_get_string_descriptor_ascii() with index 0 + + String descriptor 0 is the list of supported language IDs in the device, + which can't have an ASCII representation. Calling the function with + index 0 is thus not really useful. Fixes #43. + +commit 3b41c31d3fa2c1f93649cc5fc0f59acbf3efd5a1 +Author: Ludovic Rousseau +Date: Fri Mar 19 15:35:14 2010 +0100 + + Use const for the usbi_parse_descriptor() format string + + Constant strings should be "const char *" instead of "char *". Silence + "discards qualifiers from pointer target type" warnings. Fixes #61. + +commit 7f2e9f0776386997d2b4c4c47598ab88e3caeb7a +Author: Hector Martin +Date: Wed Aug 25 03:21:57 2010 +0200 + + Linux: Fix usbfs/sysfs config descriptor handling on big-endian + + usbfs endian-swaps, sysfs doesn't, not the other way around. Fixes #51; + descriptor endian parsing is backwards using sysfs on big-endian hosts. + usbfs is untested. + + Signed-off-by: Hector Martin + + [stuge: checked against Documentation/usb/proc_usb_info.txt] + +commit 2aa8984e59cf0f492e7fbebb8924f54f6160cc5e +Author: Ludovic Rousseau +Date: Tue Aug 17 20:53:04 2010 +0200 + + examples: #include without directory name + + The libusb-1.0 directory name belongs in the compile command, e.g. + via pkg-config --cflags. Fixes #58. + +commit 7da756e09fd97efad2b35b5cee0e2b2550aac2cb +Author: Ludovic Rousseau +Date: Thu Jun 24 10:14:24 2010 +0200 + + Add missing argument to libusb_wait_for_event() documentation, fix #55 + + In the libusb_wait_for_event() sample code in the section "Letting other + threads do the work for you" the call to libusb_wait_for_event() was not + updated by commit 1df713d622ab4f0b03aad72d903ac7beb8fb3b90, which added + the libusb_context *ctx parameter to the function, so the sample code + was broken until now. + +commit 678c242705b29f9cb6cc421b5625a6485ae58047 +Author: Peter Stuge +Date: Sat Oct 16 14:22:30 2010 +0200 + + examples: Silence warnings about return value of fwrite() + +commit 9cd9059bf9baac69a9d6c909f4c1e000592fa260 +Author: Peter Stuge +Date: Sat Oct 16 11:47:14 2010 +0200 + + Linux: Don't free() URBs prematurely on hardware error; fix #54 + + When an URB in a multi-URB transfer had an error, handle_bulk_completion() + would free all URBs and segfault once the next one completed, instead of + cancelling the remaining URBs and cleaning up as usual. + + This is basically the patch from the ticket, plus some restructuring + for increased readability of the function. + + Many thanks to Brian Shirley and National Instruments for finding and + fixing this! + +commit 116d34f608b02f4e14668450b158acf5db726f95 +Author: Pete Batard +Date: Tue Oct 5 12:43:41 2010 +0100 + + Windows: add support for filter drivers + + * precedence is driver > upper filter > lower filter, and defined + in struct driver_lookup lookup from set_device_paths() + +commit eb833fcd837e3aac2e497438b14c8612254c28ce +Author: Pete Batard +Date: Tue Oct 5 12:36:49 2010 +0100 + + Windows: fix errcode shadow warning, and string and DLL_DECLARE fixes + + * use FormatMessageA, and overall improvement of windows_error_str() + * use safe_strlen() always + * better typing/init default + * more explicit debug message for devices with no driver + +commit 1feadb5f78e1d2cdfd2aaf0011e041c2848bae37 +Author: Pete Batard +Date: Tue Oct 5 12:29:32 2010 +0100 + + Windows: use IOCTLs for HID input, output and feature reports + + * fixes feature reports not providing actual read size + (reported by Axel Rohde http://marc.info/?m=127033070021994) + * removes the USE_HIDD_FOR_REPORTS macro + * IOCTL usage inspired from HIDAPI by Alan Ott + +commit d7c25451f4075d2a12eb5cbc91ff3de8c0292da0 +Author: Daniel Drake +Date: Mon Oct 4 20:03:58 2010 +0100 + + Fix libtool version setting + + This was being set too early to take effect. + +commit a6fb54e2eef4e393bd06829bc3bdc746ea9d41a6 +Author: Mike Frysinger +Date: Mon Oct 4 20:01:07 2010 +0100 + + Populate the pkg-config Libs.private field + +commit a9b4065f048e750b7317f6434406fd528b69bf33 +Author: Mike Frysinger +Date: Fri Aug 20 00:09:46 2010 -0400 + + Linux: fix build failure when CLOCK_MONOTONIC does not exist + + This is not available on all platforms. + +commit d192c5bd32736fde0080d756de6221287af34891 +Author: Daniel Drake +Date: Mon Oct 4 18:45:18 2010 +0100 + + Update libtool version info + + With input from various people on the mailing list, update the libtool + versioning info and start to update this on every release. + + The next libusb release will not need a change here. All following ones + will. + +commit e65f69a7ef3de357c867ddaac9598efe407078b6 +Author: Pete Batard +Date: Thu Aug 5 16:40:09 2010 +0100 + + Updated documentation for unsupported Darwin/Windows calls + +commit c8bab4e19413d70c515a2eaf747a75b7f66fdc0b +Author: Pete Batard +Date: Sun Sep 19 14:24:25 2010 +0100 + + Windows: Make libusb_pollfd() return error + + Windows does not have numerical file descriptors but does have the + concept of event sources. Exposing these event sources will require + some careful thought and design, to be completed later. + +commit bd623f70d99fad8b975f8d4ee62ea4b1abf1272f +Author: Daniel Drake +Date: Sun Sep 19 14:21:01 2010 +0100 + + MinGW: Use --add-stdcall-alias linker option + + Naming of symbols inside the library is inconsistent on Windows: + http://wyw.dcweb.cn/stdcall.htm + + Use this linker option to add aliases which add compatibility with + the "MSVC DLL" platform when a DEF file is used. It also better matches + the appearance of the Windows API itself. + +commit 29f9f9e3af3340df6a955881a93caf9d2a6d08d6 +Author: Pete Batard +Date: Fri Aug 13 11:59:49 2010 +0100 + + Introduced calling convention (for Windows) + + Under Windows, a variety of compilers and configurations are available, + meaning that the manner of parameter passing (e.g. registers vs stack) + can vary. + + Match the Windows API calling convention and document this appropriately. + This calling convention will be used regardless of the configuration of + the user's development platform. + + The only user-level complication is that all functions used as libusb + callbacks must use the same calling convention as libusb. The + LIBUSB_CALL macro is provided to make this easy. + + Signed-off-by: Michael Plante + Signed-off-by: Pete Batard + [dsd: slight change of strategy, add documentation] + +commit be523f1fe7c136c3fca06ae9c96aff44a22482ba +Author: Pete Batard +Date: Fri Aug 6 21:56:04 2010 -0600 + + Windows: fix string copy in sanitize_path + + The NULL byte was not being copied. + +commit 7fd36af9f749ce8bf96f89cefd519a9f46825573 +Author: Pete Batard +Date: Fri Jul 30 00:30:31 2010 +0100 + + Windows: DuplicateHandle failure is not a warning + + This is because WinUSB handles are not duplicable, and generate a + lot of these warnings. + +commit 33cd2f68b4d500e852e354e5acae3d9a96a8ec26 +Author: Pete Batard +Date: Fri Jul 30 00:23:05 2010 +0100 + + removed trailing whitespaces + +commit e47849afe9381c864683220eac9ce7bcf43f7883 +Author: Pete Batard +Date: Wed Aug 4 18:18:32 2010 -0600 + + Windows: Mark interfaces as unused when releasing + + Without this important cleanup, the autoclaim code could attempt to + reuse an unclaimed interface as if it were already claimed. + +commit b30ca141a0bdce26e7cfdd91d346e49051532ee7 +Author: Pete Batard +Date: Wed Aug 4 18:15:59 2010 -0600 + + Windows: fix device path string duplication + +commit e8d7a89503d5655c4b04da718c6971e25ff48162 +Author: Nathan Hjelm +Date: Mon Aug 2 21:27:38 2010 -0600 + + Darwin: Cache device configuration value + + Cache device configuration value to bring the Darwin backend more in + line with the libusb spec. To handle buggy devices GetConfiguration is + not called unless the device has more than one configuration. + +commit fe5d1d2050f715ffa8cbd35a378ac969a1a01584 +Author: Xiaofan Chen +Date: Fri Jul 30 15:56:43 2010 +0100 + + Fix inconsistencies between prototypes and definitions + + This removes some warnings on cygwin regarding a name clash against + the standard library "index" function. + +commit 3b538c43e11b805a37d93b6283d270d5d5f0d1f5 +Author: Hoi-Ho Chan +Date: Tue Jul 27 21:04:17 2010 -0600 + + Darwin: handle kIOReturnUnderrun + + This return code indicates that the device returned a data packet + less than the max packet size. In libusb backend terms, this is + a successful transfer. + +commit 9a4249f8a104b98a15a7e3ba7ecae9a385ed9027 +Author: Pete Batard +Date: Sat Jul 10 17:51:13 2010 -0600 + + Add Windows support + + Via Cygwin/MinGW, libusb now has windows support. + Thanks to contributors: Michael Plante, Orin Eman, Peter Stuge, + Stephan Meyer, Xiaofan Chen. + +commit d38dd5e3d2a872f7064eea084ddea8c33811dd7d +Author: Hoi-Ho Chan +Date: Sat Jul 24 13:48:00 2010 -0600 + + Darwin: write iso transfer details into correct packets + +commit fbff5b4b665ff2ebc948162617cf7f4f5d2fabeb +Author: Nathan Hjelm +Date: Sat Jul 24 13:42:57 2010 -0600 + + Darwin: fix interface object leak + +commit dffc09835d6860ae9b6a62c39af5be346188cb05 +Author: Nathan Hjelm +Date: Sat Jul 24 13:41:03 2010 -0600 + + Darwin: clean up some debug messages + +commit 946d1abbca397b8e88a1b0b4df176dcc5e3b7348 +Author: Nathan Hjelm +Date: Sat Jul 24 13:39:16 2010 -0600 + + Darwin: Don't open devices during scan unless we have to unsuspend + +commit 3b6d9ac82e2599cad7817d21e909a42275ddc4c4 +Author: Peter Stuge +Date: Fri Jun 25 08:08:13 2010 +0200 + + Linux: Handle early complete of multi-URB transfer + +commit a516fcb99376686d2d0028e5ac69950c57a55b9e +Author: Daniel Drake +Date: Wed Jul 21 17:49:21 2010 -0600 + + Only compile dpfp examples when sigaction is available + + It's not available on MinGW. + +commit a1d831ef82e1700f4ebb9df6ca5cef74be757c08 +Author: Aurelien Jarno +Date: Tue May 25 09:32:19 2010 +0200 + + configure.ac: fix bashisms + +commit 7211aba6e290f9805e911959b2a43a4b3ec56d4f +Author: Daniel Drake +Date: Fri Jun 25 12:01:58 2010 -0500 + + Only include sys/time.h on appropriate platforms + + This header doesn't exist on windows. + For libusb, determine at configure-time if the header is available. + For libusb.h, use gcc predefined macros to only include the header + on platforms that need it. + +commit b33c3cb9651459de1f3d549677cbac67a017a295 +Author: Daniel Drake +Date: Tue Jun 22 18:45:38 2010 -0500 + + Linux: Fix log message commit + + Forgot to test this. + +commit 139648d5723190734a51c1c66ddf41c3e87adf10 +Author: Ludovic Rousseau +Date: Mon Jun 21 10:19:29 2010 +0200 + + Only initialize the default context when it is requested + +commit 22d61cd0891d8304dfc1a70579cf154fd8e6644a +Author: Daniel Drake +Date: Tue Jun 22 18:20:23 2010 -0500 + + Linux: fix log message that was being unconditionally sent to stderr (#44) + + This message was put in place to aid libusb-compat-0.1 users, who + may run into the change that libusb-0.1 allowed you to usb_open() a + device that you don't have write access to, but libusb-1.0 does not. + + As explained on the ticket this change is dangerous so it should go through + the usual logging mechanism. I also added a similar regular log message + to libusb-compat-0.1. + +commit 82065a2c5e9d5ad0b2bb28792d12462f2fa150f0 +Author: Ludovic Rousseau +Date: Thu Jun 10 18:41:27 2010 +0200 + + Fix 2 documentation typos + +commit 351c062aacdde0b0fa7972ee9b7c6b355dcee110 +Author: Ludovic Rousseau +Date: Wed Apr 21 16:49:33 2010 +0200 + + add AM_MAINTAINER_MODE + +commit a7c056c14867e1cc3ef83682f2706cdbdca7c4ce +Author: Pete Batard +Date: Thu Jun 10 17:00:25 2010 -0500 + + Factorize event handler interruption code + + This will be additionally used by the windows backend which modifies + the fd set frequently. + +commit fc0af8e3f76925ad09e0fbc6d233d500753ee375 +Author: Pete Batard +Date: Sat Jun 5 12:14:19 2010 -0500 + + Abstract low-level event handler operations + + The Windows backend uses something other than UNIX file descriptors + for event handling. Abstract out the operations to allow for this. + +commit 64383fb5b55a74b706967836e81cef61e57df86a +Author: Pete Batard +Date: Tue Jun 1 11:38:14 2010 +0100 + + fixes the possibility of using a broken timercmp on Windows + + Microsoft's implementation of timercmp does not work for >= or <=. + +commit f6d60a9a8fcf06629812da886e3a5de592624b61 +Author: Pete Batard +Date: Mon Feb 1 19:26:13 2010 +0000 + + Switched to standard int pointer type for windows 64-bit compat + + On 64-bit Windows a pointer is 64 bit, but long is still 32 bit for + backwards compatibility. + uintptr_t nicely hides this difference and also works on Linux. + + [dsd: add appropriate include] + +commit a2fa855ce3795e31905b255267874af0603168bc +Author: Michael Plante +Date: Tue Mar 9 16:39:46 2010 -0600 + + added doxygen, dpfp, msvc, and xusb stuff to gitignore + +commit 845d96a9c30b6f053208ed6b5b5d4ad1655e2026 +Author: Daniel Drake +Date: Mon May 31 19:56:34 2010 -0500 + + Add reference counting to default context + + Michael Plante pointed out that if 2 users call libusb_init(NULL) within + a process, we end up creating 2 default contexts, one of which is lost. + + Add reference counting so that the default context is reused and + destroyed only after the last user. + +commit 0e77f017fd3d1bdec4aced0429a380d3e434081b +Author: Daniel Drake +Date: Thu May 27 19:24:49 2010 -0400 + + Fix libusb_init() error handling + + 9996ccaed7 introduced a problem in that mutexes could be destroyed + in the error handling codepath before they had been created. + Pointed out by Michael Plante. + +commit b03de9d07bf9a6b0c4e6cba9ec06b5271a22e621 +Author: Michael Plante +Date: Mon May 24 11:57:10 2010 -0300 + + Modify log functions to compile with MSVC6 + + MSVC6 does not support variadics. + +commit aa77b02da65afb0332b9e6853dae9e4dcda00bfa +Author: Pete Batard +Date: Sun Feb 14 19:46:05 2010 -0600 + + Add type parameter to the list_for_each_entry() and _safe() macros + + typeof() is a GCC extension, not supported by target compilers such + as MSVC. + +commit b92b16f437079208c8dfb1dc2380893846a07ee9 +Author: Daniel Drake +Date: Wed May 19 17:37:29 2010 -0300 + + Fix a usbi_pollfd leak in error path + + I accidently missed this when applying Pete Batard's earlier patch. + Pointed out by Michael Plante. + +commit 8aceb5c99056aaed6e6f2db1b303817e37e9fe8c +Author: Pete Batard +Date: Sun Feb 14 19:47:30 2010 -0600 + + Rename all interface parameters to usb_interface or interface_number + + Remove the use of the ambiguous "interface" where possible without + breaking the API. + 'interface' is a preprocessor #define already associated with COM on Windows, + that can cause a conflict as soon as windows.h is included. + + There are a few more places where interface is still used, which should + be changed for libusb-2.0 + +commit d7031ee8e1c449af23b2674fe18d9fc652c9bd80 +Author: Pete Batard +Date: Mon May 17 19:30:27 2010 -0300 + + Stricter types and casts + +commit 9996ccaed740f8fcec4287a478ccaaa573f9865a +Author: Pete Batard +Date: Mon May 17 19:16:54 2010 -0300 + + Fixes to error handling and exit codepaths + + Various locks and things were being leaked/left open when handling + errors and during deinitialization. + + [dsd: small tweaks] + +commit 371ca4e440894bd1c845971418aa24c9d3919e63 +Author: Nathan Hjelm +Date: Thu May 13 19:38:05 2010 -0300 + + Darwin: Define IO_OBJECT_NULL if not already defined + + Needed on Mac OSX 10.3 + +commit 7ba92cff94bbba19284749c614c26141d3023f37 +Author: Hans Ulrich Niedermann +Date: Fri Jan 29 12:08:52 2010 +0100 + + libusb_cpu_to_le16: macro->static inline function + + The libusb_cpu_to_le16 macro was a ({ ... }) expression, which + generates the following compiler warning every time it is used, + (and that is several times for every #include ): + + libusb.h:880: warning: ISO C forbids braced-groups within expressions + + With this patch, #include stops generating compiler + warnings on gcc 4.4. + + As libusb.h heavily relies on the use of static inline functions + those can be relied on to work properly, and there should not be + any significant difference in the code the compiler generates. + +commit 3473ac6c6fab32202d02d87679ebdb24e7d2df98 +Author: Francesco +Date: Tue Mar 9 16:35:35 2010 -0600 + + Add libusb_strerror() to get short error message in English from enum + + [dsd: small tweaks] + +commit 5b69f3b7b0610d5f518954792ddc93332a41d292 +Author: Michael Plante +Date: Thu Feb 25 19:39:22 2010 -0600 + + Fix libusb_device::lock memory leak + +commit a636df4ca1b87ed3094a87828c022092a80ba613 +Author: Pete Batard +Date: Wed May 12 21:46:31 2010 -0300 + + Whitespace cleanup + +commit 23b5db8b3e353176dfa0635bfb6f0e2658f6e3de +Author: Peter Stuge +Date: Tue May 11 00:51:43 2010 +0100 + + Add internal abstraction for POSIX Threads + + This prepares for a Windows backend without dependency on pthreads-w32. + + pthread_* is renamed to usbi_* and PTHREAD_* to USBI_*. + + A usbi_mutex_static_t and usbi_mutex_static_lock() and _unlock() are + introduced for statically initialized mutexes, since they may be + implemented using other types when pthreads mutexes aren't used. + + Move -pthread from libusb/Makefile.am to host-specific THREAD_CFLAGS in + configure.ac. This will enable optional use of -lpthread for cygwin. + + [dsd: minor tweaks, and roll in a change based on patches from Pete + Batard to only build dpfp_threaded example when we're using pthreads] + +commit a04cbb0095a78aeed3f65aaf06c46069d0ac184a +Author: Daniel Drake +Date: Tue May 4 19:01:59 2010 -0300 + + v1.0.8 release + +commit 53b47299531974fa8901b74a163f3c8ebae4eec9 +Author: Daniel Drake +Date: Thu Apr 22 18:12:51 2010 -0300 + + Linux: don't set SHORT_NOT_OK on bulk out URBs (#20 + + Setting this flag is illegal, and the behaviour we're looking for + is already in place for host-to-device transfers without this flag. + +commit 1519828b7ee1fce46d4c51fc097d52e01b8e0bb4 +Author: Daniel Drake +Date: Tue Apr 20 20:14:09 2010 -0300 + + Linux: Handle failure to read active configuration during enumeration + +commit 45168627cc15aee3875192f34286110dbbd27095 +Author: Nathan Hjelm +Date: Tue Apr 20 19:43:06 2010 -0300 + + Darwin: don't reuse cached descriptors during enumeration + + Descriptor reuse was causing scans to return invalid information when + the device at a location has changed. + +commit 3af329db6dcbfb96d24867c757f9e125e5b7b0e5 +Author: Daniel Drake +Date: Mon Apr 19 19:36:55 2010 -0300 + + v1.0.7 release + +commit ceb8cacd6d2a4189de0db2ee46d45217511c69be +Author: Daniel Drake +Date: Mon Apr 19 19:31:12 2010 -0300 + + Document that fd set contents are an internal implementation detail (#36) + +commit 9bea500b5747bdeba7c8251d45608558e71a1db5 +Author: Martin Koegler +Date: Mon Apr 19 19:22:46 2010 -0300 + + Linux: correct config descriptor endianness fix + + The seek_to_next_config codepath deals with both sysfs and usbfs; + make sure we only convert values in the usbfs path. + +commit 02df59a309e813c50b8230de99e69fb4e1814279 +Author: Martin Koegler +Date: Mon Apr 5 17:11:32 2010 +0200 + + Linux: Fix endianness handling of usbfs config descriptors (#27) + + driver/usb/core/devio.c function usbdev_read translate the follwing files + to CPU endianess: + + le16_to_cpus(&temp_desc.bcdUSB); + le16_to_cpus(&temp_desc.idVendor); + le16_to_cpus(&temp_desc.idProduct); + le16_to_cpus(&temp_desc.bcdDevice); + + All other data is passed without any change. + + libusb/os/linux_usbfs.c calls usbi_parse_descriptor with host_endian=1 + for config descriptors. According to the kernel code, they must be + processed with host_endian=0, as they are not translated by the kernel. + + Signed-off-by: Martin Koegler + +commit ec303b01a5d4e51c000a283853af65059fa62285 +Author: Nathan Hjelm +Date: Tue Mar 23 16:22:08 2010 -0600 + + Darwin: fix enumeration of devices with non-consecutive addresses (#23) + +commit cd809e2f7cee3874b7ae16b2c482a8b63a90e4a5 +Author: Bastien Nocera +Date: Mon Mar 8 10:50:51 2010 +0000 + + Add more interface classes + + As used in bluez. + +commit 1ce4aa67d849f5cad8a21072dc1c7b42158ce817 +Author: Nathan Hjelm +Date: Thu Mar 18 11:32:32 2010 -0600 + + Darwin: Cleanup async callback code, catch request timeouts + +commit 68af9f8d731f700267335941a8214d34ab518cc8 +Author: Nathan Hjelm +Date: Thu Mar 18 11:31:46 2010 -0600 + + Darwin: fix endianness of control setup packet + + IOUSBLib expects the control request to be in host byte order. + Swap the request into host byte order. + +commit cfce4d127184f4e4f334976151a0f80594bb5e22 +Author: Nathan Hjelm +Date: Mon Feb 15 14:10:08 2010 -0600 + + Darwin: fix memory leak in process_device + + Credit to Mike Colagrosso for finding this bug. + +commit 161893cfbefefe315f657677705abe090fc526f2 +Author: Nathan Hjelm +Date: Mon Feb 15 14:09:19 2010 -0600 + + Darwin: use logging functions + + Use usbi_warn, usbi_err, and usbi_info instead of _usbi_log. + +commit 2a72f38548208044dc3aa62681419d006c35732d +Author: Nathan Hjelm +Date: Mon Feb 15 14:07:44 2010 -0600 + + Darwin: support multiple calls to libusb_init + + Credit to Orin Eman for finding this bug. + +commit a4186794d87124503db2f5f51f51ce90bb95daa7 +Author: Daniel Drake +Date: Sun Nov 22 17:20:53 2009 +0000 + + v1.0.6 release + +commit 8392ff22136fccaf1e15d186157609b8dd127bc5 +Author: Ludovic Rousseau +Date: Sun Oct 25 10:06:41 2009 +0100 + + lsusb example: make print_devs() static + + lsusb.c:26: warning: no previous prototype for ‘print_devs’ + +commit 9cc6bfaa15239bb6db1c1570b9beb6df2f848951 +Author: Ludovic Rousseau +Date: Sun Oct 25 10:05:10 2009 +0100 + + Darwin: fix warning in darwin_error_str() + + os/darwin_usb.c:63: warning: return discards qualifiers from pointer + target type + +commit 4c706d2fb6b2c43b10d72ac5dff51cac4d939f1a +Author: Nathan Hjelm +Date: Sat Nov 21 17:06:43 2009 +0000 + + Darwin: allow devices to be opened multiple times + + Allows libusb applications to access multiple interfaces of the same + device in the same application. + + Also fixes a set alt interface bug. + +commit 0232fc559cdacb9561f982dd6d28feb4435b3e4e +Author: Daniel Drake +Date: Sat Nov 21 17:01:32 2009 +0000 + + Increase libusb_handle_events() timeout to 60 seconds + + The internal timing seems to be working, this will be a better test of + it before we make this timeout unlimited. + +commit 0bd7ef5d8697973a026c36c15d6276177b4ec4ea +Author: Daniel Drake +Date: Sat Nov 21 16:57:25 2009 +0000 + + Refine timerfd header check (#18) + + Require glibc-2.9 for the working timerfd support. + +commit 90d8fcab9018b8e6887a7e0592d1e5f692117234 +Author: Daniel Drake +Date: Sun Nov 15 12:17:13 2009 +0000 + + v1.0.5 release + +commit 11d591058e3f105b0e90c23bbf58b18de691e690 +Author: Daniel Drake +Date: Sat Nov 7 10:43:59 2009 +0000 + + Update documentation about early completion caveats + +commit f796c9528a71aa55326b6f0c9c7c5ec073d2bf92 +Author: Ludovic Rousseau +Date: Sun Oct 25 09:59:51 2009 +0100 + + Add libusb_get_max_iso_packet_size() to libusb.h + + core.c:777: warning: no previous prototype for 'libusb_get_max_iso_packet_size' + +commit 4783008b7e711de9cb31631e60dda995f44068de +Author: Daniel Drake +Date: Wed Oct 28 20:33:49 2009 +0545 + + Use timerfd for timeout handling + + Use a new file descriptor from the timerfd system calls to handle + timeouts. On supported systems, this means that there is less hassle + figuring out when the poll() timeout should be, since + libusb_get_next_timeout() will always return 0 and the timeout events will + be triggered as regular activity on the file descriptor set. + + Add API function libusb_pollfds_handle_timeouts() to detect whether + you're on a platform with the timing headache, and flesh out the + surrounding documentation. + +commit 9b120c2b3735566533c179aa8ca758fe45899a38 +Author: Daniel Drake +Date: Sat Nov 7 10:03:07 2009 +0000 + + Use AM_SILENT_RULES for building + +commit ef6ea6c3ae38e4524f10e16e8cb88177d39c4826 +Author: Daniel Drake +Date: Fri Nov 6 21:54:08 2009 +0000 + + v1.0.4 release + +commit 217f57617e0cff0d1bd6d726b243f04c6b179773 +Author: David Moore +Date: Fri Nov 6 21:37:25 2009 +0000 + + Linux: Add support for the new URB_BULK_CONTINUATION flag + + Add support for the new USBDEVFS_URB_BULK_CONTINUATION flag to libusb. + + This flag, which is expected to be available in usbfs starting with + kernel 2.6.32, allows the kernel to cancel multiple URBs upon receipt + of a short packet. This capability allows libusb to preserve data + integrity of large bulk transfers that are split into multiple URBs. + Without this support, these URBs must be canceled in userspace upon + receipt of a short packet, a race condition against future transfers + which might partially fill these canceled URBs. + + This patch automatically detects whether a supported kernel is present + and enables the use of the flag when possible. + + [dsd: tweaks to supported kernel detection, and some inline + documentation of this mechanism] + +commit 69830057547396f893f0d7b3125a05d016313b10 +Author: Daniel Drake +Date: Wed Oct 28 15:13:22 2009 +0545 + + Transfer locking + + At least on Linux, there were some possible races that could occur if + a transfer is cancelled from one thread while another thread is handling + an event for that transfer, or for if a transfer completes while it is + still being submitted from another thread, etc. + + On the global level, transfers could be submitted and cancelled at the + same time. + + Fix those issues with transfer-level locks. + +commit 98f1b30d24359cb3185051b8df9ebb663cc10369 +Author: Daniel Drake +Date: Mon Sep 14 08:01:24 2009 +0100 + + Clarify that timeout 0 means unlimited timeout + +commit 858684f0dd25921e09565034a88709dbf6f6c61b +Author: Daniel Drake +Date: Fri Sep 11 22:09:12 2009 +0100 + + Linux: more flexibility with monotonic clock + + Some users have reported that CLOCK_MONOTONIC does not work on their + systems - I suspect it is available on x86 but perhaps not some + of the more uncommon architectures. We should fall back on + CLOCK_REALTIME in these cases. + + Also, CLOCK_MONOTONIC_RAW seems even more monotonic, so we should use + that if it is available. + + We now test different clock IDs during initialization to find the + best one that works. + +commit fe0d8dce1ed704915d501e7da700440c78144211 +Author: Nathan Hjelm +Date: Fri Sep 11 18:00:29 2009 +0100 + + Darwin: handle overflows + +commit f46716f42040986203fa6e873bfdabe1be2900ec +Author: Daniel Drake +Date: Thu Aug 27 21:14:54 2009 +0545 + + v1.0.3 release + +commit 5b489b8b2a5aba7b8b804e5af6d2628735548238 +Author: Toby Peterson +Date: Sun Aug 23 10:04:59 2009 +0545 + + Darwin: 64-bit type fixes + +commit ad8ae04d0b52009af0b1180e005f7554d2bbb26c +Author: Nathan Hjelm +Date: Sun Aug 23 10:02:55 2009 +0545 + + Darwin: fix crash when reading descriptors after close + + Fix a crash which occurs if the user does the following sequence on a + device: open, close, get_configuration_descriptor. + +commit 45ae2aecf5512dcff059b2a416534e81c6a00c88 +Author: Daniel Drake +Date: Sat Aug 1 13:55:15 2009 +0545 + + move bug info to bug tracker + + Protection needed: http://www.libusb.org/ticket/4 + Losing data: fixed in previous commit + +commit 126129e174062c2a27423817a459e5113f777789 +Author: Daniel Drake +Date: Thu Jul 9 22:09:04 2009 +0100 + + Linux: try harder not to lose any data + + We would previously lose any data that was present on a cancelled URB. + Work harder to make sure this doesn't happen. + +commit 0334ee642b47dfe1ca9db64b22e7702ea14b3f09 +Author: Daniel Drake +Date: Sun Jun 28 19:49:10 2009 +0100 + + Add libusb_get_max_iso_packet_size() + + As pointed out by Dennis Muhlestein, libusb_get_max_packet_size() + doesn't really do what the documentation might suggest because it + does not consider the number of transaction opportunities per + microframe. + + Add a new function to do what is useful for isochronous I/O. + +commit 615f18e64e96ae4ecc8e43d0de00933059a5209a +Author: Daniel Drake +Date: Sat Jun 20 22:33:21 2009 +0100 + + Linux: fix sending of zero length bulk packets + + Note that there are is a kernel bug preventing this from working + properly at the moment, even after this fix. + +commit 86f79fbf61c2018bdf009c7ebf92b38f3a16fd0c +Author: Nathan Hjelm +Date: Fri Jun 19 22:18:44 2009 +0100 + + Darwin: Don't cancel transfers on timeout + + ...because the OS does this for us. + +commit d4bd9ed4de19a9c766f7a23eea8c852cdd61c18f +Author: Daniel Drake +Date: Sun Jun 14 19:23:21 2009 +0100 + + Don't terminate enums with commas + + g++ -pedantic doesn't like this + Reported by Eberhard Mattes + +commit 8be256082eb9bd8e243d89529f742926bb29a21b +Author: Daniel Drake +Date: Sat Jun 13 17:19:07 2009 +0100 + + v1.0.2 release + +commit 060e006e663fd59c281be29b71eb197e02b210e8 +Author: Daniel Drake +Date: Wed Jun 10 21:42:05 2009 +0100 + + Linux: fix config descriptor parsing on big-endian systems + + Multi-byte fields in the configuration descriptors that come back from + usbfs are always in bus endian format. + + Thanks to Joe Jezak for help investigating and fixing this. + +commit c4a905022f684da9a4a853eb9232a81a53df2652 +Author: Nathan Hjelm +Date: Sun Jun 7 22:29:35 2009 +0100 + + Darwin: improve handling of disconnected devices + +commit 6b69f54451762ef590b9c938ab000c07cf9099a3 +Author: Nathan Hjelm +Date: Sun Jun 7 22:26:37 2009 +0100 + + Darwin: fix parsing of config descriptors + + This was a confusion between configuration numbers and zero-based + configuration indexes. + +commit 2b3a9ffa776b383cb2dbc3c55e490e32e4c3c22b +Author: Daniel Drake +Date: Sun Jun 7 22:19:53 2009 +0100 + + Eliminate -Wsign-compare compiler warnings + + This was due to an API inconsistency which can be safely worked around. + Hopefully we'll remember to fix the API next time we come to break + things. + +commit cad5cb55c37137e94e35c74fdabfe42a5cbd229b +Author: David Moore +Date: Wed May 27 23:15:54 2009 -0700 + + Make synchronous transfer APIs robust against signal interruption + + libusb_control_transfer and libusb_bulk_transfer are designed to be + synchronous such that control is not returned until the transfer + definitively succeeds or fails. That assumption is violated if a signal + interrupts these functions because there is no way for the application + to continue waiting for the transfer without resubmitting it. This + patch changes these synchronous APIs so they do not abort in the case of + a signal interruption. + + Signed-off-by: David Moore + +commit b501795985a23109f176d296e7b544b4c6354528 +Author: Alex Vatchenko +Date: Thu May 28 15:58:50 2009 -0400 + + pre-gcc-3.4 compatibility + + The -fvisibility and -Wno-pointer-sign options are not available on + old GCC versions. + +commit 00bb2805e994887f0a754a825c3ce03d22393386 +Author: Daniel Drake +Date: Tue May 26 15:53:26 2009 -0400 + + Fix memory leak in config descriptor parsing + + Pointed out by Martin Koegler. + +commit 068ff5b8a83fec0a9a91c80535a25b89a9ae64e8 +Author: Daniel Drake +Date: Tue May 12 19:20:51 2009 -0400 + + Update AUTHORS + +commit aa24c04e4043e39674b59ff0d302b2365cd0078f +Author: Daniel Drake +Date: Tue May 12 19:03:37 2009 -0400 + + v1.0.1 release + +commit 44767677447fae4267131f99c591b14117486cac +Author: Daniel Drake +Date: Tue May 12 19:01:44 2009 -0400 + + Add BUGS file + + Probably missed a couple of outstanding issues + +commit e0365a6f22e0e7f330ac931df031cf6f17f453d1 +Author: Nathan Hjelm +Date: Sun Mar 22 21:13:29 2009 -0400 + + Darwin: get_config_descriptor bugfixes + +commit 5fd0e8478240fece646a58a3c6114001a73be99f +Author: Daniel Drake +Date: Wed Feb 25 12:33:33 2009 -0300 + + Fix compilation of Darwin backend + + My fault. Reported by ihryamzik@gmail.com + +commit b49f6bf5c910d0fd694ecf165d7927673707bff9 +Author: Nathan Hjelm +Date: Mon Feb 16 21:39:29 2009 -0300 + + Darwin backend + +commit d859158581e9a3250f36cdeeb8ea67cda04053bd +Author: Nathan Hjelm +Date: Mon Feb 16 21:30:49 2009 -0300 + + Make endianness macros endian-independent + + Implementation suggested by David Moore. Needed for proper universal + code support on Darwin. + +commit 9196f58bdc8b9e967261df39865215faa5d39cfa +Author: Nathan Hjelm +Date: Mon Feb 16 21:25:18 2009 -0300 + + Abstract clock reading into OS layer + + This will differ on Linux and Darwin, at least. + + [dsd: minor style tweaks] + +commit e91207860cac09b3afaafc4c14221b78d585c59a +Author: Daniel Drake +Date: Mon Feb 16 21:20:28 2009 -0300 + + Fix endianness in device descriptors + + Pointed out by Nathan Hjelm. + +commit ccf6d3d2f6acf9b9a1cb5e1f1b03f382ae509b17 +Author: Nathan Hjelm +Date: Mon Feb 16 21:13:52 2009 -0300 + + Only link with librt on Linux + + [dsd: tweak configure.ac change] + +commit 894539931e4b4bd85708fe98b956049243cd6fb0 +Author: Hans Ulrich Niedermann +Date: Mon Jan 26 00:31:48 2009 +0100 + + API docs: describe libusb_transfer_cb_fn type + + Add some text describing the libusb_transfer_cb_fn function type + with the semantics I have gathered from reading other parts of + the API docs, referring to the proper section for more details. + + [dsd: tweaked the description slightly] + +commit abe34a2656f8f9f21e53603796c536585e6233ef +Author: Hans Ulrich Niedermann +Date: Sun Jan 25 18:21:59 2009 +0100 + + Make empty array in struct compatible with C99 + + If the compiler is known to be running in C99 mode, + use "flexible array members" ("foo[]"). + + If the compiler is running in any other mode, continue + using the non-standard but widely common "foo[0]" syntax. + +commit 620075c7400764d9bb539b5c02065c45c2e8251e +Author: Hans Ulrich Niedermann +Date: Sun Jan 25 18:20:45 2009 +0100 + + Avoid signedness errors in API docs example code + +commit c754ae294cfe96ec4738d6641137c9e6c56330c7 +Author: Daniel Drake +Date: Sat Jan 17 00:25:40 2009 +0000 + + Decrement poll() result when internal pipe has been handled + + When we receive data on the internal control pipe, we need to correctly + decrement the number of ready file descriptors before passing on the + remaining work to the OS implementation. + +commit b9ca960f2ba271d2b1a58e22b7c70464d69f6c8a +Author: David Moore +Date: Sun Jan 11 21:46:17 2009 -0800 + + Prevent transfer from being submitted twice or improperly canceled + + This ensures that tpriv->urbs and tpriv->iso_urbs are always set to NULL + whenever a transfer is not submitted. In this way, submit_*_transfer() + and cancel_*_transfer() can error check to ensure that the transfer is + in the correct state to be either submitted or canceled, preventing + potential memory leaks or double frees. + + Signed-off-by: David Moore + +commit d2a8ec2da8abcd8f4648ed118da16191011982dd +Author: David Moore +Date: Wed Jan 7 22:31:09 2009 -0800 + + Linux: Fix race condition in cancel_bulk_transfer() + + This fixes a race condition in cancel_bulk_transfer(). In the old + version, awaiting_reap and awaiting_discard are incremented in + cancel_bulk_transfer() and decremented in handle_bulk_completion(). + However, since these events may take place in two different threads, + these variables may reach zero before all URBs have been canceled, + triggered spurious callbacks and duplicate frees. + + This changes the logic to use a single variable "num_retired" to replace + both awaiting_reap and awaiting_discard. num_retired is incremented + only in handle_bulk_completion() and thus there is no race. The handler + will know that all URBs have been canceled when num_retired becomes + equal to num_urbs. + + This change also simplifies a great deal of the logic in both functions + and is a net reduction in the amount of code. + + Note that some variables such as "reap_action" probably need to still be + protected by a mutex, and this patch does not address that issue. + + Signed-off-by: David Moore + +commit 34b9eebe35d8167d43cffb6ad6175f6b2251b572 +Author: Daniel Drake +Date: Sat Dec 13 20:06:49 2008 +0000 + + v1.0.0 release + + It's here! + +commit b1d636dde418dc8fe6a8f037dea0d800e57c6b94 +Author: Mikhail Gusarov +Date: Wed Dec 10 15:24:05 2008 +0600 + + EOL-whitespace fixes + + Signed-off-by: Mikhail Gusarov + +commit 4a9ac382ba5149ae5b3d0962d6a840b5e0dc13aa +Author: Daniel Drake +Date: Tue Dec 9 21:43:37 2008 +0000 + + Linux: fix reading of active configuration + + Shannon Chuang pointed out that we only read 1 byte into an + uninitialized integer, and then return the whole thing. + +commit 81a7310d92461ba7b1d98aeff7c4c007fab07120 +Author: Daniel Drake +Date: Tue Dec 9 21:39:11 2008 +0000 + + Fix double free in descriptor parsing error path + + Pointed out by Shannon Chuang. + +commit 9b4b53453db56ba9c1d707a645bbe6c7a02a3c81 +Author: Daniel Drake +Date: Fri Nov 21 13:28:32 2008 +0000 + + Improvements to multi-threaded I/O system + + Documentation brushed up, and I realised that another function is + needed for tight event handling loops -- they must be able to check + if an open/close operation is trying to interrupt it. + +commit 0e5b0fcb77a90b8bd95ad23669da472af31ef069 +Author: Daniel Drake +Date: Fri Nov 21 11:00:47 2008 +0000 + + SourceForge website upload system changed + +commit a133875e6e2f52eff53ac03f505d59cbdd33e178 +Author: Daniel Drake +Date: Fri Nov 21 10:54:57 2008 +0000 + + v0.9.4 release + +commit c32aa662769b676ff3247778664fccc71fc427ec +Author: Daniel Drake +Date: Thu Nov 20 15:31:10 2008 +0000 + + Pause event handling while opening and closing devices + + Ludovic Rousseau found that crashes often occur if you close a device + while another thread is doing event handling. + + Fix this by adding an internal control pipe, which the close routines + use to interrupt the event handler and obtain the event handling lock, + ensuring that no other thread is handling events while the device is + closed. After the close completes, it signals all the event handlers + to start up again using the usual mechanism. + + Also modified libusb_open() to do a similar thing, so that event + handlers are interrupted in order to realise that a new poll fd has + appeared. + +commit 1d7cf3d0fa8698eae25097cbda1870be90ff6f5e +Author: Bastien Nocera +Date: Thu Oct 30 14:35:23 2008 +0000 + + Add libusb_attach_kernel_driver() + + Add support for re-attaching a driver to a device under Linux. + + [dsd: fixed handling of return value, and added LIBUSB_ERROR_BUSY case] + +commit 914a4e70657c86b5094770aa2d898c978b1cdf41 +Author: Daniel Drake +Date: Sun Nov 2 21:45:54 2008 +0000 + + Linux: handle low-level transfer errors + + Handle more URB error status codes, thanks to Lou and Alan Stern. + +commit d25b566b3b8febafdda4211de724b4727dd4b7e0 +Author: Aurelien Jarno +Date: Thu Sep 4 13:50:49 2008 +0200 + + Support for out-of-tree building + + Contrary to libusb 0.1, libusb 1.0 does not support out-of-tree building + for the documentation part. This patch fixes that by using a + doxygen.cfg.in file, which contains @top_srcdir@ to refer to the + location of the libusb source code. + +commit 8674c67ef78e1cf89db1fa584a4304f7c5ddcc5f +Author: Daniel Drake +Date: Sun Nov 2 15:00:39 2008 +0000 + + Document the logging style + + Suggested by Lou. + +commit 94936cbcfe3f02eb65c8b91e29896604316259d8 +Author: Daniel Drake +Date: Wed Aug 27 22:44:24 2008 -0500 + + Async I/O documentation touchups + +commit 2f8f1b1a900f5b9828e5e2ff93c2b26a44fd9de2 +Author: Daniel Drake +Date: Wed Aug 27 21:23:10 2008 -0500 + + Doc: fix typo in events lock section + +commit 046e681e4ac6b697e40458ee0f5baf3cd8763bb0 +Author: Daniel Drake +Date: Sat Aug 23 01:00:21 2008 -0500 + + v0.9.3 release + +commit fec6eaa4eecdf7e0b8299157a5dabef94417f193 +Author: Daniel Drake +Date: Sat Aug 23 00:57:44 2008 -0500 + + Reset internal transfer flags on submit + + This fixes a problem pointed out by Lou, where resubmitting a transfer + that previously timed out never timed out again, as if the timeout had + been set to 0. + +commit 81627bd38900ec9701ab69c141aa51a9abea1f60 +Author: Daniel Drake +Date: Sun Aug 10 17:09:48 2008 -0500 + + Add libusb_get_configuration prototype + + Pointed out by Lou + +commit 1631eaefcc7cdf7047c6b9225618a9aa1b3d87d1 +Author: Daniel Drake +Date: Sat Jul 19 17:51:28 2008 -0500 + + v0.9.2 release + +commit 0d9c40d7f3eee15ada624b5caab2cfb912144fdc +Author: Daniel Drake +Date: Wed Jul 16 09:22:12 2008 -0500 + + Linux: fix sysfs directory handling + + The length of the directory name varies, e.g. when you have nested hubs. + Use dynamic allocation to be able to deal with any length of name. + +commit 66c9847ad54b126ccafd4877292454ab57d0c115 +Author: David Engraf +Date: Wed Jul 16 09:16:38 2008 -0500 + + Linux: correct usage of MAX_PATH + + Thanks to clarification from Artem Egorkine, MAX_PATH already includes + space for the trailing NULL. + +commit 6494f07a6d1b73ce786ae581c4ff691e39e61d19 +Author: Daniel Drake +Date: Tue Jul 8 21:15:54 2008 -0500 + + Linux: fix bulk/iso transfer double-cancellation + + Reset counters to 0 so that it's possible to cancel a transfer twice + without breaking things. Not sure that I want to support this properly, + but this makes it work at least. + +commit 9140f5b414e37a3714cde9c6d6c87c963338a83a +Author: Daniel Drake +Date: Sat Jun 28 21:28:44 2008 -0500 + + v0.9.1 release + +commit 83a029062c1d2bfb584d7a6ee94915583d37464c +Author: Daniel Drake +Date: Sat Jun 28 21:24:49 2008 -0500 + + Add missing GET_CONTEXT() + +commit fbad9a5426f0369394c88987355a8fb06a741ca1 +Author: Daniel Drake +Date: Sat Jun 28 21:18:41 2008 -0500 + + Linux: Compatibility with new sysfs descriptors file + + As of 2.6.26, the descriptors file now includes all descriptors, not + just the active one. + +commit 819e65f880ca43526036e56c65c415042c91f58f +Author: Daniel Drake +Date: Thu Jun 26 22:47:05 2008 -0500 + + Allow user data pointer to be passed through pollfd notification API + +commit 1df713d622ab4f0b03aad72d903ac7beb8fb3b90 +Author: Daniel Drake +Date: Tue Jun 24 23:01:51 2008 -0500 + + Introduce contexts to the API + + Suggested by David Zeuthen. This allows multiple libraries in the same + process to independently use libusb without interfering. + +commit 9818151c60a85aea6af24cb0996a92c3726c9864 +Author: Daniel Drake +Date: Tue Jun 24 21:31:13 2008 -0500 + + Revert "Temporary workaround for event handling serialization issue" + + This reverts commit 2d3a1111caff40ebb87983c861ff548cdc9e5946. + This was based on the assumption that dying threads would automatically + release mutexes, which is not the case. + +commit d5f82893fab3f1c13b1af4ba17aac72479bad7d5 +Author: Daniel Drake +Date: Fri Jun 20 23:04:53 2008 -0500 + + Overflow handling + +commit 546dee211eefbdd280fd1fc9dee84a9b52105078 +Author: Artem Egorkine +Date: Tue Jun 17 18:27:38 2008 -0500 + + a fix for SIGSEGV in handle_bulk_completion() + + We cannot dereference tpriv after calling + usbi_handle_transfer_cancellation() because that function may invoke + the user-supplied callback which may free the transfer. + +commit 947ba8056456a5215724fb502e3e09d50016f699 +Author: Daniel Drake +Date: Mon Jun 16 22:50:50 2008 -0500 + + Refine configuration selection again + + At Alan Stern's suggestion, just offer the bare "set configuration" and + "get configuration" functionality, and let applications worry about the + specific race conditions and unusual situations. + +commit e7a7a49d0331ee0e14145f6e7ec39763b36314ac +Author: Daniel Drake +Date: Sun Jun 15 15:29:38 2008 -0500 + + docs update + + Add a THANKS file, make copyright notices easily accessible, update TODO + +commit 217534e4b396081e038ee5f94c813d1668963673 +Author: Daniel Drake +Date: Sun Jun 15 15:23:29 2008 -0500 + + round up poll timeout + + Pointed out by Richard Röjfors, otherwise we end up busy-looping with + a poll() timeout of 0. + +commit 5ad79b324bc5e11a75a585398a1e81c26f05e758 +Author: Felipe Balbi +Date: Sun Jun 8 12:34:48 2008 +0300 + + fix doc about libusb_open() + + libusb_open() returns int instead of libusb_device_handle. + + Signed-off-by: Felipe Balbi + [dsd: small correction] + +commit 2d3a1111caff40ebb87983c861ff548cdc9e5946 +Author: Daniel Drake +Date: Thu May 29 17:26:26 2008 +0100 + + Temporary workaround for event handling serialization issue + + Ludovic Rousseau pointed out that libusb_unlock_events() is not called + when a thread gets terminated with a signal, meaning that event waiters + will not be woken up in this case. + + Add a temporary hack to libusb_event_handler_active() so that at least + the other threads will realise on the next iteration of their event + handling loop. + + The real fix will likely involve reworking most of this. + +commit 514bb8790cfe8b93ccfff82bc17081b1030acce0 +Author: Daniel Drake +Date: Thu May 29 12:35:01 2008 +0100 + + Refine libusb_set_configuration() semantics + + Applications will generally want to set a configuration before claiming + interfaces. The problem is that the interface may already be set, and + someone else may have claimed an interface (meaning that all calls to + set_configuration will fail, even if it's for the same configuration). + + There are now 2 options: + 1. Use the new libusb_get_configuration() to determine active + configuration before calling libusb_set_configuration() + 2. Or just call libusb_set_configuration() as usual, which will do + nothing if that configuration is already active. + +commit d1292f8e7300051239a7ed2769d221dc7a6f9fca +Author: Daniel Drake +Date: Sun May 25 23:42:42 2008 +0100 + + v0.9.0 release + + First libusb-1.0 beta release + +commit 4cd249388e4ed2ca03f1263984ab67df5030bb65 +Author: Daniel Drake +Date: Sun May 25 22:59:09 2008 +0100 + + Take lock before raising event waiters condition + + This avoids a race between the user checking for active event handler + and then blocking on the condition variable + +commit 7c525480ab3c4db9205bfe30bb0d2bef9096c444 +Author: Daniel Drake +Date: Fri May 23 15:57:07 2008 +0100 + + Implement serialization of event handlers + + Now offers a mechanism to wait for events while another thread is + doing the event handling. Complicates things for MT async apps, but + then again it's a bit of a tricky combination to start with. + +commit ff0660a415ecfd0879600eaad1c5899b6d93a30a +Author: Daniel Drake +Date: Sat May 24 21:28:31 2008 +0100 + + allow LIBUSB_DEBUG env var to control message verbosity at runtime + + Based on ideas from Ludovic Rousseau + +commit 4d788967e3f8d75eaf3a1ac1ee8e2e8bed0601c1 +Author: Daniel Drake +Date: Fri May 23 15:58:11 2008 +0100 + + don't print messages by default + + Add libusb_set_debug() API to set message verbosity. + + Ludovic Rousseau pointed out that applications may close stdout/stderr + descriptors, which might then be reused. + +commit bef33bb9eba0da04ee7488d9cd5e6ab12bc61c0c +Author: Daniel Drake +Date: Mon May 19 15:43:27 2008 +0100 + + Fix memory leak in libusb_control_transfer + + Pointed out by David Engraf: we weren't freeing the transfer buffer + +commit a345bacb6f07ebb2122402041a9e8092d4a20a4d +Author: David Engraf +Date: Mon May 19 15:16:32 2008 +0100 + + Linux: fix handling of ioctl failure + + The return value of some ioctl commands in linux_usbfs.c are not + handeled correct. The ioctl function returns != 0 and errno is set with + the error code. + +commit e44396a458ecea9e5edd9a7577e617571c76860d +Author: David Engraf +Date: Mon May 19 15:13:38 2008 +0100 + + critical memory leak in handle_events + + This patch closes a critical memory leak in handle_events. The fds + variable is malloced but never freed. When I'm calling + handle_events with a timeout of 0, my system runs out of memory after a + few seconds. + +commit eb25630f52bc9848b444e439632c899977d887b0 +Author: Daniel Drake +Date: Fri May 16 23:50:20 2008 +0100 + + More informative libusb_open() return code + + Hopefully one of the last API tweaks... + +commit 2b2e9c40b195261b09ac52ebdb93eef25c79de90 +Author: Daniel Drake +Date: Fri May 16 22:37:56 2008 +0100 + + Fix endianness with descriptor handling + + Alan Stern pointed out that usbfs gives host-endian data, but sysfs gives + bus-endian. + +commit 1298c51f516a7bf04ca9add1b7db14417cdc66f3 +Author: Daniel Drake +Date: Mon May 12 18:46:37 2008 +0100 + + Backend documentation for porting efforts + + Hopefully comprehensive enough for people to get started. + +commit ade26afc42c34ceb1c45afcadd2ea5e8240eaca4 +Author: Daniel Drake +Date: Mon May 12 15:43:30 2008 +0100 + + Linux: fix caching of guessed configuration + + Reported and tested by Xiaofan Chen + +commit e25d590a9198995b4f0b6afeb41ecae318715e7e +Author: Rob Walker +Date: Sun May 11 21:14:18 2008 +0100 + + Linux: fix bulk transfer early completion + + We were forgetting about the remaining urbs when a non-final urb + completed early. + + [dsd: some touchups and a warning message for a corner case that we don't handle] + +commit fec7c84163e25b8f811632828334d75da82bcb16 +Author: Daniel Drake +Date: Sun May 11 20:31:58 2008 +0100 + + Handle hot-unplugging + + This involved moving from select() to poll() because there is no way to + distinguish usbfs's POLLERR condition with select(). + +commit aeb905fa5d78cdbba80a680aa7a2bb7338f27f65 +Author: Daniel Drake +Date: Sun May 11 16:04:35 2008 +0100 + + Documentation work + +commit ba5d9a45c06311204f51faef41d1ee215bb5b823 +Author: Daniel Drake +Date: Sun May 11 15:36:24 2008 +0100 + + Endianness of control setup packets + + Document behaviour where host-endian and bus-endian (little) should be + used respectively. + + Also remove packed attribute from libusb_control_setup as all fields + are naturally aligned. + +commit 7bedc3b2683f35ee1dd39a2ebe0ec05be0019f38 +Author: Daniel Drake +Date: Sun May 11 15:11:59 2008 +0100 + + Document that releasing interface causes SET_INTERFACE control request + +commit f2ede9876cd4f5cfa7751b975670fa449187fe3d +Author: Daniel Drake +Date: Sat May 10 21:45:42 2008 +0100 + + Support unconfigured devices + +commit 8ebb4ccdfaf5f095a1c38787d909d280ea64405c +Author: Daniel Drake +Date: Sat May 10 20:56:44 2008 +0100 + + Linux: fix caching of active configuration for non-sysfs + +commit c3844f7aeb2176636ce6e6ef697659fdb0b30048 +Author: Daniel Drake +Date: Sat May 10 14:42:43 2008 +0100 + + Fetch configurations by index (not value) + + Otherwise there is no way to know which values to look for. + +commit d77052c0d630e33737c38d601fd633155f6b2229 +Author: Daniel Drake +Date: Sat May 10 00:12:53 2008 +0100 + + Linux: comprehensive sysfs vs usbfs access + + Be more flexible when certain parts of sysfs are not available. + +commit 74bc842bac1a32a26323da6c3e8af2f66e1b5cfa +Author: Daniel Drake +Date: Fri May 9 19:38:13 2008 +0100 + + Linux: no need to store usbfs node path + + This can be computed from bus number and device address + +commit fe4adcc99e30115204ab832ad3e0170c9aca7629 +Author: Daniel Drake +Date: Fri May 9 14:34:31 2008 +0100 + + Rework configuration handling + + libusb no longer caches descriptors in libusb_device but backends are + intended to be able to provide copies from memory. In the common linux + case we can use sysfs. + +commit 5741bfe01a2481b8c3830c80edc3637bf62a7e16 +Author: Daniel Drake +Date: Fri May 9 14:36:14 2008 +0100 + + libusb_get_device_list() can return negative error code + +commit 45413101b78298e9332b22a34bc6bc159000ad8a +Author: Daniel Drake +Date: Thu May 8 23:09:21 2008 +0100 + + Linux: fix clear_halt implementation + + The ioctl expects an integer. + Bug found with the assistance of Soumen Mondal + +commit 10d4e427cc171dfd6ad7f43a33ce3cfebcd7aa04 +Author: Daniel Drake +Date: Thu May 8 23:04:52 2008 +0100 + + Documentation work + + Partially based on some libusb-devel discussions + +commit ded0a249322571a075e3ed3528021864247dfa55 +Author: Daniel Drake +Date: Mon May 5 22:57:48 2008 +0100 + + Linux: enumerate devices and descriptors from sysfs + + Suggested by Alan Stern. This avoids waking up any suspended USB devices. + sysfs is not available on all systems, so the usbfs mechanism is still + in place as a fallback. + +commit 885c2a5de69d6b7d8902bb55d6d83680a5a1a6e5 +Author: Daniel Drake +Date: Mon May 5 21:34:31 2008 +0100 + + documentation touchups + +commit 59c205d542b43d79fe28622dbe8f03a3a3300b6f +Author: Daniel Drake +Date: Mon May 5 21:17:03 2008 +0100 + + more error code sanitization + +commit 88055d4b5913102a90ff666f75fd922c74860dc5 +Author: Daniel Drake +Date: Mon May 5 20:57:43 2008 +0100 + + Isochronous transfer helper functions + +commit a95c943ed301dcd20e92b0b3b255568899a4c42e +Author: Daniel Drake +Date: Mon May 5 17:54:33 2008 +0100 + + free open devices on exit + +commit b27fff633843824744df7d334cb89ece329cafa6 +Author: Daniel Drake +Date: Mon May 5 17:47:49 2008 +0100 + + move descriptor parsing into main library + + OS modules now provide functionality for fetching device/config + descriptors + +commit a304eca71f22c6df7d70a901483b30f1b8e93378 +Author: Daniel Drake +Date: Mon May 5 16:22:33 2008 +0100 + + Detect endpoint halts and unsupported control requests + +commit 7da521954ba661d3f537440c31a84b66e974d56b +Author: Daniel Drake +Date: Mon May 5 01:00:31 2008 +0100 + + Linux: fix logical URB allocation + + We were allocating the wrong number of URBs for transfers of size + multiples of 16k. + +commit 470b1bc42bf53373ce678fc76bab9160a54d6881 +Author: Daniel Drake +Date: Sun May 4 16:51:23 2008 +0100 + + add functionality for querying and detaching kernel driver + +commit 17ecfb0ecc833596c43755c80d461cddb9b3b0d7 +Author: Daniel Drake +Date: Sun May 4 16:20:46 2008 +0100 + + Descriptor reading functionality + +commit bdce367d1bd8691465844b2411c85215498f517d +Author: Daniel Drake +Date: Sun May 4 14:22:16 2008 +0100 + + sanitized error returns from synchronous I/O functions + +commit bfe74e9cd9c17a40fff042ea0647326f51cfecae +Author: Daniel Drake +Date: Sun May 4 14:10:19 2008 +0100 + + implement libusb_reset_device() + +commit c01f744ce07bbeccbe353e956479f0cc5a811a6f +Author: Daniel Drake +Date: Sun May 4 13:46:41 2008 +0100 + + Add functionality to clear endpoint halt conditions + +commit 5878daa85e3364bb3885190425d4f9deaa2d8c36 +Author: Daniel Drake +Date: Sun May 4 00:51:59 2008 +0100 + + Fix libusb_get_device_list return value + + It was documented to return the list length, but was returning 0. + +commit a74106a9b48b88bae0e099be34a18d653a8f1238 +Author: Daniel Drake +Date: Sat May 3 16:50:58 2008 +0100 + + Well-defined error codes for some operations + + Also renamed set_interface_altsetting to set_interface_alt_setting for + better consistency + +commit 0f463fe671455670efcf4a93e526b2a9082b0afe +Author: Daniel Drake +Date: Sat May 3 16:24:11 2008 +0100 + + Add libusb_set_configuration() + +commit e65608994f795f97e4d6adac20329ca08709db2d +Author: Daniel Drake +Date: Sat May 3 15:40:23 2008 +0100 + + rename LIBUSB_ERROR_NOMEM to LIBUSB_ERROR_NO_MEM + improves consistency + +commit 5384bbf300779e7936eac9ebd33ee38f5b533f8e +Author: Daniel Drake +Date: Sat May 3 14:34:54 2008 +0100 + + Linux: better EACCES handling + +commit 1936eeeba3f933a078df1005cc7c1533a8ec2bac +Author: Daniel Drake +Date: Sat May 3 14:26:56 2008 +0100 + + Rename reference counting API + + This improves consistency with the naming style of other functions + +commit e2f822b4f17342f614ab2455179a80975fca6cb0 +Author: Daniel Drake +Date: Sat May 3 14:24:40 2008 +0100 + + Linux: use read-only access to enumerate devices and descriptors + + Write access is not needed until later. + Also fix handling of open() error code. + +commit 81204eed3d0a7744b89b68bd90d567b68d191a91 +Author: Daniel Drake +Date: Fri May 2 17:45:23 2008 +0100 + + document pollfd notifiers + +commit e20f8281fb7da32587f81b5eea5818af1eab0fe0 +Author: Daniel Drake +Date: Fri May 2 17:33:52 2008 +0100 + + Allow multiple interfaces to be claimed + +commit 66685ff25d81a1f1a2a3dbda882d407638d00672 +Author: Daniel Drake +Date: Fri May 2 16:55:36 2008 +0100 + + Documentation improvements + +commit 55bce39cbe0c9746a428b66751d1afe551d86381 +Author: Daniel Drake +Date: Fri May 2 12:55:34 2008 +0100 + + detect short descriptor reads + +commit f3f17846dcced6b2dc40f899ed6a2aba151c264b +Author: Daniel Drake +Date: Fri May 2 12:32:46 2008 +0100 + + remove "references" and "referenced by" listings in documentation + +commit fbb017dd9a26ce449578482b95157b3c850fa446 +Author: Daniel Drake +Date: Fri May 2 12:32:08 2008 +0100 + + Use typedef ptr types in parameters and return types + + This is passed through to the docs + +commit 3675e978fb7a1042f8601931255658bcd14a2298 +Author: Daniel Drake +Date: Fri May 2 12:28:31 2008 +0100 + + Expose bus number and device address + +commit 2012898ffc492317cb428d97077bf5ee0e98e1da +Author: Daniel Drake +Date: Tue Apr 29 15:26:46 2008 +0100 + + standardised error codes + +commit 0269c75ae3de7acb2dc555e45928750e35fdb320 +Author: Daniel Drake +Date: Tue Apr 29 13:34:26 2008 +0100 + + Fix descriptor handling memory leaks + +commit d3ab4e3bd4068cba41c1e12c4b175018dc3cb343 +Author: Daniel Drake +Date: Sun Apr 27 23:50:01 2008 +0100 + + Rename endpoint_type to transfer_type + + Matches the USB specs more closely + +commit 379e90e0fdcef6f4db1849fa0a7fd524407cf564 +Author: Daniel Drake +Date: Sun Apr 27 23:41:24 2008 +0100 + + Remove a FIXME comment + + it can't. + +commit 2ddf81420557d016bbcbf28dda0d8d1c64d16264 +Author: Daniel Drake +Date: Sun Apr 27 23:30:34 2008 +0100 + + Fix unlocked flying_transfers list access + +commit 7ac0a405b4c57db42e88cbcba5f135697f03b646 +Author: Daniel Drake +Date: Sun Apr 27 23:27:04 2008 +0100 + + Remove libusb_cancel_transfer_sync + + This wasn't a particularly nice API. Cancellation should be handled by + the completion handler. + +commit a5006fd7b9dae6f1db7969c8744086ba3a7c027b +Author: Daniel Drake +Date: Sun Apr 27 19:56:02 2008 +0100 + + remove extra timeout check + + If select() didn't timeout then don't check for more timeouts + +commit 3bdafaa359d9c65e1af360b5338e1f25528a8066 +Author: Daniel Drake +Date: Sun Apr 27 19:53:51 2008 +0100 + + Documentation touchups + + Detail that interrupt polling interval is fixed to endpoint bInterval, + and that data may be transferred even on a timeout condition. + +commit e12618c79d520955b1abf80a277e881d91907162 +Author: Daniel Drake +Date: Sat Apr 19 16:17:53 2008 +0100 + + add threaded example program + +commit 1fcdb0678b759569db7cd530457dbc0a5f86fb1d +Author: Daniel Drake +Date: Fri Apr 18 23:58:54 2008 +0100 + + libusb_device mutex protection + +commit 0efd2efa65d5513e5754d717d522b2c5c45332e2 +Author: Daniel Drake +Date: Fri Apr 18 23:42:40 2008 +0100 + + mutex protection for device and handle lists + +commit d2ff2b14a15e5099ff0214502944de30f141a39c +Author: Daniel Drake +Date: Fri Apr 18 20:00:31 2008 +0100 + + lock flying_transfers during transfer removal + +commit 2569980762cb66804da31e54bef243702da8dfe9 +Author: Daniel Drake +Date: Fri Apr 18 19:59:56 2008 +0100 + + pollfds mutex protection + +commit f5a33e08ec0da51ccb5e95a5adec50c5211a9bf5 +Author: Daniel Drake +Date: Thu Apr 17 18:24:54 2008 +0100 + + flying_transfers mutex protection + + This marks the beginnings of thread safety + +commit 85e1994123545125ce0653415d122f9790f8d041 +Author: Daniel Drake +Date: Thu Apr 17 17:44:28 2008 +0100 + + Linux: fix control transfer cancellation + +commit cf9b831f7bfd97ba88721c1d934aeda522f3692c +Author: Daniel Drake +Date: Mon Apr 14 20:03:27 2008 +0100 + + set correct endpoint type for isochronous transfers + + Pointed out by Felix Domke + +commit ad6e2b712c5b54af44424e58a2776686314e26b7 +Author: Daniel Drake +Date: Fri Apr 11 21:40:07 2008 +0100 + + Linux: fire multiple URBs at once for split transfers + + This results in a significant performance increase for bulk transfers + larger than 16kb, and fixes a bug where data would be spliced and mixed + between two simultaneously submitted transfers to the same endpoint. + + It also allows isochronous transfers larger than 16kb to be submitted. + + This commit also improves cancellation - the library now understands + what is going on. + +commit d9b2ce2894ed43d34de6850f2dac50ccabf1db55 +Author: Daniel Drake +Date: Tue Apr 1 23:28:32 2008 +0100 + + Constify some return data + + Make it clear that apps should not mess with these structures + +commit 8d809854e2b19c2b7c27ab05e5d76b34e2a5cead +Author: Daniel Drake +Date: Sun Mar 30 22:19:00 2008 +0100 + + Rename libusb_poll() to libusb_handle_events() + +commit 211f80c9f2a4a58cd2bbf5b7751f45089c8961e7 +Author: Daniel Drake +Date: Tue Mar 25 16:24:30 2008 +0000 + + Isochronous endpoint I/O + + Due to variable-sized structures, this involved changing allocation + mechanism. All transfers must now be allocated and freed through + libusb. + + A synchronous function is missing, and I could do with writing a few + more helper functions to simplify things. + +commit b1ade6fca668d8aa156d5b5bf3a933f116144dc2 +Author: Daniel Drake +Date: Sun Mar 23 21:17:32 2008 +0000 + + distcheck fix for docs + +commit 62077b7fa5b222e1bb9dea3467585aed69d596e2 +Author: Daniel Drake +Date: Sun Mar 23 21:13:14 2008 +0000 + + Support for changing altsetting + + Will probably be suject to later consideration w.r.t. claiming of endpoints + +commit 0499e9f418607b5786ac0c3e97bc46737a609ca3 +Author: Daniel Drake +Date: Thu Mar 20 21:10:01 2008 +0000 + + it's called bmRequestType + +commit 88884ae4bbe721dac117d5190303cb67852fa5d3 +Author: Daniel Drake +Date: Thu Mar 20 21:07:00 2008 +0000 + + Save transfer flags before invoking callback + + The callback may free the transfer, in which case we can't read the flags + after it has returned. + +commit ead09cde6895df0034a685516987ce253575e9a7 +Author: Daniel Drake +Date: Sat Mar 15 16:35:12 2008 +0000 + + API documentation + + Hopefully mostly complete. Some constants were renamed and move into + enums. + +commit 285724cc14ea5f993e2c4c92fe0aaf6c335bc139 +Author: Vasily Khoruzhick +Date: Sat Mar 15 13:50:53 2008 +0200 + + Fix get_device_list for realloc case + + get_device_list can modify pointer passed to it with realloc, but this + case wasn't handled and caused crash on my machine. Fixed + + Signed-off-by: Vasily Khoruzhick + +commit c0c9432d38b22784070dce3a7874c62c31786a27 +Author: Daniel Drake +Date: Thu Mar 13 12:36:56 2008 +0000 + + Beginnings of cross-platform abstraction + + This also includes a libusb_get_pollfds API change + +commit de4c5341d168697baa4c0901c406deb47e78aae7 +Author: Daniel Drake +Date: Mon Mar 10 18:38:15 2008 +0000 + + Add transfer flags + +commit aae05f688dc26a013166ab9436fd25018b49d76a +Author: Daniel Drake +Date: Mon Mar 10 11:32:15 2008 +0000 + + Simplify libusb_fill_control_transfer() + + Transfer length can be inferred from the setup packet. + +commit 7c5ea95297c2f3f6afc42f60c1bf1bef777bb1fb +Author: Daniel Drake +Date: Mon Mar 10 11:29:24 2008 +0000 + + get_device fixup + + Rename API away from "devh" and fix implementation to match header + +commit 9e89d1aa82cbe7e21672ee3e2e545238fffc5318 +Author: Daniel Drake +Date: Sun Mar 9 16:27:06 2008 +0000 + + Rename descriptor-getting functions + + Based on feedback from Tim Roberts + +commit 283ae96c3ccbcee1c3950fce18ae47093ae8200e +Author: Daniel Drake +Date: Sun Mar 9 16:15:02 2008 +0000 + + Simplify cancellation API + + No need to provide the device here. + +commit ebad1c79688ba603ad017ed0fe2f3c0dc8edd1ad +Author: Daniel Drake +Date: Sun Mar 9 16:12:08 2008 +0000 + + Rename libusb_dev_handle to libusb_device_handle + +commit 1ac0a7d88f282b6f293c456fac8edb143cbaca3d +Author: Daniel Drake +Date: Sun Mar 9 01:01:57 2008 +0000 + + Move synchronous I/O implementation to its own file + +commit 66348c90ea4570bf999ac301089e006d0cce1926 +Author: Daniel Drake +Date: Sun Mar 9 00:58:09 2008 +0000 + + Separate transfer allocation and submission + + Leads to some hefty API changes. Now we're much more similar to the + Linux kernel model. + + Problems with dealing with asynchronous control transfers are passed + on to the user, basically you must allocate a buffer, start with the + setup, and put the data after. This won't make much sense until + documented (soon...) + +commit d21ebe47ce578c93cd8969be1c933d503e32e5d4 +Author: Daniel Drake +Date: Sat Mar 8 12:48:35 2008 +0000 + + Rework URB API naming + + Now refer to everything as "transfers" as consistent with the USB spec + libusb_transfer is now a kind of transfer handle. To reduce confusion + with libusb_bulk_transfer and libusb_control_transfer, those have been + renamed to libusb_{control,bulk}_transfer_request. + +commit fd6fb3cc093ad47271353a0e468d16547f991382 +Author: Daniel Drake +Date: Sat Mar 8 11:53:33 2008 +0000 + + Add fallback on /proc/bus/usb + + /dev/bus/usb is a relatively new thing probably not present on every + system + +commit f3fdf447916289cd92b7190377681894e8ab611a +Author: Daniel Drake +Date: Sat Mar 8 00:10:16 2008 +0000 + + Persistent libusb_device storage + + Devices are now assigned a session ID (currently busnum:devaddr) which + is used to distinguish unique devices. + + Now multiple callers of libusb_get_device_list will get the same + libusb_device structure instances. + +commit 23f8fb8bafeeda93ce234cb40eb7219d2e36c19c +Author: Daniel Drake +Date: Thu Mar 6 23:43:57 2008 +0000 + + Add convenience function to find and open a device by USB VID+PID + + Lots of libusb apps I write are simple test apps not intended to be real + apps. Having a function available to quickly locate my device will be + handy in such situations. + +commit 9cfdb494fccac53a4277da7c8b6d15f1a72a4959 +Author: Daniel Drake +Date: Thu Mar 6 23:25:20 2008 +0000 + + Rework device discovery API + + libusb_find_devices and libusb_get_devices are no more + + libusb_get_device_list obtains a list of libusb_device structures for all + known devices in the system. + + Each libusb_device now has a reference count, defaulting to 1 on + instantiation. The reference count of 1 refers to the fact that it is + present in the list in this scenario. + + Opening a device adds a pointer to the libusb_device structure in the + handle, so that also adds a reference. Closing the device removes that + reference. + + The function to free the device list can optionally unref all the devices + inside. + + In future we will make the libusb_device instances all "global" so that if + the app calls get_device_list twice it actually gets the same libusb_device + structure references back. This way we can start to track disconnects, and + we can investigate adding a unique "session ID" to each libusb_device, an + identifier guaranteed to be unique to that device until reboot. + +commit 77cea822788e024c848c7f554915f771a2dc1e0f +Author: Daniel Drake +Date: Thu Mar 6 17:05:04 2008 +0000 + + Remove ctrl debug code + + This was unintentionally committed + +commit b873521a6f575628d535f89278bb67888004d0ca +Author: Daniel Drake +Date: Tue Feb 26 22:11:34 2008 +0000 + + Notifications for changes to the fd set + + Applications can now be notified when they should start and stop polling + new file descriptors. + +commit ca66e16a370c828d08a5bc3f9f203db145c81a4c +Author: Daniel Drake +Date: Fri Feb 1 12:20:20 2008 +0000 + + Fix header installation path + +commit e583100a4086c411093eef5c450880b965df6b1b +Author: Daniel Drake +Date: Wed Jan 30 13:24:54 2008 +0000 + + TODO update + +commit 637a8d7ff8a11a23588925d9d3003a609bda8075 +Author: Daniel Drake +Date: Wed Jan 30 13:19:10 2008 +0000 + + Remove timers and signalfd + + Instead of timers, add a mechanism for informing the parent app when the + next timeout is due to happen, so that it can call us at that time. + + As we no longer use signals, signalfd has also been removed. + +commit 8c56abe2e13ed4dd8c15737c21be7b6b1e5cf2ac +Author: Daniel Drake +Date: Sat Jan 26 18:16:56 2008 +0000 + + Poll usbfs descriptors directly + + We don't need to use signalfd for this functionality because we can poll + the file descriptors for write events. + +commit e3ce855acec33d37dd833bca5dad5e8c3773003a +Author: Daniel Drake +Date: Sat Jan 26 17:26:40 2008 +0000 + + Fix dpfp example compilation + +commit 1d41a5cda2fefe826877ee4445199af30aa188b7 +Author: Daniel Drake +Date: Sat Jan 26 17:22:53 2008 +0000 + + C++ header safety + + Pointed out by JF + +commit 37b7f9a112eb1441d352467f661205b8872d0553 +Author: Daniel Drake +Date: Sat Jan 26 14:03:43 2008 +0000 + + Only use -fgnu89-inline when supported + + J F pointed out that this option only works on gcc 4.3 and newer. + +commit e3a09ca0b9cb6f46d54a0130f678c6097240a2bd +Author: Daniel Drake +Date: Sat Jan 5 21:59:40 2008 +0000 + + Remove more fpusb remnants + +commit dcd5e0075fa84601d997d29bb60bc8370b97a375 +Author: Daniel Drake +Date: Fri Jan 4 01:19:07 2008 +0000 + + TODO update + + Start listing the things I want to discuss/reconsider before 1.0 API + is final. + +commit de53d972ed9c1f21f86ffd585560520e986f212c +Author: Daniel Drake +Date: Fri Jan 4 01:17:06 2008 +0000 + + Rename some _devh_ functions + + Decided against naming functions in this style based on advice from + Tim Roberts. Still not really sure about devh naming in general. + +commit 132d84bf8ae34bd0892b3d8207a53d87cc0a9cba +Author: Daniel Drake +Date: Fri Jan 4 01:13:25 2008 +0000 + + Use "transfer" instead of "msg" + + Based on a discussion with Tim Roberts. + +commit ea6af58a8643137eb01eeb7d2f65404e390feb1b +Author: Daniel Drake +Date: Fri Jan 4 00:57:00 2008 +0000 + + Plural of bus is busses + + SF #1633043 + +commit dbb3fd871e3972b4e670f3161e7cd2f58f357600 +Author: Daniel Drake +Date: Fri Jan 4 00:54:57 2008 +0000 + + API renaming: remove fpi and usb_ stuff + + fpi changed to usbi. + + We should not expose structures with prefix "usb_" in the public + namespace as it is quite likely there will be some conflict somewhere. + Instead, using "libusb_" should be safer. + +commit e9364d72151ae1de9cce4175f330fe1529f02511 +Author: Daniel Drake +Date: Fri Jan 4 00:40:49 2008 +0000 + + Rename to libusb-1.0 + + I've taken over the libusb project, and what was previously known as fpusb + will eventually be released as libusb-1.0. + +commit f4ed0b6a3e0a20555fdfc9e9b8be7e8a2c8ae192 +Author: Daniel Drake +Date: Sun Dec 30 22:09:50 2007 +0000 + + Compiler flags update + + Also fix some warnings + +commit d3d671efe27491baf1d2ceadbfeeb4e7428d6f9a +Author: Daniel Drake +Date: Sun Dec 30 22:05:17 2007 +0000 + + Fix signalfd structure size on x86 + + ptr is a 64-bit value + +commit dfac6756faad76071a92945e3e3a16b8a841a7ea +Author: Daniel Drake +Date: Wed Dec 12 23:32:54 2007 +0000 + + Don't pass ctrl_msg/bulk_msg structures through async paths + + These are easiest to construct on the stack, but in the async case it is + likely that the submitting function returns (hence stack is destroyed) + before URB completion. + +commit a8d2881eb7c273892acf2ff6e1f3f552631d1d11 +Author: Daniel Drake +Date: Mon Dec 3 23:29:22 2007 +0000 + + Add functionality to access device descriptors + +commit b5a7a411087b37a6bf56b4688a9e3290daaed153 +Author: Daniel Drake +Date: Mon Dec 3 22:27:21 2007 +0000 + + Rename fpusb_device_handle functions to devh + + Prevents confusion with functions that work on fpusb_dev structures. + +commit eacf4505a473df0f521d1b69d5b45448f0709e2d +Author: Daniel Drake +Date: Sun Dec 2 23:16:57 2007 +0000 + + Add API to access poll fd + + Almost forgot... :) + +commit 852bba4754ec57679c823f33e8feba6e4a564cbe +Author: Daniel Drake +Date: Wed Nov 28 13:48:45 2007 +0000 + + Initial commit + + Basic library structure which supports enumerating detected USB devices diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/INSTALL b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/INSTALL new file mode 100644 index 0000000..5458714 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/INSTALL @@ -0,0 +1,234 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006 Free Software Foundation, Inc. + +This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + +Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. + + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + +Some systems require unusual options for compilation or linking that the +`configure' script does not know about. Run `./configure --help' for +details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + +You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + +Installation Names +================== + +By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + +Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + +There may be some features `configure' cannot figure out automatically, +but needs to determine by the type of machine the package will run on. +Usually, assuming the package is built to be run on the _same_ +architectures, `configure' can figure that out, but if it prints a +message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + +If you want to set default values for `configure' scripts to share, you +can create a site shell script called `config.site' that gives default +values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + +Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf bug. Until the bug is fixed you can use this workaround: + + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + +`configure' recognizes the following options to control how it operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/Makefile b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/Makefile new file mode 100644 index 0000000..920c5ea --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/Makefile @@ -0,0 +1,807 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + +pkgdatadir = $(datadir)/libusb +pkgincludedir = $(includedir)/libusb +pkglibdir = $(libdir)/libusb +pkglibexecdir = $(libexecdir)/libusb +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +#am__append_1 = examples +subdir = . +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(srcdir)/libusb-1.0.pc.in $(top_srcdir)/configure AUTHORS \ + COPYING ChangeLog INSTALL NEWS THANKS TODO compile \ + config.guess config.sub depcomp install-sh ltmain.sh missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/libusb/version.h \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = libusb-1.0.pc +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +DATA = $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = libusb doc examples +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +GZIP_ENV = --best +DIST_ARCHIVES = $(distdir).tar.bz2 +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run aclocal-1.11 +AMTAR = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run tar +AM_CFLAGS = -std=gnu99 -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration -Wno-pointer-sign -Wshadow +AM_DEFAULT_VERBOSITY = 0 +AR = ar +AUTOCONF = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run autoconf +AUTOHEADER = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run autoheader +AUTOMAKE = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run automake-1.11 +AWK = mawk +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = +LIBS = -lrt -pthread +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLDFLAGS = -version-info 1:0:1 -no-undefined +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OS_DARWIN = +OS_LINUX = +OS_OPENBSD = +OS_WINDOWS = +OTOOL = +OTOOL64 = +PACKAGE = libusb +PACKAGE_BUGREPORT = libusb-devel@lists.sourceforge.net +PACKAGE_NAME = libusb +PACKAGE_STRING = libusb 1.0.9 +PACKAGE_TARNAME = libusb +PACKAGE_URL = http://www.libusb.org/ +PACKAGE_VERSION = 1.0.9 +PATH_SEPARATOR = : +PC_LIBS_PRIVATE = -lrt -pthread +RANLIB = ranlib +RC = +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +STRIP = strip +THREAD_CFLAGS = -pthread +VERSION = 1.0.9 +VISIBILITY_CFLAGS = -fvisibility=hidden +abs_builddir = /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9 +abs_srcdir = /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9 +abs_top_builddir = /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9 +abs_top_srcdir = /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9 +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = +top_builddir = . +top_srcdir = . +AUTOMAKE_OPTIONS = dist-bzip2 no-dist-gzip +ACLOCAL_AMFLAGS = -I m4 +DISTCLEANFILES = libusb-1.0.pc +MAINTAINERCLEANFILES = ChangeLog +EXTRA_DIST = TODO PORTING msvc +SUBDIRS = libusb doc $(am__append_1) +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libusb-1.0.pc +reldir = .release/$(distdir) +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: # $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: # $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +libusb-1.0.pc: $(top_builddir)/config.status $(srcdir)/libusb-1.0.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-pkgconfigDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ + dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-xz \ + dist-zip distcheck distclean distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgconfigDATA install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-pkgconfigDATA + + +.PHONY: ChangeLog dist-up +ChangeLog: + git --git-dir $(top_srcdir)/.git log > ChangeLog || touch ChangeLog + +dist-hook: ChangeLog +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) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/Makefile.am b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/Makefile.am new file mode 100644 index 0000000..ce7b7e2 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/Makefile.am @@ -0,0 +1,28 @@ +AUTOMAKE_OPTIONS = dist-bzip2 no-dist-gzip +ACLOCAL_AMFLAGS = -I m4 +DISTCLEANFILES = libusb-1.0.pc +MAINTAINERCLEANFILES = ChangeLog +EXTRA_DIST = TODO PORTING msvc +SUBDIRS = libusb doc + +if BUILD_EXAMPLES +SUBDIRS += examples +endif + +pkgconfigdir=$(libdir)/pkgconfig +pkgconfig_DATA=libusb-1.0.pc + +.PHONY: ChangeLog dist-up +ChangeLog: + git --git-dir $(top_srcdir)/.git log > ChangeLog || touch ChangeLog + +dist-hook: ChangeLog + +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/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/Makefile.in b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/Makefile.in new file mode 100644 index 0000000..733b784 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/Makefile.in @@ -0,0 +1,807 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@BUILD_EXAMPLES_TRUE@am__append_1 = examples +subdir = . +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(srcdir)/libusb-1.0.pc.in $(top_srcdir)/configure AUTHORS \ + COPYING ChangeLog INSTALL NEWS THANKS TODO compile \ + config.guess config.sub depcomp install-sh ltmain.sh missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/libusb/version.h \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = libusb-1.0.pc +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +DATA = $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = libusb doc examples +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +GZIP_ENV = --best +DIST_ARCHIVES = $(distdir).tar.bz2 +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CFLAGS = @AM_CFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLDFLAGS = @LTLDFLAGS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OS_DARWIN = @OS_DARWIN@ +OS_LINUX = @OS_LINUX@ +OS_OPENBSD = @OS_OPENBSD@ +OS_WINDOWS = @OS_WINDOWS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PC_LIBS_PRIVATE = @PC_LIBS_PRIVATE@ +RANLIB = @RANLIB@ +RC = @RC@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +THREAD_CFLAGS = @THREAD_CFLAGS@ +VERSION = @VERSION@ +VISIBILITY_CFLAGS = @VISIBILITY_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = dist-bzip2 no-dist-gzip +ACLOCAL_AMFLAGS = -I m4 +DISTCLEANFILES = libusb-1.0.pc +MAINTAINERCLEANFILES = ChangeLog +EXTRA_DIST = TODO PORTING msvc +SUBDIRS = libusb doc $(am__append_1) +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libusb-1.0.pc +reldir = .release/$(distdir) +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +libusb-1.0.pc: $(top_builddir)/config.status $(srcdir)/libusb-1.0.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-pkgconfigDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ + dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-xz \ + dist-zip distcheck distclean distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgconfigDATA install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-pkgconfigDATA + + +.PHONY: ChangeLog dist-up +ChangeLog: + git --git-dir $(top_srcdir)/.git log > ChangeLog || touch ChangeLog + +dist-hook: ChangeLog +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) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/NEWS b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/NEWS new file mode 100644 index 0000000..f948700 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/NEWS @@ -0,0 +1,65 @@ +This file lists notable changes in each release. For the full history of all +changes, see ChangeLog. + +2012-04-20: 1.0.9 +* Numerous bug fixes and improvements +* Backend for Windows, for devices using the WinUSB.sys driver +* Backend for OpenBSD and NetBSD, for devices using the ugen driver +* Add libusb_get_device_speed() +* Add libusb_has_capability() +* Add libusb_error_name() +* Add libusb_get_version() + +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 + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/PORTING b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/PORTING new file mode 100644 index 0000000..7070784 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/PORTING @@ -0,0 +1,95 @@ +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/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/README b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/README new file mode 100644 index 0000000..08ae169 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/README @@ -0,0 +1,22 @@ +libusb +====== + +libusb is a library for USB device access from Linux, Mac OS X, +OpenBSD, NetBSD, and Windows userspace. +It is written in C and licensed under the LGPL-2.1 (see COPYING). + +libusb is abstracted internally in such a way that it can hopefully +be ported to other operating systems. See the PORTING file for some +information, if you fancy a challenge. :) + +libusb homepage: +http://libusb.org/ + +Developers will wish to consult the API documentation: +http://libusb.sourceforge.net/api-1.0/ + +Use the mailing list for questions, comments, etc: +http://libusb.org/wiki/MailingList + +- Peter Stuge +(use the mailing list rather than mailing developers directly) diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/THANKS b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/THANKS new file mode 100644 index 0000000..d926126 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/THANKS @@ -0,0 +1,8 @@ +Development contributors are listed in the AUTHORS file. Other community +members who have made significant contributions in other areas are listed +in this file: + +Alan Stern +Ludovic Rousseau +Tim Roberts +Xiaofan Chen diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/TODO b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/TODO new file mode 100644 index 0000000..6c162a3 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/TODO @@ -0,0 +1,9 @@ +for 1.1 or future +================== +optional timerfd support (runtime detection) +notifications of hotplugged/unplugged devices +offer API to create/destroy handle_events thread +isochronous sync I/O? +exposing of parent-child device relationships +"usb primer" introduction docs +more examples diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/aclocal.m4 b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/aclocal.m4 new file mode 100644 index 0000000..2f30c41 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/aclocal.m4 @@ -0,0 +1,9111 @@ +# generated automatically by aclocal 1.11.1 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, +[m4_warning([this file was generated for autoconf 2.68. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 57 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# `#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test $lt_write_fail = 0 && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_XSI_SHELLFNS + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES +# -------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX +# ----------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script which will find a shell with a builtin +# printf (which we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`print -r -- -n 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case "$ECHO" in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[AC_CHECK_TOOL(AR, ar, false) +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1]) + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +void fnord () __attribute__((visibility("default"))); +#endif + +void fnord () { int i=42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + # Handle Gentoo/FreeBSD as it was Linux + case $host_vendor in + gentoo) + version_type=linux ;; + *) + version_type=freebsd-$objformat ;; + esac + + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + linux) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + need_lib_prefix=no + need_version=no + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method == "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac +AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE(int foo(void) {}, + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + ) + LDFLAGS="$save_LDFLAGS" + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], + [[If ld is used when linking, flag to hardcode $libdir into a binary + during linking. This must work even if $libdir does not exist]]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [fix_srcfile_path], [1], + [Fix the shell variable $srcfile for the compiler]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd[[12]]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + gnu*) + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +]) +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${F77-"f77"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${FC-"f95"} + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC="$lt_save_CC" +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC="$lt_save_CC" +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_XSI_SHELLFNS +# --------------------- +# Bourne and XSI compatible variants of some useful shell functions. +m4_defun([_LT_PROG_XSI_SHELLFNS], +[case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $[*] )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} + +dnl func_dirname_and_basename +dnl A portable version of this function is already defined in general.m4sh +dnl so there is no need for it here. + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[[^=]]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "${1}" | $SED 's/\.[[^.]]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$[@]"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]+=\$[2]" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]=\$$[1]\$[2]" +} + +_LT_EOF + ;; + esac +]) + +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 7 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) + +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) + +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# Generated from ltversion.in. + +# serial 3175 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.2.10]) +m4_define([LT_PACKAGE_REVISION], [1.3175]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.2.10' +macro_revision='1.3175' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) + +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 10 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless `enable' is passed literally. +# For symmetry, `disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_PROG_CC_C_O +# -------------- +# Like AC_PROG_CC_C_O, but changed for automake. +AC_DEFUN([AM_PROG_CC_C_O], +[AC_REQUIRE([AC_PROG_CC_C_O])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +dnl Make sure AC_PROG_CC is never called again, or it will override our +dnl setting of CC. +m4_define([AC_PROG_CC], + [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# (`yes' being less verbose, `no' or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/compile b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/compile new file mode 100755 index 0000000..c0096a7 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/compile @@ -0,0 +1,143 @@ +#! /bin/sh +# Wrapper for compilers which do not understand `-c -o'. + +scriptversion=2009-10-06.20; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 Free Software +# Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand `-c -o'. +Remove `-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file `INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; +esac + +ofile= +cfile= +eat= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as `compile cc -o foo foo.c'. + # So we strip `-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no `-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # `.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use `[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.guess b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.guess new file mode 100755 index 0000000..e1f34b5 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.guess @@ -0,0 +1,1523 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +# Free Software Foundation, Inc. + +timestamp='2010-09-24' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free +Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' HUP INT TERM + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" HUP INT PIPE TERM ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_SYSTEM}" in +Linux|GNU/*) + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #ifdef __UCLIBC__ + # ifdef __UCLIBC_CONFIG_VERSION__ + LIBC=uclibc __UCLIBC_CONFIG_VERSION__ + # else + LIBC=uclibc + # endif + #else + # ifdef __dietlibc__ + LIBC=dietlibc + # else + LIBC=gnu + # endif + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + else + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-${LIBC} + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-${LIBC} + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-${LIBC} + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-tilera-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-${LIBC} + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.h.in b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.h.in new file mode 100644 index 0000000..412bd6c --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.h.in @@ -0,0 +1,116 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Default visibility */ +#undef DEFAULT_VISIBILITY + +/* Debug message logging */ +#undef ENABLE_DEBUG_LOGGING + +/* Message logging */ +#undef ENABLE_LOGGING + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the `gettimeofday' function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_POLL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if the system has the type `struct timespec'. */ +#undef HAVE_STRUCT_TIMESPEC + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Darwin backend */ +#undef OS_DARWIN + +/* Linux backend */ +#undef OS_LINUX + +/* OpenBSD backend */ +#undef OS_OPENBSD + +/* Windows backend */ +#undef OS_WINDOWS + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* type of second poll() argument */ +#undef POLL_NFDS_TYPE + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Use POSIX Threads */ +#undef THREADS_POSIX + +/* timerfd headers available */ +#undef USBI_TIMERFD_AVAILABLE + +/* Version number of package */ +#undef VERSION + +/* Use GNU extensions */ +#undef _GNU_SOURCE + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.log b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.log new file mode 100644 index 0000000..085c787 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.log @@ -0,0 +1,760 @@ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by libusb configure 1.0.9, which was +generated by GNU Autoconf 2.68. Invocation command line was + + $ ./configure + +## --------- ## +## Platform. ## +## --------- ## + +hostname = kaligula +uname -m = x86_64 +uname -r = 4.6.0-kali1-amd64 +uname -s = Linux +uname -v = #1 SMP Debian 4.6.4-1kali1 (2016-07-21) + +/usr/bin/uname -p = unknown +/bin/uname -X = unknown + +/bin/arch = unknown +/usr/bin/arch -k = unknown +/usr/convex/getsysinfo = unknown +/usr/bin/hostinfo = unknown +/bin/machine = unknown +/usr/bin/oslevel = unknown +/bin/universe = unknown + +PATH: /usr/local/sbin +PATH: /usr/local/bin +PATH: /usr/sbin +PATH: /usr/bin +PATH: /sbin +PATH: /bin + + +## ----------- ## +## Core tests. ## +## ----------- ## + +configure:2370: checking for a BSD-compatible install +configure:2438: result: /usr/bin/install -c +configure:2449: checking whether build environment is sane +configure:2499: result: yes +configure:2640: checking for a thread-safe mkdir -p +configure:2679: result: /bin/mkdir -p +configure:2692: checking for gawk +configure:2722: result: no +configure:2692: checking for mawk +configure:2708: found /usr/bin/mawk +configure:2719: result: mawk +configure:2730: checking whether make sets $(MAKE) +configure:2752: result: yes +configure:2833: checking whether to enable maintainer-specific portions of Makefiles +configure:2842: result: no +configure:2922: checking for gcc +configure:2938: found /usr/bin/gcc +configure:2949: result: gcc +configure:3178: checking for C compiler version +configure:3187: gcc --version >&5 +gcc (Debian 6.1.1-11) 6.1.1 20160802 +Copyright (C) 2016 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +configure:3198: $? = 0 +configure:3187: gcc -v >&5 +Using built-in specs. +COLLECT_GCC=gcc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/6/lto-wrapper +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Debian 6.1.1-11' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-6 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 6.1.1 20160802 (Debian 6.1.1-11) +configure:3198: $? = 0 +configure:3187: gcc -V >&5 +gcc: error: unrecognized command line option '-V' +gcc: fatal error: no input files +compilation terminated. +configure:3198: $? = 1 +configure:3187: gcc -qversion >&5 +gcc: error: unrecognized command line option '-qversion'; did you mean '--version'? +gcc: fatal error: no input files +compilation terminated. +configure:3198: $? = 1 +configure:3218: checking whether the C compiler works +configure:3240: gcc conftest.c >&5 +configure:3244: $? = 0 +configure:3292: result: yes +configure:3295: checking for C compiler default output file name +configure:3297: result: a.out +configure:3303: checking for suffix of executables +configure:3310: gcc -o conftest conftest.c >&5 +configure:3314: $? = 0 +configure:3336: result: +configure:3358: checking whether we are cross compiling +configure:3366: gcc -o conftest conftest.c >&5 +configure:3370: $? = 0 +configure:3377: ./conftest +configure:3381: $? = 0 +configure:3396: result: no +configure:3401: checking for suffix of object files +configure:3423: gcc -c conftest.c >&5 +configure:3427: $? = 0 +configure:3448: result: o +configure:3452: checking whether we are using the GNU C compiler +configure:3471: gcc -c conftest.c >&5 +configure:3471: $? = 0 +configure:3480: result: yes +configure:3489: checking whether gcc accepts -g +configure:3509: gcc -c -g conftest.c >&5 +configure:3509: $? = 0 +configure:3550: result: yes +configure:3567: checking for gcc option to accept ISO C89 +configure:3631: gcc -c -g -O2 conftest.c >&5 +configure:3631: $? = 0 +configure:3644: result: none needed +configure:3675: checking for style of include used by make +configure:3703: result: GNU +configure:3728: checking dependency style of gcc +configure:3838: result: gcc3 +configure:3882: checking build system type +configure:3896: result: x86_64-unknown-linux-gnu +configure:3916: checking host system type +configure:3929: result: x86_64-unknown-linux-gnu +configure:3970: checking how to print strings +configure:3997: result: printf +configure:4018: checking for a sed that does not truncate output +configure:4082: result: /bin/sed +configure:4100: checking for grep that handles long lines and -e +configure:4158: result: /bin/grep +configure:4163: checking for egrep +configure:4225: result: /bin/grep -E +configure:4230: checking for fgrep +configure:4292: result: /bin/grep -F +configure:4327: checking for ld used by gcc +configure:4394: result: /usr/bin/ld +configure:4401: checking if the linker (/usr/bin/ld) is GNU ld +configure:4416: result: yes +configure:4428: checking for BSD- or MS-compatible name lister (nm) +configure:4477: result: /usr/bin/nm -B +configure:4607: checking the name lister (/usr/bin/nm -B) interface +configure:4614: gcc -c -g -O2 conftest.c >&5 +configure:4617: /usr/bin/nm -B "conftest.o" +configure:4620: output +0000000000000000 B some_variable +configure:4627: result: BSD nm +configure:4630: checking whether ln -s works +configure:4634: result: yes +configure:4642: checking the maximum length of command line arguments +configure:4767: result: 1572864 +configure:4784: checking whether the shell understands some XSI constructs +configure:4794: result: yes +configure:4798: checking whether the shell understands "+=" +configure:4804: result: yes +configure:4839: checking for /usr/bin/ld option to reload object files +configure:4846: result: -r +configure:4915: checking for objdump +configure:4931: found /usr/bin/objdump +configure:4942: result: objdump +configure:4974: checking how to recognize dependent libraries +configure:5176: result: pass_all +configure:5236: checking for ar +configure:5252: found /usr/bin/ar +configure:5263: result: ar +configure:5341: checking for strip +configure:5357: found /usr/bin/strip +configure:5368: result: strip +configure:5440: checking for ranlib +configure:5456: found /usr/bin/ranlib +configure:5467: result: ranlib +configure:5569: checking command to parse /usr/bin/nm -B output from gcc object +configure:5687: gcc -c -g -O2 conftest.c >&5 +configure:5690: $? = 0 +configure:5694: /usr/bin/nm -B conftest.o \| sed -n -e 's/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' \> conftest.nm +configure:5697: $? = 0 +configure:5751: gcc -o conftest -g -O2 conftest.c conftstm.o >&5 +configure:5754: $? = 0 +configure:5792: result: ok +configure:5888: gcc -c -g -O2 conftest.c >&5 +configure:5891: $? = 0 +configure:6633: checking how to run the C preprocessor +configure:6664: gcc -E conftest.c +configure:6664: $? = 0 +configure:6678: gcc -E conftest.c +conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory + #include + ^ +compilation terminated. +configure:6678: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "libusb" +| #define PACKAGE_TARNAME "libusb" +| #define PACKAGE_VERSION "1.0.9" +| #define PACKAGE_STRING "libusb 1.0.9" +| #define PACKAGE_BUGREPORT "libusb-devel@lists.sourceforge.net" +| #define PACKAGE_URL "http://www.libusb.org/" +| #define PACKAGE "libusb" +| #define VERSION "1.0.9" +| /* end confdefs.h. */ +| #include +configure:6703: result: gcc -E +configure:6723: gcc -E conftest.c +configure:6723: $? = 0 +configure:6737: gcc -E conftest.c +conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory + #include + ^ +compilation terminated. +configure:6737: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "libusb" +| #define PACKAGE_TARNAME "libusb" +| #define PACKAGE_VERSION "1.0.9" +| #define PACKAGE_STRING "libusb 1.0.9" +| #define PACKAGE_BUGREPORT "libusb-devel@lists.sourceforge.net" +| #define PACKAGE_URL "http://www.libusb.org/" +| #define PACKAGE "libusb" +| #define VERSION "1.0.9" +| /* end confdefs.h. */ +| #include +configure:6766: checking for ANSI C header files +configure:6786: gcc -c -g -O2 conftest.c >&5 +configure:6786: $? = 0 +configure:6859: gcc -o conftest -g -O2 conftest.c >&5 +configure:6859: $? = 0 +configure:6859: ./conftest +configure:6859: $? = 0 +configure:6870: result: yes +configure:6883: checking for sys/types.h +configure:6883: gcc -c -g -O2 conftest.c >&5 +configure:6883: $? = 0 +configure:6883: result: yes +configure:6883: checking for sys/stat.h +configure:6883: gcc -c -g -O2 conftest.c >&5 +configure:6883: $? = 0 +configure:6883: result: yes +configure:6883: checking for stdlib.h +configure:6883: gcc -c -g -O2 conftest.c >&5 +configure:6883: $? = 0 +configure:6883: result: yes +configure:6883: checking for string.h +configure:6883: gcc -c -g -O2 conftest.c >&5 +configure:6883: $? = 0 +configure:6883: result: yes +configure:6883: checking for memory.h +configure:6883: gcc -c -g -O2 conftest.c >&5 +configure:6883: $? = 0 +configure:6883: result: yes +configure:6883: checking for strings.h +configure:6883: gcc -c -g -O2 conftest.c >&5 +configure:6883: $? = 0 +configure:6883: result: yes +configure:6883: checking for inttypes.h +configure:6883: gcc -c -g -O2 conftest.c >&5 +configure:6883: $? = 0 +configure:6883: result: yes +configure:6883: checking for stdint.h +configure:6883: gcc -c -g -O2 conftest.c >&5 +configure:6883: $? = 0 +configure:6883: result: yes +configure:6883: checking for unistd.h +configure:6883: gcc -c -g -O2 conftest.c >&5 +configure:6883: $? = 0 +configure:6883: result: yes +configure:6897: checking for dlfcn.h +configure:6897: gcc -c -g -O2 conftest.c >&5 +configure:6897: $? = 0 +configure:6897: result: yes +configure:7084: checking for objdir +configure:7099: result: .libs +configure:7366: checking if gcc supports -fno-rtti -fno-exceptions +configure:7384: gcc -c -g -O2 -fno-rtti -fno-exceptions conftest.c >&5 +cc1: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for C +configure:7388: $? = 0 +configure:7401: result: no +configure:7421: checking for gcc option to produce PIC +configure:7706: result: -fPIC -DPIC +configure:7718: checking if gcc PIC flag -fPIC -DPIC works +configure:7736: gcc -c -g -O2 -fPIC -DPIC -DPIC conftest.c >&5 +configure:7740: $? = 0 +configure:7753: result: yes +configure:7777: checking if gcc static flag -static works +configure:7805: result: yes +configure:7820: checking if gcc supports -c -o file.o +configure:7841: gcc -c -g -O2 -o out/conftest2.o conftest.c >&5 +configure:7845: $? = 0 +configure:7867: result: yes +configure:7875: checking if gcc supports -c -o file.o +configure:7922: result: yes +configure:7955: checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries +configure:9030: result: yes +configure:9067: checking whether -lc should be explicitly linked in +configure:9075: gcc -c -g -O2 conftest.c >&5 +configure:9078: $? = 0 +configure:9093: gcc -shared conftest.o -v -Wl,-soname -Wl,conftest -o conftest 2\>\&1 \| /bin/grep -lc \>/dev/null 2\>\&1 +configure:9096: $? = 0 +configure:9110: result: no +configure:9275: checking dynamic linker characteristics +configure:9743: gcc -o conftest -g -O2 -Wl,-rpath -Wl,/foo conftest.c >&5 +configure:9743: $? = 0 +configure:9965: result: GNU/Linux ld.so +configure:10072: checking how to hardcode library paths into programs +configure:10097: result: immediate +configure:10637: checking whether stripping libraries is possible +configure:10642: result: yes +configure:10677: checking if libtool supports shared libraries +configure:10679: result: yes +configure:10682: checking whether to build shared libraries +configure:10703: result: yes +configure:10706: checking whether to build static libraries +configure:10710: result: yes +configure:10788: checking for windres +configure:10818: result: no +configure:10919: checking for inline +configure:10935: gcc -c -g -O2 conftest.c >&5 +configure:10935: $? = 0 +configure:10943: result: inline +configure:10962: checking whether gcc and cc understand -c and -o together +configure:10993: gcc -c conftest.c -o conftest2.o >&5 +configure:10997: $? = 0 +configure:11003: gcc -c conftest.c -o conftest2.o >&5 +configure:11007: $? = 0 +configure:11018: cc -c conftest.c >&5 +configure:11022: $? = 0 +configure:11030: cc -c conftest.c -o conftest2.o >&5 +configure:11034: $? = 0 +configure:11040: cc -c conftest.c -o conftest2.o >&5 +configure:11044: $? = 0 +configure:11062: result: yes +configure:11093: checking operating system +configure:11097: result: Linux +configure:11136: checking for clock_gettime in -lrt +configure:11161: gcc -o conftest -g -O2 conftest.c -lrt >&5 +configure:11161: $? = 0 +configure:11170: result: yes +configure:11181: checking poll.h usability +configure:11181: gcc -c -g -O2 conftest.c >&5 +configure:11181: $? = 0 +configure:11181: result: yes +configure:11181: checking poll.h presence +configure:11181: gcc -E conftest.c +configure:11181: $? = 0 +configure:11181: result: yes +configure:11181: checking for poll.h +configure:11181: result: yes +configure:11315: checking sys/timerfd.h usability +configure:11315: gcc -c -g -O2 conftest.c >&5 +configure:11315: $? = 0 +configure:11315: result: yes +configure:11315: checking sys/timerfd.h presence +configure:11315: gcc -E conftest.c +configure:11315: $? = 0 +configure:11315: result: yes +configure:11315: checking for sys/timerfd.h +configure:11315: result: yes +configure:11335: checking whether TFD_NONBLOCK is declared +configure:11335: gcc -c -g -O2 conftest.c >&5 +configure:11335: $? = 0 +configure:11335: result: yes +configure:11347: checking whether to use timerfd for timing +configure:11354: result: yes +configure:11365: checking for struct timespec +configure:11365: gcc -c -g -O2 conftest.c >&5 +configure:11365: $? = 0 +configure:11365: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:65:30: error: expected expression before ')' token + if (sizeof ((struct timespec))) + ^ +configure:11365: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "libusb" +| #define PACKAGE_TARNAME "libusb" +| #define PACKAGE_VERSION "1.0.9" +| #define PACKAGE_STRING "libusb 1.0.9" +| #define PACKAGE_BUGREPORT "libusb-devel@lists.sourceforge.net" +| #define PACKAGE_URL "http://www.libusb.org/" +| #define PACKAGE "libusb" +| #define VERSION "1.0.9" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define _GNU_SOURCE 1 +| #define OS_LINUX 1 +| #define HAVE_POLL_H 1 +| #define POLL_NFDS_TYPE nfds_t +| #define THREADS_POSIX 1 +| #define USBI_TIMERFD_AVAILABLE 1 +| /* end confdefs.h. */ +| #include +| #ifdef HAVE_SYS_TYPES_H +| # include +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include +| #endif +| #ifdef STDC_HEADERS +| # include +| # include +| #else +| # ifdef HAVE_STDLIB_H +| # include +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #ifdef HAVE_STRINGS_H +| # include +| #endif +| #ifdef HAVE_INTTYPES_H +| # include +| #endif +| #ifdef HAVE_STDINT_H +| # include +| #endif +| #ifdef HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| if (sizeof ((struct timespec))) +| return 0; +| ; +| return 0; +| } +configure:11365: result: yes +configure:11435: gcc -c -g -O2 -Werror -fvisibility=hidden conftest.c >&5 +configure:11435: $? = 0 +configure:11463: gcc -c -g -O2 -Wno-pointer-sign conftest.c >&5 +configure:11463: $? = 0 +configure:11472: checking for sigaction +configure:11472: gcc -o conftest -g -O2 conftest.c -lrt -pthread >&5 +configure:11472: $? = 0 +configure:11472: result: yes +configure:11491: checking sys/time.h usability +configure:11491: gcc -c -g -O2 conftest.c >&5 +configure:11491: $? = 0 +configure:11491: result: yes +configure:11491: checking sys/time.h presence +configure:11491: gcc -E conftest.c +configure:11491: $? = 0 +configure:11491: result: yes +configure:11491: checking for sys/time.h +configure:11491: result: yes +configure:11503: checking for gettimeofday +configure:11503: gcc -o conftest -g -O2 conftest.c -lrt -pthread >&5 +configure:11503: $? = 0 +configure:11503: result: yes +configure:11693: creating ./config.status + +## ---------------------- ## +## Running config.status. ## +## ---------------------- ## + +This file was extended by libusb config.status 1.0.9, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = + CONFIG_HEADERS = + CONFIG_LINKS = + CONFIG_COMMANDS = + $ ./config.status + +on kaligula + +config.status:1165: creating libusb-1.0.pc +config.status:1165: creating Makefile +config.status:1165: creating libusb/Makefile +config.status:1165: creating examples/Makefile +config.status:1165: creating doc/Makefile +config.status:1165: creating doc/doxygen.cfg +config.status:1165: creating config.h +config.status:1394: executing depfiles commands +config.status:1394: executing libtool commands + +## ---------------- ## +## Cache variables. ## +## ---------------- ## + +ac_cv_build=x86_64-unknown-linux-gnu +ac_cv_c_compiler_gnu=yes +ac_cv_c_inline=inline +ac_cv_env_CC_set= +ac_cv_env_CC_value= +ac_cv_env_CFLAGS_set= +ac_cv_env_CFLAGS_value= +ac_cv_env_CPPFLAGS_set= +ac_cv_env_CPPFLAGS_value= +ac_cv_env_CPP_set= +ac_cv_env_CPP_value= +ac_cv_env_LDFLAGS_set= +ac_cv_env_LDFLAGS_value= +ac_cv_env_LIBS_set= +ac_cv_env_LIBS_value= +ac_cv_env_build_alias_set= +ac_cv_env_build_alias_value= +ac_cv_env_host_alias_set= +ac_cv_env_host_alias_value= +ac_cv_env_target_alias_set= +ac_cv_env_target_alias_value= +ac_cv_func_gettimeofday=yes +ac_cv_func_sigaction=yes +ac_cv_have_decl_TFD_NONBLOCK=yes +ac_cv_header_dlfcn_h=yes +ac_cv_header_inttypes_h=yes +ac_cv_header_memory_h=yes +ac_cv_header_poll_h=yes +ac_cv_header_stdc=yes +ac_cv_header_stdint_h=yes +ac_cv_header_stdlib_h=yes +ac_cv_header_string_h=yes +ac_cv_header_strings_h=yes +ac_cv_header_sys_stat_h=yes +ac_cv_header_sys_time_h=yes +ac_cv_header_sys_timerfd_h=yes +ac_cv_header_sys_types_h=yes +ac_cv_header_unistd_h=yes +ac_cv_host=x86_64-unknown-linux-gnu +ac_cv_lib_rt_clock_gettime=yes +ac_cv_objext=o +ac_cv_path_EGREP='/bin/grep -E' +ac_cv_path_FGREP='/bin/grep -F' +ac_cv_path_GREP=/bin/grep +ac_cv_path_SED=/bin/sed +ac_cv_path_install='/usr/bin/install -c' +ac_cv_path_mkdir=/bin/mkdir +ac_cv_prog_AWK=mawk +ac_cv_prog_CPP='gcc -E' +ac_cv_prog_ac_ct_AR=ar +ac_cv_prog_ac_ct_CC=gcc +ac_cv_prog_ac_ct_OBJDUMP=objdump +ac_cv_prog_ac_ct_RANLIB=ranlib +ac_cv_prog_ac_ct_STRIP=strip +ac_cv_prog_cc_c89= +ac_cv_prog_cc_g=yes +ac_cv_prog_cc_gcc_c_o=yes +ac_cv_prog_make_make_set=yes +ac_cv_type_struct_timespec=yes +am_cv_CC_dependencies_compiler_type=gcc3 +lt_cv_archive_cmds_need_lc=no +lt_cv_deplibs_check_method=pass_all +lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_ld_reload_flag=-r +lt_cv_nm_interface='BSD nm' +lt_cv_objdir=.libs +lt_cv_path_LD=/usr/bin/ld +lt_cv_path_NM='/usr/bin/nm -B' +lt_cv_prog_compiler_c_o=yes +lt_cv_prog_compiler_c_o_RC=yes +lt_cv_prog_compiler_pic_works=yes +lt_cv_prog_compiler_rtti_exceptions=no +lt_cv_prog_compiler_static_works=yes +lt_cv_prog_gnu_ld=yes +lt_cv_shlibpath_overrides_runpath=no +lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\''' +lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\) $/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"\2", (void *) \&\2},/p'\''' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\) $/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/ {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"lib\2", (void *) \&\2},/p'\''' +lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' +lt_cv_sys_max_cmd_len=1572864 + +## ----------------- ## +## Output variables. ## +## ----------------- ## + +ACLOCAL='${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run aclocal-1.11' +AMDEPBACKSLASH='\' +AMDEP_FALSE='#' +AMDEP_TRUE='' +AMTAR='${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run tar' +AM_BACKSLASH='\' +AM_CFLAGS='-std=gnu99 -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration -Wno-pointer-sign -Wshadow' +AM_DEFAULT_VERBOSITY='0' +AR='ar' +AUTOCONF='${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run autoconf' +AUTOHEADER='${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run autoheader' +AUTOMAKE='${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run automake-1.11' +AWK='mawk' +BUILD_EXAMPLES_FALSE='' +BUILD_EXAMPLES_TRUE='#' +CC='gcc' +CCDEPMODE='depmode=gcc3' +CFLAGS='-g -O2' +CPP='gcc -E' +CPPFLAGS='' +CYGPATH_W='echo' +DEFS='-DHAVE_CONFIG_H' +DEPDIR='.deps' +DSYMUTIL='' +DUMPBIN='' +ECHO_C='' +ECHO_N='-n' +ECHO_T='' +EGREP='/bin/grep -E' +EXEEXT='' +FGREP='/bin/grep -F' +GREP='/bin/grep' +HAVE_SIGACTION_FALSE='#' +HAVE_SIGACTION_TRUE='' +INSTALL_DATA='${INSTALL} -m 644' +INSTALL_PROGRAM='${INSTALL}' +INSTALL_SCRIPT='${INSTALL}' +INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' +LD='/usr/bin/ld -m elf_x86_64' +LDFLAGS='' +LIBOBJS='' +LIBS=' -lrt -pthread' +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +LIPO='' +LN_S='ln -s' +LTLDFLAGS='-version-info 1:0:1 -no-undefined' +LTLIBOBJS='' +MAINT='#' +MAINTAINER_MODE_FALSE='' +MAINTAINER_MODE_TRUE='#' +MAKEINFO='${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run makeinfo' +MKDIR_P='/bin/mkdir -p' +NM='/usr/bin/nm -B' +NMEDIT='' +OBJDUMP='objdump' +OBJEXT='o' +OS_DARWIN='' +OS_DARWIN_FALSE='' +OS_DARWIN_TRUE='#' +OS_LINUX='' +OS_LINUX_FALSE='#' +OS_LINUX_TRUE='' +OS_OPENBSD='' +OS_OPENBSD_FALSE='' +OS_OPENBSD_TRUE='#' +OS_WINDOWS='' +OS_WINDOWS_FALSE='' +OS_WINDOWS_TRUE='#' +OTOOL64='' +OTOOL='' +PACKAGE='libusb' +PACKAGE_BUGREPORT='libusb-devel@lists.sourceforge.net' +PACKAGE_NAME='libusb' +PACKAGE_STRING='libusb 1.0.9' +PACKAGE_TARNAME='libusb' +PACKAGE_URL='http://www.libusb.org/' +PACKAGE_VERSION='1.0.9' +PATH_SEPARATOR=':' +PC_LIBS_PRIVATE='-lrt -pthread' +RANLIB='ranlib' +RC='' +SED='/bin/sed' +SET_MAKE='' +SHELL='/bin/bash' +STRIP='strip' +THREADS_POSIX_FALSE='#' +THREADS_POSIX_TRUE='' +THREAD_CFLAGS='-pthread' +VERSION='1.0.9' +VISIBILITY_CFLAGS='-fvisibility=hidden' +ac_ct_CC='gcc' +ac_ct_DUMPBIN='' +am__EXEEXT_FALSE='' +am__EXEEXT_TRUE='#' +am__fastdepCC_FALSE='#' +am__fastdepCC_TRUE='' +am__include='include' +am__isrc='' +am__leading_dot='.' +am__quote='' +am__tar='${AMTAR} chof - "$$tardir"' +am__untar='${AMTAR} xf -' +bindir='${exec_prefix}/bin' +build='x86_64-unknown-linux-gnu' +build_alias='' +build_cpu='x86_64' +build_os='linux-gnu' +build_vendor='unknown' +datadir='${datarootdir}' +datarootdir='${prefix}/share' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +dvidir='${docdir}' +exec_prefix='${prefix}' +host='x86_64-unknown-linux-gnu' +host_alias='' +host_cpu='x86_64' +host_os='linux-gnu' +host_vendor='unknown' +htmldir='${docdir}' +includedir='${prefix}/include' +infodir='${datarootdir}/info' +install_sh='${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/install-sh' +libdir='${exec_prefix}/lib' +libexecdir='${exec_prefix}/libexec' +localedir='${datarootdir}/locale' +localstatedir='${prefix}/var' +mandir='${datarootdir}/man' +mkdir_p='/bin/mkdir -p' +oldincludedir='/usr/include' +pdfdir='${docdir}' +prefix='/usr/local' +program_transform_name='s,x,x,' +psdir='${docdir}' +sbindir='${exec_prefix}/sbin' +sharedstatedir='${prefix}/com' +sysconfdir='${prefix}/etc' +target_alias='' + +## ----------- ## +## confdefs.h. ## +## ----------- ## + +/* confdefs.h */ +#define PACKAGE_NAME "libusb" +#define PACKAGE_TARNAME "libusb" +#define PACKAGE_VERSION "1.0.9" +#define PACKAGE_STRING "libusb 1.0.9" +#define PACKAGE_BUGREPORT "libusb-devel@lists.sourceforge.net" +#define PACKAGE_URL "http://www.libusb.org/" +#define PACKAGE "libusb" +#define VERSION "1.0.9" +#define STDC_HEADERS 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 +#define HAVE_MEMORY_H 1 +#define HAVE_STRINGS_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_UNISTD_H 1 +#define HAVE_DLFCN_H 1 +#define LT_OBJDIR ".libs/" +#define _GNU_SOURCE 1 +#define OS_LINUX 1 +#define HAVE_POLL_H 1 +#define POLL_NFDS_TYPE nfds_t +#define THREADS_POSIX 1 +#define USBI_TIMERFD_AVAILABLE 1 +#define HAVE_STRUCT_TIMESPEC 1 +#define ENABLE_LOGGING 1 +#define DEFAULT_VISIBILITY __attribute__((visibility("default"))) +#define HAVE_SYS_TIME_H 1 +#define HAVE_GETTIMEOFDAY 1 + +configure: exit 0 diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.status b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.status new file mode 100755 index 0000000..a8440c4 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.status @@ -0,0 +1,2284 @@ +#! /bin/bash +# Generated by configure. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=${CONFIG_SHELL-/bin/bash} +export SHELL +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by libusb $as_me 1.0.9, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +# Files that config.status was made for. +config_files=" libusb-1.0.pc Makefile libusb/Makefile examples/Makefile doc/Makefile doc/doxygen.cfg" +config_headers=" config.h" +config_commands=" depfiles libtool" + +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to . +libusb home page: ." + +ac_cs_config="" +ac_cs_version="\ +libusb config.status 1.0.9 +configured by ./configure, generated by GNU Autoconf 2.68, + with options \"$ac_cs_config\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='/root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9' +srcdir='.' +INSTALL='/usr/bin/install -c' +MKDIR_P='/bin/mkdir -p' +AWK='mawk' +test -n "$AWK" || AWK=awk +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +if $ac_cs_recheck; then + set X '/bin/bash' './configure' $ac_configure_extra_args --no-create --no-recursion + shift + $as_echo "running CONFIG_SHELL=/bin/bash $*" >&6 + CONFIG_SHELL='/bin/bash' + export CONFIG_SHELL + exec "$@" +fi + +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +# +# INIT-COMMANDS +# +AMDEP_TRUE="" ac_aux_dir="." + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +double_quote_subst='s/\(["`\\]\)/\\\1/g' +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' +macro_version='2.2.10' +macro_revision='1.3175' +enable_shared='yes' +enable_static='yes' +pic_mode='default' +enable_fast_install='yes' +SHELL='/bin/bash' +ECHO='printf %s\n' +host_alias='' +host='x86_64-unknown-linux-gnu' +host_os='linux-gnu' +build_alias='' +build='x86_64-unknown-linux-gnu' +build_os='linux-gnu' +SED='/bin/sed' +Xsed='/bin/sed -e 1s/^X//' +GREP='/bin/grep' +EGREP='/bin/grep -E' +FGREP='/bin/grep -F' +LD='/usr/bin/ld -m elf_x86_64' +NM='/usr/bin/nm -B' +LN_S='ln -s' +max_cmd_len='1572864' +ac_objext='o' +exeext='' +lt_unset='unset' +lt_SP2NL='tr \040 \012' +lt_NL2SP='tr \015\012 \040\040' +reload_flag=' -r' +reload_cmds='$LD$reload_flag -o $output$reload_objs' +OBJDUMP='objdump' +deplibs_check_method='pass_all' +file_magic_cmd='$MAGIC_CMD' +AR='ar' +AR_FLAGS='cru' +STRIP='strip' +RANLIB='ranlib' +old_postinstall_cmds='chmod 644 $oldlib~$RANLIB $oldlib' +old_postuninstall_cmds='' +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $oldlib' +lock_old_archive_extraction='no' +CC='gcc' +CFLAGS='-g -O2' +compiler='' +GCC='yes' +lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\''' +lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' +lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\) $/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"\2", (void *) \&\2},/p'\''' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\) $/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/ {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"lib\2", (void *) \&\2},/p'\''' +objdir='.libs' +MAGIC_CMD='file' +lt_prog_compiler_no_builtin_flag=' -fno-builtin' +lt_prog_compiler_wl='-Wl,' +lt_prog_compiler_pic=' -fPIC -DPIC' +lt_prog_compiler_static='-static' +lt_cv_prog_compiler_c_o='yes' +need_locks='no' +DSYMUTIL='' +NMEDIT='' +LIPO='' +OTOOL='' +OTOOL64='' +libext='a' +shrext_cmds='.so' +extract_expsyms_cmds='' +archive_cmds_need_lc='no' +enable_shared_with_static_runtimes='no' +export_dynamic_flag_spec='${wl}--export-dynamic' +whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' +compiler_needs_object='no' +old_archive_from_new_cmds='' +old_archive_from_expsyms_cmds='' +archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' +module_cmds='' +module_expsym_cmds='' +with_gnu_ld='yes' +allow_undefined_flag='' +no_undefined_flag='' +hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' +hardcode_libdir_flag_spec_ld='' +hardcode_libdir_separator='' +hardcode_direct='no' +hardcode_direct_absolute='no' +hardcode_minus_L='no' +hardcode_shlibpath_var='unsupported' +hardcode_automatic='no' +inherit_rpath='no' +link_all_deplibs='unknown' +fix_srcfile_path='' +always_export_symbols='no' +export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' +exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' +include_expsyms='' +prelink_cmds='' +file_list_spec='' +variables_saved_for_relink='PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH' +need_lib_prefix='no' +need_version='no' +version_type='linux' +runpath_var='LD_RUN_PATH' +shlibpath_var='LD_LIBRARY_PATH' +shlibpath_overrides_runpath='no' +libname_spec='lib$name' +library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +soname_spec='${libname}${release}${shared_ext}$major' +install_override_mode='' +postinstall_cmds='' +postuninstall_cmds='' +finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' +finish_eval='' +hardcode_into_libs='yes' +sys_lib_search_path_spec='/usr/lib/gcc/x86_64-linux-gnu/6 /usr/lib/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib ' +sys_lib_dlsearch_path_spec='/lib /usr/lib /usr/lib/x86_64-linux-gnu/libfakeroot /lib/i386-linux-gnu /usr/lib/i386-linux-gnu /lib/i686-linux-gnu /usr/lib/i686-linux-gnu /usr/local/lib /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu ' +hardcode_action='immediate' +enable_dlopen='unknown' +enable_dlopen_self='unknown' +enable_dlopen_self_static='unknown' +old_striplib='strip --strip-debug' +striplib='strip --strip-unneeded' +LD_RC='' +reload_flag_RC='' +reload_cmds_RC='' +old_archive_cmds_RC='' +compiler_RC='' +GCC_RC='' +lt_prog_compiler_no_builtin_flag_RC='' +lt_prog_compiler_wl_RC='' +lt_prog_compiler_pic_RC='' +lt_prog_compiler_static_RC='' +lt_cv_prog_compiler_c_o_RC='yes' +archive_cmds_need_lc_RC='' +enable_shared_with_static_runtimes_RC='' +export_dynamic_flag_spec_RC='' +whole_archive_flag_spec_RC='' +compiler_needs_object_RC='' +old_archive_from_new_cmds_RC='' +old_archive_from_expsyms_cmds_RC='' +archive_cmds_RC='' +archive_expsym_cmds_RC='' +module_cmds_RC='' +module_expsym_cmds_RC='' +with_gnu_ld_RC='' +allow_undefined_flag_RC='' +no_undefined_flag_RC='' +hardcode_libdir_flag_spec_RC='' +hardcode_libdir_flag_spec_ld_RC='' +hardcode_libdir_separator_RC='' +hardcode_direct_RC='' +hardcode_direct_absolute_RC='' +hardcode_minus_L_RC='' +hardcode_shlibpath_var_RC='' +hardcode_automatic_RC='' +inherit_rpath_RC='' +link_all_deplibs_RC='' +fix_srcfile_path_RC='' +always_export_symbols_RC='' +export_symbols_cmds_RC='' +exclude_expsyms_RC='' +include_expsyms_RC='' +prelink_cmds_RC='' +file_list_spec_RC='' +hardcode_action_RC='' + +LTCC='gcc' +LTCFLAGS='-g -O2' +compiler='gcc' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL ECHO SED GREP EGREP FGREP LD NM LN_S lt_SP2NL lt_NL2SP reload_flag OBJDUMP deplibs_check_method file_magic_cmd AR AR_FLAGS STRIP RANLIB CC CFLAGS compiler lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl lt_cv_sys_global_symbol_to_c_name_address lt_cv_sys_global_symbol_to_c_name_address_lib_prefix lt_prog_compiler_no_builtin_flag lt_prog_compiler_wl lt_prog_compiler_pic lt_prog_compiler_static lt_cv_prog_compiler_c_o need_locks DSYMUTIL NMEDIT LIPO OTOOL OTOOL64 shrext_cmds export_dynamic_flag_spec whole_archive_flag_spec compiler_needs_object with_gnu_ld allow_undefined_flag no_undefined_flag hardcode_libdir_flag_spec hardcode_libdir_flag_spec_ld hardcode_libdir_separator fix_srcfile_path exclude_expsyms include_expsyms file_list_spec variables_saved_for_relink libname_spec library_names_spec soname_spec install_override_mode finish_eval old_striplib striplib LD_RC reload_flag_RC compiler_RC lt_prog_compiler_no_builtin_flag_RC lt_prog_compiler_wl_RC lt_prog_compiler_pic_RC lt_prog_compiler_static_RC lt_cv_prog_compiler_c_o_RC export_dynamic_flag_spec_RC whole_archive_flag_spec_RC compiler_needs_object_RC with_gnu_ld_RC allow_undefined_flag_RC no_undefined_flag_RC hardcode_libdir_flag_spec_RC hardcode_libdir_flag_spec_ld_RC hardcode_libdir_separator_RC fix_srcfile_path_RC exclude_expsyms_RC include_expsyms_RC file_list_spec_RC; do + case `eval \\$ECHO \\""\\$$var"\\"` in + *[\\\`\"\$]*) + eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED \"\$sed_quote_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\$$var\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds old_postinstall_cmds old_postuninstall_cmds old_archive_cmds extract_expsyms_cmds old_archive_from_new_cmds old_archive_from_expsyms_cmds archive_cmds archive_expsym_cmds module_cmds module_expsym_cmds export_symbols_cmds prelink_cmds postinstall_cmds postuninstall_cmds finish_cmds sys_lib_search_path_spec sys_lib_dlsearch_path_spec reload_cmds_RC old_archive_cmds_RC old_archive_from_new_cmds_RC old_archive_from_expsyms_cmds_RC archive_cmds_RC archive_expsym_cmds_RC module_cmds_RC module_expsym_cmds_RC export_symbols_cmds_RC prelink_cmds_RC; do + case `eval \\$ECHO \\""\\$$var"\\"` in + *[\\\`\"\$]*) + eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\$$var\\\"" + ;; + esac +done + +ac_aux_dir='.' +xsi_shell='yes' +lt_shell_append='yes' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='libusb' + VERSION='1.0.9' + TIMESTAMP='' + RM='rm -f' + ofile='libtool' + + + + + + + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "libusb-1.0.pc") CONFIG_FILES="$CONFIG_FILES libusb-1.0.pc" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "libusb/Makefile") CONFIG_FILES="$CONFIG_FILES libusb/Makefile" ;; + "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "doc/doxygen.cfg") CONFIG_FILES="$CONFIG_FILES doc/doxygen.cfg" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +cat >>"$ac_tmp/subs1.awk" <<\_ACAWK && +S["am__EXEEXT_FALSE"]="" +S["am__EXEEXT_TRUE"]="#" +S["LTLIBOBJS"]="" +S["LIBOBJS"]="" +S["LTLDFLAGS"]="-version-info 1:0:1 -no-undefined" +S["AM_CFLAGS"]="-std=gnu99 -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration -Wno-pointer-sign -Wshadow" +S["VISIBILITY_CFLAGS"]="-fvisibility=hidden" +S["HAVE_SIGACTION_FALSE"]="#" +S["HAVE_SIGACTION_TRUE"]="" +S["BUILD_EXAMPLES_FALSE"]="" +S["BUILD_EXAMPLES_TRUE"]="#" +S["THREADS_POSIX_FALSE"]="#" +S["THREADS_POSIX_TRUE"]="" +S["OS_WINDOWS_FALSE"]="" +S["OS_WINDOWS_TRUE"]="#" +S["OS_OPENBSD_FALSE"]="" +S["OS_OPENBSD_TRUE"]="#" +S["OS_DARWIN_FALSE"]="" +S["OS_DARWIN_TRUE"]="#" +S["OS_LINUX_FALSE"]="#" +S["OS_LINUX_TRUE"]="" +S["PC_LIBS_PRIVATE"]="-lrt -pthread" +S["THREAD_CFLAGS"]="-pthread" +S["OS_WINDOWS"]="" +S["OS_OPENBSD"]="" +S["OS_DARWIN"]="" +S["OS_LINUX"]="" +S["RC"]="" +S["CPP"]="gcc -E" +S["OTOOL64"]="" +S["OTOOL"]="" +S["LIPO"]="" +S["NMEDIT"]="" +S["DSYMUTIL"]="" +S["RANLIB"]="ranlib" +S["AR"]="ar" +S["OBJDUMP"]="objdump" +S["LN_S"]="ln -s" +S["NM"]="/usr/bin/nm -B" +S["ac_ct_DUMPBIN"]="" +S["DUMPBIN"]="" +S["LD"]="/usr/bin/ld -m elf_x86_64" +S["FGREP"]="/bin/grep -F" +S["EGREP"]="/bin/grep -E" +S["GREP"]="/bin/grep" +S["SED"]="/bin/sed" +S["host_os"]="linux-gnu" +S["host_vendor"]="unknown" +S["host_cpu"]="x86_64" +S["host"]="x86_64-unknown-linux-gnu" +S["build_os"]="linux-gnu" +S["build_vendor"]="unknown" +S["build_cpu"]="x86_64" +S["build"]="x86_64-unknown-linux-gnu" +S["LIBTOOL"]="$(SHELL) $(top_builddir)/libtool" +S["am__fastdepCC_FALSE"]="#" +S["am__fastdepCC_TRUE"]="" +S["CCDEPMODE"]="depmode=gcc3" +S["AMDEPBACKSLASH"]="\\" +S["AMDEP_FALSE"]="#" +S["AMDEP_TRUE"]="" +S["am__quote"]="" +S["am__include"]="include" +S["DEPDIR"]=".deps" +S["OBJEXT"]="o" +S["EXEEXT"]="" +S["ac_ct_CC"]="gcc" +S["CPPFLAGS"]="" +S["LDFLAGS"]="" +S["CFLAGS"]="-g -O2" +S["CC"]="gcc" +S["AM_BACKSLASH"]="\\" +S["AM_DEFAULT_VERBOSITY"]="0" +S["MAINT"]="#" +S["MAINTAINER_MODE_FALSE"]="" +S["MAINTAINER_MODE_TRUE"]="#" +S["am__untar"]="${AMTAR} xf -" +S["am__tar"]="${AMTAR} chof - \"$$tardir\"" +S["AMTAR"]="${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run tar" +S["am__leading_dot"]="." +S["SET_MAKE"]="" +S["AWK"]="mawk" +S["mkdir_p"]="/bin/mkdir -p" +S["MKDIR_P"]="/bin/mkdir -p" +S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s" +S["STRIP"]="strip" +S["install_sh"]="${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/install-sh" +S["MAKEINFO"]="${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run makeinfo" +S["AUTOHEADER"]="${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run autoheader" +S["AUTOMAKE"]="${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run automake-1.11" +S["AUTOCONF"]="${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run autoconf" +S["ACLOCAL"]="${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run aclocal-1.11" +S["VERSION"]="1.0.9" +S["PACKAGE"]="libusb" +S["CYGPATH_W"]="echo" +S["am__isrc"]="" +S["INSTALL_DATA"]="${INSTALL} -m 644" +S["INSTALL_SCRIPT"]="${INSTALL}" +S["INSTALL_PROGRAM"]="${INSTALL}" +S["target_alias"]="" +S["host_alias"]="" +S["build_alias"]="" +S["LIBS"]=" -lrt -pthread" +S["ECHO_T"]="" +S["ECHO_N"]="-n" +S["ECHO_C"]="" +S["DEFS"]="-DHAVE_CONFIG_H" +S["mandir"]="${datarootdir}/man" +S["localedir"]="${datarootdir}/locale" +S["libdir"]="${exec_prefix}/lib" +S["psdir"]="${docdir}" +S["pdfdir"]="${docdir}" +S["dvidir"]="${docdir}" +S["htmldir"]="${docdir}" +S["infodir"]="${datarootdir}/info" +S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" +S["oldincludedir"]="/usr/include" +S["includedir"]="${prefix}/include" +S["localstatedir"]="${prefix}/var" +S["sharedstatedir"]="${prefix}/com" +S["sysconfdir"]="${prefix}/etc" +S["datadir"]="${datarootdir}" +S["datarootdir"]="${prefix}/share" +S["libexecdir"]="${exec_prefix}/libexec" +S["sbindir"]="${exec_prefix}/sbin" +S["bindir"]="${exec_prefix}/bin" +S["program_transform_name"]="s,x,x," +S["prefix"]="/usr/local" +S["exec_prefix"]="${prefix}" +S["PACKAGE_URL"]="http://www.libusb.org/" +S["PACKAGE_BUGREPORT"]="libusb-devel@lists.sourceforge.net" +S["PACKAGE_STRING"]="libusb 1.0.9" +S["PACKAGE_VERSION"]="1.0.9" +S["PACKAGE_TARNAME"]="libusb" +S["PACKAGE_NAME"]="libusb" +S["PATH_SEPARATOR"]=":" +S["SHELL"]="/bin/bash" +_ACAWK +cat >>"$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +D["PACKAGE_NAME"]=" \"libusb\"" +D["PACKAGE_TARNAME"]=" \"libusb\"" +D["PACKAGE_VERSION"]=" \"1.0.9\"" +D["PACKAGE_STRING"]=" \"libusb 1.0.9\"" +D["PACKAGE_BUGREPORT"]=" \"libusb-devel@lists.sourceforge.net\"" +D["PACKAGE_URL"]=" \"http://www.libusb.org/\"" +D["PACKAGE"]=" \"libusb\"" +D["VERSION"]=" \"1.0.9\"" +D["STDC_HEADERS"]=" 1" +D["HAVE_SYS_TYPES_H"]=" 1" +D["HAVE_SYS_STAT_H"]=" 1" +D["HAVE_STDLIB_H"]=" 1" +D["HAVE_STRING_H"]=" 1" +D["HAVE_MEMORY_H"]=" 1" +D["HAVE_STRINGS_H"]=" 1" +D["HAVE_INTTYPES_H"]=" 1" +D["HAVE_STDINT_H"]=" 1" +D["HAVE_UNISTD_H"]=" 1" +D["HAVE_DLFCN_H"]=" 1" +D["LT_OBJDIR"]=" \".libs/\"" +D["_GNU_SOURCE"]=" 1" +D["OS_LINUX"]=" 1" +D["HAVE_POLL_H"]=" 1" +D["POLL_NFDS_TYPE"]=" nfds_t" +D["THREADS_POSIX"]=" 1" +D["USBI_TIMERFD_AVAILABLE"]=" 1" +D["HAVE_STRUCT_TIMESPEC"]=" 1" +D["ENABLE_LOGGING"]=" 1" +D["DEFAULT_VISIBILITY"]=" __attribute__((visibility(\"default\")))" +D["HAVE_SYS_TIME_H"]=" 1" +D["HAVE_GETTIMEOFDAY"]=" 1" + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ { + line = $ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + ac_datarootdir_hack=' + s&@datadir@&${datarootdir}&g + s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g + s&@infodir@&${datarootdir}/info&g + s&@localedir@&${datarootdir}/locale&g + s&@mandir@&${datarootdir}/man&g + s&\${datarootdir}&${prefix}/share&g' ;; +esac +ac_sed_extra="/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +} + +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="RC " + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: RC + +# The linker used to build libraries. +LD=$lt_LD_RC + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_RC +reload_cmds=$lt_reload_cmds_RC + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_RC + +# A language specific compiler. +CC=$lt_compiler_RC + +# Is the compiler the GNU compiler? +with_gcc=$GCC_RC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_RC + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_RC + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_RC + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_RC + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_RC + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_RC +archive_expsym_cmds=$lt_archive_expsym_cmds_RC + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_RC +module_expsym_cmds=$lt_module_expsym_cmds_RC + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_RC + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_RC + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_RC + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_RC + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_RC + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_RC + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_RC + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_RC + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_RC + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_RC + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path_RC + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_RC + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_RC + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_RC + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_RC + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_RC + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_RC + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_RC + +# ### END LIBTOOL TAG CONFIG: RC +_LT_EOF + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.sub b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.sub new file mode 100755 index 0000000..216604d --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/config.sub @@ -0,0 +1,1757 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +# Free Software Foundation, Inc. + +timestamp='2010-09-11' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free +Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx | dvp \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | picochip) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile-* | tilegx-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mipsEE* | ee | ps2) + basic_machine=mips64r5900el-scei + case $os in + -linux*) + ;; + *) + os=-elf + ;; + esac + ;; + iop) + basic_machine=mipsel-scei + os=-irx + ;; + dvp) + basic_machine=dvp-scei + os=-elf + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + # This must be matched before tile*. + tilegx*) + basic_machine=tilegx-unknown + os=-linux-gnu + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -irx* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/configure b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/configure new file mode 100755 index 0000000..e35bb32 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/configure @@ -0,0 +1,14148 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.68 for libusb 1.0.9. +# +# Report bugs to . +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +# Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: libusb-devel@lists.sourceforge.net about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='libusb' +PACKAGE_TARNAME='libusb' +PACKAGE_VERSION='1.0.9' +PACKAGE_STRING='libusb 1.0.9' +PACKAGE_BUGREPORT='libusb-devel@lists.sourceforge.net' +PACKAGE_URL='http://www.libusb.org/' + +ac_unique_file="libusb/core.c" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +LTLDFLAGS +AM_CFLAGS +VISIBILITY_CFLAGS +HAVE_SIGACTION_FALSE +HAVE_SIGACTION_TRUE +BUILD_EXAMPLES_FALSE +BUILD_EXAMPLES_TRUE +THREADS_POSIX_FALSE +THREADS_POSIX_TRUE +OS_WINDOWS_FALSE +OS_WINDOWS_TRUE +OS_OPENBSD_FALSE +OS_OPENBSD_TRUE +OS_DARWIN_FALSE +OS_DARWIN_TRUE +OS_LINUX_FALSE +OS_LINUX_TRUE +PC_LIBS_PRIVATE +THREAD_CFLAGS +OS_WINDOWS +OS_OPENBSD +OS_DARWIN +OS_LINUX +RC +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +RANLIB +AR +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBTOOL +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_maintainer_mode +enable_silent_rules +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock +enable_timerfd +enable_log +enable_debug_log +enable_examples_build +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures libusb 1.0.9 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/libusb] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of libusb 1.0.9:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0') + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --enable-timerfd use timerfd for timing (default auto) + --disable-log disable all logging + --enable-debug-log enable debug logging (default n) + --enable-examples-build build example applications (default n) + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +libusb home page: . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +libusb configure 1.0.9 +generated by GNU Autoconf 2.68 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ------------------------------------------------- ## +## Report this to libusb-devel@lists.sourceforge.net ## +## ------------------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type + +# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES +# --------------------------------------------- +# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR +# accordingly. +ac_fn_c_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + as_decl_name=`echo $2|sed 's/ *(.*//'` + as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +$as_echo_n "checking whether $as_decl_name is declared... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $as_decl_name +#ifdef __cplusplus + (void) $as_decl_use; +#else + (void) $as_decl_name; +#endif +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_decl +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by libusb $as_me 1.0.9, which was +generated by GNU Autoconf 2.68. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# 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="1" +lt_revision="0" +lt_age="1" +LTLDFLAGS="-version-info ${lt_current}:${lt_revision}:${lt_age}" + +am__api_version='1.11' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='libusb' + VERSION='1.0.9' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + + + +ac_config_headers="$ac_config_headers config.h" + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=0;; +esac +AM_BACKSLASH='\' + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.2.10' +macro_revision='1.3175' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`print -r -- -n 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case "$ECHO" in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. + if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + + + + + + + + + + + + + + + + + + + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + lt_prog_compiler_pic='-Xcompiler -fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } + + + + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='${wl}--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test x"$lt_cv_prog_compiler__b" = xyes; then + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo(void) {} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([A-Za-z]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + # Handle Gentoo/FreeBSD as it was Linux + case $host_vendor in + gentoo) + version_type=linux ;; + *) + version_type=freebsd-$objformat ;; + esac + + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + linux) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + need_lib_prefix=no + need_version=no + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +void fnord () __attribute__((visibility("default"))); +#endif + +void fnord () { int i=42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +void fnord () __attribute__((visibility("default"))); +#endif + +void fnord () { int i=42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. +set dummy ${ac_tool_prefix}windres; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RC"; then + ac_cv_prog_RC="$RC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RC="${ac_tool_prefix}windres" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RC=$ac_cv_prog_RC +if test -n "$RC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 +$as_echo "$RC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RC"; then + ac_ct_RC=$RC + # Extract the first word of "windres", so it can be a program name with args. +set dummy windres; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RC"; then + ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RC="windres" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RC=$ac_cv_prog_ac_ct_RC +if test -n "$ac_ct_RC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5 +$as_echo "$ac_ct_RC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RC" = x; then + RC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RC=$ac_ct_RC + fi +else + RC="$ac_cv_prog_RC" +fi + + + + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +objext_RC=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +compiler=$CC +compiler_RC=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + +lt_cv_prog_compiler_c_o_RC=yes + +if test -n "$compiler"; then + : + + + +fi + +GCC=$lt_save_GCC +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + +if test "x$CC" != xcc; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 +$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 +$as_echo_n "checking whether cc understands -c and -o together... " >&6; } +fi +set dummy $CC; ac_cc=`$as_echo "$2" | + sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +# Make sure it works both with $CC and with simple cc. +# We do the test twice because some compilers refuse to overwrite an +# existing .o file with -o, though they will create one. +ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' +rm -f conftest2.* +if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; +then + eval ac_cv_prog_cc_${ac_cc}_c_o=yes + if test "x$CC" != xcc; then + # Test first that cc exists at all. + if { ac_try='cc -c conftest.$ac_ext >&5' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' + rm -f conftest2.* + if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; + then + # cc works too. + : + else + # cc exists but doesn't like -o. + eval ac_cv_prog_cc_${ac_cc}_c_o=no + fi + fi + fi +else + eval ac_cv_prog_cc_${ac_cc}_c_o=no +fi +rm -f core conftest* + +fi +if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h + +fi + +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi + + + +$as_echo "#define _GNU_SOURCE 1" >>confdefs.h + + +LTLDFLAGS="${LTLDFLAGS} -no-undefined" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking operating system" >&5 +$as_echo_n "checking operating system... " >&6; } +case $host in +*-linux*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Linux" >&5 +$as_echo "Linux" >&6; } + backend="linux" + ;; +*-darwin*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Darwin/Mac OS X" >&5 +$as_echo "Darwin/Mac OS X" >&6; } + backend="darwin" + ;; +*-openbsd*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: OpenBSD" >&5 +$as_echo "OpenBSD" >&6; } + backend="openbsd" + ;; +*-netbsd*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: NetBSD (using OpenBSD backend)" >&5 +$as_echo "NetBSD (using OpenBSD backend)" >&6; } + backend="openbsd" + ;; +*-mingw*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Windows" >&5 +$as_echo "Windows" >&6; } + backend="windows" + ;; +*-cygwin*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Cygwin (using Windows backend)" >&5 +$as_echo "Cygwin (using Windows backend)" >&6; } + backend="windows" + threads="posix" + ;; +*) + as_fn_error $? "unsupported operating system" "$LINENO" 5 +esac +case $backend in +linux) + +$as_echo "#define OS_LINUX 1" >>confdefs.h + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5 +$as_echo_n "checking for clock_gettime in -lrt... " >&6; } +if ${ac_cv_lib_rt_clock_gettime+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lrt $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char clock_gettime (); +int +main () +{ +return clock_gettime (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_rt_clock_gettime=yes +else + ac_cv_lib_rt_clock_gettime=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5 +$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; } +if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then : + PC_LIBS_PRIVATE="-lrt" +fi + + threads="posix" + THREAD_CFLAGS="-pthread" + PC_LIBS_PRIVATE="${PC_LIBS_PRIVATE} -pthread" + for ac_header in poll.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "poll.h" "ac_cv_header_poll_h" "$ac_includes_default" +if test "x$ac_cv_header_poll_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_POLL_H 1 +_ACEOF + +fi + +done + + +$as_echo "#define POLL_NFDS_TYPE nfds_t" >>confdefs.h + + ;; +darwin) + +$as_echo "#define OS_DARWIN 1" >>confdefs.h + + + threads="posix" + PC_LIBS_PRIVATE="-lobjc -Wl,-framework,IOKit -Wl,-framework,CoreFoundation" + LTLDFLAGS="${LTLDFLAGS} -Wl,-prebind" + for ac_header in poll.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "poll.h" "ac_cv_header_poll_h" "$ac_includes_default" +if test "x$ac_cv_header_poll_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_POLL_H 1 +_ACEOF + +fi + +done + + ac_fn_c_check_type "$LINENO" "nfds_t" "ac_cv_type_nfds_t" "#include +" +if test "x$ac_cv_type_nfds_t" = xyes; then : + +$as_echo "#define POLL_NFDS_TYPE nfds_t" >>confdefs.h + +else + +$as_echo "#define POLL_NFDS_TYPE unsigned int" >>confdefs.h + +fi + + ;; +openbsd) + +$as_echo "#define OS_OPENBSD 1" >>confdefs.h + + + threads="posix" + THREAD_CFLAGS="-pthread" + PC_LIBS_PRIVATE="-pthread" + for ac_header in poll.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "poll.h" "ac_cv_header_poll_h" "$ac_includes_default" +if test "x$ac_cv_header_poll_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_POLL_H 1 +_ACEOF + +fi + +done + + +$as_echo "#define POLL_NFDS_TYPE nfds_t" >>confdefs.h + + ;; +windows) + +$as_echo "#define OS_WINDOWS 1" >>confdefs.h + + + PC_LIBS_PRIVATE="" + LTLDFLAGS="${LTLDFLAGS} -avoid-version -Wl,--add-stdcall-alias" + +$as_echo "#define POLL_NFDS_TYPE unsigned int" >>confdefs.h + + ;; +esac + + +LIBS="${LIBS} ${PC_LIBS_PRIVATE}" + + if test "x$backend" = xlinux; then + OS_LINUX_TRUE= + OS_LINUX_FALSE='#' +else + OS_LINUX_TRUE='#' + OS_LINUX_FALSE= +fi + + if test "x$backend" = xdarwin; then + OS_DARWIN_TRUE= + OS_DARWIN_FALSE='#' +else + OS_DARWIN_TRUE='#' + OS_DARWIN_FALSE= +fi + + if test "x$backend" = xopenbsd; then + OS_OPENBSD_TRUE= + OS_OPENBSD_FALSE='#' +else + OS_OPENBSD_TRUE='#' + OS_OPENBSD_FALSE= +fi + + if test "x$backend" = xwindows; then + OS_WINDOWS_TRUE= + OS_WINDOWS_FALSE='#' +else + OS_WINDOWS_TRUE='#' + OS_WINDOWS_FALSE= +fi + + if test "x$threads" = xposix; then + THREADS_POSIX_TRUE= + THREADS_POSIX_FALSE='#' +else + THREADS_POSIX_TRUE='#' + THREADS_POSIX_FALSE= +fi + +if test "$threads" = posix; then + +$as_echo "#define THREADS_POSIX 1" >>confdefs.h + +fi + +# timerfd +ac_fn_c_check_header_mongrel "$LINENO" "sys/timerfd.h" "ac_cv_header_sys_timerfd_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_timerfd_h" = xyes; then : + timerfd_h=1 +else + timerfd_h=0 +fi + + +# Check whether --enable-timerfd was given. +if test "${enable_timerfd+set}" = set; then : + enableval=$enable_timerfd; use_timerfd=$enableval +else + use_timerfd='auto' +fi + + +if test "x$use_timerfd" = "xyes" -a "x$timerfd_h" = "x0"; then + as_fn_error $? "timerfd header not available; glibc 2.9+ required" "$LINENO" 5 +fi + +ac_fn_c_check_decl "$LINENO" "TFD_NONBLOCK" "ac_cv_have_decl_TFD_NONBLOCK" "#include +" +if test "x$ac_cv_have_decl_TFD_NONBLOCK" = xyes; then : + tfd_hdr_ok=yes +else + tfd_hdr_ok=no +fi + +if test "x$use_timerfd" = "xyes" -a "x$tfd_hdr_ok" = "xno"; then + as_fn_error $? "timerfd header not usable; glibc 2.9+ required" "$LINENO" 5 +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use timerfd for timing" >&5 +$as_echo_n "checking whether to use timerfd for timing... " >&6; } +if test "x$use_timerfd" = "xno"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (disabled by user)" >&5 +$as_echo "no (disabled by user)" >&6; } +else + if test "x$timerfd_h" = "x1" -a "x$tfd_hdr_ok" = "xyes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define USBI_TIMERFD_AVAILABLE 1" >>confdefs.h + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (header not available)" >&5 +$as_echo "no (header not available)" >&6; } + fi +fi + +ac_fn_c_check_type "$LINENO" "struct timespec" "ac_cv_type_struct_timespec" "$ac_includes_default" +if test "x$ac_cv_type_struct_timespec" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_TIMESPEC 1 +_ACEOF + + +fi + + +# Message logging +# Check whether --enable-log was given. +if test "${enable_log+set}" = set; then : + enableval=$enable_log; log_enabled=$enableval +else + log_enabled='yes' +fi + +if test "x$log_enabled" != "xno"; then + +$as_echo "#define ENABLE_LOGGING 1" >>confdefs.h + +fi + +# Check whether --enable-debug-log was given. +if test "${enable_debug_log+set}" = set; then : + enableval=$enable_debug_log; debug_log_enabled=$enableval +else + debug_log_enabled='no' +fi + +if test "x$debug_log_enabled" != "xno"; then + +$as_echo "#define ENABLE_DEBUG_LOGGING 1" >>confdefs.h + +fi + +# Examples build +# Check whether --enable-examples-build was given. +if test "${enable_examples_build+set}" = set; then : + enableval=$enable_examples_build; build_examples=$enableval +else + build_examples='no' +fi + + if test "x$build_examples" != "xno"; then + BUILD_EXAMPLES_TRUE= + BUILD_EXAMPLES_FALSE='#' +else + BUILD_EXAMPLES_TRUE='#' + BUILD_EXAMPLES_FALSE= +fi + + +# check for -fvisibility=hidden compiler support (GCC >= 3.4) +saved_cflags="$CFLAGS" +# -Werror required for cygwin +CFLAGS="$CFLAGS -Werror -fvisibility=hidden" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + VISIBILITY_CFLAGS="-fvisibility=hidden" + +$as_echo "#define DEFAULT_VISIBILITY __attribute__((visibility(\"default\")))" >>confdefs.h + +else + VISIBILITY_CFLAGS="" + +$as_echo "#define DEFAULT_VISIBILITY /**/" >>confdefs.h + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CFLAGS="$saved_cflags" + +# check for -Wno-pointer-sign compiler support (GCC >= 4) +saved_cflags="$CFLAGS" +CFLAGS="$CFLAGS -Wno-pointer-sign" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + nopointersign_cflags="-Wno-pointer-sign" +else + nopointersign_cflags="" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CFLAGS="$saved_cflags" + +# sigaction not available on MinGW +ac_fn_c_check_func "$LINENO" "sigaction" "ac_cv_func_sigaction" +if test "x$ac_cv_func_sigaction" = xyes; then : + have_sigaction=yes +else + have_sigaction=no +fi + + if test "x$have_sigaction" = "xyes"; then + HAVE_SIGACTION_TRUE= + HAVE_SIGACTION_FALSE='#' +else + HAVE_SIGACTION_TRUE='#' + HAVE_SIGACTION_FALSE= +fi + + +# headers not available on all platforms but required on others +for ac_header in sys/time.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_time_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_TIME_H 1 +_ACEOF + +fi + +done + +for ac_func in gettimeofday +do : + ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday" +if test "x$ac_cv_func_gettimeofday" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETTIMEOFDAY 1 +_ACEOF + +fi +done + + +AM_CFLAGS="-std=gnu99 -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration $nopointersign_cflags -Wshadow" + + + + + +ac_config_files="$ac_config_files libusb-1.0.pc" + +ac_config_files="$ac_config_files Makefile" + +ac_config_files="$ac_config_files libusb/Makefile" + +ac_config_files="$ac_config_files examples/Makefile" + +ac_config_files="$ac_config_files doc/Makefile" + +ac_config_files="$ac_config_files doc/doxygen.cfg" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${OS_LINUX_TRUE}" && test -z "${OS_LINUX_FALSE}"; then + as_fn_error $? "conditional \"OS_LINUX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${OS_DARWIN_TRUE}" && test -z "${OS_DARWIN_FALSE}"; then + as_fn_error $? "conditional \"OS_DARWIN\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${OS_OPENBSD_TRUE}" && test -z "${OS_OPENBSD_FALSE}"; then + as_fn_error $? "conditional \"OS_OPENBSD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${OS_WINDOWS_TRUE}" && test -z "${OS_WINDOWS_FALSE}"; then + as_fn_error $? "conditional \"OS_WINDOWS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${THREADS_POSIX_TRUE}" && test -z "${THREADS_POSIX_FALSE}"; then + as_fn_error $? "conditional \"THREADS_POSIX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUILD_EXAMPLES_TRUE}" && test -z "${BUILD_EXAMPLES_FALSE}"; then + as_fn_error $? "conditional \"BUILD_EXAMPLES\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_SIGACTION_TRUE}" && test -z "${HAVE_SIGACTION_FALSE}"; then + as_fn_error $? "conditional \"HAVE_SIGACTION\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by libusb $as_me 1.0.9, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to . +libusb home page: ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +libusb config.status 1.0.9 +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' +LD_RC='`$ECHO "$LD_RC" | $SED "$delay_single_quote_subst"`' +reload_flag_RC='`$ECHO "$reload_flag_RC" | $SED "$delay_single_quote_subst"`' +reload_cmds_RC='`$ECHO "$reload_cmds_RC" | $SED "$delay_single_quote_subst"`' +old_archive_cmds_RC='`$ECHO "$old_archive_cmds_RC" | $SED "$delay_single_quote_subst"`' +compiler_RC='`$ECHO "$compiler_RC" | $SED "$delay_single_quote_subst"`' +GCC_RC='`$ECHO "$GCC_RC" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_RC='`$ECHO "$lt_prog_compiler_no_builtin_flag_RC" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl_RC='`$ECHO "$lt_prog_compiler_wl_RC" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic_RC='`$ECHO "$lt_prog_compiler_pic_RC" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static_RC='`$ECHO "$lt_prog_compiler_static_RC" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_RC='`$ECHO "$lt_cv_prog_compiler_c_o_RC" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc_RC='`$ECHO "$archive_cmds_need_lc_RC" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_RC='`$ECHO "$enable_shared_with_static_runtimes_RC" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec_RC='`$ECHO "$export_dynamic_flag_spec_RC" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec_RC='`$ECHO "$whole_archive_flag_spec_RC" | $SED "$delay_single_quote_subst"`' +compiler_needs_object_RC='`$ECHO "$compiler_needs_object_RC" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds_RC='`$ECHO "$old_archive_from_new_cmds_RC" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_RC='`$ECHO "$old_archive_from_expsyms_cmds_RC" | $SED "$delay_single_quote_subst"`' +archive_cmds_RC='`$ECHO "$archive_cmds_RC" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds_RC='`$ECHO "$archive_expsym_cmds_RC" | $SED "$delay_single_quote_subst"`' +module_cmds_RC='`$ECHO "$module_cmds_RC" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds_RC='`$ECHO "$module_expsym_cmds_RC" | $SED "$delay_single_quote_subst"`' +with_gnu_ld_RC='`$ECHO "$with_gnu_ld_RC" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag_RC='`$ECHO "$allow_undefined_flag_RC" | $SED "$delay_single_quote_subst"`' +no_undefined_flag_RC='`$ECHO "$no_undefined_flag_RC" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_RC='`$ECHO "$hardcode_libdir_flag_spec_RC" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld_RC='`$ECHO "$hardcode_libdir_flag_spec_ld_RC" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator_RC='`$ECHO "$hardcode_libdir_separator_RC" | $SED "$delay_single_quote_subst"`' +hardcode_direct_RC='`$ECHO "$hardcode_direct_RC" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute_RC='`$ECHO "$hardcode_direct_absolute_RC" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L_RC='`$ECHO "$hardcode_minus_L_RC" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var_RC='`$ECHO "$hardcode_shlibpath_var_RC" | $SED "$delay_single_quote_subst"`' +hardcode_automatic_RC='`$ECHO "$hardcode_automatic_RC" | $SED "$delay_single_quote_subst"`' +inherit_rpath_RC='`$ECHO "$inherit_rpath_RC" | $SED "$delay_single_quote_subst"`' +link_all_deplibs_RC='`$ECHO "$link_all_deplibs_RC" | $SED "$delay_single_quote_subst"`' +fix_srcfile_path_RC='`$ECHO "$fix_srcfile_path_RC" | $SED "$delay_single_quote_subst"`' +always_export_symbols_RC='`$ECHO "$always_export_symbols_RC" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds_RC='`$ECHO "$export_symbols_cmds_RC" | $SED "$delay_single_quote_subst"`' +exclude_expsyms_RC='`$ECHO "$exclude_expsyms_RC" | $SED "$delay_single_quote_subst"`' +include_expsyms_RC='`$ECHO "$include_expsyms_RC" | $SED "$delay_single_quote_subst"`' +prelink_cmds_RC='`$ECHO "$prelink_cmds_RC" | $SED "$delay_single_quote_subst"`' +file_list_spec_RC='`$ECHO "$file_list_spec_RC" | $SED "$delay_single_quote_subst"`' +hardcode_action_RC='`$ECHO "$hardcode_action_RC" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib \ +LD_RC \ +reload_flag_RC \ +compiler_RC \ +lt_prog_compiler_no_builtin_flag_RC \ +lt_prog_compiler_wl_RC \ +lt_prog_compiler_pic_RC \ +lt_prog_compiler_static_RC \ +lt_cv_prog_compiler_c_o_RC \ +export_dynamic_flag_spec_RC \ +whole_archive_flag_spec_RC \ +compiler_needs_object_RC \ +with_gnu_ld_RC \ +allow_undefined_flag_RC \ +no_undefined_flag_RC \ +hardcode_libdir_flag_spec_RC \ +hardcode_libdir_flag_spec_ld_RC \ +hardcode_libdir_separator_RC \ +fix_srcfile_path_RC \ +exclude_expsyms_RC \ +include_expsyms_RC \ +file_list_spec_RC; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +reload_cmds_RC \ +old_archive_cmds_RC \ +old_archive_from_new_cmds_RC \ +old_archive_from_expsyms_cmds_RC \ +archive_cmds_RC \ +archive_expsym_cmds_RC \ +module_cmds_RC \ +module_expsym_cmds_RC \ +export_symbols_cmds_RC \ +prelink_cmds_RC; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "libusb-1.0.pc") CONFIG_FILES="$CONFIG_FILES libusb-1.0.pc" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "libusb/Makefile") CONFIG_FILES="$CONFIG_FILES libusb/Makefile" ;; + "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "doc/doxygen.cfg") CONFIG_FILES="$CONFIG_FILES doc/doxygen.cfg" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="RC " + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: RC + +# The linker used to build libraries. +LD=$lt_LD_RC + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_RC +reload_cmds=$lt_reload_cmds_RC + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_RC + +# A language specific compiler. +CC=$lt_compiler_RC + +# Is the compiler the GNU compiler? +with_gcc=$GCC_RC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_RC + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_RC + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_RC + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_RC + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_RC + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_RC +archive_expsym_cmds=$lt_archive_expsym_cmds_RC + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_RC +module_expsym_cmds=$lt_module_expsym_cmds_RC + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_RC + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_RC + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_RC + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_RC + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_RC + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_RC + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_RC + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_RC + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_RC + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_RC + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path_RC + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_RC + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_RC + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_RC + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_RC + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_RC + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_RC + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_RC + +# ### END LIBTOOL TAG CONFIG: RC +_LT_EOF + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/configure.ac b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/configure.ac new file mode 100644 index 0000000..f9e648e --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/configure.ac @@ -0,0 +1,222 @@ +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://www.libusb.org/]) + +# 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="1" +lt_revision="0" +lt_age="1" +LTLDFLAGS="-version-info ${lt_current}:${lt_revision}:${lt_age}" + +AM_INIT_AUTOMAKE +AM_MAINTAINER_MODE + +AC_CONFIG_SRCDIR([libusb/core.c]) +AC_CONFIG_MACRO_DIR([m4]) +AM_CONFIG_HEADER([config.h]) +m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) + +AC_PREREQ([2.50]) +AC_PROG_CC +AC_PROG_LIBTOOL +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]) +case $host in +*-linux*) + AC_MSG_RESULT([Linux]) + backend="linux" + ;; +*-darwin*) + AC_MSG_RESULT([Darwin/Mac OS X]) + backend="darwin" + ;; +*-openbsd*) + AC_MSG_RESULT([OpenBSD]) + backend="openbsd" + ;; +*-netbsd*) + AC_MSG_RESULT([NetBSD (using OpenBSD backend)]) + backend="openbsd" + ;; +*-mingw*) + AC_MSG_RESULT([Windows]) + backend="windows" + ;; +*-cygwin*) + AC_MSG_RESULT([Cygwin (using Windows backend)]) + backend="windows" + threads="posix" + ;; +*) + AC_MSG_ERROR([unsupported operating system]) +esac +case $backend in +linux) + AC_DEFINE(OS_LINUX, 1, [Linux backend]) + AC_SUBST(OS_LINUX) + AC_CHECK_LIB(rt, clock_gettime, PC_LIBS_PRIVATE="-lrt") + threads="posix" + THREAD_CFLAGS="-pthread" + PC_LIBS_PRIVATE="${PC_LIBS_PRIVATE} -pthread" + 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) + threads="posix" + PC_LIBS_PRIVATE="-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) + threads="posix" + THREAD_CFLAGS="-pthread" + PC_LIBS_PRIVATE="-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) + PC_LIBS_PRIVATE="" + LTLDFLAGS="${LTLDFLAGS} -avoid-version -Wl,--add-stdcall-alias" + AC_DEFINE([POLL_NFDS_TYPE],[unsigned int],[type of second poll() argument]) + ;; +esac +AC_SUBST(THREAD_CFLAGS) +AC_SUBST(PC_LIBS_PRIVATE) +LIBS="${LIBS} ${PC_LIBS_PRIVATE}" + +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_WINDOWS, test "x$backend" = xwindows) +AM_CONDITIONAL(THREADS_POSIX, test "x$threads" = xposix) +if test "$threads" = posix; 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_DECL([TFD_NONBLOCK], [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_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], + [enable debug logging (default n)])], + [debug_log_enabled=$enableval], + [debug_log_enabled='no']) +if test "x$debug_log_enabled" != "xno"; then + AC_DEFINE([ENABLE_DEBUG_LOGGING], 1, [Debug message logging]) +fi + +# Examples build +AC_ARG_ENABLE([examples-build], [AS_HELP_STRING([--enable-examples-build], + [build example applications (default n)])], + [build_examples=$enableval], + [build_examples='no']) +AM_CONDITIONAL([BUILD_EXAMPLES], [test "x$build_examples" != "xno"]) + +# 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" + +# sigaction not available on MinGW +AC_CHECK_FUNC([sigaction], [have_sigaction=yes], [have_sigaction=no]) +AM_CONDITIONAL([HAVE_SIGACTION], [test "x$have_sigaction" = "xyes"]) + +# headers not available on all platforms but required on others +AC_CHECK_HEADERS([sys/time.h]) +AC_CHECK_FUNCS(gettimeofday) + +AM_CFLAGS="-std=gnu99 -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration $nopointersign_cflags -Wshadow" + +AC_SUBST(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([doc/Makefile]) +AC_CONFIG_FILES([doc/doxygen.cfg]) +AC_OUTPUT diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/depcomp b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/depcomp new file mode 100755 index 0000000..df8eea7 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/depcomp @@ -0,0 +1,630 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free +# Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u="sed s,\\\\\\\\,/,g" + depmode=msvisualcpp +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> "$depfile" + echo >> "$depfile" + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/Makefile b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/Makefile new file mode 100644 index 0000000..8650821 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/Makefile @@ -0,0 +1,377 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# doc/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +pkgdatadir = $(datadir)/libusb +pkgincludedir = $(includedir)/libusb +pkglibdir = $(libdir)/libusb +pkglibexecdir = $(libexecdir)/libusb +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +subdir = doc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/doxygen.cfg.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/libusb/version.h \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = doxygen.cfg +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run aclocal-1.11 +AMTAR = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run tar +AM_CFLAGS = -std=gnu99 -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration -Wno-pointer-sign -Wshadow +AM_DEFAULT_VERBOSITY = 0 +AR = ar +AUTOCONF = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run autoconf +AUTOHEADER = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run autoheader +AUTOMAKE = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run automake-1.11 +AWK = mawk +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = +LIBS = -lrt -pthread +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLDFLAGS = -version-info 1:0:1 -no-undefined +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OS_DARWIN = +OS_LINUX = +OS_OPENBSD = +OS_WINDOWS = +OTOOL = +OTOOL64 = +PACKAGE = libusb +PACKAGE_BUGREPORT = libusb-devel@lists.sourceforge.net +PACKAGE_NAME = libusb +PACKAGE_STRING = libusb 1.0.9 +PACKAGE_TARNAME = libusb +PACKAGE_URL = http://www.libusb.org/ +PACKAGE_VERSION = 1.0.9 +PATH_SEPARATOR = : +PC_LIBS_PRIVATE = -lrt -pthread +RANLIB = ranlib +RC = +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +STRIP = strip +THREAD_CFLAGS = -pthread +VERSION = 1.0.9 +VISIBILITY_CFLAGS = -fvisibility=hidden +abs_builddir = /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc +abs_srcdir = /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc +abs_top_builddir = /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9 +abs_top_srcdir = /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9 +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +EXTRA_DIST = doxygen.cfg.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: # $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +doxygen.cfg: $(top_builddir)/config.status $(srcdir)/doxygen.cfg.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + + +docs: doxygen.cfg + doxygen $^ + +docs-upload: docs + ln -s html api-1.0 + rsync -av api-1.0/ web.sourceforge.net:htdocs/api-1.0/ + rm -f api-1.0 + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/Makefile.am b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/Makefile.am new file mode 100644 index 0000000..931a7c0 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/Makefile.am @@ -0,0 +1,10 @@ +EXTRA_DIST = doxygen.cfg.in + +docs: doxygen.cfg + doxygen $^ + +docs-upload: docs + ln -s html api-1.0 + rsync -av api-1.0/ web.sourceforge.net:htdocs/api-1.0/ + rm -f api-1.0 + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/Makefile.in b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/Makefile.in new file mode 100644 index 0000000..4c4a39c --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/Makefile.in @@ -0,0 +1,377 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = doc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/doxygen.cfg.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/libusb/version.h \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = doxygen.cfg +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CFLAGS = @AM_CFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLDFLAGS = @LTLDFLAGS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OS_DARWIN = @OS_DARWIN@ +OS_LINUX = @OS_LINUX@ +OS_OPENBSD = @OS_OPENBSD@ +OS_WINDOWS = @OS_WINDOWS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PC_LIBS_PRIVATE = @PC_LIBS_PRIVATE@ +RANLIB = @RANLIB@ +RC = @RC@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +THREAD_CFLAGS = @THREAD_CFLAGS@ +VERSION = @VERSION@ +VISIBILITY_CFLAGS = @VISIBILITY_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = doxygen.cfg.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +doxygen.cfg: $(top_builddir)/config.status $(srcdir)/doxygen.cfg.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + + +docs: doxygen.cfg + doxygen $^ + +docs-upload: docs + ln -s html api-1.0 + rsync -av api-1.0/ web.sourceforge.net:htdocs/api-1.0/ + rm -f api-1.0 + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/doxygen.cfg b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/doxygen.cfg new file mode 100644 index 0000000..88f8b16 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/doxygen.cfg @@ -0,0 +1,1294 @@ +# Doxyfile 1.5.3 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a 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. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = libusb + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# 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 cause performance problems for the file system. + +CREATE_SUBDIRS = 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. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) 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. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) 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. + +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" "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. + +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. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then 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. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then 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. + +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 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. + +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 +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +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 comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +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 behaviour. +# 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 behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +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. + +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. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# 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 = + +# 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. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# 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); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# 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. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) 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. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# 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 and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +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. + +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 (the default) only methods in the interface are included. + +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. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) 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. + +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 (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +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 (the default) these declarations will be included in the +# documentation. + +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 (the default) these blocks will be appended to the +# function's detailed documentation block. + +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 (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +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. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) 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. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = 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 default), 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. + +SORT_BY_SCOPE_NAME = 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. + +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. + +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. + +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. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of 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 initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +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. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# 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 , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED 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. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR 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. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +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) + +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 stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be 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. + +INPUT = ../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, which is also the default +# input encoding. 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. + +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 pattern (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 *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# 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. + +EXCLUDE = ../libusb/libusbi.h + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +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 + +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. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are 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. + +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 +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# 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 also +# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH +# then you must also enable this option. If you don't then doxygen will produce +# a warning and turn it on anyway + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# 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 documentstion. + +REFERENCES_LINK_SOURCE = 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. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) 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. + +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. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +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 one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +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. If left blank `html' will be used as the default path. + +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). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +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 the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# 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. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, 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. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, 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. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, 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). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, 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. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag 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 (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# 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. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = YES + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = API_EXPORTED= LIBUSB_CALL= DEFAULT_VISIBILITY= + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the number +# of direct children of the root node in a graph is already larger than +# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/doxygen.cfg.in b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/doxygen.cfg.in new file mode 100644 index 0000000..128e1de --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/doc/doxygen.cfg.in @@ -0,0 +1,1294 @@ +# Doxyfile 1.5.3 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a 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. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = libusb + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# 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 cause performance problems for the file system. + +CREATE_SUBDIRS = 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. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) 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. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) 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. + +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" "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. + +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. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then 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. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then 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. + +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 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. + +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 +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +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 comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +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 behaviour. +# 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 behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +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. + +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. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# 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 = + +# 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. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# 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); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# 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. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) 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. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# 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 and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +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. + +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 (the default) only methods in the interface are included. + +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. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) 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. + +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 (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +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 (the default) these declarations will be included in the +# documentation. + +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 (the default) these blocks will be appended to the +# function's detailed documentation block. + +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 (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +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. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) 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. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = 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 default), 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. + +SORT_BY_SCOPE_NAME = 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. + +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. + +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. + +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. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of 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 initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +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. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# 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 , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED 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. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR 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. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +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) + +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 stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be 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. + +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, which is also the default +# input encoding. 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. + +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 pattern (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 *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# 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. + +EXCLUDE = @top_srcdir@/libusb/libusbi.h + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +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 + +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. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are 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. + +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 +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# 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 also +# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH +# then you must also enable this option. If you don't then doxygen will produce +# a warning and turn it on anyway + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# 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 documentstion. + +REFERENCES_LINK_SOURCE = 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. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) 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. + +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. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +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 one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +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. If left blank `html' will be used as the default path. + +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). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +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 the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# 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. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, 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. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, 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. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, 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). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, 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. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag 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 (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# 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. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = YES + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = API_EXPORTED= LIBUSB_CALL= DEFAULT_VISIBILITY= + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the number +# of direct children of the root node in a graph is already larger than +# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/.deps/dpfp.Po b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/.deps/dpfp.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/.deps/dpfp.Po @@ -0,0 +1 @@ +# dummy diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/.deps/dpfp_threaded-dpfp_threaded.Po b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/.deps/dpfp_threaded-dpfp_threaded.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/.deps/dpfp_threaded-dpfp_threaded.Po @@ -0,0 +1 @@ +# dummy diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/.deps/listdevs.Po b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/.deps/listdevs.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/.deps/listdevs.Po @@ -0,0 +1 @@ +# dummy diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/Makefile b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/Makefile new file mode 100644 index 0000000..4b935df --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/Makefile @@ -0,0 +1,542 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# examples/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + +pkgdatadir = $(datadir)/libusb +pkgincludedir = $(includedir)/libusb +pkglibdir = $(libdir)/libusb +pkglibexecdir = $(libexecdir)/libusb +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +noinst_PROGRAMS = listdevs$(EXEEXT) $(am__EXEEXT_1) $(am__EXEEXT_2) +am__append_1 = dpfp +am__append_2 = dpfp_threaded +subdir = examples +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/libusb/version.h \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__EXEEXT_1 = dpfp$(EXEEXT) +am__EXEEXT_2 = dpfp_threaded$(EXEEXT) +PROGRAMS = $(noinst_PROGRAMS) +am__dpfp_SOURCES_DIST = dpfp.c +am_dpfp_OBJECTS = dpfp.$(OBJEXT) +dpfp_OBJECTS = $(am_dpfp_OBJECTS) +dpfp_DEPENDENCIES = ../libusb/libusb-1.0.la +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +am__dpfp_threaded_SOURCES_DIST = dpfp_threaded.c +am_dpfp_threaded_OBJECTS = dpfp_threaded-dpfp_threaded.$(OBJEXT) +dpfp_threaded_OBJECTS = $(am_dpfp_threaded_OBJECTS) +dpfp_threaded_DEPENDENCIES = ../libusb/libusb-1.0.la +dpfp_threaded_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(dpfp_threaded_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_listdevs_OBJECTS = listdevs.$(OBJEXT) +listdevs_OBJECTS = $(am_listdevs_OBJECTS) +listdevs_DEPENDENCIES = ../libusb/libusb-1.0.la +DEFAULT_INCLUDES = -I. -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(dpfp_SOURCES) $(dpfp_threaded_SOURCES) $(listdevs_SOURCES) +DIST_SOURCES = $(am__dpfp_SOURCES_DIST) \ + $(am__dpfp_threaded_SOURCES_DIST) $(listdevs_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run aclocal-1.11 +AMTAR = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run tar +AM_CFLAGS = -std=gnu99 -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration -Wno-pointer-sign -Wshadow +AM_DEFAULT_VERBOSITY = 0 +AR = ar +AUTOCONF = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run autoconf +AUTOHEADER = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run autoheader +AUTOMAKE = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run automake-1.11 +AWK = mawk +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = +LIBS = -lrt -pthread +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLDFLAGS = -version-info 1:0:1 -no-undefined +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OS_DARWIN = +OS_LINUX = +OS_OPENBSD = +OS_WINDOWS = +OTOOL = +OTOOL64 = +PACKAGE = libusb +PACKAGE_BUGREPORT = libusb-devel@lists.sourceforge.net +PACKAGE_NAME = libusb +PACKAGE_STRING = libusb 1.0.9 +PACKAGE_TARNAME = libusb +PACKAGE_URL = http://www.libusb.org/ +PACKAGE_VERSION = 1.0.9 +PATH_SEPARATOR = : +PC_LIBS_PRIVATE = -lrt -pthread +RANLIB = ranlib +RC = +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +STRIP = strip +THREAD_CFLAGS = -pthread +VERSION = 1.0.9 +VISIBILITY_CFLAGS = -fvisibility=hidden +abs_builddir = /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples +abs_srcdir = /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples +abs_top_builddir = /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9 +abs_top_srcdir = /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9 +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +INCLUDES = -I$(top_srcdir)/libusb +listdevs_SOURCES = listdevs.c +listdevs_LDADD = ../libusb/libusb-1.0.la +dpfp_SOURCES = dpfp.c +dpfp_LDADD = ../libusb/libusb-1.0.la +dpfp_threaded_SOURCES = dpfp_threaded.c +dpfp_threaded_CFLAGS = $(THREAD_CFLAGS) $(AM_CFLAGS) +dpfp_threaded_LDADD = ../libusb/libusb-1.0.la +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu examples/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: # $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +dpfp$(EXEEXT): $(dpfp_OBJECTS) $(dpfp_DEPENDENCIES) + @rm -f dpfp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(dpfp_OBJECTS) $(dpfp_LDADD) $(LIBS) +dpfp_threaded$(EXEEXT): $(dpfp_threaded_OBJECTS) $(dpfp_threaded_DEPENDENCIES) + @rm -f dpfp_threaded$(EXEEXT) + $(AM_V_CCLD)$(dpfp_threaded_LINK) $(dpfp_threaded_OBJECTS) $(dpfp_threaded_LDADD) $(LIBS) +listdevs$(EXEEXT): $(listdevs_OBJECTS) $(listdevs_DEPENDENCIES) + @rm -f listdevs$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(listdevs_OBJECTS) $(listdevs_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/dpfp.Po +include ./$(DEPDIR)/dpfp_threaded-dpfp_threaded.Po +include ./$(DEPDIR)/listdevs.Po + +.c.o: + $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# $(AM_V_CC) \ +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# $(AM_V_CC) \ +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# $(AM_V_CC) \ +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +dpfp_threaded-dpfp_threaded.o: dpfp_threaded.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dpfp_threaded_CFLAGS) $(CFLAGS) -MT dpfp_threaded-dpfp_threaded.o -MD -MP -MF $(DEPDIR)/dpfp_threaded-dpfp_threaded.Tpo -c -o dpfp_threaded-dpfp_threaded.o `test -f 'dpfp_threaded.c' || echo '$(srcdir)/'`dpfp_threaded.c + $(AM_V_at)$(am__mv) $(DEPDIR)/dpfp_threaded-dpfp_threaded.Tpo $(DEPDIR)/dpfp_threaded-dpfp_threaded.Po +# $(AM_V_CC) \ +# source='dpfp_threaded.c' object='dpfp_threaded-dpfp_threaded.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dpfp_threaded_CFLAGS) $(CFLAGS) -c -o dpfp_threaded-dpfp_threaded.o `test -f 'dpfp_threaded.c' || echo '$(srcdir)/'`dpfp_threaded.c + +dpfp_threaded-dpfp_threaded.obj: dpfp_threaded.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dpfp_threaded_CFLAGS) $(CFLAGS) -MT dpfp_threaded-dpfp_threaded.obj -MD -MP -MF $(DEPDIR)/dpfp_threaded-dpfp_threaded.Tpo -c -o dpfp_threaded-dpfp_threaded.obj `if test -f 'dpfp_threaded.c'; then $(CYGPATH_W) 'dpfp_threaded.c'; else $(CYGPATH_W) '$(srcdir)/dpfp_threaded.c'; fi` + $(AM_V_at)$(am__mv) $(DEPDIR)/dpfp_threaded-dpfp_threaded.Tpo $(DEPDIR)/dpfp_threaded-dpfp_threaded.Po +# $(AM_V_CC) \ +# source='dpfp_threaded.c' object='dpfp_threaded-dpfp_threaded.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dpfp_threaded_CFLAGS) $(CFLAGS) -c -o dpfp_threaded-dpfp_threaded.obj `if test -f 'dpfp_threaded.c'; then $(CYGPATH_W) 'dpfp_threaded.c'; else $(CYGPATH_W) '$(srcdir)/dpfp_threaded.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstPROGRAMS ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/Makefile.am b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/Makefile.am new file mode 100644 index 0000000..c7630d2 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/Makefile.am @@ -0,0 +1,21 @@ +INCLUDES = -I$(top_srcdir)/libusb +noinst_PROGRAMS = listdevs + +listdevs_SOURCES = listdevs.c +listdevs_LDADD = ../libusb/libusb-1.0.la + +if HAVE_SIGACTION +dpfp_SOURCES = dpfp.c +dpfp_LDADD = ../libusb/libusb-1.0.la +noinst_PROGRAMS += dpfp +endif + +if THREADS_POSIX +if HAVE_SIGACTION +dpfp_threaded_SOURCES = dpfp_threaded.c +dpfp_threaded_CFLAGS = $(THREAD_CFLAGS) $(AM_CFLAGS) +dpfp_threaded_LDADD = ../libusb/libusb-1.0.la +noinst_PROGRAMS += dpfp_threaded +endif +endif + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/Makefile.in b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/Makefile.in new file mode 100644 index 0000000..b9bf469 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/Makefile.in @@ -0,0 +1,542 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +noinst_PROGRAMS = listdevs$(EXEEXT) $(am__EXEEXT_1) $(am__EXEEXT_2) +@HAVE_SIGACTION_TRUE@am__append_1 = dpfp +@HAVE_SIGACTION_TRUE@@THREADS_POSIX_TRUE@am__append_2 = dpfp_threaded +subdir = examples +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/libusb/version.h \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +@HAVE_SIGACTION_TRUE@am__EXEEXT_1 = dpfp$(EXEEXT) +@HAVE_SIGACTION_TRUE@@THREADS_POSIX_TRUE@am__EXEEXT_2 = dpfp_threaded$(EXEEXT) +PROGRAMS = $(noinst_PROGRAMS) +am__dpfp_SOURCES_DIST = dpfp.c +@HAVE_SIGACTION_TRUE@am_dpfp_OBJECTS = dpfp.$(OBJEXT) +dpfp_OBJECTS = $(am_dpfp_OBJECTS) +@HAVE_SIGACTION_TRUE@dpfp_DEPENDENCIES = ../libusb/libusb-1.0.la +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +am__dpfp_threaded_SOURCES_DIST = dpfp_threaded.c +@HAVE_SIGACTION_TRUE@@THREADS_POSIX_TRUE@am_dpfp_threaded_OBJECTS = dpfp_threaded-dpfp_threaded.$(OBJEXT) +dpfp_threaded_OBJECTS = $(am_dpfp_threaded_OBJECTS) +@HAVE_SIGACTION_TRUE@@THREADS_POSIX_TRUE@dpfp_threaded_DEPENDENCIES = ../libusb/libusb-1.0.la +dpfp_threaded_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(dpfp_threaded_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_listdevs_OBJECTS = listdevs.$(OBJEXT) +listdevs_OBJECTS = $(am_listdevs_OBJECTS) +listdevs_DEPENDENCIES = ../libusb/libusb-1.0.la +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(dpfp_SOURCES) $(dpfp_threaded_SOURCES) $(listdevs_SOURCES) +DIST_SOURCES = $(am__dpfp_SOURCES_DIST) \ + $(am__dpfp_threaded_SOURCES_DIST) $(listdevs_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CFLAGS = @AM_CFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLDFLAGS = @LTLDFLAGS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OS_DARWIN = @OS_DARWIN@ +OS_LINUX = @OS_LINUX@ +OS_OPENBSD = @OS_OPENBSD@ +OS_WINDOWS = @OS_WINDOWS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PC_LIBS_PRIVATE = @PC_LIBS_PRIVATE@ +RANLIB = @RANLIB@ +RC = @RC@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +THREAD_CFLAGS = @THREAD_CFLAGS@ +VERSION = @VERSION@ +VISIBILITY_CFLAGS = @VISIBILITY_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +INCLUDES = -I$(top_srcdir)/libusb +listdevs_SOURCES = listdevs.c +listdevs_LDADD = ../libusb/libusb-1.0.la +@HAVE_SIGACTION_TRUE@dpfp_SOURCES = dpfp.c +@HAVE_SIGACTION_TRUE@dpfp_LDADD = ../libusb/libusb-1.0.la +@HAVE_SIGACTION_TRUE@@THREADS_POSIX_TRUE@dpfp_threaded_SOURCES = dpfp_threaded.c +@HAVE_SIGACTION_TRUE@@THREADS_POSIX_TRUE@dpfp_threaded_CFLAGS = $(THREAD_CFLAGS) $(AM_CFLAGS) +@HAVE_SIGACTION_TRUE@@THREADS_POSIX_TRUE@dpfp_threaded_LDADD = ../libusb/libusb-1.0.la +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu examples/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +dpfp$(EXEEXT): $(dpfp_OBJECTS) $(dpfp_DEPENDENCIES) + @rm -f dpfp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(dpfp_OBJECTS) $(dpfp_LDADD) $(LIBS) +dpfp_threaded$(EXEEXT): $(dpfp_threaded_OBJECTS) $(dpfp_threaded_DEPENDENCIES) + @rm -f dpfp_threaded$(EXEEXT) + $(AM_V_CCLD)$(dpfp_threaded_LINK) $(dpfp_threaded_OBJECTS) $(dpfp_threaded_LDADD) $(LIBS) +listdevs$(EXEEXT): $(listdevs_OBJECTS) $(listdevs_DEPENDENCIES) + @rm -f listdevs$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(listdevs_OBJECTS) $(listdevs_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dpfp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dpfp_threaded-dpfp_threaded.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listdevs.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +dpfp_threaded-dpfp_threaded.o: dpfp_threaded.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dpfp_threaded_CFLAGS) $(CFLAGS) -MT dpfp_threaded-dpfp_threaded.o -MD -MP -MF $(DEPDIR)/dpfp_threaded-dpfp_threaded.Tpo -c -o dpfp_threaded-dpfp_threaded.o `test -f 'dpfp_threaded.c' || echo '$(srcdir)/'`dpfp_threaded.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dpfp_threaded-dpfp_threaded.Tpo $(DEPDIR)/dpfp_threaded-dpfp_threaded.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dpfp_threaded.c' object='dpfp_threaded-dpfp_threaded.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dpfp_threaded_CFLAGS) $(CFLAGS) -c -o dpfp_threaded-dpfp_threaded.o `test -f 'dpfp_threaded.c' || echo '$(srcdir)/'`dpfp_threaded.c + +dpfp_threaded-dpfp_threaded.obj: dpfp_threaded.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dpfp_threaded_CFLAGS) $(CFLAGS) -MT dpfp_threaded-dpfp_threaded.obj -MD -MP -MF $(DEPDIR)/dpfp_threaded-dpfp_threaded.Tpo -c -o dpfp_threaded-dpfp_threaded.obj `if test -f 'dpfp_threaded.c'; then $(CYGPATH_W) 'dpfp_threaded.c'; else $(CYGPATH_W) '$(srcdir)/dpfp_threaded.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dpfp_threaded-dpfp_threaded.Tpo $(DEPDIR)/dpfp_threaded-dpfp_threaded.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dpfp_threaded.c' object='dpfp_threaded-dpfp_threaded.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dpfp_threaded_CFLAGS) $(CFLAGS) -c -o dpfp_threaded-dpfp_threaded.obj `if test -f 'dpfp_threaded.c'; then $(CYGPATH_W) 'dpfp_threaded.c'; else $(CYGPATH_W) '$(srcdir)/dpfp_threaded.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstPROGRAMS ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/dpfp.c b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/dpfp.c new file mode 100644 index 0000000..ecd5a92 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/dpfp.c @@ -0,0 +1,507 @@ +/* + * libusb example program to manipulate U.are.U 4000B fingerprint scanner. + * Copyright (C) 2007 Daniel Drake + * + * Basic image capture program only, does not consider the powerup quirks or + * the fact that image encryption may be enabled. Not expected to work + * flawlessly all of the time. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include + +#include + +#define EP_INTR (1 | LIBUSB_ENDPOINT_IN) +#define EP_DATA (2 | LIBUSB_ENDPOINT_IN) +#define CTRL_IN (LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_IN) +#define CTRL_OUT (LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_OUT) +#define USB_RQ 0x04 +#define INTR_LENGTH 64 + +enum { + MODE_INIT = 0x00, + MODE_AWAIT_FINGER_ON = 0x10, + MODE_AWAIT_FINGER_OFF = 0x12, + MODE_CAPTURE = 0x20, + MODE_SHUT_UP = 0x30, + MODE_READY = 0x80, +}; + +static int next_state(void); + +enum { + STATE_AWAIT_MODE_CHANGE_AWAIT_FINGER_ON = 1, + STATE_AWAIT_IRQ_FINGER_DETECTED, + STATE_AWAIT_MODE_CHANGE_CAPTURE, + STATE_AWAIT_IMAGE, + STATE_AWAIT_MODE_CHANGE_AWAIT_FINGER_OFF, + STATE_AWAIT_IRQ_FINGER_REMOVED, +}; + +static int state = 0; +static struct libusb_device_handle *devh = NULL; +static unsigned char imgbuf[0x1b340]; +static unsigned char irqbuf[INTR_LENGTH]; +static struct libusb_transfer *img_transfer = NULL; +static struct libusb_transfer *irq_transfer = NULL; +static int img_idx = 0; +static int do_exit = 0; + +static int find_dpfp_device(void) +{ + devh = libusb_open_device_with_vid_pid(NULL, 0x05ba, 0x000a); + return devh ? 0 : -EIO; +} + +static int print_f0_data(void) +{ + unsigned char data[0x10]; + int r; + unsigned int i; + + r = libusb_control_transfer(devh, CTRL_IN, USB_RQ, 0xf0, 0, data, + sizeof(data), 0); + if (r < 0) { + fprintf(stderr, "F0 error %d\n", r); + return r; + } + if ((unsigned int) r < sizeof(data)) { + fprintf(stderr, "short read (%d)\n", r); + return -1; + } + + printf("F0 data:"); + for (i = 0; i < sizeof(data); i++) + printf("%02x ", data[i]); + printf("\n"); + return 0; +} + +static int get_hwstat(unsigned char *status) +{ + int r; + + r = libusb_control_transfer(devh, CTRL_IN, USB_RQ, 0x07, 0, status, 1, 0); + if (r < 0) { + fprintf(stderr, "read hwstat error %d\n", r); + return r; + } + if ((unsigned int) r < 1) { + fprintf(stderr, "short read (%d)\n", r); + return -1; + } + + printf("hwstat reads %02x\n", *status); + return 0; +} + +static int set_hwstat(unsigned char data) +{ + int r; + + printf("set hwstat to %02x\n", data); + r = libusb_control_transfer(devh, CTRL_OUT, USB_RQ, 0x07, 0, &data, 1, 0); + if (r < 0) { + fprintf(stderr, "set hwstat error %d\n", r); + return r; + } + if ((unsigned int) r < 1) { + fprintf(stderr, "short write (%d)", r); + return -1; + } + + return 0; +} + +static int set_mode(unsigned char data) +{ + int r; + printf("set mode %02x\n", data); + + r = libusb_control_transfer(devh, CTRL_OUT, USB_RQ, 0x4e, 0, &data, 1, 0); + if (r < 0) { + fprintf(stderr, "set mode error %d\n", r); + return r; + } + if ((unsigned int) r < 1) { + fprintf(stderr, "short write (%d)", r); + return -1; + } + + return 0; +} + +static void LIBUSB_CALL cb_mode_changed(struct libusb_transfer *transfer) +{ + if (transfer->status != LIBUSB_TRANSFER_COMPLETED) { + fprintf(stderr, "mode change transfer not completed!\n"); + do_exit = 2; + } + + printf("async cb_mode_changed length=%d actual_length=%d\n", + transfer->length, transfer->actual_length); + if (next_state() < 0) + do_exit = 2; +} + +static int set_mode_async(unsigned char data) +{ + unsigned char *buf = malloc(LIBUSB_CONTROL_SETUP_SIZE + 1); + struct libusb_transfer *transfer; + + if (!buf) + return -ENOMEM; + + transfer = libusb_alloc_transfer(0); + if (!transfer) { + free(buf); + return -ENOMEM; + } + + printf("async set mode %02x\n", data); + libusb_fill_control_setup(buf, CTRL_OUT, USB_RQ, 0x4e, 0, 1); + buf[LIBUSB_CONTROL_SETUP_SIZE] = data; + libusb_fill_control_transfer(transfer, devh, buf, cb_mode_changed, NULL, + 1000); + + transfer->flags = LIBUSB_TRANSFER_SHORT_NOT_OK + | LIBUSB_TRANSFER_FREE_BUFFER | LIBUSB_TRANSFER_FREE_TRANSFER; + return libusb_submit_transfer(transfer); +} + +static int do_sync_intr(unsigned char *data) +{ + int r; + int transferred; + + r = libusb_interrupt_transfer(devh, EP_INTR, data, INTR_LENGTH, + &transferred, 1000); + if (r < 0) { + fprintf(stderr, "intr error %d\n", r); + return r; + } + if (transferred < INTR_LENGTH) { + fprintf(stderr, "short read (%d)\n", r); + return -1; + } + + printf("recv interrupt %04x\n", *((uint16_t *) data)); + return 0; +} + +static int sync_intr(unsigned char type) +{ + int r; + unsigned char data[INTR_LENGTH]; + + while (1) { + r = do_sync_intr(data); + if (r < 0) + return r; + if (data[0] == type) + return 0; + } +} + +static int save_to_file(unsigned char *data) +{ + FILE *fd; + char filename[64]; + + snprintf(filename, sizeof(filename), "finger%d.pgm", img_idx++); + fd = fopen(filename, "w"); + if (!fd) + return -1; + + fputs("P5 384 289 255 ", fd); + (void) fwrite(data + 64, 1, 384*289, fd); + fclose(fd); + printf("saved image to %s\n", filename); + return 0; +} + +static int next_state(void) +{ + int r = 0; + printf("old state: %d\n", state); + switch (state) { + case STATE_AWAIT_IRQ_FINGER_REMOVED: + state = STATE_AWAIT_MODE_CHANGE_AWAIT_FINGER_ON; + r = set_mode_async(MODE_AWAIT_FINGER_ON); + break; + case STATE_AWAIT_MODE_CHANGE_AWAIT_FINGER_ON: + state = STATE_AWAIT_IRQ_FINGER_DETECTED; + break; + case STATE_AWAIT_IRQ_FINGER_DETECTED: + state = STATE_AWAIT_MODE_CHANGE_CAPTURE; + r = set_mode_async(MODE_CAPTURE); + break; + case STATE_AWAIT_MODE_CHANGE_CAPTURE: + state = STATE_AWAIT_IMAGE; + break; + case STATE_AWAIT_IMAGE: + state = STATE_AWAIT_MODE_CHANGE_AWAIT_FINGER_OFF; + r = set_mode_async(MODE_AWAIT_FINGER_OFF); + break; + case STATE_AWAIT_MODE_CHANGE_AWAIT_FINGER_OFF: + state = STATE_AWAIT_IRQ_FINGER_REMOVED; + break; + default: + printf("unrecognised state %d\n", state); + } + if (r < 0) { + fprintf(stderr, "error detected changing state\n"); + return r; + } + + printf("new state: %d\n", state); + return 0; +} + +static void LIBUSB_CALL cb_irq(struct libusb_transfer *transfer) +{ + unsigned char irqtype = transfer->buffer[0]; + + if (transfer->status != LIBUSB_TRANSFER_COMPLETED) { + fprintf(stderr, "irq transfer status %d?\n", transfer->status); + do_exit = 2; + libusb_free_transfer(transfer); + irq_transfer = NULL; + return; + } + + printf("IRQ callback %02x\n", irqtype); + switch (state) { + case STATE_AWAIT_IRQ_FINGER_DETECTED: + if (irqtype == 0x01) { + if (next_state() < 0) { + do_exit = 2; + return; + } + } else { + printf("finger-on-sensor detected in wrong state!\n"); + } + break; + case STATE_AWAIT_IRQ_FINGER_REMOVED: + if (irqtype == 0x02) { + if (next_state() < 0) { + do_exit = 2; + return; + } + } else { + printf("finger-on-sensor detected in wrong state!\n"); + } + break; + } + if (libusb_submit_transfer(irq_transfer) < 0) + do_exit = 2; +} + +static void LIBUSB_CALL cb_img(struct libusb_transfer *transfer) +{ + if (transfer->status != LIBUSB_TRANSFER_COMPLETED) { + fprintf(stderr, "img transfer status %d?\n", transfer->status); + do_exit = 2; + libusb_free_transfer(transfer); + img_transfer = NULL; + return; + } + + printf("Image callback\n"); + save_to_file(imgbuf); + if (next_state() < 0) { + do_exit = 2; + return; + } + if (libusb_submit_transfer(img_transfer) < 0) + do_exit = 2; +} + +static int init_capture(void) +{ + int r; + + r = libusb_submit_transfer(irq_transfer); + if (r < 0) + return r; + + r = libusb_submit_transfer(img_transfer); + if (r < 0) { + libusb_cancel_transfer(irq_transfer); + while (irq_transfer) + if (libusb_handle_events(NULL) < 0) + break; + return r; + } + + /* start state machine */ + state = STATE_AWAIT_IRQ_FINGER_REMOVED; + return next_state(); +} + +static int do_init(void) +{ + unsigned char status; + int r; + + r = get_hwstat(&status); + if (r < 0) + return r; + + if (!(status & 0x80)) { + r = set_hwstat(status | 0x80); + if (r < 0) + return r; + r = get_hwstat(&status); + if (r < 0) + return r; + } + + status &= ~0x80; + r = set_hwstat(status); + if (r < 0) + return r; + + r = get_hwstat(&status); + if (r < 0) + return r; + + r = sync_intr(0x56); + if (r < 0) + return r; + + return 0; +} + +static int alloc_transfers(void) +{ + img_transfer = libusb_alloc_transfer(0); + if (!img_transfer) + return -ENOMEM; + + irq_transfer = libusb_alloc_transfer(0); + if (!irq_transfer) + return -ENOMEM; + + libusb_fill_bulk_transfer(img_transfer, devh, EP_DATA, imgbuf, + sizeof(imgbuf), cb_img, NULL, 0); + libusb_fill_interrupt_transfer(irq_transfer, devh, EP_INTR, irqbuf, + sizeof(irqbuf), cb_irq, NULL, 0); + + return 0; +} + +static void sighandler(int signum) +{ + do_exit = 1; +} + +int main(void) +{ + struct sigaction sigact; + int r = 1; + + r = libusb_init(NULL); + if (r < 0) { + fprintf(stderr, "failed to initialise libusb\n"); + exit(1); + } + + r = find_dpfp_device(); + if (r < 0) { + fprintf(stderr, "Could not find/open device\n"); + goto out; + } + + r = libusb_claim_interface(devh, 0); + if (r < 0) { + fprintf(stderr, "usb_claim_interface error %d\n", r); + goto out; + } + printf("claimed interface\n"); + + r = print_f0_data(); + if (r < 0) + goto out_release; + + r = do_init(); + if (r < 0) + goto out_deinit; + + /* async from here onwards */ + + r = alloc_transfers(); + if (r < 0) + goto out_deinit; + + r = init_capture(); + if (r < 0) + goto out_deinit; + + sigact.sa_handler = sighandler; + sigemptyset(&sigact.sa_mask); + sigact.sa_flags = 0; + sigaction(SIGINT, &sigact, NULL); + sigaction(SIGTERM, &sigact, NULL); + sigaction(SIGQUIT, &sigact, NULL); + + while (!do_exit) { + r = libusb_handle_events(NULL); + if (r < 0) + goto out_deinit; + } + + printf("shutting down...\n"); + + if (irq_transfer) { + r = libusb_cancel_transfer(irq_transfer); + if (r < 0) + goto out_deinit; + } + + if (img_transfer) { + r = libusb_cancel_transfer(img_transfer); + if (r < 0) + goto out_deinit; + } + + while (irq_transfer || img_transfer) + if (libusb_handle_events(NULL) < 0) + break; + + if (do_exit == 1) + r = 0; + else + r = 1; + +out_deinit: + libusb_free_transfer(img_transfer); + libusb_free_transfer(irq_transfer); + set_mode(0); + set_hwstat(0x80); +out_release: + libusb_release_interface(devh, 0); +out: + libusb_close(devh); + libusb_exit(NULL); + return r >= 0 ? r : -r; +} + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/dpfp_threaded.c b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/dpfp_threaded.c new file mode 100644 index 0000000..93de9d7 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/dpfp_threaded.c @@ -0,0 +1,545 @@ +/* + * libusb example program to manipulate U.are.U 4000B fingerprint scanner. + * Copyright (C) 2007 Daniel Drake + * + * Basic image capture program only, does not consider the powerup quirks or + * the fact that image encryption may be enabled. Not expected to work + * flawlessly all of the time. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include +#include + +#include + +#define EP_INTR (1 | LIBUSB_ENDPOINT_IN) +#define EP_DATA (2 | LIBUSB_ENDPOINT_IN) +#define CTRL_IN (LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_IN) +#define CTRL_OUT (LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_OUT) +#define USB_RQ 0x04 +#define INTR_LENGTH 64 + +enum { + MODE_INIT = 0x00, + MODE_AWAIT_FINGER_ON = 0x10, + MODE_AWAIT_FINGER_OFF = 0x12, + MODE_CAPTURE = 0x20, + MODE_SHUT_UP = 0x30, + MODE_READY = 0x80, +}; + +static int next_state(void); + +enum { + STATE_AWAIT_MODE_CHANGE_AWAIT_FINGER_ON = 1, + STATE_AWAIT_IRQ_FINGER_DETECTED, + STATE_AWAIT_MODE_CHANGE_CAPTURE, + STATE_AWAIT_IMAGE, + STATE_AWAIT_MODE_CHANGE_AWAIT_FINGER_OFF, + STATE_AWAIT_IRQ_FINGER_REMOVED, +}; + +static int state = 0; +static struct libusb_device_handle *devh = NULL; +static unsigned char imgbuf[0x1b340]; +static unsigned char irqbuf[INTR_LENGTH]; +static struct libusb_transfer *img_transfer = NULL; +static struct libusb_transfer *irq_transfer = NULL; +static int img_idx = 0; +static int do_exit = 0; + +static pthread_t poll_thread; +static pthread_cond_t exit_cond = PTHREAD_COND_INITIALIZER; +static pthread_mutex_t exit_cond_lock = PTHREAD_MUTEX_INITIALIZER; + +static void request_exit(int code) +{ + do_exit = code; + pthread_cond_signal(&exit_cond); +} + +static void *poll_thread_main(void *arg) +{ + int r = 0; + printf("poll thread running\n"); + + while (!do_exit) { + struct timeval tv = { 1, 0 }; + r = libusb_handle_events_timeout(NULL, &tv); + if (r < 0) { + request_exit(2); + break; + } + } + + printf("poll thread shutting down\n"); + return NULL; +} + +static int find_dpfp_device(void) +{ + devh = libusb_open_device_with_vid_pid(NULL, 0x05ba, 0x000a); + return devh ? 0 : -EIO; +} + +static int print_f0_data(void) +{ + unsigned char data[0x10]; + int r; + unsigned int i; + + r = libusb_control_transfer(devh, CTRL_IN, USB_RQ, 0xf0, 0, data, + sizeof(data), 0); + if (r < 0) { + fprintf(stderr, "F0 error %d\n", r); + return r; + } + if ((unsigned int) r < sizeof(data)) { + fprintf(stderr, "short read (%d)\n", r); + return -1; + } + + printf("F0 data:"); + for (i = 0; i < sizeof(data); i++) + printf("%02x ", data[i]); + printf("\n"); + return 0; +} + +static int get_hwstat(unsigned char *status) +{ + int r; + + r = libusb_control_transfer(devh, CTRL_IN, USB_RQ, 0x07, 0, status, 1, 0); + if (r < 0) { + fprintf(stderr, "read hwstat error %d\n", r); + return r; + } + if ((unsigned int) r < 1) { + fprintf(stderr, "short read (%d)\n", r); + return -1; + } + + printf("hwstat reads %02x\n", *status); + return 0; +} + +static int set_hwstat(unsigned char data) +{ + int r; + + printf("set hwstat to %02x\n", data); + r = libusb_control_transfer(devh, CTRL_OUT, USB_RQ, 0x07, 0, &data, 1, 0); + if (r < 0) { + fprintf(stderr, "set hwstat error %d\n", r); + return r; + } + if ((unsigned int) r < 1) { + fprintf(stderr, "short write (%d)", r); + return -1; + } + + return 0; +} + +static int set_mode(unsigned char data) +{ + int r; + printf("set mode %02x\n", data); + + r = libusb_control_transfer(devh, CTRL_OUT, USB_RQ, 0x4e, 0, &data, 1, 0); + if (r < 0) { + fprintf(stderr, "set mode error %d\n", r); + return r; + } + if ((unsigned int) r < 1) { + fprintf(stderr, "short write (%d)", r); + return -1; + } + + return 0; +} + +static void LIBUSB_CALL cb_mode_changed(struct libusb_transfer *transfer) +{ + if (transfer->status != LIBUSB_TRANSFER_COMPLETED) { + fprintf(stderr, "mode change transfer not completed!\n"); + request_exit(2); + } + + printf("async cb_mode_changed length=%d actual_length=%d\n", + transfer->length, transfer->actual_length); + if (next_state() < 0) + request_exit(2); +} + +static int set_mode_async(unsigned char data) +{ + unsigned char *buf = malloc(LIBUSB_CONTROL_SETUP_SIZE + 1); + struct libusb_transfer *transfer; + + if (!buf) + return -ENOMEM; + + transfer = libusb_alloc_transfer(0); + if (!transfer) { + free(buf); + return -ENOMEM; + } + + printf("async set mode %02x\n", data); + libusb_fill_control_setup(buf, CTRL_OUT, USB_RQ, 0x4e, 0, 1); + buf[LIBUSB_CONTROL_SETUP_SIZE] = data; + libusb_fill_control_transfer(transfer, devh, buf, cb_mode_changed, NULL, + 1000); + + transfer->flags = LIBUSB_TRANSFER_SHORT_NOT_OK + | LIBUSB_TRANSFER_FREE_BUFFER | LIBUSB_TRANSFER_FREE_TRANSFER; + return libusb_submit_transfer(transfer); +} + +static int do_sync_intr(unsigned char *data) +{ + int r; + int transferred; + + r = libusb_interrupt_transfer(devh, EP_INTR, data, INTR_LENGTH, + &transferred, 1000); + if (r < 0) { + fprintf(stderr, "intr error %d\n", r); + return r; + } + if (transferred < INTR_LENGTH) { + fprintf(stderr, "short read (%d)\n", r); + return -1; + } + + printf("recv interrupt %04x\n", *((uint16_t *) data)); + return 0; +} + +static int sync_intr(unsigned char type) +{ + int r; + unsigned char data[INTR_LENGTH]; + + while (1) { + r = do_sync_intr(data); + if (r < 0) + return r; + if (data[0] == type) + return 0; + } +} + +static int save_to_file(unsigned char *data) +{ + FILE *fd; + char filename[64]; + + snprintf(filename, sizeof(filename), "finger%d.pgm", img_idx++); + fd = fopen(filename, "w"); + if (!fd) + return -1; + + fputs("P5 384 289 255 ", fd); + (void) fwrite(data + 64, 1, 384*289, fd); + fclose(fd); + printf("saved image to %s\n", filename); + return 0; +} + +static int next_state(void) +{ + int r = 0; + printf("old state: %d\n", state); + switch (state) { + case STATE_AWAIT_IRQ_FINGER_REMOVED: + state = STATE_AWAIT_MODE_CHANGE_AWAIT_FINGER_ON; + r = set_mode_async(MODE_AWAIT_FINGER_ON); + break; + case STATE_AWAIT_MODE_CHANGE_AWAIT_FINGER_ON: + state = STATE_AWAIT_IRQ_FINGER_DETECTED; + break; + case STATE_AWAIT_IRQ_FINGER_DETECTED: + state = STATE_AWAIT_MODE_CHANGE_CAPTURE; + r = set_mode_async(MODE_CAPTURE); + break; + case STATE_AWAIT_MODE_CHANGE_CAPTURE: + state = STATE_AWAIT_IMAGE; + break; + case STATE_AWAIT_IMAGE: + state = STATE_AWAIT_MODE_CHANGE_AWAIT_FINGER_OFF; + r = set_mode_async(MODE_AWAIT_FINGER_OFF); + break; + case STATE_AWAIT_MODE_CHANGE_AWAIT_FINGER_OFF: + state = STATE_AWAIT_IRQ_FINGER_REMOVED; + break; + default: + printf("unrecognised state %d\n", state); + } + if (r < 0) { + fprintf(stderr, "error detected changing state\n"); + return r; + } + + printf("new state: %d\n", state); + return 0; +} + +static void LIBUSB_CALL cb_irq(struct libusb_transfer *transfer) +{ + unsigned char irqtype = transfer->buffer[0]; + + if (transfer->status != LIBUSB_TRANSFER_COMPLETED) { + fprintf(stderr, "irq transfer status %d?\n", transfer->status); + irq_transfer = NULL; + request_exit(2); + return; + } + + printf("IRQ callback %02x\n", irqtype); + switch (state) { + case STATE_AWAIT_IRQ_FINGER_DETECTED: + if (irqtype == 0x01) { + if (next_state() < 0) { + request_exit(2); + return; + } + } else { + printf("finger-on-sensor detected in wrong state!\n"); + } + break; + case STATE_AWAIT_IRQ_FINGER_REMOVED: + if (irqtype == 0x02) { + if (next_state() < 0) { + request_exit(2); + return; + } + } else { + printf("finger-on-sensor detected in wrong state!\n"); + } + break; + } + if (libusb_submit_transfer(irq_transfer) < 0) + request_exit(2); +} + +static void LIBUSB_CALL cb_img(struct libusb_transfer *transfer) +{ + if (transfer->status != LIBUSB_TRANSFER_COMPLETED) { + fprintf(stderr, "img transfer status %d?\n", transfer->status); + img_transfer = NULL; + request_exit(2); + return; + } + + printf("Image callback\n"); + save_to_file(imgbuf); + if (next_state() < 0) { + request_exit(2); + return; + } + if (libusb_submit_transfer(img_transfer) < 0) + request_exit(2); +} + +static int init_capture(void) +{ + int r; + + r = libusb_submit_transfer(irq_transfer); + if (r < 0) + return r; + + r = libusb_submit_transfer(img_transfer); + if (r < 0) { + libusb_cancel_transfer(irq_transfer); + while (irq_transfer) + if (libusb_handle_events(NULL) < 0) + break; + return r; + } + + /* start state machine */ + state = STATE_AWAIT_IRQ_FINGER_REMOVED; + return next_state(); +} + +static int do_init(void) +{ + unsigned char status; + int r; + + r = get_hwstat(&status); + if (r < 0) + return r; + + if (!(status & 0x80)) { + r = set_hwstat(status | 0x80); + if (r < 0) + return r; + r = get_hwstat(&status); + if (r < 0) + return r; + } + + status &= ~0x80; + r = set_hwstat(status); + if (r < 0) + return r; + + r = get_hwstat(&status); + if (r < 0) + return r; + + r = sync_intr(0x56); + if (r < 0) + return r; + + return 0; +} + +static int alloc_transfers(void) +{ + img_transfer = libusb_alloc_transfer(0); + if (!img_transfer) + return -ENOMEM; + + irq_transfer = libusb_alloc_transfer(0); + if (!irq_transfer) + return -ENOMEM; + + libusb_fill_bulk_transfer(img_transfer, devh, EP_DATA, imgbuf, + sizeof(imgbuf), cb_img, NULL, 0); + libusb_fill_interrupt_transfer(irq_transfer, devh, EP_INTR, irqbuf, + sizeof(irqbuf), cb_irq, NULL, 0); + + return 0; +} + +static void sighandler(int signum) +{ + request_exit(1); +} + +int main(void) +{ + struct sigaction sigact; + int r = 1; + + r = libusb_init(NULL); + if (r < 0) { + fprintf(stderr, "failed to initialise libusb\n"); + exit(1); + } + + r = find_dpfp_device(); + if (r < 0) { + fprintf(stderr, "Could not find/open device\n"); + goto out; + } + + r = libusb_claim_interface(devh, 0); + if (r < 0) { + fprintf(stderr, "usb_claim_interface error %d %s\n", r, strerror(-r)); + goto out; + } + printf("claimed interface\n"); + + r = print_f0_data(); + if (r < 0) + goto out_release; + + r = do_init(); + if (r < 0) + goto out_deinit; + + /* async from here onwards */ + + sigact.sa_handler = sighandler; + sigemptyset(&sigact.sa_mask); + sigact.sa_flags = 0; + sigaction(SIGINT, &sigact, NULL); + sigaction(SIGTERM, &sigact, NULL); + sigaction(SIGQUIT, &sigact, NULL); + + r = pthread_create(&poll_thread, NULL, poll_thread_main, NULL); + if (r) + goto out_deinit; + + r = alloc_transfers(); + if (r < 0) { + request_exit(1); + pthread_join(poll_thread, NULL); + goto out_deinit; + } + + r = init_capture(); + if (r < 0) { + request_exit(1); + pthread_join(poll_thread, NULL); + goto out_deinit; + } + + while (!do_exit) { + pthread_mutex_lock(&exit_cond_lock); + pthread_cond_wait(&exit_cond, &exit_cond_lock); + pthread_mutex_unlock(&exit_cond_lock); + } + + printf("shutting down...\n"); + pthread_join(poll_thread, NULL); + + r = libusb_cancel_transfer(irq_transfer); + if (r < 0) { + request_exit(1); + goto out_deinit; + } + + r = libusb_cancel_transfer(img_transfer); + if (r < 0) { + request_exit(1); + goto out_deinit; + } + + while (img_transfer || irq_transfer) + if (libusb_handle_events(NULL) < 0) + break; + + if (do_exit == 1) + r = 0; + else + r = 1; + +out_deinit: + libusb_free_transfer(img_transfer); + libusb_free_transfer(irq_transfer); + set_mode(0); + set_hwstat(0x80); +out_release: + libusb_release_interface(devh, 0); +out: + libusb_close(devh); + libusb_exit(NULL); + return r >= 0 ? r : -r; +} + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/listdevs.c b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/listdevs.c new file mode 100644 index 0000000..6ab8917 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/examples/listdevs.c @@ -0,0 +1,64 @@ +/* + * libusb example program to list devices on the bus + * Copyright (C) 2007 Daniel Drake + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include + +#include + +static void print_devs(libusb_device **devs) +{ + libusb_device *dev; + int i = 0; + + while ((dev = devs[i++]) != NULL) { + struct libusb_device_descriptor desc; + int r = libusb_get_device_descriptor(dev, &desc); + if (r < 0) { + fprintf(stderr, "failed to get device descriptor"); + return; + } + + printf("%04x:%04x (bus %d, device %d)\n", + desc.idVendor, desc.idProduct, + libusb_get_bus_number(dev), libusb_get_device_address(dev)); + } +} + +int main(void) +{ + libusb_device **devs; + int r; + ssize_t cnt; + + r = libusb_init(NULL); + if (r < 0) + return r; + + cnt = libusb_get_device_list(NULL, &devs); + if (cnt < 0) + return (int) cnt; + + print_devs(devs); + libusb_free_device_list(devs, 1); + + libusb_exit(NULL); + return 0; +} + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/install-sh b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/install-sh new file mode 100755 index 0000000..6781b98 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/install-sh @@ -0,0 +1,520 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2009-04-28.21; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libtool b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libtool new file mode 100755 index 0000000..3199913 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libtool @@ -0,0 +1,9378 @@ +#! /bin/bash + +# libtool - Provide generalized library-building support services. +# Generated automatically by config.status (libusb) 1.0.9 +# Libtool was configured on host kaligula: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, +# Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="RC " + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=2.2.10 +macro_revision=1.3175 + +# Whether or not to build shared libraries. +build_libtool_libs=yes + +# Whether or not to build static libraries. +build_old_libs=yes + +# What type of objects to build. +pic_mode=default + +# Whether or not to optimize for fast installation. +fast_install=yes + +# Shell to use when invoking shell scripts. +SHELL="/bin/bash" + +# An echo program that protects backslashes. +ECHO="printf %s\\n" + +# The host system. +host_alias= +host=x86_64-unknown-linux-gnu +host_os=linux-gnu + +# The build system. +build_alias= +build=x86_64-unknown-linux-gnu +build_os=linux-gnu + +# A sed program that does not truncate output. +SED="/bin/sed" + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP="/bin/grep" + +# An ERE matcher. +EGREP="/bin/grep -E" + +# A literal string matcher. +FGREP="/bin/grep -F" + +# A BSD- or MS-compatible name lister. +NM="/usr/bin/nm -B" + +# Whether we need soft or hard links. +LN_S="ln -s" + +# What is the maximum length of a command? +max_cmd_len=1572864 + +# Object file suffix (normally "o"). +objext=o + +# Executable file suffix (normally ""). +exeext= + +# whether the shell understands "unset". +lt_unset=unset + +# turn spaces into newlines. +SP2NL="tr \\040 \\012" + +# turn newlines into spaces. +NL2SP="tr \\015\\012 \\040\\040" + +# An object symbol dumper. +OBJDUMP="objdump" + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method="pass_all" + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd="\$MAGIC_CMD" + +# The archiver. +AR="ar" +AR_FLAGS="cru" + +# A symbol stripping program. +STRIP="strip" + +# Commands used to install an old-style archive. +RANLIB="ranlib" +old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$oldlib" +old_postuninstall_cmds="" + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=no + +# A C compiler. +LTCC="gcc" + +# LTCC compiler flags. +LTCFLAGS="-g -O2" + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGIRSTW][ABCDGIRSTW]*\\)[ ][ ]*\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2 \\2/p'" + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl="sed -n -e 's/^T .* \\(.*\\)\$/extern int \\1();/p' -e 's/^[ABCDGIRSTW]* .* \\(.*\\)\$/extern char \\1;/p'" + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (void *) 0},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\([^ ]*\\)\$/ {\"\\2\", (void *) \\&\\2},/p'" + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (void *) 0},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\(lib[^ ]*\\)\$/ {\"\\2\", (void *) \\&\\2},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\([^ ]*\\)\$/ {\"lib\\2\", (void *) \\&\\2},/p'" + +# The name of the directory that contains temporary libtool files. +objdir=.libs + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=file + +# Must we lock files when doing compilation? +need_locks="no" + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL="" + +# Tool to change global to local symbols on Mac OS X. +NMEDIT="" + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO="" + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL="" + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64="" + +# Old archive suffix (normally "a"). +libext=a + +# Shared library suffix (normally ".so"). +shrext_cmds=".so" + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds="" + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink="PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" + +# Do we need the "lib" prefix for modules? +need_lib_prefix=no + +# Do we need a version for libraries? +need_version=no + +# Library versioning type. +version_type=linux + +# Shared library runtime path variable. +runpath_var=LD_RUN_PATH + +# Shared library path variable. +shlibpath_var=LD_LIBRARY_PATH + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=no + +# Format of library name prefix. +libname_spec="lib\$name" + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec="\${libname}\${release}\${shared_ext}\$versuffix \${libname}\${release}\${shared_ext}\$major \$libname\${shared_ext}" + +# The coded name of the library, if different from the real name. +soname_spec="\${libname}\${release}\${shared_ext}\$major" + +# Permission mode override for installation of shared libraries. +install_override_mode="" + +# Command to use after installation of a shared archive. +postinstall_cmds="" + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds="" + +# Commands used to finish a libtool library installation in a directory. +finish_cmds="PATH=\\\"\\\$PATH:/sbin\\\" ldconfig -n \$libdir" + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval="" + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=yes + +# Compile-time system search path for libraries. +sys_lib_search_path_spec="/usr/lib/gcc/x86_64-linux-gnu/6 /usr/lib/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib " + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/lib/x86_64-linux-gnu/libfakeroot /lib/i386-linux-gnu /usr/lib/i386-linux-gnu /lib/i686-linux-gnu /usr/lib/i686-linux-gnu /usr/local/lib /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu " + +# Whether dlopen is supported. +dlopen_support=unknown + +# Whether dlopen of programs is supported. +dlopen_self=unknown + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=unknown + +# Commands to strip libraries. +old_striplib="strip --strip-debug" +striplib="strip --strip-unneeded" + + +# The linker used to build libraries. +LD="/usr/bin/ld -m elf_x86_64" + +# How to create reloadable object files. +reload_flag=" -r" +reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" + +# Commands used to build an old-style archive. +old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib" + +# A language specific compiler. +CC="gcc" + +# Is the compiler the GNU compiler? +with_gcc=yes + +# Compiler flag to turn off builtin functions. +no_builtin_flag=" -fno-builtin" + +# How to pass a linker flag through the compiler. +wl="-Wl," + +# Additional compiler flags for building library objects. +pic_flag=" -fPIC -DPIC" + +# Compiler flag to prevent dynamic linking. +link_static_flag="-static" + +# Does compiler simultaneously support -c and -o options? +compiler_c_o="yes" + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=no + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=no + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec="\${wl}--export-dynamic" + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive" + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object="no" + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds="" + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds="" + +# Commands used to build a shared archive. +archive_cmds="\$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname -o \$lib" +archive_expsym_cmds="echo \\\"{ global:\\\" > \$output_objdir/\$libname.ver~ + cat \$export_symbols | sed -e \\\"s/\\\\(.*\\\\)/\\\\1;/\\\" >> \$output_objdir/\$libname.ver~ + echo \\\"local: *; };\\\" >> \$output_objdir/\$libname.ver~ + \$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname \${wl}-version-script \${wl}\$output_objdir/\$libname.ver -o \$lib" + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds="" +module_expsym_cmds="" + +# Whether we are building with GNU ld or not. +with_gnu_ld="yes" + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag="" + +# Flag that enforces no undefined symbols. +no_undefined_flag="" + +# Flag to hardcode $libdir into a binary during linking. +# This must work even if $libdir does not exist +hardcode_libdir_flag_spec="\${wl}-rpath \${wl}\$libdir" + +# If ld is used when linking, flag to hardcode $libdir into a binary +# during linking. This must work even if $libdir does not exist. +hardcode_libdir_flag_spec_ld="" + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator="" + +# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=no + +# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting ${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=no + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=no + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=unsupported + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=no + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=no + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=unknown + +# Fix the shell variable $srcfile for the compiler. +fix_srcfile_path="" + +# Set to "yes" if exported symbols are required. +always_export_symbols=no + +# The commands to list exported symbols. +export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*" + +# Symbols that must always be exported. +include_expsyms="" + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds="" + +# Specify filename containing input files. +file_list_spec="" + +# How to hardcode a shared library path into an executable. +hardcode_action=immediate + +# ### END LIBTOOL CONFIG + +# Generated from ltmain.m4sh. + +# libtool (GNU libtool) 2.2.10 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --no-quiet, --no-silent +# print informational messages (default) +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print more informational messages than default +# --no-verbose don't print the extra informational messages +# --version print version information +# -h, --help, --help-all print short, long, or detailed help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. When passed as first option, +# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.2.10 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . + +PROGRAM=libtool +PACKAGE=libtool +VERSION=2.2.10 +TIMESTAMP="" +package_revision=1.3175 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# NLS nuisances: We save the old values to restore during execute mode. +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL + +$lt_unset CDPATH + + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + + + +: ${CP="cp -f"} +test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${EGREP="grep -E"} +: ${FGREP="grep -F"} +: ${GREP="grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="sed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` +} + +# Generated shell functions inserted here. + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +# Generated shell functions inserted here. + +# These SED scripts presuppose an absolute path with a trailing slash. +pathcar='s,^/\([^/]*\).*$,\1,' +pathcdr='s,^/[^/]*,,' +removedotparts=':dotsl + s@/\./@/@g + t dotsl + s,/\.$,/,' +collapseslashes='s@/\{1,\}@/@g' +finalslash='s,/*$,/,' + +# func_normal_abspath PATH +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +# value returned in "$func_normal_abspath_result" +func_normal_abspath () +{ + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` + while :; do + # Processed it all yet? + if test "$func_normal_abspath_tpath" = / ; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result" ; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + +# func_relative_path SRCDIR DSTDIR +# generates a relative path from SRCDIR to DSTDIR, with a trailing +# slash if non-empty, suitable for immediately appending a filename +# without needing to append a separator. +# value returned in "$func_relative_path_result" +func_relative_path () +{ + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=${func_dirname_result} + if test "x$func_relative_path_tlibdir" = x ; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test "x$func_stripname_result" != x ; then + func_relative_path_result=${func_relative_path_result}/${func_stripname_result} + fi + + # Normalisation. If bindir is libdir, return empty string, + # else relative path ending with a slash; either way, target + # file name can be directly appended. + if test ! -z "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result/" + func_relative_path_result=$func_stripname_result + fi +} + +# The name of this program: +func_dirname_and_basename "$progpath" +progname=$func_basename_result + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=: + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname${mode+: }$mode: $*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` + done + my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "$my_tmpdir" +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "$1" | $SED \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $SED -n '/(C)/!b go + :more + /\./!{ + N + s/\n# / / + b more + } + :go + /^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $SED -n '/^# Usage:/,/^# *.*--help/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + echo + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help [NOEXIT] +# Echo long help message to standard output and exit, +# unless 'noexit' is passed as argument. +func_help () +{ + $SED -n '/^# Usage:/,/# Report bugs to/ { + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ + p + }' < "$progpath" + ret=$? + if test -z "$1"; then + exit $ret + fi +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + func_error "missing argument for $1." + exit_cmd=exit +} + +exit_cmd=: + + + + + + +magic="%%%MAGIC variable%%%" +magic_exe="%%%MAGIC EXE variable%%%" + +# Global variables. +# $mode is unset +nonopt= +execute_dlfiles= +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +opt_dry_run=false +opt_duplicate_deps=false +opt_silent=false +opt_debug=: + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +# func_fatal_configuration arg... +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func_error ${1+"$@"} + func_error "See the $PACKAGE documentation for more information." + func_fatal_error "Fatal configuration error." +} + + +# func_config +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + +# func_features +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + +# func_enable_tag tagname +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname="$1" + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf="/$re_begincf/,/$re_endcf/p" + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# Parse options once, thoroughly. This comes as soon as possible in +# the script to make things like `libtool --version' happen quickly. +{ + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Parse non-mode specific arguments: + while test "$#" -gt 0; do + opt="$1" + shift + + case $opt in + --config) func_config ;; + + --debug) preserve_args="$preserve_args $opt" + func_echo "enabling shell trace mode" + opt_debug='set -x' + $opt_debug + ;; + + -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break + execute_dlfiles="$execute_dlfiles $1" + shift + ;; + + --dry-run | -n) opt_dry_run=: ;; + --features) func_features ;; + --finish) mode="finish" ;; + + --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break + case $1 in + # Valid mode arguments: + clean) ;; + compile) ;; + execute) ;; + finish) ;; + install) ;; + link) ;; + relink) ;; + uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; + esac + + mode="$1" + shift + ;; + + --preserve-dup-deps) + opt_duplicate_deps=: ;; + + --quiet|--silent) preserve_args="$preserve_args $opt" + opt_silent=: + opt_verbose=false + ;; + + --no-quiet|--no-silent) + preserve_args="$preserve_args $opt" + opt_silent=false + ;; + + --verbose| -v) preserve_args="$preserve_args $opt" + opt_silent=false + opt_verbose=: + ;; + + --no-verbose) preserve_args="$preserve_args $opt" + opt_verbose=false + ;; + + --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break + preserve_args="$preserve_args $opt $1" + func_enable_tag "$1" # tagname is set here + shift + ;; + + # Separate optargs to long options: + -dlopen=*|--mode=*|--tag=*) + func_opt_split "$opt" + set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} + shift + ;; + + -\?|-h) func_usage ;; + --help) opt_help=: ;; + --help-all) opt_help=': help-all' ;; + --version) func_version ;; + + -*) func_fatal_help "unrecognized option \`$opt'" ;; + + *) nonopt="$opt" + break + ;; + esac + done + + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_duplicate_deps + ;; + esac + + # Having warned about all mis-specified options, bail out if + # anything was wrong. + $exit_cmd $EXIT_FAILURE +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +## ----------- ## +## Main. ## +## ----------- ## + +$opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + test -z "$mode" && func_fatal_error "error: you must specify a MODE." + + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$mode' for more information." +} + + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_ltwrapper_scriptname_result="" + if func_ltwrapper_executable_p "$1"; then + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" + fi +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T <?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + removelist="$removelist $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + removelist="$removelist $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + command="$command -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + command="$command -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command="$command$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test "$mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$mode'" + ;; + esac + + echo + $ECHO "Try \`$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test "$opt_help" = :; then + func_mode_help + else + { + func_help noexit + for mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | sed -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + sed '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_quote_for_eval "$file" + args="$args $func_quote_for_eval_result" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + exit $EXIT_SUCCESS +} + +test "$mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + install_prog="$install_prog$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + files="$files $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test "x$prev" = x-m && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + install_prog="$install_prog $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + install_shared_prog="$install_shared_prog $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_verbose "extracting global C symbols from \`$progfile'" + $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +" + case $host in + *cygwin* | *mingw* | *cegcc* ) + echo >> "$output_objdir/$my_dlsyms" "\ +/* DATA imports from DLLs on WIN32 con't be const, because + runtime relocations are performed -- see ld's documentation + on pseudo-relocs. */" + lt_dlsym_const= ;; + *osf5*) + echo >> "$output_objdir/$my_dlsyms" "\ +/* This system does not cope well with relocations in const data */" + lt_dlsym_const= ;; + *) + lt_dlsym_const=const ;; + esac + + echo >> "$output_objdir/$my_dlsyms" "\ +extern $lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +$lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) symtab_cflags="$symtab_cflags $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + win32_nmres=`eval $NM -f posix -A $1 | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + if test "$lock_old_archive_extraction" = yes; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test "$lock_old_archive_extraction" = yes; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ which is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options which match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_to_host_path arg +# +# Convert paths to host format when used with build tools. +# Intended for use with "native" mingw (where libtool itself +# is running under the msys shell), or in the following cross- +# build environments: +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# where wine is equipped with the `winepath' executable. +# In the native mingw case, the (msys) shell automatically +# converts paths for any non-msys applications it launches, +# but that facility isn't available from inside the cwrapper. +# Similar accommodations are necessary for $host mingw and +# $build cygwin. Calling this function does no harm for other +# $host/$build combinations not listed above. +# +# ARG is the path (on $build) that should be converted to +# the proper representation for $host. The result is stored +# in $func_to_host_path_result. +func_to_host_path () +{ + func_to_host_path_result="$1" + if test -n "$1"; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + case $build in + *mingw* ) # actually, msys + # awkward: cmd appends spaces to result + func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_path_result=`cygpath -w "$1" | + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # Unfortunately, winepath does not exit with a non-zero + # error code, so we are forced to check the contents of + # stdout. On the other hand, if the command is not + # found, the shell will set an exit code of 127 and print + # *an error message* to stdout. So we must check for both + # error code of zero AND non-empty stdout, which explains + # the odd construction: + func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` + if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then + func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" | + $SED -e "$lt_sed_naive_backslashify"` + else + # Allow warning below. + func_to_host_path_result= + fi + ;; + esac + if test -z "$func_to_host_path_result" ; then + func_error "Could not determine host path corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_path_result="$1" + fi + ;; + esac + fi +} +# end: func_to_host_path + +# func_to_host_pathlist arg +# +# Convert pathlists to host format when used with build tools. +# See func_to_host_path(), above. This function supports the +# following $build/$host combinations (but does no harm for +# combinations not listed here): +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# +# Path separators are also converted from $build format to +# $host format. If ARG begins or ends with a path separator +# character, it is preserved (but converted to $host format) +# on output. +# +# ARG is a pathlist (on $build) that should be converted to +# the proper representation on $host. The result is stored +# in $func_to_host_pathlist_result. +func_to_host_pathlist () +{ + func_to_host_pathlist_result="$1" + if test -n "$1"; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_pathlist_tmp1=$func_stripname_result + case $build in + *mingw* ) # Actually, msys. + # Awkward: cmd appends spaces to result. + func_to_host_pathlist_result=` + ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" | + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # unfortunately, winepath doesn't convert pathlists + func_to_host_pathlist_result="" + func_to_host_pathlist_oldIFS=$IFS + IFS=: + for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do + IFS=$func_to_host_pathlist_oldIFS + if test -n "$func_to_host_pathlist_f" ; then + func_to_host_path "$func_to_host_pathlist_f" + if test -n "$func_to_host_path_result" ; then + if test -z "$func_to_host_pathlist_result" ; then + func_to_host_pathlist_result="$func_to_host_path_result" + else + func_append func_to_host_pathlist_result ";$func_to_host_path_result" + fi + fi + fi + done + IFS=$func_to_host_pathlist_oldIFS + ;; + esac + if test -z "$func_to_host_pathlist_result"; then + func_error "Could not determine the host path(s) corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This may break if $1 contains DOS-style drive + # specifications. The fix is not to complicate the expression + # below, but for the user to provide a working wine installation + # with winepath so that path translation in the cross-to-mingw + # case works properly. + lt_replace_pathsep_nix_to_dos="s|:|;|g" + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_replace_pathsep_nix_to_dos"` + fi + # Now, add the leading and trailing path separators back + case "$1" in + :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" + ;; + esac + case "$1" in + *: ) func_append func_to_host_pathlist_result ";" + ;; + esac + ;; + esac + fi +} +# end: func_to_host_pathlist + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +/* declarations of non-ANSI functions */ +#if defined(__MINGW32__) +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined(__CYGWIN__) +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined (other platforms) ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined(_MSC_VER) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +# ifndef _INTPTR_T_DEFINED +# define _INTPTR_T_DEFINED +# define intptr_t int +# endif +#elif defined(__MINGW32__) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined(__CYGWIN__) +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined (other platforms) ... */ +#endif + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#if defined(LT_DEBUGWRAPPER) +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -e 's/\([\\"]\)/\\\1/g' \ + -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' + + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $opt_debug + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir="$arg" + prev= + continue + ;; + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) deplibs="$deplibs $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + weak_libs="$weak_libs $arg" + prev= + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname '-L' '' "$arg" + dir=$func_stripname_result + if test -z "$dir"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $func_quote_for_eval_result" + compiler_flags="$compiler_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" + linker_flags="$linker_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + compiler_flags="$compiler_flags $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_duplicate_deps ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + case $lib in + *.la) func_source "$lib" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) deplibs="$deplibs $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags="$compiler_flags $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + dir=$func_stripname_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + else + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) temp_rpath="$temp_rpath$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + notinst_deplibs="$notinst_deplibs $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + echo + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system can not link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_dirname "$deplib" "" "." + dir="$func_dirname_result" + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|qnx|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + libobjs="$libobjs $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + delfiles="$delfiles $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + func_len " $cmd" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + $ECHO "$obj" >> $output + done + echo ')' >> $output + delfiles="$delfiles $output" + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + $ECHO "$obj" >> $output + done + delfiles="$delfiles $output" + output=$firstobj\"$file_list_spec$output\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\${concat_cmds}$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + delfiles="$delfiles $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=no + ;; + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + oldobjs="$oldobjs $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $addlibs + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + oldobjs="$oldobjs $gentop/$newobj" + ;; + *) oldobjs="$oldobjs $obj" ;; + esac + done + fi + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlfiles="$newdlfiles $libdir/$name" + ;; + *) newdlfiles="$newdlfiles $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlprefiles="$newdlprefiles $libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test "x$bindir" != x ; + then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$mode" = link || test "$mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) RM="$RM $arg"; rmforce=yes ;; + -*) RM="$RM $arg" ;; + *) files="$files $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + + case "$mode" in + clean) + case " $library_names " in + # " " in the beginning catches empty $dlname + *" $dlname "*) ;; + *) rmfiles="$rmfiles $objdir/$dlname" ;; + esac + test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + rmfiles="$rmfiles $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$mode" = uninstall || test "$mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + + +# ### BEGIN LIBTOOL TAG CONFIG: RC + +# The linker used to build libraries. +LD="" + +# How to create reloadable object files. +reload_flag="" +reload_cmds="" + +# Commands used to build an old-style archive. +old_archive_cmds="" + +# A language specific compiler. +CC="" + +# Is the compiler the GNU compiler? +with_gcc= + +# Compiler flag to turn off builtin functions. +no_builtin_flag="" + +# How to pass a linker flag through the compiler. +wl="" + +# Additional compiler flags for building library objects. +pic_flag="" + +# Compiler flag to prevent dynamic linking. +link_static_flag="" + +# Does compiler simultaneously support -c and -o options? +compiler_c_o="yes" + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc= + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes= + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec="" + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec="" + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object="" + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds="" + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds="" + +# Commands used to build a shared archive. +archive_cmds="" +archive_expsym_cmds="" + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds="" +module_expsym_cmds="" + +# Whether we are building with GNU ld or not. +with_gnu_ld="" + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag="" + +# Flag that enforces no undefined symbols. +no_undefined_flag="" + +# Flag to hardcode $libdir into a binary during linking. +# This must work even if $libdir does not exist +hardcode_libdir_flag_spec="" + +# If ld is used when linking, flag to hardcode $libdir into a binary +# during linking. This must work even if $libdir does not exist. +hardcode_libdir_flag_spec_ld="" + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator="" + +# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct= + +# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting ${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute= + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L= + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var= + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic= + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath= + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs= + +# Fix the shell variable $srcfile for the compiler. +fix_srcfile_path="" + +# Set to "yes" if exported symbols are required. +always_export_symbols= + +# The commands to list exported symbols. +export_symbols_cmds="" + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms="" + +# Symbols that must always be exported. +include_expsyms="" + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds="" + +# Specify filename containing input files. +file_list_spec="" + +# How to hardcode a shared library path into an executable. +hardcode_action= + +# ### END LIBTOOL TAG CONFIG: RC diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb-1.0.pc b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb-1.0.pc new file mode 100644 index 0000000..5f59b76 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb-1.0.pc @@ -0,0 +1,12 @@ +prefix=/usr/local +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: libusb-1.0 +Description: C API for USB device access from Linux, Mac OS X, OpenBSD, NetBSD and Windows userspace +Version: 1.0.9 +Libs: -L${libdir} -lusb-1.0 +Libs.private: -lrt -pthread +Cflags: -I${includedir}/libusb-1.0 + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb-1.0.pc.in b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb-1.0.pc.in new file mode 100644 index 0000000..f26babc --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb-1.0.pc.in @@ -0,0 +1,12 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libusb-1.0 +Description: C API for USB device access from Linux, Mac OS X, OpenBSD, NetBSD and Windows userspace +Version: @VERSION@ +Libs: -L${libdir} -lusb-1.0 +Libs.private: @PC_LIBS_PRIVATE@ +Cflags: -I${includedir}/libusb-1.0 + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-core.Plo b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-core.Plo new file mode 100644 index 0000000..7df526e --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-core.Plo @@ -0,0 +1,205 @@ +libusb_1_0_la-core.lo: core.c /usr/include/stdc-predef.h ../config.h \ + /usr/include/errno.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include/stdarg.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/sys/time.h libusbi.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h /usr/include/poll.h \ + /usr/include/x86_64-linux-gnu/sys/poll.h \ + /usr/include/x86_64-linux-gnu/bits/poll.h libusb.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h version.h \ + os/threads_posix.h /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + os/poll_posix.h + +/usr/include/stdc-predef.h: + +../config.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include/stdarg.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +libusbi.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/poll.h: + +/usr/include/x86_64-linux-gnu/sys/poll.h: + +/usr/include/x86_64-linux-gnu/bits/poll.h: + +libusb.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +version.h: + +os/threads_posix.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +os/poll_posix.h: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-darwin_usb.Plo b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-darwin_usb.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-darwin_usb.Plo @@ -0,0 +1 @@ +# dummy diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-descriptor.Plo b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-descriptor.Plo new file mode 100644 index 0000000..6e7d74c --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-descriptor.Plo @@ -0,0 +1,181 @@ +libusb_1_0_la-descriptor.lo: descriptor.c /usr/include/stdc-predef.h \ + /usr/include/errno.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h /usr/include/stdlib.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h /usr/include/string.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h libusbi.h ../config.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include/stdarg.h /usr/include/poll.h \ + /usr/include/x86_64-linux-gnu/sys/poll.h \ + /usr/include/x86_64-linux-gnu/bits/poll.h libusb.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/sys/time.h version.h os/threads_posix.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + os/poll_posix.h + +/usr/include/stdc-predef.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/stdlib.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap-16.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +libusbi.h: + +../config.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include/stdarg.h: + +/usr/include/poll.h: + +/usr/include/x86_64-linux-gnu/sys/poll.h: + +/usr/include/x86_64-linux-gnu/bits/poll.h: + +libusb.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +version.h: + +os/threads_posix.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +os/poll_posix.h: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-io.Plo b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-io.Plo new file mode 100644 index 0000000..b6ce688 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-io.Plo @@ -0,0 +1,219 @@ +libusb_1_0_la-io.lo: io.c /usr/include/stdc-predef.h ../config.h \ + /usr/include/errno.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/signal.h /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/signum.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/include/x86_64-linux-gnu/sys/timerfd.h \ + /usr/include/x86_64-linux-gnu/bits/timerfd.h libusbi.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include/stdarg.h /usr/include/poll.h \ + /usr/include/x86_64-linux-gnu/sys/poll.h \ + /usr/include/x86_64-linux-gnu/bits/poll.h libusb.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h version.h \ + os/threads_posix.h /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + os/poll_posix.h + +/usr/include/stdc-predef.h: + +../config.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/x86_64-linux-gnu/sys/timerfd.h: + +/usr/include/x86_64-linux-gnu/bits/timerfd.h: + +libusbi.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include/stdarg.h: + +/usr/include/poll.h: + +/usr/include/x86_64-linux-gnu/sys/poll.h: + +/usr/include/x86_64-linux-gnu/bits/poll.h: + +libusb.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +version.h: + +os/threads_posix.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +os/poll_posix.h: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-linux_usbfs.Plo b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-linux_usbfs.Plo new file mode 100644 index 0000000..34bf221 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-linux_usbfs.Plo @@ -0,0 +1,263 @@ +libusb_1_0_la-linux_usbfs.lo: os/linux_usbfs.c /usr/include/stdc-predef.h \ + ../config.h /usr/include/ctype.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + /usr/include/dirent.h /usr/include/x86_64-linux-gnu/bits/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include/stddef.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/fcntl.h /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl-linux.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/poll.h \ + /usr/include/x86_64-linux-gnu/sys/poll.h \ + /usr/include/x86_64-linux-gnu/bits/poll.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/sys/utsname.h \ + /usr/include/x86_64-linux-gnu/bits/utsname.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + libusb.h /usr/lib/gcc/x86_64-linux-gnu/6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/sys/time.h libusbi.h version.h \ + os/threads_posix.h /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h os/poll_posix.h \ + os/linux_usbfs.h + +/usr/include/stdc-predef.h: + +../config.h: + +/usr/include/ctype.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +/usr/include/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include/stddef.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl-linux.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/poll.h: + +/usr/include/x86_64-linux-gnu/sys/poll.h: + +/usr/include/x86_64-linux-gnu/bits/poll.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/utsname.h: + +/usr/include/x86_64-linux-gnu/bits/utsname.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +libusb.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +libusbi.h: + +version.h: + +os/threads_posix.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +os/poll_posix.h: + +os/linux_usbfs.h: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-openbsd_usb.Plo b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-openbsd_usb.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-openbsd_usb.Plo @@ -0,0 +1 @@ +# dummy diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-poll_windows.Plo b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-poll_windows.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-poll_windows.Plo @@ -0,0 +1 @@ +# dummy diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-sync.Plo b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-sync.Plo new file mode 100644 index 0000000..7895e8c --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-sync.Plo @@ -0,0 +1,190 @@ +libusb_1_0_la-sync.lo: sync.c /usr/include/stdc-predef.h ../config.h \ + /usr/include/errno.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h /usr/include/stdlib.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h libusbi.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include/stdarg.h /usr/include/poll.h \ + /usr/include/x86_64-linux-gnu/sys/poll.h \ + /usr/include/x86_64-linux-gnu/bits/poll.h libusb.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/sys/time.h version.h os/threads_posix.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + os/poll_posix.h + +/usr/include/stdc-predef.h: + +../config.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/stdlib.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +libusbi.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include/stdarg.h: + +/usr/include/poll.h: + +/usr/include/x86_64-linux-gnu/sys/poll.h: + +/usr/include/x86_64-linux-gnu/bits/poll.h: + +libusb.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +version.h: + +os/threads_posix.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +os/poll_posix.h: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-threads_posix.Plo b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-threads_posix.Plo new file mode 100644 index 0000000..bf45838 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-threads_posix.Plo @@ -0,0 +1,52 @@ +libusb_1_0_la-threads_posix.lo: os/threads_posix.c \ + /usr/include/stdc-predef.h os/threads_posix.h /usr/include/pthread.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/lib/gcc/x86_64-linux-gnu/6/include/stddef.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h + +/usr/include/stdc-predef.h: + +os/threads_posix.h: + +/usr/include/pthread.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/lib/gcc/x86_64-linux-gnu/6/include/stddef.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-threads_windows.Plo b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-threads_windows.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-threads_windows.Plo @@ -0,0 +1 @@ +# dummy diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-windows_usb.Plo b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-windows_usb.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.deps/libusb_1_0_la-windows_usb.Plo @@ -0,0 +1 @@ +# dummy diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.a b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.a new file mode 100644 index 0000000000000000000000000000000000000000..1dca425a7f84f404cfdc449259867d4ddf11eeb8 GIT binary patch literal 409430 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

+-j2xX%By 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 literal 0 HcmV?d00001 diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.la b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.la new file mode 120000 index 0000000..cef8a8b --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.la @@ -0,0 +1 @@ +../libusb-1.0.la \ No newline at end of file diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.lai b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.lai new file mode 100644 index 0000000..da83db8 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.lai @@ -0,0 +1,41 @@ +# libusb-1.0.la - a libtool library file +# Generated by libtool (GNU libtool) 2.2.10 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='libusb-1.0.so.0' + +# Names of this library. +library_names='libusb-1.0.so.0.1.0 libusb-1.0.so.0 libusb-1.0.so' + +# The name of the static archive. +old_library='libusb-1.0.a' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags=' -pthread' + +# Libraries that this one depends upon. +dependency_libs=' -lrt' + +# Names of additional weak libraries provided by this library +weak_library_names='' + +# Version information for libusb-1.0. +current=1 +age=1 +revision=0 + +# Is this an already installed library? +installed=yes + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/usr/local/lib' diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.so b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.so new file mode 120000 index 0000000..89984fe --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.so @@ -0,0 +1 @@ +libusb-1.0.so.0.1.0 \ No newline at end of file diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.so.0 b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.so.0 new file mode 120000 index 0000000..89984fe --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.so.0 @@ -0,0 +1 @@ +libusb-1.0.so.0.1.0 \ No newline at end of file diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.so.0.1.0 b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb-1.0.so.0.1.0 new file mode 100755 index 0000000000000000000000000000000000000000..d99b522a8e47e42aaba677866ff209d5c073b8bf GIT binary patch literal 242856 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 BPHF%E literal 0 HcmV?d00001 diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb_1_0_la-core.o b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb_1_0_la-core.o new file mode 100644 index 0000000000000000000000000000000000000000..dda05cec89d2bc11ca84111259f54c5825d3c26e GIT binary patch literal 81152 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 ax3xNlKdm3fw5sYaeluQwqMTT@{{I0t-v3|# literal 0 HcmV?d00001 diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb_1_0_la-descriptor.o b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb_1_0_la-descriptor.o new file mode 100644 index 0000000000000000000000000000000000000000..dc2fd7ae72daf89899f9d16eff10da56bf308b1c GIT binary patch literal 52120 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 literal 0 HcmV?d00001 diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb_1_0_la-io.o b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb_1_0_la-io.o new file mode 100644 index 0000000000000000000000000000000000000000..a269e03b23b195f64d78c2415bb8406c2a0420c9 GIT binary patch literal 71344 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

- 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 M;QSpSHn9Hw0g>mA*Z=?k literal 0 HcmV?d00001 diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb_1_0_la-linux_usbfs.o b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb_1_0_la-linux_usbfs.o new file mode 100644 index 0000000000000000000000000000000000000000..f3a8b886299a294acd13855fca65d5e979522fe5 GIT binary patch literal 166600 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 A(7YK10mf3fFnVSru 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 Ra<=++KNPpGA^WfO{|9SZI)4BF literal 0 HcmV?d00001 diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb_1_0_la-sync.o b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/.libs/libusb_1_0_la-sync.o new file mode 100644 index 0000000000000000000000000000000000000000..1ba6c3c8fbbcb03e60dbb8fcb7fe68183358f23e GIT binary patch literal 31888 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 literal 0 HcmV?d00001 diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/Makefile b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/Makefile new file mode 100644 index 0000000..ba292db --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/Makefile @@ -0,0 +1,718 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# libusb/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + + +pkgdatadir = $(datadir)/libusb +pkgincludedir = $(includedir)/libusb +pkglibdir = $(libdir)/libusb +pkglibexecdir = $(libexecdir)/libusb +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +subdir = libusb +DIST_COMMON = $(hdr_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/libusb/version.h \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(hdrdir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libusb_1_0_la_LIBADD = +am__libusb_1_0_la_SOURCES_DIST = libusbi.h core.c descriptor.c io.c \ + sync.c os/darwin_usb.c os/linux_usbfs.c os/openbsd_usb.c \ + os/poll_windows.c os/windows_usb.c libusb-1.0.rc \ + libusb-1.0.def os/linux_usbfs.h os/darwin_usb.h \ + os/windows_usb.h os/threads_windows.h os/threads_windows.c \ + os/threads_posix.h os/threads_posix.c os/poll_posix.h \ + os/poll_windows.h +am__objects_1 = libusb_1_0_la-darwin_usb.lo +am__objects_2 = libusb_1_0_la-linux_usbfs.lo +am__objects_3 = libusb_1_0_la-openbsd_usb.lo +am__objects_4 = libusb_1_0_la-poll_windows.lo \ + libusb_1_0_la-windows_usb.lo libusb-1.0.lo +##am__objects_5 = $(am__objects_4) +##am__objects_5 = $(am__objects_3) +am__objects_5 = $(am__objects_2) +#am__objects_5 = $(am__objects_1) +#am__objects_6 = libusb_1_0_la-threads_windows.lo +am__objects_6 = libusb_1_0_la-threads_posix.lo +am_libusb_1_0_la_OBJECTS = libusb_1_0_la-core.lo \ + libusb_1_0_la-descriptor.lo libusb_1_0_la-io.lo \ + libusb_1_0_la-sync.lo $(am__objects_5) $(am__objects_6) +libusb_1_0_la_OBJECTS = $(am_libusb_1_0_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +libusb_1_0_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libusb_1_0_la_CFLAGS) \ + $(CFLAGS) $(libusb_1_0_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I. -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libusb_1_0_la_SOURCES) +DIST_SOURCES = $(am__libusb_1_0_la_SOURCES_DIST) +HEADERS = $(hdr_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run aclocal-1.11 +AMTAR = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run tar +AM_CFLAGS = -std=gnu99 -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration -Wno-pointer-sign -Wshadow +AM_DEFAULT_VERBOSITY = 0 +AR = ar +AUTOCONF = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run autoconf +AUTOHEADER = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run autoheader +AUTOMAKE = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run automake-1.11 +AWK = mawk +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = +LIBS = -lrt -pthread +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLDFLAGS = -version-info 1:0:1 -no-undefined +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OS_DARWIN = +OS_LINUX = +OS_OPENBSD = +OS_WINDOWS = +OTOOL = +OTOOL64 = +PACKAGE = libusb +PACKAGE_BUGREPORT = libusb-devel@lists.sourceforge.net +PACKAGE_NAME = libusb +PACKAGE_STRING = libusb 1.0.9 +PACKAGE_TARNAME = libusb +PACKAGE_URL = http://www.libusb.org/ +PACKAGE_VERSION = 1.0.9 +PATH_SEPARATOR = : +PC_LIBS_PRIVATE = -lrt -pthread +RANLIB = ranlib +RC = +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +STRIP = strip +THREAD_CFLAGS = -pthread +VERSION = 1.0.9 +VISIBILITY_CFLAGS = -fvisibility=hidden +abs_builddir = /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb +abs_srcdir = /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb +abs_top_builddir = /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9 +abs_top_srcdir = /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9 +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /root/projekti/CyUSB/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +lib_LTLIBRARIES = libusb-1.0.la +LINUX_USBFS_SRC = os/linux_usbfs.c +DARWIN_USB_SRC = os/darwin_usb.c +OPENBSD_USB_SRC = os/openbsd_usb.c +WINDOWS_USB_SRC = os/poll_windows.c os/windows_usb.c libusb-1.0.rc \ + libusb-1.0.def + +EXTRA_DIST = $(LINUX_USBFS_SRC) $(DARWIN_USB_SRC) $(OPENBSD_USB_SRC) \ + $(WINDOWS_USB_SRC) os/threads_posix.c os/threads_windows.c + +#OS_SRC = $(DARWIN_USB_SRC) +OS_SRC = $(LINUX_USBFS_SRC) +#OS_SRC = $(OPENBSD_USB_SRC) +#OS_SRC = $(WINDOWS_USB_SRC) +#AM_CFLAGS_EXT = -no-cpp-precomp +#THREADS_SRC = os/threads_windows.h os/threads_windows.c +THREADS_SRC = os/threads_posix.h os/threads_posix.c +libusb_1_0_la_CFLAGS = $(VISIBILITY_CFLAGS) $(AM_CFLAGS) $(THREAD_CFLAGS) \ + -DLIBUSB_DESCRIBE=\"`git --git-dir "$(top_srcdir)/.git" describe --tags 2>/dev/null`\" + +libusb_1_0_la_LDFLAGS = $(LTLDFLAGS) +libusb_1_0_la_SOURCES = libusbi.h core.c descriptor.c io.c sync.c $(OS_SRC) \ + os/linux_usbfs.h os/darwin_usb.h os/windows_usb.h \ + $(THREADS_SRC) \ + os/poll_posix.h os/poll_windows.h + +hdrdir = $(includedir)/libusb-1.0 +hdr_HEADERS = libusb.h +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj .rc +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libusb/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu libusb/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: # $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libusb-1.0.la: $(libusb_1_0_la_OBJECTS) $(libusb_1_0_la_DEPENDENCIES) + $(AM_V_CCLD)$(libusb_1_0_la_LINK) -rpath $(libdir) $(libusb_1_0_la_OBJECTS) $(libusb_1_0_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/libusb_1_0_la-core.Plo +include ./$(DEPDIR)/libusb_1_0_la-darwin_usb.Plo +include ./$(DEPDIR)/libusb_1_0_la-descriptor.Plo +include ./$(DEPDIR)/libusb_1_0_la-io.Plo +include ./$(DEPDIR)/libusb_1_0_la-linux_usbfs.Plo +include ./$(DEPDIR)/libusb_1_0_la-openbsd_usb.Plo +include ./$(DEPDIR)/libusb_1_0_la-poll_windows.Plo +include ./$(DEPDIR)/libusb_1_0_la-sync.Plo +include ./$(DEPDIR)/libusb_1_0_la-threads_posix.Plo +include ./$(DEPDIR)/libusb_1_0_la-threads_windows.Plo +include ./$(DEPDIR)/libusb_1_0_la-windows_usb.Plo + +.c.o: + $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# $(AM_V_CC) \ +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# $(AM_V_CC) \ +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# $(AM_V_CC) \ +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +libusb_1_0_la-core.lo: core.c + $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-core.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-core.Tpo -c -o libusb_1_0_la-core.lo `test -f 'core.c' || echo '$(srcdir)/'`core.c + $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-core.Tpo $(DEPDIR)/libusb_1_0_la-core.Plo +# $(AM_V_CC) \ +# source='core.c' object='libusb_1_0_la-core.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-core.lo `test -f 'core.c' || echo '$(srcdir)/'`core.c + +libusb_1_0_la-descriptor.lo: descriptor.c + $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-descriptor.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-descriptor.Tpo -c -o libusb_1_0_la-descriptor.lo `test -f 'descriptor.c' || echo '$(srcdir)/'`descriptor.c + $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-descriptor.Tpo $(DEPDIR)/libusb_1_0_la-descriptor.Plo +# $(AM_V_CC) \ +# source='descriptor.c' object='libusb_1_0_la-descriptor.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-descriptor.lo `test -f 'descriptor.c' || echo '$(srcdir)/'`descriptor.c + +libusb_1_0_la-io.lo: io.c + $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-io.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-io.Tpo -c -o libusb_1_0_la-io.lo `test -f 'io.c' || echo '$(srcdir)/'`io.c + $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-io.Tpo $(DEPDIR)/libusb_1_0_la-io.Plo +# $(AM_V_CC) \ +# source='io.c' object='libusb_1_0_la-io.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-io.lo `test -f 'io.c' || echo '$(srcdir)/'`io.c + +libusb_1_0_la-sync.lo: sync.c + $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-sync.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-sync.Tpo -c -o libusb_1_0_la-sync.lo `test -f 'sync.c' || echo '$(srcdir)/'`sync.c + $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-sync.Tpo $(DEPDIR)/libusb_1_0_la-sync.Plo +# $(AM_V_CC) \ +# source='sync.c' object='libusb_1_0_la-sync.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-sync.lo `test -f 'sync.c' || echo '$(srcdir)/'`sync.c + +libusb_1_0_la-darwin_usb.lo: os/darwin_usb.c + $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-darwin_usb.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-darwin_usb.Tpo -c -o libusb_1_0_la-darwin_usb.lo `test -f 'os/darwin_usb.c' || echo '$(srcdir)/'`os/darwin_usb.c + $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-darwin_usb.Tpo $(DEPDIR)/libusb_1_0_la-darwin_usb.Plo +# $(AM_V_CC) \ +# source='os/darwin_usb.c' object='libusb_1_0_la-darwin_usb.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-darwin_usb.lo `test -f 'os/darwin_usb.c' || echo '$(srcdir)/'`os/darwin_usb.c + +libusb_1_0_la-linux_usbfs.lo: os/linux_usbfs.c + $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-linux_usbfs.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-linux_usbfs.Tpo -c -o libusb_1_0_la-linux_usbfs.lo `test -f 'os/linux_usbfs.c' || echo '$(srcdir)/'`os/linux_usbfs.c + $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-linux_usbfs.Tpo $(DEPDIR)/libusb_1_0_la-linux_usbfs.Plo +# $(AM_V_CC) \ +# source='os/linux_usbfs.c' object='libusb_1_0_la-linux_usbfs.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-linux_usbfs.lo `test -f 'os/linux_usbfs.c' || echo '$(srcdir)/'`os/linux_usbfs.c + +libusb_1_0_la-openbsd_usb.lo: os/openbsd_usb.c + $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-openbsd_usb.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-openbsd_usb.Tpo -c -o libusb_1_0_la-openbsd_usb.lo `test -f 'os/openbsd_usb.c' || echo '$(srcdir)/'`os/openbsd_usb.c + $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-openbsd_usb.Tpo $(DEPDIR)/libusb_1_0_la-openbsd_usb.Plo +# $(AM_V_CC) \ +# source='os/openbsd_usb.c' object='libusb_1_0_la-openbsd_usb.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-openbsd_usb.lo `test -f 'os/openbsd_usb.c' || echo '$(srcdir)/'`os/openbsd_usb.c + +libusb_1_0_la-poll_windows.lo: os/poll_windows.c + $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-poll_windows.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-poll_windows.Tpo -c -o libusb_1_0_la-poll_windows.lo `test -f 'os/poll_windows.c' || echo '$(srcdir)/'`os/poll_windows.c + $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-poll_windows.Tpo $(DEPDIR)/libusb_1_0_la-poll_windows.Plo +# $(AM_V_CC) \ +# source='os/poll_windows.c' object='libusb_1_0_la-poll_windows.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-poll_windows.lo `test -f 'os/poll_windows.c' || echo '$(srcdir)/'`os/poll_windows.c + +libusb_1_0_la-windows_usb.lo: os/windows_usb.c + $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-windows_usb.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-windows_usb.Tpo -c -o libusb_1_0_la-windows_usb.lo `test -f 'os/windows_usb.c' || echo '$(srcdir)/'`os/windows_usb.c + $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-windows_usb.Tpo $(DEPDIR)/libusb_1_0_la-windows_usb.Plo +# $(AM_V_CC) \ +# source='os/windows_usb.c' object='libusb_1_0_la-windows_usb.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-windows_usb.lo `test -f 'os/windows_usb.c' || echo '$(srcdir)/'`os/windows_usb.c + +libusb_1_0_la-threads_windows.lo: os/threads_windows.c + $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-threads_windows.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-threads_windows.Tpo -c -o libusb_1_0_la-threads_windows.lo `test -f 'os/threads_windows.c' || echo '$(srcdir)/'`os/threads_windows.c + $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-threads_windows.Tpo $(DEPDIR)/libusb_1_0_la-threads_windows.Plo +# $(AM_V_CC) \ +# source='os/threads_windows.c' object='libusb_1_0_la-threads_windows.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-threads_windows.lo `test -f 'os/threads_windows.c' || echo '$(srcdir)/'`os/threads_windows.c + +libusb_1_0_la-threads_posix.lo: os/threads_posix.c + $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-threads_posix.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-threads_posix.Tpo -c -o libusb_1_0_la-threads_posix.lo `test -f 'os/threads_posix.c' || echo '$(srcdir)/'`os/threads_posix.c + $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-threads_posix.Tpo $(DEPDIR)/libusb_1_0_la-threads_posix.Plo +# $(AM_V_CC) \ +# source='os/threads_posix.c' object='libusb_1_0_la-threads_posix.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-threads_posix.lo `test -f 'os/threads_posix.c' || echo '$(srcdir)/'`os/threads_posix.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-hdrHEADERS: $(hdr_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(hdrdir)" || $(MKDIR_P) "$(DESTDIR)$(hdrdir)" + @list='$(hdr_HEADERS)'; test -n "$(hdrdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(hdrdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(hdrdir)" || exit $$?; \ + done + +uninstall-hdrHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(hdr_HEADERS)'; test -n "$(hdrdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(hdrdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(hdrdir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(hdrdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-hdrHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-hdrHEADERS uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-hdrHEADERS \ + install-html install-html-am install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-hdrHEADERS \ + uninstall-libLTLIBRARIES + + +#.rc.lo: +# $(AM_V_GEN)$(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --tag=RC --mode=compile $(RC) $(RCFLAGS) -i $< -o $@ + +#libusb-1.0.rc: version.h + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/Makefile.am b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/Makefile.am new file mode 100644 index 0000000..3316ebc --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/Makefile.am @@ -0,0 +1,49 @@ +lib_LTLIBRARIES = libusb-1.0.la + +LINUX_USBFS_SRC = os/linux_usbfs.c +DARWIN_USB_SRC = os/darwin_usb.c +OPENBSD_USB_SRC = os/openbsd_usb.c +WINDOWS_USB_SRC = os/poll_windows.c os/windows_usb.c libusb-1.0.rc \ + libusb-1.0.def + +EXTRA_DIST = $(LINUX_USBFS_SRC) $(DARWIN_USB_SRC) $(OPENBSD_USB_SRC) \ + $(WINDOWS_USB_SRC) os/threads_posix.c os/threads_windows.c + +if OS_LINUX +OS_SRC = $(LINUX_USBFS_SRC) +endif + +if OS_DARWIN +OS_SRC = $(DARWIN_USB_SRC) +AM_CFLAGS_EXT = -no-cpp-precomp +endif + +if OS_OPENBSD +OS_SRC = $(OPENBSD_USB_SRC) +endif + +if OS_WINDOWS +OS_SRC = $(WINDOWS_USB_SRC) + +.rc.lo: + $(AM_V_GEN)$(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --tag=RC --mode=compile $(RC) $(RCFLAGS) -i $< -o $@ + +libusb-1.0.rc: version.h +endif + +if THREADS_POSIX +THREADS_SRC = os/threads_posix.h os/threads_posix.c +else +THREADS_SRC = os/threads_windows.h os/threads_windows.c +endif + +libusb_1_0_la_CFLAGS = $(VISIBILITY_CFLAGS) $(AM_CFLAGS) $(THREAD_CFLAGS) \ + -DLIBUSB_DESCRIBE=\"`git --git-dir "$(top_srcdir)/.git" describe --tags 2>/dev/null`\" +libusb_1_0_la_LDFLAGS = $(LTLDFLAGS) +libusb_1_0_la_SOURCES = libusbi.h core.c descriptor.c io.c sync.c $(OS_SRC) \ + os/linux_usbfs.h os/darwin_usb.h os/windows_usb.h \ + $(THREADS_SRC) \ + os/poll_posix.h os/poll_windows.h + +hdrdir = $(includedir)/libusb-1.0 +hdr_HEADERS = libusb.h diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/Makefile.in b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/Makefile.in new file mode 100644 index 0000000..193adae --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/Makefile.in @@ -0,0 +1,718 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = libusb +DIST_COMMON = $(hdr_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/libusb/version.h \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(hdrdir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libusb_1_0_la_LIBADD = +am__libusb_1_0_la_SOURCES_DIST = libusbi.h core.c descriptor.c io.c \ + sync.c os/darwin_usb.c os/linux_usbfs.c os/openbsd_usb.c \ + os/poll_windows.c os/windows_usb.c libusb-1.0.rc \ + libusb-1.0.def os/linux_usbfs.h os/darwin_usb.h \ + os/windows_usb.h os/threads_windows.h os/threads_windows.c \ + os/threads_posix.h os/threads_posix.c os/poll_posix.h \ + os/poll_windows.h +am__objects_1 = libusb_1_0_la-darwin_usb.lo +am__objects_2 = libusb_1_0_la-linux_usbfs.lo +am__objects_3 = libusb_1_0_la-openbsd_usb.lo +am__objects_4 = libusb_1_0_la-poll_windows.lo \ + libusb_1_0_la-windows_usb.lo libusb-1.0.lo +@OS_DARWIN_FALSE@@OS_LINUX_FALSE@@OS_OPENBSD_FALSE@@OS_WINDOWS_TRUE@am__objects_5 = $(am__objects_4) +@OS_DARWIN_FALSE@@OS_LINUX_FALSE@@OS_OPENBSD_TRUE@am__objects_5 = $(am__objects_3) +@OS_DARWIN_FALSE@@OS_LINUX_TRUE@am__objects_5 = $(am__objects_2) +@OS_DARWIN_TRUE@am__objects_5 = $(am__objects_1) +@THREADS_POSIX_FALSE@am__objects_6 = libusb_1_0_la-threads_windows.lo +@THREADS_POSIX_TRUE@am__objects_6 = libusb_1_0_la-threads_posix.lo +am_libusb_1_0_la_OBJECTS = libusb_1_0_la-core.lo \ + libusb_1_0_la-descriptor.lo libusb_1_0_la-io.lo \ + libusb_1_0_la-sync.lo $(am__objects_5) $(am__objects_6) +libusb_1_0_la_OBJECTS = $(am_libusb_1_0_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +libusb_1_0_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libusb_1_0_la_CFLAGS) \ + $(CFLAGS) $(libusb_1_0_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libusb_1_0_la_SOURCES) +DIST_SOURCES = $(am__libusb_1_0_la_SOURCES_DIST) +HEADERS = $(hdr_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CFLAGS = @AM_CFLAGS@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLDFLAGS = @LTLDFLAGS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OS_DARWIN = @OS_DARWIN@ +OS_LINUX = @OS_LINUX@ +OS_OPENBSD = @OS_OPENBSD@ +OS_WINDOWS = @OS_WINDOWS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PC_LIBS_PRIVATE = @PC_LIBS_PRIVATE@ +RANLIB = @RANLIB@ +RC = @RC@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +THREAD_CFLAGS = @THREAD_CFLAGS@ +VERSION = @VERSION@ +VISIBILITY_CFLAGS = @VISIBILITY_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +lib_LTLIBRARIES = libusb-1.0.la +LINUX_USBFS_SRC = os/linux_usbfs.c +DARWIN_USB_SRC = os/darwin_usb.c +OPENBSD_USB_SRC = os/openbsd_usb.c +WINDOWS_USB_SRC = os/poll_windows.c os/windows_usb.c libusb-1.0.rc \ + libusb-1.0.def + +EXTRA_DIST = $(LINUX_USBFS_SRC) $(DARWIN_USB_SRC) $(OPENBSD_USB_SRC) \ + $(WINDOWS_USB_SRC) os/threads_posix.c os/threads_windows.c + +@OS_DARWIN_TRUE@OS_SRC = $(DARWIN_USB_SRC) +@OS_LINUX_TRUE@OS_SRC = $(LINUX_USBFS_SRC) +@OS_OPENBSD_TRUE@OS_SRC = $(OPENBSD_USB_SRC) +@OS_WINDOWS_TRUE@OS_SRC = $(WINDOWS_USB_SRC) +@OS_DARWIN_TRUE@AM_CFLAGS_EXT = -no-cpp-precomp +@THREADS_POSIX_FALSE@THREADS_SRC = os/threads_windows.h os/threads_windows.c +@THREADS_POSIX_TRUE@THREADS_SRC = os/threads_posix.h os/threads_posix.c +libusb_1_0_la_CFLAGS = $(VISIBILITY_CFLAGS) $(AM_CFLAGS) $(THREAD_CFLAGS) \ + -DLIBUSB_DESCRIBE=\"`git --git-dir "$(top_srcdir)/.git" describe --tags 2>/dev/null`\" + +libusb_1_0_la_LDFLAGS = $(LTLDFLAGS) +libusb_1_0_la_SOURCES = libusbi.h core.c descriptor.c io.c sync.c $(OS_SRC) \ + os/linux_usbfs.h os/darwin_usb.h os/windows_usb.h \ + $(THREADS_SRC) \ + os/poll_posix.h os/poll_windows.h + +hdrdir = $(includedir)/libusb-1.0 +hdr_HEADERS = libusb.h +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj .rc +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libusb/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu libusb/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libusb-1.0.la: $(libusb_1_0_la_OBJECTS) $(libusb_1_0_la_DEPENDENCIES) + $(AM_V_CCLD)$(libusb_1_0_la_LINK) -rpath $(libdir) $(libusb_1_0_la_OBJECTS) $(libusb_1_0_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-core.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-darwin_usb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-descriptor.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-io.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-linux_usbfs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-openbsd_usb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-poll_windows.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-sync.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-threads_posix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-threads_windows.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libusb_1_0_la-windows_usb.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +libusb_1_0_la-core.lo: core.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-core.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-core.Tpo -c -o libusb_1_0_la-core.lo `test -f 'core.c' || echo '$(srcdir)/'`core.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-core.Tpo $(DEPDIR)/libusb_1_0_la-core.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='core.c' object='libusb_1_0_la-core.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-core.lo `test -f 'core.c' || echo '$(srcdir)/'`core.c + +libusb_1_0_la-descriptor.lo: descriptor.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-descriptor.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-descriptor.Tpo -c -o libusb_1_0_la-descriptor.lo `test -f 'descriptor.c' || echo '$(srcdir)/'`descriptor.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-descriptor.Tpo $(DEPDIR)/libusb_1_0_la-descriptor.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='descriptor.c' object='libusb_1_0_la-descriptor.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-descriptor.lo `test -f 'descriptor.c' || echo '$(srcdir)/'`descriptor.c + +libusb_1_0_la-io.lo: io.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-io.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-io.Tpo -c -o libusb_1_0_la-io.lo `test -f 'io.c' || echo '$(srcdir)/'`io.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-io.Tpo $(DEPDIR)/libusb_1_0_la-io.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='io.c' object='libusb_1_0_la-io.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-io.lo `test -f 'io.c' || echo '$(srcdir)/'`io.c + +libusb_1_0_la-sync.lo: sync.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-sync.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-sync.Tpo -c -o libusb_1_0_la-sync.lo `test -f 'sync.c' || echo '$(srcdir)/'`sync.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-sync.Tpo $(DEPDIR)/libusb_1_0_la-sync.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sync.c' object='libusb_1_0_la-sync.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-sync.lo `test -f 'sync.c' || echo '$(srcdir)/'`sync.c + +libusb_1_0_la-darwin_usb.lo: os/darwin_usb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-darwin_usb.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-darwin_usb.Tpo -c -o libusb_1_0_la-darwin_usb.lo `test -f 'os/darwin_usb.c' || echo '$(srcdir)/'`os/darwin_usb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-darwin_usb.Tpo $(DEPDIR)/libusb_1_0_la-darwin_usb.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/darwin_usb.c' object='libusb_1_0_la-darwin_usb.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-darwin_usb.lo `test -f 'os/darwin_usb.c' || echo '$(srcdir)/'`os/darwin_usb.c + +libusb_1_0_la-linux_usbfs.lo: os/linux_usbfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-linux_usbfs.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-linux_usbfs.Tpo -c -o libusb_1_0_la-linux_usbfs.lo `test -f 'os/linux_usbfs.c' || echo '$(srcdir)/'`os/linux_usbfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-linux_usbfs.Tpo $(DEPDIR)/libusb_1_0_la-linux_usbfs.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/linux_usbfs.c' object='libusb_1_0_la-linux_usbfs.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-linux_usbfs.lo `test -f 'os/linux_usbfs.c' || echo '$(srcdir)/'`os/linux_usbfs.c + +libusb_1_0_la-openbsd_usb.lo: os/openbsd_usb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-openbsd_usb.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-openbsd_usb.Tpo -c -o libusb_1_0_la-openbsd_usb.lo `test -f 'os/openbsd_usb.c' || echo '$(srcdir)/'`os/openbsd_usb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-openbsd_usb.Tpo $(DEPDIR)/libusb_1_0_la-openbsd_usb.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/openbsd_usb.c' object='libusb_1_0_la-openbsd_usb.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-openbsd_usb.lo `test -f 'os/openbsd_usb.c' || echo '$(srcdir)/'`os/openbsd_usb.c + +libusb_1_0_la-poll_windows.lo: os/poll_windows.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-poll_windows.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-poll_windows.Tpo -c -o libusb_1_0_la-poll_windows.lo `test -f 'os/poll_windows.c' || echo '$(srcdir)/'`os/poll_windows.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-poll_windows.Tpo $(DEPDIR)/libusb_1_0_la-poll_windows.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/poll_windows.c' object='libusb_1_0_la-poll_windows.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-poll_windows.lo `test -f 'os/poll_windows.c' || echo '$(srcdir)/'`os/poll_windows.c + +libusb_1_0_la-windows_usb.lo: os/windows_usb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-windows_usb.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-windows_usb.Tpo -c -o libusb_1_0_la-windows_usb.lo `test -f 'os/windows_usb.c' || echo '$(srcdir)/'`os/windows_usb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-windows_usb.Tpo $(DEPDIR)/libusb_1_0_la-windows_usb.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/windows_usb.c' object='libusb_1_0_la-windows_usb.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-windows_usb.lo `test -f 'os/windows_usb.c' || echo '$(srcdir)/'`os/windows_usb.c + +libusb_1_0_la-threads_windows.lo: os/threads_windows.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-threads_windows.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-threads_windows.Tpo -c -o libusb_1_0_la-threads_windows.lo `test -f 'os/threads_windows.c' || echo '$(srcdir)/'`os/threads_windows.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-threads_windows.Tpo $(DEPDIR)/libusb_1_0_la-threads_windows.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/threads_windows.c' object='libusb_1_0_la-threads_windows.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-threads_windows.lo `test -f 'os/threads_windows.c' || echo '$(srcdir)/'`os/threads_windows.c + +libusb_1_0_la-threads_posix.lo: os/threads_posix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -MT libusb_1_0_la-threads_posix.lo -MD -MP -MF $(DEPDIR)/libusb_1_0_la-threads_posix.Tpo -c -o libusb_1_0_la-threads_posix.lo `test -f 'os/threads_posix.c' || echo '$(srcdir)/'`os/threads_posix.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libusb_1_0_la-threads_posix.Tpo $(DEPDIR)/libusb_1_0_la-threads_posix.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/threads_posix.c' object='libusb_1_0_la-threads_posix.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libusb_1_0_la_CFLAGS) $(CFLAGS) -c -o libusb_1_0_la-threads_posix.lo `test -f 'os/threads_posix.c' || echo '$(srcdir)/'`os/threads_posix.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-hdrHEADERS: $(hdr_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(hdrdir)" || $(MKDIR_P) "$(DESTDIR)$(hdrdir)" + @list='$(hdr_HEADERS)'; test -n "$(hdrdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(hdrdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(hdrdir)" || exit $$?; \ + done + +uninstall-hdrHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(hdr_HEADERS)'; test -n "$(hdrdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(hdrdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(hdrdir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(hdrdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-hdrHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-hdrHEADERS uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-hdrHEADERS \ + install-html install-html-am install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-hdrHEADERS \ + uninstall-libLTLIBRARIES + + +@OS_WINDOWS_TRUE@.rc.lo: +@OS_WINDOWS_TRUE@ $(AM_V_GEN)$(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --tag=RC --mode=compile $(RC) $(RCFLAGS) -i $< -o $@ + +@OS_WINDOWS_TRUE@libusb-1.0.rc: version.h + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/core.c b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/core.c new file mode 100644 index 0000000..767dcbf --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/core.c @@ -0,0 +1,1875 @@ +/* + * Core functions for libusb + * Copyright (C) 2007-2008 Daniel Drake + * Copyright (c) 2001 Johannes Erdfelt + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include + +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_SYS_TIME_H +#include +#endif + +#include "libusbi.h" + +#if defined(OS_LINUX) +const struct usbi_os_backend * const usbi_backend = &linux_usbfs_backend; +#elif defined(OS_DARWIN) +const struct usbi_os_backend * const usbi_backend = &darwin_backend; +#elif defined(OS_OPENBSD) +const struct usbi_os_backend * const usbi_backend = &openbsd_backend; +#elif defined(OS_WINDOWS) +const struct usbi_os_backend * const usbi_backend = &windows_backend; +#else +#error "Unsupported OS" +#endif + +const struct libusb_version libusb_version_internal = { + LIBUSB_MAJOR, LIBUSB_MINOR, LIBUSB_MICRO, LIBUSB_NANO, LIBUSB_RC, + LIBUSB_DESCRIBE +}; + +struct libusb_context *usbi_default_context = NULL; +static int default_context_refcnt = 0; +static usbi_mutex_static_t default_context_lock = USBI_MUTEX_INITIALIZER; + +/** + * \mainpage libusb-1.0 API Reference + * + * \section intro Introduction + * + * libusb is an open source library that allows you to communicate with USB + * devices from userspace. For more info, see the + * libusb homepage. + * + * This documentation is aimed at application developers wishing to + * communicate with USB peripherals from their own software. After reviewing + * this documentation, feedback and questions can be sent to the + * libusb-devel mailing + * list. + * + * This documentation assumes knowledge of how to operate USB devices from + * a software standpoint (descriptors, configurations, interfaces, endpoints, + * control/bulk/interrupt/isochronous transfers, etc). Full information + * can be found in the USB 2.0 + * Specification which is available for free download. You can probably + * find less verbose introductions by searching the web. + * + * \section features Library features + * + * - All transfer types supported (control/bulk/interrupt/isochronous) + * - 2 transfer interfaces: + * -# Synchronous (simple) + * -# Asynchronous (more complicated, but more powerful) + * - Thread safe (although the asynchronous interface means that you + * usually won't need to thread) + * - Lightweight with lean API + * - Compatible with libusb-0.1 through the libusb-compat-0.1 translation layer + * + * \section gettingstarted Getting Started + * + * To begin reading the API documentation, start with the Modules page which + * links to the different categories of libusb's functionality. + * + * One decision you will have to make is whether to use the synchronous + * or the asynchronous data transfer interface. The \ref io documentation + * provides some insight into this topic. + * + * Some example programs can be found in the libusb source distribution under + * the "examples" subdirectory. The libusb homepage includes a list of + * real-life project examples which use libusb. + * + * \section errorhandling Error handling + * + * libusb functions typically return 0 on success or a negative error code + * on failure. These negative error codes relate to LIBUSB_ERROR constants + * which are listed on the \ref misc "miscellaneous" documentation page. + * + * \section msglog Debug message logging + * + * libusb does not log any messages by default. Your application is therefore + * free to close stdout/stderr and those descriptors may be reused without + * worry. + * + * The libusb_set_debug() function can be used to enable stdout/stderr logging + * of certain messages. Under standard configuration, libusb doesn't really + * log much at all, so you are advised to use this function to enable all + * error/warning/informational messages. It will help you debug problems with + * your software. + * + * The logged messages are unstructured. There is no one-to-one correspondence + * between messages being logged and success or failure return codes from + * libusb functions. There is no format to the messages, so you should not + * try to capture or parse them. They are not and will not be localized. + * These messages are not suitable for being passed to your application user; + * instead, you should interpret the error codes returned from libusb functions + * and provide appropriate notification to the user. The messages are simply + * there to aid you as a programmer, and if you're confused because you're + * getting a strange error code from a libusb function, enabling message + * logging may give you a suitable explanation. + * + * The LIBUSB_DEBUG environment variable can be used to enable message logging + * at run-time. This environment variable should be set to a number, which is + * interpreted the same as the libusb_set_debug() parameter. When this + * environment variable is set, the message logging verbosity level is fixed + * and libusb_set_debug() effectively does nothing. + * + * libusb can be compiled without any logging functions, useful for embedded + * systems. In this case, libusb_set_debug() and the LIBUSB_DEBUG environment + * variable have no effects. + * + * libusb can also be compiled with verbose debugging messages. When the + * library is compiled in this way, all messages of all verbosities are always + * logged. libusb_set_debug() and the LIBUSB_DEBUG environment variable have + * no effects. + * + * \section remarks Other remarks + * + * libusb does have imperfections. The \ref caveats "caveats" page attempts + * to document these. + */ + +/** + * \page caveats Caveats + * + * \section devresets Device resets + * + * The libusb_reset_device() function allows you to reset a device. If your + * program has to call such a function, it should obviously be aware that + * the reset will cause device state to change (e.g. register values may be + * reset). + * + * The problem is that any other program could reset the device your program + * is working with, at any time. libusb does not offer a mechanism to inform + * you when this has happened, so if someone else resets your device it will + * not be clear to your own program why the device state has changed. + * + * Ultimately, this is a limitation of writing drivers in userspace. + * Separation from the USB stack in the underlying kernel makes it difficult + * for the operating system to deliver such notifications to your program. + * The Linux kernel USB stack allows such reset notifications to be delivered + * to in-kernel USB drivers, but it is not clear how such notifications could + * be delivered to second-class drivers that live in userspace. + * + * \section blockonly Blocking-only functionality + * + * The functionality listed below is only available through synchronous, + * blocking functions. There are no asynchronous/non-blocking alternatives, + * and no clear ways of implementing these. + * + * - Configuration activation (libusb_set_configuration()) + * - Interface/alternate setting activation (libusb_set_interface_alt_setting()) + * - Releasing of interfaces (libusb_release_interface()) + * - Clearing of halt/stall condition (libusb_clear_halt()) + * - Device resets (libusb_reset_device()) + * + * \section nohotplug No hotplugging + * + * libusb-1.0 lacks functionality for providing notifications of when devices + * are added or removed. This functionality is planned to be implemented + * for libusb-1.1. + * + * That said, there is basic disconnection handling for open device handles: + * - If there are ongoing transfers, libusb's handle_events loop will detect + * disconnections and complete ongoing transfers with the + * LIBUSB_TRANSFER_NO_DEVICE status code. + * - Many functions such as libusb_set_configuration() return the special + * LIBUSB_ERROR_NO_DEVICE error code when the device has been disconnected. + * + * \section configsel Configuration selection and handling + * + * When libusb presents a device handle to an application, there is a chance + * that the corresponding device may be in unconfigured state. For devices + * with multiple configurations, there is also a chance that the configuration + * currently selected is not the one that the application wants to use. + * + * The obvious solution is to add a call to libusb_set_configuration() early + * on during your device initialization routines, but there are caveats to + * be aware of: + * -# If the device is already in the desired configuration, calling + * libusb_set_configuration() using the same configuration value will cause + * a lightweight device reset. This may not be desirable behaviour. + * -# libusb will be unable to change configuration if the device is in + * another configuration and other programs or drivers have claimed + * interfaces under that configuration. + * -# In the case where the desired configuration is already active, libusb + * may not even be able to perform a lightweight device reset. For example, + * take my USB keyboard with fingerprint reader: I'm interested in driving + * the fingerprint reader interface through libusb, but the kernel's + * USB-HID driver will almost always have claimed the keyboard interface. + * Because the kernel has claimed an interface, it is not even possible to + * perform the lightweight device reset, so libusb_set_configuration() will + * fail. (Luckily the device in question only has a single configuration.) + * + * One solution to some of the above problems is to consider the currently + * active configuration. If the configuration we want is already active, then + * we don't have to select any configuration: +\code +cfg = libusb_get_configuration(dev); +if (cfg != desired) + libusb_set_configuration(dev, desired); +\endcode + * + * This is probably suitable for most scenarios, but is inherently racy: + * another application or driver may change the selected configuration + * after the libusb_get_configuration() call. + * + * Even in cases where libusb_set_configuration() succeeds, consider that other + * applications or drivers may change configuration after your application + * calls libusb_set_configuration(). + * + * One possible way to lock your device into a specific configuration is as + * follows: + * -# Set the desired configuration (or use the logic above to realise that + * it is already in the desired configuration) + * -# Claim the interface that you wish to use + * -# Check that the currently active configuration is the one that you want + * to use. + * + * The above method works because once an interface is claimed, no application + * or driver is able to select another configuration. + * + * \section earlycomp Early transfer completion + * + * NOTE: This section is currently Linux-centric. I am not sure if any of these + * considerations apply to Darwin or other platforms. + * + * When a transfer completes early (i.e. when less data is received/sent in + * any one packet than the transfer buffer allows for) then libusb is designed + * to terminate the transfer immediately, not transferring or receiving any + * more data unless other transfers have been queued by the user. + * + * On legacy platforms, libusb is unable to do this in all situations. After + * the incomplete packet occurs, "surplus" data may be transferred. Prior to + * libusb v1.0.2, this information was lost (and for device-to-host transfers, + * the corresponding data was discarded). As of libusb v1.0.3, this information + * is kept (the data length of the transfer is updated) and, for device-to-host + * transfers, any surplus data was added to the buffer. Still, this is not + * a nice solution because it loses the information about the end of the short + * packet, and the user probably wanted that surplus data to arrive in the next + * logical transfer. + * + * A previous workaround was to only ever submit transfers of size 16kb or + * less. + * + * As of libusb v1.0.4 and Linux v2.6.32, this is fixed. A technical + * explanation of this issue follows. + * + * When you ask libusb to submit a bulk transfer larger than 16kb in size, + * libusb breaks it up into a number of smaller subtransfers. This is because + * the usbfs kernel interface only accepts transfers of up to 16kb in size. + * The subtransfers are submitted all at once so that the kernel can queue + * them at the hardware level, therefore maximizing bus throughput. + * + * On legacy platforms, this caused problems when transfers completed early. + * Upon this event, the kernel would terminate all further packets in that + * subtransfer (but not any following ones). libusb would note this event and + * immediately cancel any following subtransfers that had been queued, + * but often libusb was not fast enough, and the following subtransfers had + * started before libusb got around to cancelling them. + * + * Thanks to an API extension to usbfs, this is fixed with recent kernel and + * libusb releases. The solution was to allow libusb to communicate to the + * kernel where boundaries occur between logical libusb-level transfers. When + * a short transfer (or other error) occurs, the kernel will cancel all the + * subtransfers until the boundary without allowing those transfers to start. + * + * \section zlp Zero length packets + * + * - libusb is able to send a packet of zero length to an endpoint simply by + * submitting a transfer of zero length. On Linux, this did not work with + * libusb versions prior to 1.0.3 and kernel versions prior to 2.6.31. + * - The \ref libusb_transfer_flags::LIBUSB_TRANSFER_ADD_ZERO_PACKET + * "LIBUSB_TRANSFER_ADD_ZERO_PACKET" flag is currently only supported on Linux. + */ + +/** + * \page contexts Contexts + * + * It is possible that libusb may be used simultaneously from two independent + * libraries linked into the same executable. For example, if your application + * has a plugin-like system which allows the user to dynamically load a range + * of modules into your program, it is feasible that two independently + * developed modules may both use libusb. + * + * libusb is written to allow for these multiple user scenarios. The two + * "instances" of libusb will not interfere: libusb_set_debug() calls + * from one user will not affect the same settings for other users, other + * users can continue using libusb after one of them calls libusb_exit(), etc. + * + * This is made possible through libusb's context concept. When you + * call libusb_init(), you are (optionally) given a context. You can then pass + * this context pointer back into future libusb functions. + * + * In order to keep things simple for more simplistic applications, it is + * legal to pass NULL to all functions requiring a context pointer (as long as + * you're sure no other code will attempt to use libusb from the same process). + * When you pass NULL, the default context will be used. The default context + * is created the first time a process calls libusb_init() when no other + * context is alive. Contexts are destroyed during libusb_exit(). + * + * The default context is reference-counted and can be shared. That means that + * if libusb_init(NULL) is called twice within the same process, the two + * users end up sharing the same context. The deinitialization and freeing of + * the default context will only happen when the last user calls libusb_exit(). + * In other words, the default context is created and initialized when its + * reference count goes from 0 to 1, and is deinitialized and destroyed when + * its reference count goes from 1 to 0. + * + * You may be wondering why only a subset of libusb functions require a + * context pointer in their function definition. Internally, libusb stores + * context pointers in other objects (e.g. libusb_device instances) and hence + * can infer the context from those objects. + */ + +/** + * @defgroup lib Library initialization/deinitialization + * This page details how to initialize and deinitialize libusb. Initialization + * must be performed before using any libusb functionality, and similarly you + * must not call any libusb functions after deinitialization. + */ + +/** + * @defgroup dev Device handling and enumeration + * The functionality documented below is designed to help with the following + * operations: + * - Enumerating the USB devices currently attached to the system + * - Choosing a device to operate from your software + * - Opening and closing the chosen device + * + * \section nutshell In a nutshell... + * + * The description below really makes things sound more complicated than they + * actually are. The following sequence of function calls will be suitable + * for almost all scenarios and does not require you to have such a deep + * understanding of the resource management issues: + * \code +// discover devices +libusb_device **list; +libusb_device *found = NULL; +ssize_t cnt = libusb_get_device_list(NULL, &list); +ssize_t i = 0; +int err = 0; +if (cnt < 0) + error(); + +for (i = 0; i < cnt; i++) { + libusb_device *device = list[i]; + if (is_interesting(device)) { + found = device; + break; + } +} + +if (found) { + libusb_device_handle *handle; + + err = libusb_open(found, &handle); + if (err) + error(); + // etc +} + +libusb_free_device_list(list, 1); +\endcode + * + * The two important points: + * - You asked libusb_free_device_list() to unreference the devices (2nd + * parameter) + * - You opened the device before freeing the list and unreferencing the + * devices + * + * If you ended up with a handle, you can now proceed to perform I/O on the + * device. + * + * \section devshandles Devices and device handles + * libusb has a concept of a USB device, represented by the + * \ref libusb_device opaque type. A device represents a USB device that + * is currently or was previously connected to the system. Using a reference + * to a device, you can determine certain information about the device (e.g. + * you can read the descriptor data). + * + * The libusb_get_device_list() function can be used to obtain a list of + * devices currently connected to the system. This is known as device + * discovery. + * + * Just because you have a reference to a device does not mean it is + * necessarily usable. The device may have been unplugged, you may not have + * permission to operate such device, or another program or driver may be + * using the device. + * + * When you've found a device that you'd like to operate, you must ask + * libusb to open the device using the libusb_open() function. Assuming + * success, libusb then returns you a device handle + * (a \ref libusb_device_handle pointer). All "real" I/O operations then + * operate on the handle rather than the original device pointer. + * + * \section devref Device discovery and reference counting + * + * Device discovery (i.e. calling libusb_get_device_list()) returns a + * freshly-allocated list of devices. The list itself must be freed when + * you are done with it. libusb also needs to know when it is OK to free + * the contents of the list - the devices themselves. + * + * To handle these issues, libusb provides you with two separate items: + * - A function to free the list itself + * - A reference counting system for the devices inside + * + * New devices presented by the libusb_get_device_list() function all have a + * reference count of 1. You can increase and decrease reference count using + * libusb_ref_device() and libusb_unref_device(). A device is destroyed when + * its reference count reaches 0. + * + * With the above information in mind, the process of opening a device can + * be viewed as follows: + * -# Discover devices using libusb_get_device_list(). + * -# Choose the device that you want to operate, and call libusb_open(). + * -# Unref all devices in the discovered device list. + * -# Free the discovered device list. + * + * The order is important - you must not unreference the device before + * attempting to open it, because unreferencing it may destroy the device. + * + * For convenience, the libusb_free_device_list() function includes a + * parameter to optionally unreference all the devices in the list before + * freeing the list itself. This combines steps 3 and 4 above. + * + * As an implementation detail, libusb_open() actually adds a reference to + * the device in question. This is because the device remains available + * through the handle via libusb_get_device(). The reference is deleted during + * libusb_close(). + */ + +/** @defgroup misc Miscellaneous */ + +/* we traverse usbfs without knowing how many devices we are going to find. + * so we create this discovered_devs model which is similar to a linked-list + * which grows when required. it can be freed once discovery has completed, + * eliminating the need for a list node in the libusb_device structure + * itself. */ +#define DISCOVERED_DEVICES_SIZE_STEP 8 + +static struct discovered_devs *discovered_devs_alloc(void) +{ + struct discovered_devs *ret = + malloc(sizeof(*ret) + (sizeof(void *) * DISCOVERED_DEVICES_SIZE_STEP)); + + if (ret) { + ret->len = 0; + ret->capacity = DISCOVERED_DEVICES_SIZE_STEP; + } + return ret; +} + +/* append a device to the discovered devices collection. may realloc itself, + * returning new discdevs. returns NULL on realloc failure. */ +struct discovered_devs *discovered_devs_append( + struct discovered_devs *discdevs, struct libusb_device *dev) +{ + size_t len = discdevs->len; + size_t capacity; + + /* if there is space, just append the device */ + if (len < discdevs->capacity) { + discdevs->devices[len] = libusb_ref_device(dev); + discdevs->len++; + return discdevs; + } + + /* exceeded capacity, need to grow */ + usbi_dbg("need to increase capacity"); + capacity = discdevs->capacity + DISCOVERED_DEVICES_SIZE_STEP; + discdevs = realloc(discdevs, + sizeof(*discdevs) + (sizeof(void *) * capacity)); + if (discdevs) { + discdevs->capacity = capacity; + discdevs->devices[len] = libusb_ref_device(dev); + discdevs->len++; + } + + return discdevs; +} + +static void discovered_devs_free(struct discovered_devs *discdevs) +{ + size_t i; + + for (i = 0; i < discdevs->len; i++) + libusb_unref_device(discdevs->devices[i]); + + free(discdevs); +} + +/* Allocate a new device with a specific session ID. The returned device has + * a reference count of 1. */ +struct libusb_device *usbi_alloc_device(struct libusb_context *ctx, + unsigned long session_id) +{ + size_t priv_size = usbi_backend->device_priv_size; + struct libusb_device *dev = calloc(1, sizeof(*dev) + priv_size); + int r; + + if (!dev) + return NULL; + + r = usbi_mutex_init(&dev->lock, NULL); + if (r) { + free(dev); + return NULL; + } + + dev->ctx = ctx; + dev->refcnt = 1; + dev->session_data = session_id; + dev->speed = LIBUSB_SPEED_UNKNOWN; + memset(&dev->os_priv, 0, priv_size); + + usbi_mutex_lock(&ctx->usb_devs_lock); + list_add(&dev->list, &ctx->usb_devs); + usbi_mutex_unlock(&ctx->usb_devs_lock); + return dev; +} + +/* Perform some final sanity checks on a newly discovered device. If this + * function fails (negative return code), the device should not be added + * to the discovered device list. */ +int usbi_sanitize_device(struct libusb_device *dev) +{ + int r; + unsigned char raw_desc[DEVICE_DESC_LENGTH]; + uint8_t num_configurations; + int host_endian; + + r = usbi_backend->get_device_descriptor(dev, raw_desc, &host_endian); + if (r < 0) + return r; + + num_configurations = raw_desc[DEVICE_DESC_LENGTH - 1]; + if (num_configurations > USB_MAXCONFIG) { + usbi_err(DEVICE_CTX(dev), "too many configurations"); + return LIBUSB_ERROR_IO; + } else if (0 == num_configurations) + usbi_dbg("zero configurations, maybe an unauthorized device"); + + dev->num_configurations = num_configurations; + return 0; +} + +/* Examine libusb's internal list of known devices, looking for one with + * a specific session ID. Returns the matching device if it was found, and + * NULL otherwise. */ +struct libusb_device *usbi_get_device_by_session_id(struct libusb_context *ctx, + unsigned long session_id) +{ + struct libusb_device *dev; + struct libusb_device *ret = NULL; + + usbi_mutex_lock(&ctx->usb_devs_lock); + list_for_each_entry(dev, &ctx->usb_devs, list, struct libusb_device) + if (dev->session_data == session_id) { + ret = dev; + break; + } + usbi_mutex_unlock(&ctx->usb_devs_lock); + + return ret; +} + +/** @ingroup dev + * Returns a list of USB devices currently attached to the system. This is + * your entry point into finding a USB device to operate. + * + * You are expected to unreference all the devices when you are done with + * them, and then free the list with libusb_free_device_list(). Note that + * libusb_free_device_list() can unref all the devices for you. Be careful + * not to unreference a device you are about to open until after you have + * opened it. + * + * This return value of this function indicates the number of devices in + * the resultant list. The list is actually one element larger, as it is + * NULL-terminated. + * + * \param ctx the context to operate on, or NULL for the default context + * \param list output location for a list of devices. Must be later freed with + * libusb_free_device_list(). + * \returns The number of devices in the outputted list, or any + * \ref libusb_error according to errors encountered by the backend. + */ +ssize_t API_EXPORTED libusb_get_device_list(libusb_context *ctx, + libusb_device ***list) +{ + struct discovered_devs *discdevs = discovered_devs_alloc(); + struct libusb_device **ret; + int r = 0; + ssize_t i, len; + USBI_GET_CONTEXT(ctx); + usbi_dbg(""); + + if (!discdevs) + return LIBUSB_ERROR_NO_MEM; + + r = usbi_backend->get_device_list(ctx, &discdevs); + if (r < 0) { + len = r; + goto out; + } + + /* convert discovered_devs into a list */ + len = discdevs->len; + ret = malloc(sizeof(void *) * (len + 1)); + if (!ret) { + len = LIBUSB_ERROR_NO_MEM; + goto out; + } + + ret[len] = NULL; + for (i = 0; i < len; i++) { + struct libusb_device *dev = discdevs->devices[i]; + ret[i] = libusb_ref_device(dev); + } + *list = ret; + +out: + discovered_devs_free(discdevs); + return len; +} + +/** \ingroup dev + * Frees a list of devices previously discovered using + * libusb_get_device_list(). If the unref_devices parameter is set, the + * reference count of each device in the list is decremented by 1. + * \param list the list to free + * \param unref_devices whether to unref the devices in the list + */ +void API_EXPORTED libusb_free_device_list(libusb_device **list, + int unref_devices) +{ + if (!list) + return; + + if (unref_devices) { + int i = 0; + struct libusb_device *dev; + + while ((dev = list[i++]) != NULL) + libusb_unref_device(dev); + } + free(list); +} + +/** \ingroup dev + * Get the number of the bus that a device is connected to. + * \param dev a device + * \returns the bus number + */ +uint8_t API_EXPORTED libusb_get_bus_number(libusb_device *dev) +{ + return dev->bus_number; +} + +/** \ingroup dev + * Get the address of the device on the bus it is connected to. + * \param dev a device + * \returns the device address + */ +uint8_t API_EXPORTED libusb_get_device_address(libusb_device *dev) +{ + return dev->device_address; +} + +/** \ingroup dev + * Get the negotiated connection speed for a device. + * \param dev a device + * \returns a \ref libusb_speed code, where LIBUSB_SPEED_UNKNOWN means that + * the OS doesn't know or doesn't support returning the negotiated speed. + */ +int API_EXPORTED libusb_get_device_speed(libusb_device *dev) +{ + return dev->speed; +} + +static const struct libusb_endpoint_descriptor *find_endpoint( + struct libusb_config_descriptor *config, unsigned char endpoint) +{ + int iface_idx; + for (iface_idx = 0; iface_idx < config->bNumInterfaces; iface_idx++) { + const struct libusb_interface *iface = &config->interface[iface_idx]; + int altsetting_idx; + + for (altsetting_idx = 0; altsetting_idx < iface->num_altsetting; + altsetting_idx++) { + const struct libusb_interface_descriptor *altsetting + = &iface->altsetting[altsetting_idx]; + int ep_idx; + + for (ep_idx = 0; ep_idx < altsetting->bNumEndpoints; ep_idx++) { + const struct libusb_endpoint_descriptor *ep = + &altsetting->endpoint[ep_idx]; + if (ep->bEndpointAddress == endpoint) + return ep; + } + } + } + return NULL; +} + +/** \ingroup dev + * Convenience function to retrieve the wMaxPacketSize value for a particular + * endpoint in the active device configuration. + * + * This function was originally intended to be of assistance when setting up + * isochronous transfers, but a design mistake resulted in this function + * instead. It simply returns the wMaxPacketSize value without considering + * its contents. If you're dealing with isochronous transfers, you probably + * want libusb_get_max_iso_packet_size() instead. + * + * \param dev a device + * \param endpoint address of the endpoint in question + * \returns the wMaxPacketSize value + * \returns LIBUSB_ERROR_NOT_FOUND if the endpoint does not exist + * \returns LIBUSB_ERROR_OTHER on other failure + */ +int API_EXPORTED libusb_get_max_packet_size(libusb_device *dev, + unsigned char endpoint) +{ + struct libusb_config_descriptor *config; + const struct libusb_endpoint_descriptor *ep; + int r; + + r = libusb_get_active_config_descriptor(dev, &config); + if (r < 0) { + usbi_err(DEVICE_CTX(dev), + "could not retrieve active config descriptor"); + return LIBUSB_ERROR_OTHER; + } + + ep = find_endpoint(config, endpoint); + if (!ep) + return LIBUSB_ERROR_NOT_FOUND; + + r = ep->wMaxPacketSize; + libusb_free_config_descriptor(config); + return r; +} + +/** \ingroup dev + * Calculate the maximum packet size which a specific endpoint is capable is + * sending or receiving in the duration of 1 microframe + * + * Only the active configution is examined. The calculation is based on the + * wMaxPacketSize field in the endpoint descriptor as described in section + * 9.6.6 in the USB 2.0 specifications. + * + * If acting on an isochronous or interrupt endpoint, this function will + * multiply the value found in bits 0:10 by the number of transactions per + * microframe (determined by bits 11:12). Otherwise, this function just + * returns the numeric value found in bits 0:10. + * + * This function is useful for setting up isochronous transfers, for example + * you might pass the return value from this function to + * libusb_set_iso_packet_lengths() in order to set the length field of every + * isochronous packet in a transfer. + * + * Since v1.0.3. + * + * \param dev a device + * \param endpoint address of the endpoint in question + * \returns the maximum packet size which can be sent/received on this endpoint + * \returns LIBUSB_ERROR_NOT_FOUND if the endpoint does not exist + * \returns LIBUSB_ERROR_OTHER on other failure + */ +int API_EXPORTED libusb_get_max_iso_packet_size(libusb_device *dev, + unsigned char endpoint) +{ + struct libusb_config_descriptor *config; + const struct libusb_endpoint_descriptor *ep; + enum libusb_transfer_type ep_type; + uint16_t val; + int r; + + r = libusb_get_active_config_descriptor(dev, &config); + if (r < 0) { + usbi_err(DEVICE_CTX(dev), + "could not retrieve active config descriptor"); + return LIBUSB_ERROR_OTHER; + } + + ep = find_endpoint(config, endpoint); + if (!ep) + return LIBUSB_ERROR_NOT_FOUND; + + val = ep->wMaxPacketSize; + ep_type = ep->bmAttributes & 0x3; + libusb_free_config_descriptor(config); + + r = val & 0x07ff; + if (ep_type == LIBUSB_TRANSFER_TYPE_ISOCHRONOUS + || ep_type == LIBUSB_TRANSFER_TYPE_INTERRUPT) + r *= (1 + ((val >> 11) & 3)); + return r; +} + +/** \ingroup dev + * Increment the reference count of a device. + * \param dev the device to reference + * \returns the same device + */ +DEFAULT_VISIBILITY +libusb_device * LIBUSB_CALL libusb_ref_device(libusb_device *dev) +{ + usbi_mutex_lock(&dev->lock); + dev->refcnt++; + usbi_mutex_unlock(&dev->lock); + return dev; +} + +/** \ingroup dev + * Decrement the reference count of a device. If the decrement operation + * causes the reference count to reach zero, the device shall be destroyed. + * \param dev the device to unreference + */ +void API_EXPORTED libusb_unref_device(libusb_device *dev) +{ + int refcnt; + + if (!dev) + return; + + usbi_mutex_lock(&dev->lock); + refcnt = --dev->refcnt; + usbi_mutex_unlock(&dev->lock); + + if (refcnt == 0) { + usbi_dbg("destroy device %d.%d", dev->bus_number, dev->device_address); + + if (usbi_backend->destroy_device) + usbi_backend->destroy_device(dev); + + usbi_mutex_lock(&dev->ctx->usb_devs_lock); + list_del(&dev->list); + usbi_mutex_unlock(&dev->ctx->usb_devs_lock); + + usbi_mutex_destroy(&dev->lock); + free(dev); + } +} + +/* + * Interrupt the iteration of the event handling thread, so that it picks + * up the new fd. + */ +void usbi_fd_notification(struct libusb_context *ctx) +{ + unsigned char dummy = 1; + ssize_t r; + + if (ctx == NULL) + return; + + /* record that we are messing with poll fds */ + usbi_mutex_lock(&ctx->pollfd_modify_lock); + ctx->pollfd_modify++; + usbi_mutex_unlock(&ctx->pollfd_modify_lock); + + /* write some data on control pipe to interrupt event handlers */ + r = usbi_write(ctx->ctrl_pipe[1], &dummy, sizeof(dummy)); + if (r <= 0) { + usbi_warn(ctx, "internal signalling write failed"); + usbi_mutex_lock(&ctx->pollfd_modify_lock); + ctx->pollfd_modify--; + usbi_mutex_unlock(&ctx->pollfd_modify_lock); + return; + } + + /* take event handling lock */ + libusb_lock_events(ctx); + + /* read the dummy data */ + r = usbi_read(ctx->ctrl_pipe[0], &dummy, sizeof(dummy)); + if (r <= 0) + usbi_warn(ctx, "internal signalling read failed"); + + /* we're done with modifying poll fds */ + usbi_mutex_lock(&ctx->pollfd_modify_lock); + ctx->pollfd_modify--; + usbi_mutex_unlock(&ctx->pollfd_modify_lock); + + /* Release event handling lock and wake up event waiters */ + libusb_unlock_events(ctx); +} + +/** \ingroup dev + * Open a device and obtain a device handle. A handle allows you to perform + * I/O on the device in question. + * + * Internally, this function adds a reference to the device and makes it + * available to you through libusb_get_device(). This reference is removed + * during libusb_close(). + * + * This is a non-blocking function; no requests are sent over the bus. + * + * \param dev the device to open + * \param handle output location for the returned device handle pointer. Only + * populated when the return code is 0. + * \returns 0 on success + * \returns LIBUSB_ERROR_NO_MEM on memory allocation failure + * \returns LIBUSB_ERROR_ACCESS if the user has insufficient permissions + * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected + * \returns another LIBUSB_ERROR code on other failure + */ +int API_EXPORTED libusb_open(libusb_device *dev, + libusb_device_handle **handle) +{ + struct libusb_context *ctx = DEVICE_CTX(dev); + struct libusb_device_handle *_handle; + size_t priv_size = usbi_backend->device_handle_priv_size; + int r; + usbi_dbg("open %d.%d", dev->bus_number, dev->device_address); + + _handle = malloc(sizeof(*_handle) + priv_size); + if (!_handle) + return LIBUSB_ERROR_NO_MEM; + + r = usbi_mutex_init(&_handle->lock, NULL); + if (r) { + free(_handle); + return LIBUSB_ERROR_OTHER; + } + + _handle->dev = libusb_ref_device(dev); + _handle->claimed_interfaces = 0; + memset(&_handle->os_priv, 0, priv_size); + + r = usbi_backend->open(_handle); + if (r < 0) { + usbi_dbg("open %d.%d returns %d", dev->bus_number, dev->device_address, r); + libusb_unref_device(dev); + usbi_mutex_destroy(&_handle->lock); + free(_handle); + return r; + } + + usbi_mutex_lock(&ctx->open_devs_lock); + list_add(&_handle->list, &ctx->open_devs); + usbi_mutex_unlock(&ctx->open_devs_lock); + *handle = _handle; + + /* At this point, we want to interrupt any existing event handlers so + * that they realise the addition of the new device's poll fd. One + * example when this is desirable is if the user is running a separate + * dedicated libusb events handling thread, which is running with a long + * or infinite timeout. We want to interrupt that iteration of the loop, + * so that it picks up the new fd, and then continues. */ + usbi_fd_notification(ctx); + + return 0; +} + +/** \ingroup dev + * Convenience function for finding a device with a particular + * idVendor/idProduct combination. This function is intended + * for those scenarios where you are using libusb to knock up a quick test + * application - it allows you to avoid calling libusb_get_device_list() and + * worrying about traversing/freeing the list. + * + * This function has limitations and is hence not intended for use in real + * applications: if multiple devices have the same IDs it will only + * give you the first one, etc. + * + * \param ctx the context to operate on, or NULL for the default context + * \param vendor_id the idVendor value to search for + * \param product_id the idProduct value to search for + * \returns a handle for the first found device, or NULL on error or if the + * device could not be found. */ +DEFAULT_VISIBILITY +libusb_device_handle * LIBUSB_CALL libusb_open_device_with_vid_pid( + libusb_context *ctx, uint16_t vendor_id, uint16_t product_id) +{ + struct libusb_device **devs; + struct libusb_device *found = NULL; + struct libusb_device *dev; + struct libusb_device_handle *handle = NULL; + size_t i = 0; + int r; + + if (libusb_get_device_list(ctx, &devs) < 0) + return NULL; + + while ((dev = devs[i++]) != NULL) { + struct libusb_device_descriptor desc; + r = libusb_get_device_descriptor(dev, &desc); + if (r < 0) + goto out; + if (desc.idVendor == vendor_id && desc.idProduct == product_id) { + found = dev; + break; + } + } + + if (found) { + r = libusb_open(found, &handle); + if (r < 0) + handle = NULL; + } + +out: + libusb_free_device_list(devs, 1); + return handle; +} + +static void do_close(struct libusb_context *ctx, + struct libusb_device_handle *dev_handle) +{ + struct usbi_transfer *itransfer; + struct usbi_transfer *tmp; + + libusb_lock_events(ctx); + + /* remove any transfers in flight that are for this device */ + usbi_mutex_lock(&ctx->flying_transfers_lock); + + /* safe iteration because transfers may be being deleted */ + list_for_each_entry_safe(itransfer, tmp, &ctx->flying_transfers, list, struct usbi_transfer) { + struct libusb_transfer *transfer = + USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + + if (transfer->dev_handle != dev_handle) + continue; + + if (!(itransfer->flags & USBI_TRANSFER_DEVICE_DISAPPEARED)) { + usbi_err(ctx, "Device handle closed while transfer was still being processed, but the device is still connected as far as we know"); + + if (itransfer->flags & USBI_TRANSFER_CANCELLING) + usbi_warn(ctx, "A cancellation for an in-flight transfer hasn't completed but closing the device handle"); + else + usbi_err(ctx, "A cancellation hasn't even been scheduled on the transfer for which the device is closing"); + } + + /* remove from the list of in-flight transfers and make sure + * we don't accidentally use the device handle in the future + * (or that such accesses will be easily caught and identified as a crash) + */ + usbi_mutex_lock(&itransfer->lock); + list_del(&itransfer->list); + transfer->dev_handle = NULL; + usbi_mutex_unlock(&itransfer->lock); + + /* it is up to the user to free up the actual transfer struct. this is + * just making sure that we don't attempt to process the transfer after + * the device handle is invalid + */ + usbi_dbg("Removed transfer %p from the in-flight list because device handle %p closed", + transfer, dev_handle); + } + usbi_mutex_unlock(&ctx->flying_transfers_lock); + + libusb_unlock_events(ctx); + + usbi_mutex_lock(&ctx->open_devs_lock); + list_del(&dev_handle->list); + usbi_mutex_unlock(&ctx->open_devs_lock); + + usbi_backend->close(dev_handle); + libusb_unref_device(dev_handle->dev); + usbi_mutex_destroy(&dev_handle->lock); + free(dev_handle); +} + +/** \ingroup dev + * Close a device handle. Should be called on all open handles before your + * application exits. + * + * Internally, this function destroys the reference that was added by + * libusb_open() on the given device. + * + * This is a non-blocking function; no requests are sent over the bus. + * + * \param dev_handle the handle to close + */ +void API_EXPORTED libusb_close(libusb_device_handle *dev_handle) +{ + struct libusb_context *ctx; + unsigned char dummy = 1; + ssize_t r; + + if (!dev_handle) + return; + usbi_dbg(""); + + ctx = HANDLE_CTX(dev_handle); + + /* Similarly to libusb_open(), we want to interrupt all event handlers + * at this point. More importantly, we want to perform the actual close of + * the device while holding the event handling lock (preventing any other + * thread from doing event handling) because we will be removing a file + * descriptor from the polling loop. */ + + /* record that we are messing with poll fds */ + usbi_mutex_lock(&ctx->pollfd_modify_lock); + ctx->pollfd_modify++; + usbi_mutex_unlock(&ctx->pollfd_modify_lock); + + /* write some data on control pipe to interrupt event handlers */ + r = usbi_write(ctx->ctrl_pipe[1], &dummy, sizeof(dummy)); + if (r <= 0) { + usbi_warn(ctx, "internal signalling write failed, closing anyway"); + do_close(ctx, dev_handle); + usbi_mutex_lock(&ctx->pollfd_modify_lock); + ctx->pollfd_modify--; + usbi_mutex_unlock(&ctx->pollfd_modify_lock); + return; + } + + /* take event handling lock */ + libusb_lock_events(ctx); + + /* read the dummy data */ + r = usbi_read(ctx->ctrl_pipe[0], &dummy, sizeof(dummy)); + if (r <= 0) + usbi_warn(ctx, "internal signalling read failed, closing anyway"); + + /* Close the device */ + do_close(ctx, dev_handle); + + /* we're done with modifying poll fds */ + usbi_mutex_lock(&ctx->pollfd_modify_lock); + ctx->pollfd_modify--; + usbi_mutex_unlock(&ctx->pollfd_modify_lock); + + /* Release event handling lock and wake up event waiters */ + libusb_unlock_events(ctx); +} + +/** \ingroup dev + * Get the underlying device for a handle. This function does not modify + * the reference count of the returned device, so do not feel compelled to + * unreference it when you are done. + * \param dev_handle a device handle + * \returns the underlying device + */ +DEFAULT_VISIBILITY +libusb_device * LIBUSB_CALL libusb_get_device(libusb_device_handle *dev_handle) +{ + return dev_handle->dev; +} + +/** \ingroup dev + * Determine the bConfigurationValue of the currently active configuration. + * + * You could formulate your own control request to obtain this information, + * but this function has the advantage that it may be able to retrieve the + * information from operating system caches (no I/O involved). + * + * If the OS does not cache this information, then this function will block + * while a control transfer is submitted to retrieve the information. + * + * This function will return a value of 0 in the config output + * parameter if the device is in unconfigured state. + * + * \param dev a device handle + * \param config output location for the bConfigurationValue of the active + * configuration (only valid for return code 0) + * \returns 0 on success + * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected + * \returns another LIBUSB_ERROR code on other failure + */ +int API_EXPORTED libusb_get_configuration(libusb_device_handle *dev, + int *config) +{ + int r = LIBUSB_ERROR_NOT_SUPPORTED; + + usbi_dbg(""); + if (usbi_backend->get_configuration) + r = usbi_backend->get_configuration(dev, config); + + if (r == LIBUSB_ERROR_NOT_SUPPORTED) { + uint8_t tmp = 0; + usbi_dbg("falling back to control message"); + r = libusb_control_transfer(dev, LIBUSB_ENDPOINT_IN, + LIBUSB_REQUEST_GET_CONFIGURATION, 0, 0, &tmp, 1, 1000); + if (r == 0) { + usbi_err(HANDLE_CTX(dev), "zero bytes returned in ctrl transfer?"); + r = LIBUSB_ERROR_IO; + } else if (r == 1) { + r = 0; + *config = tmp; + } else { + usbi_dbg("control failed, error %d", r); + } + } + + if (r == 0) + usbi_dbg("active config %d", *config); + + return r; +} + +/** \ingroup dev + * Set the active configuration for a device. + * + * The operating system may or may not have already set an active + * configuration on the device. It is up to your application to ensure the + * correct configuration is selected before you attempt to claim interfaces + * and perform other operations. + * + * If you call this function on a device already configured with the selected + * configuration, then this function will act as a lightweight device reset: + * it will issue a SET_CONFIGURATION request using the current configuration, + * causing most USB-related device state to be reset (altsetting reset to zero, + * endpoint halts cleared, toggles reset). + * + * You cannot change/reset configuration if your application has claimed + * interfaces - you should free them with libusb_release_interface() first. + * You cannot change/reset configuration if other applications or drivers have + * claimed interfaces. + * + * A configuration value of -1 will put the device in unconfigured state. + * The USB specifications state that a configuration value of 0 does this, + * however buggy devices exist which actually have a configuration 0. + * + * You should always use this function rather than formulating your own + * SET_CONFIGURATION control request. This is because the underlying operating + * system needs to know when such changes happen. + * + * This is a blocking function. + * + * \param dev a device handle + * \param configuration the bConfigurationValue of the configuration you + * wish to activate, or -1 if you wish to put the device in unconfigured state + * \returns 0 on success + * \returns LIBUSB_ERROR_NOT_FOUND if the requested configuration does not exist + * \returns LIBUSB_ERROR_BUSY if interfaces are currently claimed + * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected + * \returns another LIBUSB_ERROR code on other failure + */ +int API_EXPORTED libusb_set_configuration(libusb_device_handle *dev, + int configuration) +{ + usbi_dbg("configuration %d", configuration); + return usbi_backend->set_configuration(dev, configuration); +} + +/** \ingroup dev + * Claim an interface on a given device handle. You must claim the interface + * you wish to use before you can perform I/O on any of its endpoints. + * + * It is legal to attempt to claim an already-claimed interface, in which + * case libusb just returns 0 without doing anything. + * + * Claiming of interfaces is a purely logical operation; it does not cause + * any requests to be sent over the bus. Interface claiming is used to + * instruct the underlying operating system that your application wishes + * to take ownership of the interface. + * + * This is a non-blocking function. + * + * \param dev a device handle + * \param interface_number the bInterfaceNumber of the interface you + * wish to claim + * \returns 0 on success + * \returns LIBUSB_ERROR_NOT_FOUND if the requested interface does not exist + * \returns LIBUSB_ERROR_BUSY if another program or driver has claimed the + * interface + * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected + * \returns a LIBUSB_ERROR code on other failure + */ +int API_EXPORTED libusb_claim_interface(libusb_device_handle *dev, + int interface_number) +{ + int r = 0; + + usbi_dbg("interface %d", interface_number); + if (interface_number >= USB_MAXINTERFACES) + return LIBUSB_ERROR_INVALID_PARAM; + + usbi_mutex_lock(&dev->lock); + if (dev->claimed_interfaces & (1 << interface_number)) + goto out; + + r = usbi_backend->claim_interface(dev, interface_number); + if (r == 0) + dev->claimed_interfaces |= 1 << interface_number; + +out: + usbi_mutex_unlock(&dev->lock); + return r; +} + +/** \ingroup dev + * Release an interface previously claimed with libusb_claim_interface(). You + * should release all claimed interfaces before closing a device handle. + * + * This is a blocking function. A SET_INTERFACE control request will be sent + * to the device, resetting interface state to the first alternate setting. + * + * \param dev a device handle + * \param interface_number the bInterfaceNumber of the + * previously-claimed interface + * \returns 0 on success + * \returns LIBUSB_ERROR_NOT_FOUND if the interface was not claimed + * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected + * \returns another LIBUSB_ERROR code on other failure + */ +int API_EXPORTED libusb_release_interface(libusb_device_handle *dev, + int interface_number) +{ + int r; + + usbi_dbg("interface %d", interface_number); + if (interface_number >= USB_MAXINTERFACES) + return LIBUSB_ERROR_INVALID_PARAM; + + usbi_mutex_lock(&dev->lock); + if (!(dev->claimed_interfaces & (1 << interface_number))) { + r = LIBUSB_ERROR_NOT_FOUND; + goto out; + } + + r = usbi_backend->release_interface(dev, interface_number); + if (r == 0) + dev->claimed_interfaces &= ~(1 << interface_number); + +out: + usbi_mutex_unlock(&dev->lock); + return r; +} + +/** \ingroup dev + * Activate an alternate setting for an interface. The interface must have + * been previously claimed with libusb_claim_interface(). + * + * You should always use this function rather than formulating your own + * SET_INTERFACE control request. This is because the underlying operating + * system needs to know when such changes happen. + * + * This is a blocking function. + * + * \param dev a device handle + * \param interface_number the bInterfaceNumber of the + * previously-claimed interface + * \param alternate_setting the bAlternateSetting of the alternate + * setting to activate + * \returns 0 on success + * \returns LIBUSB_ERROR_NOT_FOUND if the interface was not claimed, or the + * requested alternate setting does not exist + * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected + * \returns another LIBUSB_ERROR code on other failure + */ +int API_EXPORTED libusb_set_interface_alt_setting(libusb_device_handle *dev, + int interface_number, int alternate_setting) +{ + usbi_dbg("interface %d altsetting %d", + interface_number, alternate_setting); + if (interface_number >= USB_MAXINTERFACES) + return LIBUSB_ERROR_INVALID_PARAM; + + usbi_mutex_lock(&dev->lock); + if (!(dev->claimed_interfaces & (1 << interface_number))) { + usbi_mutex_unlock(&dev->lock); + return LIBUSB_ERROR_NOT_FOUND; + } + usbi_mutex_unlock(&dev->lock); + + return usbi_backend->set_interface_altsetting(dev, interface_number, + alternate_setting); +} + +/** \ingroup dev + * Clear the halt/stall condition for an endpoint. Endpoints with halt status + * are unable to receive or transmit data until the halt condition is stalled. + * + * You should cancel all pending transfers before attempting to clear the halt + * condition. + * + * This is a blocking function. + * + * \param dev a device handle + * \param endpoint the endpoint to clear halt status + * \returns 0 on success + * \returns LIBUSB_ERROR_NOT_FOUND if the endpoint does not exist + * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected + * \returns another LIBUSB_ERROR code on other failure + */ +int API_EXPORTED libusb_clear_halt(libusb_device_handle *dev, + unsigned char endpoint) +{ + usbi_dbg("endpoint %x", endpoint); + return usbi_backend->clear_halt(dev, endpoint); +} + +/** \ingroup dev + * Perform a USB port reset to reinitialize a device. The system will attempt + * to restore the previous configuration and alternate settings after the + * reset has completed. + * + * If the reset fails, the descriptors change, or the previous state cannot be + * restored, the device will appear to be disconnected and reconnected. This + * means that the device handle is no longer valid (you should close it) and + * rediscover the device. A return code of LIBUSB_ERROR_NOT_FOUND indicates + * when this is the case. + * + * This is a blocking function which usually incurs a noticeable delay. + * + * \param dev a handle of the device to reset + * \returns 0 on success + * \returns LIBUSB_ERROR_NOT_FOUND if re-enumeration is required, or if the + * device has been disconnected + * \returns another LIBUSB_ERROR code on other failure + */ +int API_EXPORTED libusb_reset_device(libusb_device_handle *dev) +{ + usbi_dbg(""); + return usbi_backend->reset_device(dev); +} + +/** \ingroup dev + * Determine if a kernel driver is active on an interface. If a kernel driver + * is active, you cannot claim the interface, and libusb will be unable to + * perform I/O. + * + * This functionality is not available on Windows. + * + * \param dev a device handle + * \param interface_number the interface to check + * \returns 0 if no kernel driver is active + * \returns 1 if a kernel driver is active + * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected + * \returns LIBUSB_ERROR_NOT_SUPPORTED on platforms where the functionality + * is not available + * \returns another LIBUSB_ERROR code on other failure + * \see libusb_detach_kernel_driver() + */ +int API_EXPORTED libusb_kernel_driver_active(libusb_device_handle *dev, + int interface_number) +{ + usbi_dbg("interface %d", interface_number); + if (usbi_backend->kernel_driver_active) + return usbi_backend->kernel_driver_active(dev, interface_number); + else + return LIBUSB_ERROR_NOT_SUPPORTED; +} + +/** \ingroup dev + * Detach a kernel driver from an interface. If successful, you will then be + * able to claim the interface and perform I/O. + * + * This functionality is not available on Darwin or Windows. + * + * \param dev a device handle + * \param interface_number the interface to detach the driver from + * \returns 0 on success + * \returns LIBUSB_ERROR_NOT_FOUND if no kernel driver was active + * \returns LIBUSB_ERROR_INVALID_PARAM if the interface does not exist + * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected + * \returns LIBUSB_ERROR_NOT_SUPPORTED on platforms where the functionality + * is not available + * \returns another LIBUSB_ERROR code on other failure + * \see libusb_kernel_driver_active() + */ +int API_EXPORTED libusb_detach_kernel_driver(libusb_device_handle *dev, + int interface_number) +{ + usbi_dbg("interface %d", interface_number); + if (usbi_backend->detach_kernel_driver) + return usbi_backend->detach_kernel_driver(dev, interface_number); + else + return LIBUSB_ERROR_NOT_SUPPORTED; +} + +/** \ingroup dev + * Re-attach an interface's kernel driver, which was previously detached + * using libusb_detach_kernel_driver(). This call is only effective on + * Linux and returns LIBUSB_ERROR_NOT_SUPPORTED on all other platforms. + * + * This functionality is not available on Darwin or Windows. + * + * \param dev a device handle + * \param interface_number the interface to attach the driver from + * \returns 0 on success + * \returns LIBUSB_ERROR_NOT_FOUND if no kernel driver was active + * \returns LIBUSB_ERROR_INVALID_PARAM if the interface does not exist + * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected + * \returns LIBUSB_ERROR_NOT_SUPPORTED on platforms where the functionality + * is not available + * \returns LIBUSB_ERROR_BUSY if the driver cannot be attached because the + * interface is claimed by a program or driver + * \returns another LIBUSB_ERROR code on other failure + * \see libusb_kernel_driver_active() + */ +int API_EXPORTED libusb_attach_kernel_driver(libusb_device_handle *dev, + int interface_number) +{ + usbi_dbg("interface %d", interface_number); + if (usbi_backend->attach_kernel_driver) + return usbi_backend->attach_kernel_driver(dev, interface_number); + else + return LIBUSB_ERROR_NOT_SUPPORTED; +} + +/** \ingroup lib + * Set message verbosity. + * - Level 0: no messages ever printed by the library (default) + * - Level 1: error messages are printed to stderr + * - Level 2: warning and error messages are printed to stderr + * - Level 3: informational messages are printed to stdout, warning and error + * messages are printed to stderr + * + * The default level is 0, which means no messages are ever printed. If you + * choose to increase the message verbosity level, ensure that your + * application does not close the stdout/stderr file descriptors. + * + * You are advised to set level 3. libusb is conservative with its message + * logging and most of the time, will only log messages that explain error + * conditions and other oddities. This will help you debug your software. + * + * If the LIBUSB_DEBUG environment variable was set when libusb was + * initialized, this function does nothing: the message verbosity is fixed + * to the value in the environment variable. + * + * If libusb was compiled without any message logging, this function does + * nothing: you'll never get any messages. + * + * If libusb was compiled with verbose debug message logging, this function + * does nothing: you'll always get messages from all levels. + * + * \param ctx the context to operate on, or NULL for the default context + * \param level debug level to set + */ +void API_EXPORTED libusb_set_debug(libusb_context *ctx, int level) +{ + USBI_GET_CONTEXT(ctx); + if (!ctx->debug_fixed) + ctx->debug = level; +} + +/** \ingroup lib + * Initialize libusb. This function must be called before calling any other + * libusb function. + * + * If you do not provide an output location for a context pointer, a default + * context will be created. If there was already a default context, it will + * be reused (and nothing will be initialized/reinitialized). + * + * \param context Optional output location for context pointer. + * Only valid on return code 0. + * \returns 0 on success, or a LIBUSB_ERROR code on failure + * \see contexts + */ +int API_EXPORTED libusb_init(libusb_context **context) +{ + char *dbg = getenv("LIBUSB_DEBUG"); + struct libusb_context *ctx; + int r = 0; + + usbi_mutex_static_lock(&default_context_lock); + if (!context && usbi_default_context) { + usbi_dbg("reusing default context"); + default_context_refcnt++; + usbi_mutex_static_unlock(&default_context_lock); + return 0; + } + + ctx = malloc(sizeof(*ctx)); + if (!ctx) { + r = LIBUSB_ERROR_NO_MEM; + goto err_unlock; + } + memset(ctx, 0, sizeof(*ctx)); + + if (dbg) { + ctx->debug = atoi(dbg); + if (ctx->debug) + ctx->debug_fixed = 1; + } + + usbi_dbg("libusb-%d.%d.%d%s%s%s", + libusb_version_internal.major, + libusb_version_internal.minor, + libusb_version_internal.micro, + libusb_version_internal.rc, + libusb_version_internal.describe[0] ? " git:" : "", + libusb_version_internal.describe); + + if (usbi_backend->init) { + r = usbi_backend->init(ctx); + if (r) + goto err_free_ctx; + } + + usbi_mutex_init(&ctx->usb_devs_lock, NULL); + usbi_mutex_init(&ctx->open_devs_lock, NULL); + list_init(&ctx->usb_devs); + list_init(&ctx->open_devs); + + r = usbi_io_init(ctx); + if (r < 0) { + if (usbi_backend->exit) + usbi_backend->exit(); + goto err_destroy_mutex; + } + + if (context) { + *context = ctx; + } else if (!usbi_default_context) { + usbi_dbg("created default context"); + usbi_default_context = ctx; + default_context_refcnt++; + } + usbi_mutex_static_unlock(&default_context_lock); + + return 0; + +err_destroy_mutex: + usbi_mutex_destroy(&ctx->open_devs_lock); + usbi_mutex_destroy(&ctx->usb_devs_lock); +err_free_ctx: + free(ctx); +err_unlock: + usbi_mutex_static_unlock(&default_context_lock); + return r; +} + +/** \ingroup lib + * Deinitialize libusb. Should be called after closing all open devices and + * before your application terminates. + * \param ctx the context to deinitialize, or NULL for the default context + */ +void API_EXPORTED libusb_exit(struct libusb_context *ctx) +{ + usbi_dbg(""); + USBI_GET_CONTEXT(ctx); + + /* if working with default context, only actually do the deinitialization + * if we're the last user */ + if (ctx == usbi_default_context) { + usbi_mutex_static_lock(&default_context_lock); + if (--default_context_refcnt > 0) { + usbi_dbg("not destroying default context"); + usbi_mutex_static_unlock(&default_context_lock); + return; + } + usbi_dbg("destroying default context"); + usbi_default_context = NULL; + usbi_mutex_static_unlock(&default_context_lock); + } + + /* a little sanity check. doesn't bother with open_devs locking because + * unless there is an application bug, nobody will be accessing this. */ + if (!list_empty(&ctx->open_devs)) + usbi_warn(ctx, "application left some devices open"); + + usbi_io_exit(ctx); + if (usbi_backend->exit) + usbi_backend->exit(); + + usbi_mutex_destroy(&ctx->open_devs_lock); + usbi_mutex_destroy(&ctx->usb_devs_lock); + free(ctx); +} + +/** \ingroup misc + * Check at runtime if the loaded library has a given capability. + * + * \param capability the \ref libusb_capability to check for + * \returns 1 if the running library has the capability, 0 otherwise + */ +int API_EXPORTED libusb_has_capability(uint32_t capability) +{ + enum libusb_capability cap = capability; + switch (cap) { + case LIBUSB_CAP_HAS_CAPABILITY: + return 1; + } + return 0; +} + +/* this is defined in libusbi.h if needed */ +#ifdef LIBUSB_GETTIMEOFDAY_WIN32 +/* + * gettimeofday + * Implementation according to: + * The Open Group Base Specifications Issue 6 + * IEEE Std 1003.1, 2004 Edition + */ + +/* + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * Contributed by: + * Danny Smith + */ + +/* Offset between 1/1/1601 and 1/1/1970 in 100 nanosec units */ +#define _W32_FT_OFFSET (116444736000000000) + +int usbi_gettimeofday(struct timeval *tp, void *tzp) + { + union { + unsigned __int64 ns100; /*time since 1 Jan 1601 in 100ns units */ + FILETIME ft; + } _now; + + if(tp) + { + GetSystemTimeAsFileTime (&_now.ft); + tp->tv_usec=(long)((_now.ns100 / 10) % 1000000 ); + tp->tv_sec= (long)((_now.ns100 - _W32_FT_OFFSET) / 10000000); + } + /* Always return 0 as per Open Group Base Specifications Issue 6. + Do not set errno on error. */ + return 0; +} +#endif + +void usbi_log_v(struct libusb_context *ctx, enum usbi_log_level level, + const char *function, const char *format, va_list args) +{ + FILE *stream = stdout; + const char *prefix; + struct timeval now; + static struct timeval first = { 0, 0 }; + +#ifndef ENABLE_DEBUG_LOGGING + USBI_GET_CONTEXT(ctx); + if (!ctx->debug) + return; + if (level == LOG_LEVEL_WARNING && ctx->debug < 2) + return; + if (level == LOG_LEVEL_INFO && ctx->debug < 3) + return; +#endif + + usbi_gettimeofday(&now, NULL); + if (!first.tv_sec) { + first.tv_sec = now.tv_sec; + first.tv_usec = now.tv_usec; + } + if (now.tv_usec < first.tv_usec) { + now.tv_sec--; + now.tv_usec += 1000000; + } + now.tv_sec -= first.tv_sec; + now.tv_usec -= first.tv_usec; + + switch (level) { + case LOG_LEVEL_INFO: + prefix = "info"; + break; + case LOG_LEVEL_WARNING: + stream = stderr; + prefix = "warning"; + break; + case LOG_LEVEL_ERROR: + stream = stderr; + prefix = "error"; + break; + case LOG_LEVEL_DEBUG: + stream = stderr; + prefix = "debug"; + break; + default: + stream = stderr; + prefix = "unknown"; + break; + } + + fprintf(stream, "libusb: %d.%06d %s [%s] ", + (int)now.tv_sec, (int)now.tv_usec, prefix, function); + + vfprintf(stream, format, args); + + fprintf(stream, "\n"); +} + +void usbi_log(struct libusb_context *ctx, enum usbi_log_level level, + const char *function, const char *format, ...) +{ + va_list args; + + va_start (args, format); + usbi_log_v(ctx, level, function, format, args); + va_end (args); +} + +/** \ingroup misc + * Returns a constant NULL-terminated string with the ASCII name of a libusb + * error code. The caller must not free() the returned string. + * + * \param error_code The \ref libusb_error code to return the name of. + * \returns The error name, or the string **UNKNOWN** if the value of + * error_code is not a known error code. + */ +DEFAULT_VISIBILITY const char * LIBUSB_CALL libusb_error_name(int error_code) +{ + enum libusb_error error = error_code; + switch (error) { + case LIBUSB_SUCCESS: + return "LIBUSB_SUCCESS"; + case LIBUSB_ERROR_IO: + return "LIBUSB_ERROR_IO"; + case LIBUSB_ERROR_INVALID_PARAM: + return "LIBUSB_ERROR_INVALID_PARAM"; + case LIBUSB_ERROR_ACCESS: + return "LIBUSB_ERROR_ACCESS"; + case LIBUSB_ERROR_NO_DEVICE: + return "LIBUSB_ERROR_NO_DEVICE"; + case LIBUSB_ERROR_NOT_FOUND: + return "LIBUSB_ERROR_NOT_FOUND"; + case LIBUSB_ERROR_BUSY: + return "LIBUSB_ERROR_BUSY"; + case LIBUSB_ERROR_TIMEOUT: + return "LIBUSB_ERROR_TIMEOUT"; + case LIBUSB_ERROR_OVERFLOW: + return "LIBUSB_ERROR_OVERFLOW"; + case LIBUSB_ERROR_PIPE: + return "LIBUSB_ERROR_PIPE"; + case LIBUSB_ERROR_INTERRUPTED: + return "LIBUSB_ERROR_INTERRUPTED"; + case LIBUSB_ERROR_NO_MEM: + return "LIBUSB_ERROR_NO_MEM"; + case LIBUSB_ERROR_NOT_SUPPORTED: + return "LIBUSB_ERROR_NOT_SUPPORTED"; + case LIBUSB_ERROR_OTHER: + return "LIBUSB_ERROR_OTHER"; + } + return "**UNKNOWN**"; +} + +/** \ingroup misc + * Returns a pointer to const struct libusb_version with the version + * (major, minor, micro, rc, and nano) of the running library. + */ +DEFAULT_VISIBILITY +const struct libusb_version * LIBUSB_CALL libusb_get_version(void) +{ + return &libusb_version_internal; +} diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/descriptor.c b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/descriptor.c new file mode 100644 index 0000000..e358e9e --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/descriptor.c @@ -0,0 +1,730 @@ +/* + * USB descriptor handling functions for libusb + * Copyright (C) 2007 Daniel Drake + * Copyright (c) 2001 Johannes Erdfelt + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include + +#include "libusbi.h" + +#define DESC_HEADER_LENGTH 2 +#define DEVICE_DESC_LENGTH 18 +#define CONFIG_DESC_LENGTH 9 +#define INTERFACE_DESC_LENGTH 9 +#define ENDPOINT_DESC_LENGTH 7 +#define ENDPOINT_AUDIO_DESC_LENGTH 9 + +/** @defgroup desc USB descriptors + * This page details how to examine the various standard USB descriptors + * for detected devices + */ + +/* set host_endian if the w values are already in host endian format, + * as opposed to bus endian. */ +int usbi_parse_descriptor(unsigned char *source, const char *descriptor, + void *dest, int host_endian) +{ + unsigned char *sp = source, *dp = dest; + uint16_t w; + const char *cp; + + for (cp = descriptor; *cp; cp++) { + switch (*cp) { + case 'b': /* 8-bit byte */ + *dp++ = *sp++; + break; + case 'w': /* 16-bit word, convert from little endian to CPU */ + dp += ((uintptr_t)dp & 1); /* Align to word boundary */ + + if (host_endian) { + memcpy(dp, sp, 2); + } else { + w = (sp[1] << 8) | sp[0]; + *((uint16_t *)dp) = w; + } + sp += 2; + dp += 2; + break; + } + } + + return (int) (sp - source); +} + +static void clear_endpoint(struct libusb_endpoint_descriptor *endpoint) +{ + if (endpoint->extra) + free((unsigned char *) endpoint->extra); +} + +static int parse_endpoint(struct libusb_context *ctx, + struct libusb_endpoint_descriptor *endpoint, unsigned char *buffer, + int size, int host_endian) +{ + struct usb_descriptor_header header; + unsigned char *extra; + unsigned char *begin; + int parsed = 0; + int len; + + usbi_parse_descriptor(buffer, "bb", &header, 0); + + /* Everything should be fine being passed into here, but we sanity */ + /* check JIC */ + if (header.bLength > size) { + usbi_err(ctx, "ran out of descriptors parsing"); + return -1; + } + + if (header.bDescriptorType != LIBUSB_DT_ENDPOINT) { + usbi_err(ctx, "unexpected descriptor %x (expected %x)", + header.bDescriptorType, LIBUSB_DT_ENDPOINT); + return parsed; + } + + if (header.bLength >= ENDPOINT_AUDIO_DESC_LENGTH) + usbi_parse_descriptor(buffer, "bbbbwbbb", endpoint, host_endian); + else if (header.bLength >= ENDPOINT_DESC_LENGTH) + usbi_parse_descriptor(buffer, "bbbbwb", endpoint, host_endian); + + buffer += header.bLength; + size -= header.bLength; + parsed += header.bLength; + + /* Skip over the rest of the Class Specific or Vendor Specific */ + /* descriptors */ + begin = buffer; + while (size >= DESC_HEADER_LENGTH) { + usbi_parse_descriptor(buffer, "bb", &header, 0); + + if (header.bLength < 2) { + usbi_err(ctx, "invalid descriptor length %d", header.bLength); + return -1; + } + + /* If we find another "proper" descriptor then we're done */ + if ((header.bDescriptorType == LIBUSB_DT_ENDPOINT) || + (header.bDescriptorType == LIBUSB_DT_INTERFACE) || + (header.bDescriptorType == LIBUSB_DT_CONFIG) || + (header.bDescriptorType == LIBUSB_DT_DEVICE)) + break; + + usbi_dbg("skipping descriptor %x", header.bDescriptorType); + buffer += header.bLength; + size -= header.bLength; + parsed += header.bLength; + } + + /* Copy any unknown descriptors into a storage area for drivers */ + /* to later parse */ + len = (int)(buffer - begin); + if (!len) { + endpoint->extra = NULL; + endpoint->extra_length = 0; + return parsed; + } + + extra = malloc(len); + endpoint->extra = extra; + if (!extra) { + endpoint->extra_length = 0; + return LIBUSB_ERROR_NO_MEM; + } + + memcpy(extra, begin, len); + endpoint->extra_length = len; + + return parsed; +} + +static void clear_interface(struct libusb_interface *usb_interface) +{ + int i; + int j; + + if (usb_interface->altsetting) { + for (i = 0; i < usb_interface->num_altsetting; i++) { + struct libusb_interface_descriptor *ifp = + (struct libusb_interface_descriptor *) + usb_interface->altsetting + i; + if (ifp->extra) + free((void *) ifp->extra); + if (ifp->endpoint) { + for (j = 0; j < ifp->bNumEndpoints; j++) + clear_endpoint((struct libusb_endpoint_descriptor *) + ifp->endpoint + j); + free((void *) ifp->endpoint); + } + } + free((void *) usb_interface->altsetting); + usb_interface->altsetting = NULL; + } + +} + +static int parse_interface(libusb_context *ctx, + struct libusb_interface *usb_interface, unsigned char *buffer, int size, + int host_endian) +{ + int i; + int len; + int r; + int parsed = 0; + size_t tmp; + struct usb_descriptor_header header; + struct libusb_interface_descriptor *ifp; + unsigned char *begin; + + usb_interface->num_altsetting = 0; + + while (size >= INTERFACE_DESC_LENGTH) { + struct libusb_interface_descriptor *altsetting = + (struct libusb_interface_descriptor *) usb_interface->altsetting; + altsetting = realloc(altsetting, + sizeof(struct libusb_interface_descriptor) * + (usb_interface->num_altsetting + 1)); + if (!altsetting) { + r = LIBUSB_ERROR_NO_MEM; + goto err; + } + usb_interface->altsetting = altsetting; + + ifp = altsetting + usb_interface->num_altsetting; + usb_interface->num_altsetting++; + usbi_parse_descriptor(buffer, "bbbbbbbbb", ifp, 0); + ifp->extra = NULL; + ifp->extra_length = 0; + ifp->endpoint = NULL; + + /* Skip over the interface */ + buffer += ifp->bLength; + parsed += ifp->bLength; + size -= ifp->bLength; + + begin = buffer; + + /* Skip over any interface, class or vendor descriptors */ + while (size >= DESC_HEADER_LENGTH) { + usbi_parse_descriptor(buffer, "bb", &header, 0); + if (header.bLength < 2) { + usbi_err(ctx, "invalid descriptor of length %d", + header.bLength); + r = LIBUSB_ERROR_IO; + goto err; + } + + /* If we find another "proper" descriptor then we're done */ + if ((header.bDescriptorType == LIBUSB_DT_INTERFACE) || + (header.bDescriptorType == LIBUSB_DT_ENDPOINT) || + (header.bDescriptorType == LIBUSB_DT_CONFIG) || + (header.bDescriptorType == LIBUSB_DT_DEVICE)) + break; + + buffer += header.bLength; + parsed += header.bLength; + size -= header.bLength; + } + + /* Copy any unknown descriptors into a storage area for */ + /* drivers to later parse */ + len = (int)(buffer - begin); + if (len) { + ifp->extra = malloc(len); + if (!ifp->extra) { + r = LIBUSB_ERROR_NO_MEM; + goto err; + } + memcpy((unsigned char *) ifp->extra, begin, len); + ifp->extra_length = len; + } + + /* Did we hit an unexpected descriptor? */ + if (size >= DESC_HEADER_LENGTH) { + usbi_parse_descriptor(buffer, "bb", &header, 0); + if ((header.bDescriptorType == LIBUSB_DT_CONFIG) || + (header.bDescriptorType == LIBUSB_DT_DEVICE)) { + return parsed; + } + } + + if (ifp->bNumEndpoints > USB_MAXENDPOINTS) { + usbi_err(ctx, "too many endpoints (%d)", ifp->bNumEndpoints); + r = LIBUSB_ERROR_IO; + goto err; + } + + if (ifp->bNumEndpoints > 0) { + struct libusb_endpoint_descriptor *endpoint; + tmp = ifp->bNumEndpoints * sizeof(struct libusb_endpoint_descriptor); + endpoint = malloc(tmp); + ifp->endpoint = endpoint; + if (!endpoint) { + r = LIBUSB_ERROR_NO_MEM; + goto err; + } + + memset(endpoint, 0, tmp); + for (i = 0; i < ifp->bNumEndpoints; i++) { + usbi_parse_descriptor(buffer, "bb", &header, 0); + + if (header.bLength > size) { + usbi_err(ctx, "ran out of descriptors parsing"); + r = LIBUSB_ERROR_IO; + goto err; + } + + r = parse_endpoint(ctx, endpoint + i, buffer, size, + host_endian); + if (r < 0) + goto err; + + buffer += r; + parsed += r; + size -= r; + } + } + + /* We check to see if it's an alternate to this one */ + ifp = (struct libusb_interface_descriptor *) buffer; + if (size < LIBUSB_DT_INTERFACE_SIZE || + ifp->bDescriptorType != LIBUSB_DT_INTERFACE || + !ifp->bAlternateSetting) + return parsed; + } + + return parsed; +err: + clear_interface(usb_interface); + return r; +} + +static void clear_configuration(struct libusb_config_descriptor *config) +{ + if (config->interface) { + int i; + for (i = 0; i < config->bNumInterfaces; i++) + clear_interface((struct libusb_interface *) + config->interface + i); + free((void *) config->interface); + } + if (config->extra) + free((void *) config->extra); +} + +static int parse_configuration(struct libusb_context *ctx, + struct libusb_config_descriptor *config, unsigned char *buffer, + int host_endian) +{ + int i; + int r; + int size; + size_t tmp; + struct usb_descriptor_header header; + struct libusb_interface *usb_interface; + + usbi_parse_descriptor(buffer, "bbwbbbbb", config, host_endian); + size = config->wTotalLength; + + if (config->bNumInterfaces > USB_MAXINTERFACES) { + usbi_err(ctx, "too many interfaces (%d)", config->bNumInterfaces); + return LIBUSB_ERROR_IO; + } + + tmp = config->bNumInterfaces * sizeof(struct libusb_interface); + usb_interface = malloc(tmp); + config->interface = usb_interface; + if (!config->interface) + return LIBUSB_ERROR_NO_MEM; + + memset(usb_interface, 0, tmp); + buffer += config->bLength; + size -= config->bLength; + + config->extra = NULL; + config->extra_length = 0; + + for (i = 0; i < config->bNumInterfaces; i++) { + int len; + unsigned char *begin; + + /* Skip over the rest of the Class Specific or Vendor */ + /* Specific descriptors */ + begin = buffer; + while (size >= DESC_HEADER_LENGTH) { + usbi_parse_descriptor(buffer, "bb", &header, 0); + + if ((header.bLength > size) || + (header.bLength < DESC_HEADER_LENGTH)) { + usbi_err(ctx, "invalid descriptor length of %d", + header.bLength); + r = LIBUSB_ERROR_IO; + goto err; + } + + /* If we find another "proper" descriptor then we're done */ + if ((header.bDescriptorType == LIBUSB_DT_ENDPOINT) || + (header.bDescriptorType == LIBUSB_DT_INTERFACE) || + (header.bDescriptorType == LIBUSB_DT_CONFIG) || + (header.bDescriptorType == LIBUSB_DT_DEVICE)) + break; + + usbi_dbg("skipping descriptor 0x%x\n", header.bDescriptorType); + buffer += header.bLength; + size -= header.bLength; + } + + /* Copy any unknown descriptors into a storage area for */ + /* drivers to later parse */ + len = (int)(buffer - begin); + if (len) { + /* FIXME: We should realloc and append here */ + if (!config->extra_length) { + config->extra = malloc(len); + if (!config->extra) { + r = LIBUSB_ERROR_NO_MEM; + goto err; + } + + memcpy((unsigned char *) config->extra, begin, len); + config->extra_length = len; + } + } + + r = parse_interface(ctx, usb_interface + i, buffer, size, host_endian); + if (r < 0) + goto err; + + buffer += r; + size -= r; + } + + return size; + +err: + clear_configuration(config); + return r; +} + +/** \ingroup desc + * Get the USB device descriptor for a given device. + * + * This is a non-blocking function; the device descriptor is cached in memory. + * + * \param dev the device + * \param desc output location for the descriptor data + * \returns 0 on success or a LIBUSB_ERROR code on failure + */ +int API_EXPORTED libusb_get_device_descriptor(libusb_device *dev, + struct libusb_device_descriptor *desc) +{ + unsigned char raw_desc[DEVICE_DESC_LENGTH]; + int host_endian = 0; + int r; + + usbi_dbg(""); + r = usbi_backend->get_device_descriptor(dev, raw_desc, &host_endian); + if (r < 0) + return r; + + memcpy((unsigned char *) desc, raw_desc, sizeof(raw_desc)); + if (!host_endian) { + desc->bcdUSB = libusb_le16_to_cpu(desc->bcdUSB); + desc->idVendor = libusb_le16_to_cpu(desc->idVendor); + desc->idProduct = libusb_le16_to_cpu(desc->idProduct); + desc->bcdDevice = libusb_le16_to_cpu(desc->bcdDevice); + } + return 0; +} + +/** \ingroup desc + * Get the USB configuration descriptor for the currently active configuration. + * This is a non-blocking function which does not involve any requests being + * sent to the device. + * + * \param dev a device + * \param config output location for the USB configuration descriptor. Only + * valid if 0 was returned. Must be freed with libusb_free_config_descriptor() + * after use. + * \returns 0 on success + * \returns LIBUSB_ERROR_NOT_FOUND if the device is in unconfigured state + * \returns another LIBUSB_ERROR code on error + * \see libusb_get_config_descriptor + */ +int API_EXPORTED libusb_get_active_config_descriptor(libusb_device *dev, + struct libusb_config_descriptor **config) +{ + struct libusb_config_descriptor *_config = malloc(sizeof(*_config)); + unsigned char tmp[8]; + unsigned char *buf = NULL; + int host_endian = 0; + int r; + + usbi_dbg(""); + if (!_config) + return LIBUSB_ERROR_NO_MEM; + + r = usbi_backend->get_active_config_descriptor(dev, tmp, sizeof(tmp), + &host_endian); + if (r < 0) + goto err; + + usbi_parse_descriptor(tmp, "bbw", _config, host_endian); + buf = malloc(_config->wTotalLength); + if (!buf) { + r = LIBUSB_ERROR_NO_MEM; + goto err; + } + + r = usbi_backend->get_active_config_descriptor(dev, buf, + _config->wTotalLength, &host_endian); + if (r < 0) + goto err; + + r = parse_configuration(dev->ctx, _config, buf, host_endian); + if (r < 0) { + usbi_err(dev->ctx, "parse_configuration failed with error %d", r); + goto err; + } else if (r > 0) { + usbi_warn(dev->ctx, "descriptor data still left"); + } + + free(buf); + *config = _config; + return 0; + +err: + free(_config); + if (buf) + free(buf); + return r; +} + +/** \ingroup desc + * Get a USB configuration descriptor based on its index. + * This is a non-blocking function which does not involve any requests being + * sent to the device. + * + * \param dev a device + * \param config_index the index of the configuration you wish to retrieve + * \param config output location for the USB configuration descriptor. Only + * valid if 0 was returned. Must be freed with libusb_free_config_descriptor() + * after use. + * \returns 0 on success + * \returns LIBUSB_ERROR_NOT_FOUND if the configuration does not exist + * \returns another LIBUSB_ERROR code on error + * \see libusb_get_active_config_descriptor() + * \see libusb_get_config_descriptor_by_value() + */ +int API_EXPORTED libusb_get_config_descriptor(libusb_device *dev, + uint8_t config_index, struct libusb_config_descriptor **config) +{ + struct libusb_config_descriptor *_config; + unsigned char tmp[8]; + unsigned char *buf = NULL; + int host_endian = 0; + int r; + + usbi_dbg("index %d", config_index); + if (config_index >= dev->num_configurations) + return LIBUSB_ERROR_NOT_FOUND; + + _config = malloc(sizeof(*_config)); + if (!_config) + return LIBUSB_ERROR_NO_MEM; + + r = usbi_backend->get_config_descriptor(dev, config_index, tmp, + sizeof(tmp), &host_endian); + if (r < 0) + goto err; + + usbi_parse_descriptor(tmp, "bbw", _config, host_endian); + buf = malloc(_config->wTotalLength); + if (!buf) { + r = LIBUSB_ERROR_NO_MEM; + goto err; + } + + host_endian = 0; + r = usbi_backend->get_config_descriptor(dev, config_index, buf, + _config->wTotalLength, &host_endian); + if (r < 0) + goto err; + + r = parse_configuration(dev->ctx, _config, buf, host_endian); + if (r < 0) { + usbi_err(dev->ctx, "parse_configuration failed with error %d", r); + goto err; + } else if (r > 0) { + usbi_warn(dev->ctx, "descriptor data still left"); + } + + free(buf); + *config = _config; + return 0; + +err: + free(_config); + if (buf) + free(buf); + return r; +} + +/* iterate through all configurations, returning the index of the configuration + * matching a specific bConfigurationValue in the idx output parameter, or -1 + * if the config was not found. + * returns 0 or a LIBUSB_ERROR code + */ +int usbi_get_config_index_by_value(struct libusb_device *dev, + uint8_t bConfigurationValue, int *idx) +{ + uint8_t i; + + usbi_dbg("value %d", bConfigurationValue); + for (i = 0; i < dev->num_configurations; i++) { + unsigned char tmp[6]; + int host_endian; + int r = usbi_backend->get_config_descriptor(dev, i, tmp, sizeof(tmp), + &host_endian); + if (r < 0) + return r; + if (tmp[5] == bConfigurationValue) { + *idx = i; + return 0; + } + } + + *idx = -1; + return 0; +} + +/** \ingroup desc + * Get a USB configuration descriptor with a specific bConfigurationValue. + * This is a non-blocking function which does not involve any requests being + * sent to the device. + * + * \param dev a device + * \param bConfigurationValue the bConfigurationValue of the configuration you + * wish to retrieve + * \param config output location for the USB configuration descriptor. Only + * valid if 0 was returned. Must be freed with libusb_free_config_descriptor() + * after use. + * \returns 0 on success + * \returns LIBUSB_ERROR_NOT_FOUND if the configuration does not exist + * \returns another LIBUSB_ERROR code on error + * \see libusb_get_active_config_descriptor() + * \see libusb_get_config_descriptor() + */ +int API_EXPORTED libusb_get_config_descriptor_by_value(libusb_device *dev, + uint8_t bConfigurationValue, struct libusb_config_descriptor **config) +{ + int idx; + int r = usbi_get_config_index_by_value(dev, bConfigurationValue, &idx); + if (r < 0) + return r; + else if (idx == -1) + return LIBUSB_ERROR_NOT_FOUND; + else + return libusb_get_config_descriptor(dev, (uint8_t) idx, config); +} + +/** \ingroup desc + * Free a configuration descriptor obtained from + * libusb_get_active_config_descriptor() or libusb_get_config_descriptor(). + * It is safe to call this function with a NULL config parameter, in which + * case the function simply returns. + * + * \param config the configuration descriptor to free + */ +void API_EXPORTED libusb_free_config_descriptor( + struct libusb_config_descriptor *config) +{ + if (!config) + return; + + clear_configuration(config); + free(config); +} + +/** \ingroup desc + * Retrieve a string descriptor in C style ASCII. + * + * Wrapper around libusb_get_string_descriptor(). Uses the first language + * supported by the device. + * + * \param dev a device handle + * \param desc_index the index of the descriptor to retrieve + * \param data output buffer for ASCII string descriptor + * \param length size of data buffer + * \returns number of bytes returned in data, or LIBUSB_ERROR code on failure + */ +int API_EXPORTED libusb_get_string_descriptor_ascii(libusb_device_handle *dev, + uint8_t desc_index, unsigned char *data, int length) +{ + unsigned char tbuf[255]; /* Some devices choke on size > 255 */ + int r, si, di; + uint16_t langid; + + /* Asking for the zero'th index is special - it returns a string + * descriptor that contains all the language IDs supported by the + * device. Typically there aren't many - often only one. Language + * IDs are 16 bit numbers, and they start at the third byte in the + * descriptor. There's also no point in trying to read descriptor 0 + * with this function. See USB 2.0 specification section 9.6.7 for + * more information. + */ + + if (desc_index == 0) + return LIBUSB_ERROR_INVALID_PARAM; + + r = libusb_get_string_descriptor(dev, 0, 0, tbuf, sizeof(tbuf)); + if (r < 0) + return r; + + if (r < 4) + return LIBUSB_ERROR_IO; + + langid = tbuf[2] | (tbuf[3] << 8); + + r = libusb_get_string_descriptor(dev, desc_index, langid, tbuf, + sizeof(tbuf)); + if (r < 0) + return r; + + if (tbuf[1] != LIBUSB_DT_STRING) + return LIBUSB_ERROR_IO; + + if (tbuf[0] > r) + return LIBUSB_ERROR_IO; + + for (di = 0, si = 2; si < tbuf[0]; si += 2) { + if (di >= (length - 1)) + break; + + if (tbuf[si + 1]) /* high byte */ + data[di++] = '?'; + else + data[di++] = tbuf[si]; + } + + data[di] = 0; + return di; +} + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/io.c b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/io.c new file mode 100644 index 0000000..e9bd312 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/io.c @@ -0,0 +1,2454 @@ +/* + * I/O functions for libusb + * Copyright (C) 2007-2009 Daniel Drake + * Copyright (c) 2001 Johannes Erdfelt + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_SYS_TIME_H +#include +#endif + +#ifdef USBI_TIMERFD_AVAILABLE +#include +#endif + +#include "libusbi.h" + +/** + * \page io Synchronous and asynchronous device I/O + * + * \section intro Introduction + * + * If you're using libusb in your application, you're probably wanting to + * perform I/O with devices - you want to perform USB data transfers. + * + * libusb offers two separate interfaces for device I/O. This page aims to + * introduce the two in order to help you decide which one is more suitable + * for your application. You can also choose to use both interfaces in your + * application by considering each transfer on a case-by-case basis. + * + * Once you have read through the following discussion, you should consult the + * detailed API documentation pages for the details: + * - \ref syncio + * - \ref asyncio + * + * \section theory Transfers at a logical level + * + * At a logical level, USB transfers typically happen in two parts. For + * example, when reading data from a endpoint: + * -# A request for data is sent to the device + * -# Some time later, the incoming data is received by the host + * + * or when writing data to an endpoint: + * + * -# The data is sent to the device + * -# Some time later, the host receives acknowledgement from the device that + * the data has been transferred. + * + * There may be an indefinite delay between the two steps. Consider a + * fictional USB input device with a button that the user can press. In order + * to determine when the button is pressed, you would likely submit a request + * to read data on a bulk or interrupt endpoint and wait for data to arrive. + * Data will arrive when the button is pressed by the user, which is + * potentially hours later. + * + * libusb offers both a synchronous and an asynchronous interface to performing + * USB transfers. The main difference is that the synchronous interface + * combines both steps indicated above into a single function call, whereas + * the asynchronous interface separates them. + * + * \section sync The synchronous interface + * + * The synchronous I/O interface allows you to perform a USB transfer with + * a single function call. When the function call returns, the transfer has + * completed and you can parse the results. + * + * If you have used the libusb-0.1 before, this I/O style will seem familar to + * you. libusb-0.1 only offered a synchronous interface. + * + * In our input device example, to read button presses you might write code + * in the following style: +\code +unsigned char data[4]; +int actual_length; +int r = libusb_bulk_transfer(handle, LIBUSB_ENDPOINT_IN, data, sizeof(data), &actual_length, 0); +if (r == 0 && actual_length == sizeof(data)) { + // results of the transaction can now be found in the data buffer + // parse them here and report button press +} else { + error(); +} +\endcode + * + * The main advantage of this model is simplicity: you did everything with + * a single simple function call. + * + * However, this interface has its limitations. Your application will sleep + * inside libusb_bulk_transfer() until the transaction has completed. If it + * takes the user 3 hours to press the button, your application will be + * sleeping for that long. Execution will be tied up inside the library - + * the entire thread will be useless for that duration. + * + * Another issue is that by tieing up the thread with that single transaction + * there is no possibility of performing I/O with multiple endpoints and/or + * multiple devices simultaneously, unless you resort to creating one thread + * per transaction. + * + * Additionally, there is no opportunity to cancel the transfer after the + * request has been submitted. + * + * For details on how to use the synchronous API, see the + * \ref syncio "synchronous I/O API documentation" pages. + * + * \section async The asynchronous interface + * + * Asynchronous I/O is the most significant new feature in libusb-1.0. + * Although it is a more complex interface, it solves all the issues detailed + * above. + * + * Instead of providing which functions that block until the I/O has complete, + * libusb's asynchronous interface presents non-blocking functions which + * begin a transfer and then return immediately. Your application passes a + * callback function pointer to this non-blocking function, which libusb will + * call with the results of the transaction when it has completed. + * + * Transfers which have been submitted through the non-blocking functions + * can be cancelled with a separate function call. + * + * The non-blocking nature of this interface allows you to be simultaneously + * performing I/O to multiple endpoints on multiple devices, without having + * to use threads. + * + * This added flexibility does come with some complications though: + * - In the interest of being a lightweight library, libusb does not create + * threads and can only operate when your application is calling into it. Your + * application must call into libusb from it's main loop when events are ready + * to be handled, or you must use some other scheme to allow libusb to + * undertake whatever work needs to be done. + * - libusb also needs to be called into at certain fixed points in time in + * order to accurately handle transfer timeouts. + * - Memory handling becomes more complex. You cannot use stack memory unless + * the function with that stack is guaranteed not to return until the transfer + * callback has finished executing. + * - You generally lose some linearity from your code flow because submitting + * the transfer request is done in a separate function from where the transfer + * results are handled. This becomes particularly obvious when you want to + * submit a second transfer based on the results of an earlier transfer. + * + * Internally, libusb's synchronous interface is expressed in terms of function + * calls to the asynchronous interface. + * + * For details on how to use the asynchronous API, see the + * \ref asyncio "asynchronous I/O API" documentation pages. + */ + + +/** + * \page packetoverflow Packets and overflows + * + * \section packets Packet abstraction + * + * The USB specifications describe how data is transmitted in packets, with + * constraints on packet size defined by endpoint descriptors. The host must + * not send data payloads larger than the endpoint's maximum packet size. + * + * libusb and the underlying OS abstract out the packet concept, allowing you + * to request transfers of any size. Internally, the request will be divided + * up into correctly-sized packets. You do not have to be concerned with + * packet sizes, but there is one exception when considering overflows. + * + * \section overflow Bulk/interrupt transfer overflows + * + * When requesting data on a bulk endpoint, libusb requires you to supply a + * buffer and the maximum number of bytes of data that libusb can put in that + * buffer. However, the size of the buffer is not communicated to the device - + * the device is just asked to send any amount of data. + * + * There is no problem if the device sends an amount of data that is less than + * or equal to the buffer size. libusb reports this condition to you through + * the \ref libusb_transfer::actual_length "libusb_transfer.actual_length" + * field. + * + * Problems may occur if the device attempts to send more data than can fit in + * the buffer. libusb reports LIBUSB_TRANSFER_OVERFLOW for this condition but + * other behaviour is largely undefined: actual_length may or may not be + * accurate, the chunk of data that can fit in the buffer (before overflow) + * may or may not have been transferred. + * + * Overflows are nasty, but can be avoided. Even though you were told to + * ignore packets above, think about the lower level details: each transfer is + * split into packets (typically small, with a maximum size of 512 bytes). + * Overflows can only happen if the final packet in an incoming data transfer + * is smaller than the actual packet that the device wants to transfer. + * Therefore, you will never see an overflow if your transfer buffer size is a + * multiple of the endpoint's packet size: the final packet will either + * fill up completely or will be only partially filled. + */ + +/** + * @defgroup asyncio Asynchronous device I/O + * + * This page details libusb's asynchronous (non-blocking) API for USB device + * I/O. This interface is very powerful but is also quite complex - you will + * need to read this page carefully to understand the necessary considerations + * and issues surrounding use of this interface. Simplistic applications + * may wish to consider the \ref syncio "synchronous I/O API" instead. + * + * The asynchronous interface is built around the idea of separating transfer + * submission and handling of transfer completion (the synchronous model + * combines both of these into one). There may be a long delay between + * submission and completion, however the asynchronous submission function + * is non-blocking so will return control to your application during that + * potentially long delay. + * + * \section asyncabstraction Transfer abstraction + * + * For the asynchronous I/O, libusb implements the concept of a generic + * transfer entity for all types of I/O (control, bulk, interrupt, + * isochronous). The generic transfer object must be treated slightly + * differently depending on which type of I/O you are performing with it. + * + * This is represented by the public libusb_transfer structure type. + * + * \section asynctrf Asynchronous transfers + * + * We can view asynchronous I/O as a 5 step process: + * -# Allocation: allocate a libusb_transfer + * -# Filling: populate the libusb_transfer instance with information + * about the transfer you wish to perform + * -# Submission: ask libusb to submit the transfer + * -# Completion handling: examine transfer results in the + * libusb_transfer structure + * -# Deallocation: clean up resources + * + * + * \subsection asyncalloc Allocation + * + * This step involves allocating memory for a USB transfer. This is the + * generic transfer object mentioned above. At this stage, the transfer + * is "blank" with no details about what type of I/O it will be used for. + * + * Allocation is done with the libusb_alloc_transfer() function. You must use + * this function rather than allocating your own transfers. + * + * \subsection asyncfill Filling + * + * This step is where you take a previously allocated transfer and fill it + * with information to determine the message type and direction, data buffer, + * callback function, etc. + * + * You can either fill the required fields yourself or you can use the + * helper functions: libusb_fill_control_transfer(), libusb_fill_bulk_transfer() + * and libusb_fill_interrupt_transfer(). + * + * \subsection asyncsubmit Submission + * + * When you have allocated a transfer and filled it, you can submit it using + * libusb_submit_transfer(). This function returns immediately but can be + * regarded as firing off the I/O request in the background. + * + * \subsection asynccomplete Completion handling + * + * After a transfer has been submitted, one of four things can happen to it: + * + * - The transfer completes (i.e. some data was transferred) + * - The transfer has a timeout and the timeout expires before all data is + * transferred + * - The transfer fails due to an error + * - The transfer is cancelled + * + * Each of these will cause the user-specified transfer callback function to + * be invoked. It is up to the callback function to determine which of the + * above actually happened and to act accordingly. + * + * The user-specified callback is passed a pointer to the libusb_transfer + * structure which was used to setup and submit the transfer. At completion + * time, libusb has populated this structure with results of the transfer: + * success or failure reason, number of bytes of data transferred, etc. See + * the libusb_transfer structure documentation for more information. + * + * \subsection Deallocation + * + * When a transfer has completed (i.e. the callback function has been invoked), + * you are advised to free the transfer (unless you wish to resubmit it, see + * below). Transfers are deallocated with libusb_free_transfer(). + * + * It is undefined behaviour to free a transfer which has not completed. + * + * \section asyncresubmit Resubmission + * + * You may be wondering why allocation, filling, and submission are all + * separated above where they could reasonably be combined into a single + * operation. + * + * The reason for separation is to allow you to resubmit transfers without + * having to allocate new ones every time. This is especially useful for + * common situations dealing with interrupt endpoints - you allocate one + * transfer, fill and submit it, and when it returns with results you just + * resubmit it for the next interrupt. + * + * \section asynccancel Cancellation + * + * Another advantage of using the asynchronous interface is that you have + * the ability to cancel transfers which have not yet completed. This is + * done by calling the libusb_cancel_transfer() function. + * + * libusb_cancel_transfer() is asynchronous/non-blocking in itself. When the + * cancellation actually completes, the transfer's callback function will + * be invoked, and the callback function should check the transfer status to + * determine that it was cancelled. + * + * Freeing the transfer after it has been cancelled but before cancellation + * has completed will result in undefined behaviour. + * + * When a transfer is cancelled, some of the data may have been transferred. + * libusb will communicate this to you in the transfer callback. Do not assume + * that no data was transferred. + * + * \section bulk_overflows Overflows on device-to-host bulk/interrupt endpoints + * + * If your device does not have predictable transfer sizes (or it misbehaves), + * your application may submit a request for data on an IN endpoint which is + * smaller than the data that the device wishes to send. In some circumstances + * this will cause an overflow, which is a nasty condition to deal with. See + * the \ref packetoverflow page for discussion. + * + * \section asyncctrl Considerations for control transfers + * + * The libusb_transfer structure is generic and hence does not + * include specific fields for the control-specific setup packet structure. + * + * In order to perform a control transfer, you must place the 8-byte setup + * packet at the start of the data buffer. To simplify this, you could + * cast the buffer pointer to type struct libusb_control_setup, or you can + * use the helper function libusb_fill_control_setup(). + * + * The wLength field placed in the setup packet must be the length you would + * expect to be sent in the setup packet: the length of the payload that + * follows (or the expected maximum number of bytes to receive). However, + * the length field of the libusb_transfer object must be the length of + * the data buffer - i.e. it should be wLength plus the size of + * the setup packet (LIBUSB_CONTROL_SETUP_SIZE). + * + * If you use the helper functions, this is simplified for you: + * -# Allocate a buffer of size LIBUSB_CONTROL_SETUP_SIZE plus the size of the + * data you are sending/requesting. + * -# Call libusb_fill_control_setup() on the data buffer, using the transfer + * request size as the wLength value (i.e. do not include the extra space you + * allocated for the control setup). + * -# If this is a host-to-device transfer, place the data to be transferred + * in the data buffer, starting at offset LIBUSB_CONTROL_SETUP_SIZE. + * -# Call libusb_fill_control_transfer() to associate the data buffer with + * the transfer (and to set the remaining details such as callback and timeout). + * - Note that there is no parameter to set the length field of the transfer. + * The length is automatically inferred from the wLength field of the setup + * packet. + * -# Submit the transfer. + * + * The multi-byte control setup fields (wValue, wIndex and wLength) must + * be given in little-endian byte order (the endianness of the USB bus). + * Endianness conversion is transparently handled by + * libusb_fill_control_setup() which is documented to accept host-endian + * values. + * + * Further considerations are needed when handling transfer completion in + * your callback function: + * - As you might expect, the setup packet will still be sitting at the start + * of the data buffer. + * - If this was a device-to-host transfer, the received data will be sitting + * at offset LIBUSB_CONTROL_SETUP_SIZE into the buffer. + * - The actual_length field of the transfer structure is relative to the + * wLength of the setup packet, rather than the size of the data buffer. So, + * if your wLength was 4, your transfer's length was 12, then you + * should expect an actual_length of 4 to indicate that the data was + * transferred in entirity. + * + * To simplify parsing of setup packets and obtaining the data from the + * correct offset, you may wish to use the libusb_control_transfer_get_data() + * and libusb_control_transfer_get_setup() functions within your transfer + * callback. + * + * Even though control endpoints do not halt, a completed control transfer + * may have a LIBUSB_TRANSFER_STALL status code. This indicates the control + * request was not supported. + * + * \section asyncintr Considerations for interrupt transfers + * + * All interrupt transfers are performed using the polling interval presented + * by the bInterval value of the endpoint descriptor. + * + * \section asynciso Considerations for isochronous transfers + * + * Isochronous transfers are more complicated than transfers to + * non-isochronous endpoints. + * + * To perform I/O to an isochronous endpoint, allocate the transfer by calling + * libusb_alloc_transfer() with an appropriate number of isochronous packets. + * + * During filling, set \ref libusb_transfer::type "type" to + * \ref libusb_transfer_type::LIBUSB_TRANSFER_TYPE_ISOCHRONOUS + * "LIBUSB_TRANSFER_TYPE_ISOCHRONOUS", and set + * \ref libusb_transfer::num_iso_packets "num_iso_packets" to a value less than + * or equal to the number of packets you requested during allocation. + * libusb_alloc_transfer() does not set either of these fields for you, given + * that you might not even use the transfer on an isochronous endpoint. + * + * Next, populate the length field for the first num_iso_packets entries in + * the \ref libusb_transfer::iso_packet_desc "iso_packet_desc" array. Section + * 5.6.3 of the USB2 specifications describe how the maximum isochronous + * packet length is determined by the wMaxPacketSize field in the endpoint + * descriptor. + * Two functions can help you here: + * + * - libusb_get_max_iso_packet_size() is an easy way to determine the max + * packet size for an isochronous endpoint. Note that the maximum packet + * size is actually the maximum number of bytes that can be transmitted in + * a single microframe, therefore this function multiplies the maximum number + * of bytes per transaction by the number of transaction opportunities per + * microframe. + * - libusb_set_iso_packet_lengths() assigns the same length to all packets + * within a transfer, which is usually what you want. + * + * For outgoing transfers, you'll obviously fill the buffer and populate the + * packet descriptors in hope that all the data gets transferred. For incoming + * transfers, you must ensure the buffer has sufficient capacity for + * the situation where all packets transfer the full amount of requested data. + * + * Completion handling requires some extra consideration. The + * \ref libusb_transfer::actual_length "actual_length" field of the transfer + * is meaningless and should not be examined; instead you must refer to the + * \ref libusb_iso_packet_descriptor::actual_length "actual_length" field of + * each individual packet. + * + * The \ref libusb_transfer::status "status" field of the transfer is also a + * little misleading: + * - If the packets were submitted and the isochronous data microframes + * completed normally, status will have value + * \ref libusb_transfer_status::LIBUSB_TRANSFER_COMPLETED + * "LIBUSB_TRANSFER_COMPLETED". Note that bus errors and software-incurred + * delays are not counted as transfer errors; the transfer.status field may + * indicate COMPLETED even if some or all of the packets failed. Refer to + * the \ref libusb_iso_packet_descriptor::status "status" field of each + * individual packet to determine packet failures. + * - The status field will have value + * \ref libusb_transfer_status::LIBUSB_TRANSFER_ERROR + * "LIBUSB_TRANSFER_ERROR" only when serious errors were encountered. + * - Other transfer status codes occur with normal behaviour. + * + * The data for each packet will be found at an offset into the buffer that + * can be calculated as if each prior packet completed in full. The + * libusb_get_iso_packet_buffer() and libusb_get_iso_packet_buffer_simple() + * functions may help you here. + * + * \section asyncmem Memory caveats + * + * In most circumstances, it is not safe to use stack memory for transfer + * buffers. This is because the function that fired off the asynchronous + * transfer may return before libusb has finished using the buffer, and when + * the function returns it's stack gets destroyed. This is true for both + * host-to-device and device-to-host transfers. + * + * The only case in which it is safe to use stack memory is where you can + * guarantee that the function owning the stack space for the buffer does not + * return until after the transfer's callback function has completed. In every + * other case, you need to use heap memory instead. + * + * \section asyncflags Fine control + * + * Through using this asynchronous interface, you may find yourself repeating + * a few simple operations many times. You can apply a bitwise OR of certain + * flags to a transfer to simplify certain things: + * - \ref libusb_transfer_flags::LIBUSB_TRANSFER_SHORT_NOT_OK + * "LIBUSB_TRANSFER_SHORT_NOT_OK" results in transfers which transferred + * less than the requested amount of data being marked with status + * \ref libusb_transfer_status::LIBUSB_TRANSFER_ERROR "LIBUSB_TRANSFER_ERROR" + * (they would normally be regarded as COMPLETED) + * - \ref libusb_transfer_flags::LIBUSB_TRANSFER_FREE_BUFFER + * "LIBUSB_TRANSFER_FREE_BUFFER" allows you to ask libusb to free the transfer + * buffer when freeing the transfer. + * - \ref libusb_transfer_flags::LIBUSB_TRANSFER_FREE_TRANSFER + * "LIBUSB_TRANSFER_FREE_TRANSFER" causes libusb to automatically free the + * transfer after the transfer callback returns. + * + * \section asyncevent Event handling + * + * In accordance of the aim of being a lightweight library, libusb does not + * create threads internally. This means that libusb code does not execute + * at any time other than when your application is calling a libusb function. + * However, an asynchronous model requires that libusb perform work at various + * points in time - namely processing the results of previously-submitted + * transfers and invoking the user-supplied callback function. + * + * This gives rise to the libusb_handle_events() function which your + * application must call into when libusb has work do to. This gives libusb + * the opportunity to reap pending transfers, invoke callbacks, etc. + * + * The first issue to discuss here is how your application can figure out + * when libusb has work to do. In fact, there are two naive options which + * do not actually require your application to know this: + * -# Periodically call libusb_handle_events() in non-blocking mode at fixed + * short intervals from your main loop + * -# Repeatedly call libusb_handle_events() in blocking mode from a dedicated + * thread. + * + * The first option is plainly not very nice, and will cause unnecessary + * CPU wakeups leading to increased power usage and decreased battery life. + * The second option is not very nice either, but may be the nicest option + * available to you if the "proper" approach can not be applied to your + * application (read on...). + * + * The recommended option is to integrate libusb with your application main + * event loop. libusb exposes a set of file descriptors which allow you to do + * this. Your main loop is probably already calling poll() or select() or a + * variant on a set of file descriptors for other event sources (e.g. keyboard + * button presses, mouse movements, network sockets, etc). You then add + * libusb's file descriptors to your poll()/select() calls, and when activity + * is detected on such descriptors you know it is time to call + * libusb_handle_events(). + * + * There is one final event handling complication. libusb supports + * asynchronous transfers which time out after a specified time period, and + * this requires that libusb is called into at or after the timeout so that + * the timeout can be handled. So, in addition to considering libusb's file + * descriptors in your main event loop, you must also consider that libusb + * sometimes needs to be called into at fixed points in time even when there + * is no file descriptor activity. + * + * For the details on retrieving the set of file descriptors and determining + * the next timeout, see the \ref poll "polling and timing" API documentation. + */ + +/** + * @defgroup poll Polling and timing + * + * This page documents libusb's functions for polling events and timing. + * These functions are only necessary for users of the + * \ref asyncio "asynchronous API". If you are only using the simpler + * \ref syncio "synchronous API" then you do not need to ever call these + * functions. + * + * The justification for the functionality described here has already been + * discussed in the \ref asyncevent "event handling" section of the + * asynchronous API documentation. In summary, libusb does not create internal + * threads for event processing and hence relies on your application calling + * into libusb at certain points in time so that pending events can be handled. + * In order to know precisely when libusb needs to be called into, libusb + * offers you a set of pollable file descriptors and information about when + * the next timeout expires. + * + * If you are using the asynchronous I/O API, you must take one of the two + * following options, otherwise your I/O will not complete. + * + * \section pollsimple The simple option + * + * If your application revolves solely around libusb and does not need to + * handle other event sources, you can have a program structure as follows: +\code +// initialize libusb +// find and open device +// maybe fire off some initial async I/O + +while (user_has_not_requested_exit) + libusb_handle_events(ctx); + +// clean up and exit +\endcode + * + * With such a simple main loop, you do not have to worry about managing + * sets of file descriptors or handling timeouts. libusb_handle_events() will + * handle those details internally. + * + * \section pollmain The more advanced option + * + * \note This functionality is currently only available on Unix-like platforms. + * On Windows, libusb_get_pollfds() simply returns NULL. Exposing event sources + * on Windows will require some further thought and design. + * + * In more advanced applications, you will already have a main loop which + * is monitoring other event sources: network sockets, X11 events, mouse + * movements, etc. Through exposing a set of file descriptors, libusb is + * designed to cleanly integrate into such main loops. + * + * In addition to polling file descriptors for the other event sources, you + * take a set of file descriptors from libusb and monitor those too. When you + * detect activity on libusb's file descriptors, you call + * libusb_handle_events_timeout() in non-blocking mode. + * + * What's more, libusb may also need to handle events at specific moments in + * time. No file descriptor activity is generated at these times, so your + * own application needs to be continually aware of when the next one of these + * moments occurs (through calling libusb_get_next_timeout()), and then it + * needs to call libusb_handle_events_timeout() in non-blocking mode when + * these moments occur. This means that you need to adjust your + * poll()/select() timeout accordingly. + * + * libusb provides you with a set of file descriptors to poll and expects you + * to poll all of them, treating them as a single entity. The meaning of each + * file descriptor in the set is an internal implementation detail, + * platform-dependent and may vary from release to release. Don't try and + * interpret the meaning of the file descriptors, just do as libusb indicates, + * polling all of them at once. + * + * In pseudo-code, you want something that looks like: +\code +// initialise libusb + +libusb_get_pollfds(ctx) +while (user has not requested application exit) { + libusb_get_next_timeout(ctx); + poll(on libusb file descriptors plus any other event sources of interest, + using a timeout no larger than the value libusb just suggested) + if (poll() indicated activity on libusb file descriptors) + libusb_handle_events_timeout(ctx, &zero_tv); + if (time has elapsed to or beyond the libusb timeout) + libusb_handle_events_timeout(ctx, &zero_tv); + // handle events from other sources here +} + +// clean up and exit +\endcode + * + * \subsection polltime Notes on time-based events + * + * The above complication with having to track time and call into libusb at + * specific moments is a bit of a headache. For maximum compatibility, you do + * need to write your main loop as above, but you may decide that you can + * restrict the supported platforms of your application and get away with + * a more simplistic scheme. + * + * These time-based event complications are \b not required on the following + * platforms: + * - Darwin + * - Linux, provided that the following version requirements are satisfied: + * - Linux v2.6.27 or newer, compiled with timerfd support + * - glibc v2.9 or newer + * - libusb v1.0.5 or newer + * + * Under these configurations, libusb_get_next_timeout() will \em always return + * 0, so your main loop can be simplified to: +\code +// initialise libusb + +libusb_get_pollfds(ctx) +while (user has not requested application exit) { + poll(on libusb file descriptors plus any other event sources of interest, + using any timeout that you like) + if (poll() indicated activity on libusb file descriptors) + libusb_handle_events_timeout(ctx, &zero_tv); + // handle events from other sources here +} + +// clean up and exit +\endcode + * + * Do remember that if you simplify your main loop to the above, you will + * lose compatibility with some platforms (including legacy Linux platforms, + * and any future platforms supported by libusb which may have time-based + * event requirements). The resultant problems will likely appear as + * strange bugs in your application. + * + * You can use the libusb_pollfds_handle_timeouts() function to do a runtime + * check to see if it is safe to ignore the time-based event complications. + * If your application has taken the shortcut of ignoring libusb's next timeout + * in your main loop, then you are advised to check the return value of + * libusb_pollfds_handle_timeouts() during application startup, and to abort + * if the platform does suffer from these timing complications. + * + * \subsection fdsetchange Changes in the file descriptor set + * + * The set of file descriptors that libusb uses as event sources may change + * during the life of your application. Rather than having to repeatedly + * call libusb_get_pollfds(), you can set up notification functions for when + * the file descriptor set changes using libusb_set_pollfd_notifiers(). + * + * \subsection mtissues Multi-threaded considerations + * + * Unfortunately, the situation is complicated further when multiple threads + * come into play. If two threads are monitoring the same file descriptors, + * the fact that only one thread will be woken up when an event occurs causes + * some headaches. + * + * The events lock, event waiters lock, and libusb_handle_events_locked() + * entities are added to solve these problems. You do not need to be concerned + * with these entities otherwise. + * + * See the extra documentation: \ref mtasync + */ + +/** \page mtasync Multi-threaded applications and asynchronous I/O + * + * libusb is a thread-safe library, but extra considerations must be applied + * to applications which interact with libusb from multiple threads. + * + * The underlying issue that must be addressed is that all libusb I/O + * revolves around monitoring file descriptors through the poll()/select() + * system calls. This is directly exposed at the + * \ref asyncio "asynchronous interface" but it is important to note that the + * \ref syncio "synchronous interface" is implemented on top of the + * asynchonrous interface, therefore the same considerations apply. + * + * The issue is that if two or more threads are concurrently calling poll() + * or select() on libusb's file descriptors then only one of those threads + * will be woken up when an event arrives. The others will be completely + * oblivious that anything has happened. + * + * Consider the following pseudo-code, which submits an asynchronous transfer + * then waits for its completion. This style is one way you could implement a + * synchronous interface on top of the asynchronous interface (and libusb + * does something similar, albeit more advanced due to the complications + * explained on this page). + * +\code +void cb(struct libusb_transfer *transfer) +{ + int *completed = transfer->user_data; + *completed = 1; +} + +void myfunc() { + struct libusb_transfer *transfer; + unsigned char buffer[LIBUSB_CONTROL_SETUP_SIZE]; + int completed = 0; + + transfer = libusb_alloc_transfer(0); + libusb_fill_control_setup(buffer, + LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_OUT, 0x04, 0x01, 0, 0); + libusb_fill_control_transfer(transfer, dev, buffer, cb, &completed, 1000); + libusb_submit_transfer(transfer); + + while (!completed) { + poll(libusb file descriptors, 120*1000); + if (poll indicates activity) + libusb_handle_events_timeout(ctx, &zero_tv); + } + printf("completed!"); + // other code here +} +\endcode + * + * Here we are serializing completion of an asynchronous event + * against a condition - the condition being completion of a specific transfer. + * The poll() loop has a long timeout to minimize CPU usage during situations + * when nothing is happening (it could reasonably be unlimited). + * + * If this is the only thread that is polling libusb's file descriptors, there + * is no problem: there is no danger that another thread will swallow up the + * event that we are interested in. On the other hand, if there is another + * thread polling the same descriptors, there is a chance that it will receive + * the event that we were interested in. In this situation, myfunc() + * will only realise that the transfer has completed on the next iteration of + * the loop, up to 120 seconds later. Clearly a two-minute delay is + * undesirable, and don't even think about using short timeouts to circumvent + * this issue! + * + * The solution here is to ensure that no two threads are ever polling the + * file descriptors at the same time. A naive implementation of this would + * impact the capabilities of the library, so libusb offers the scheme + * documented below to ensure no loss of functionality. + * + * Before we go any further, it is worth mentioning that all libusb-wrapped + * event handling procedures fully adhere to the scheme documented below. + * This includes libusb_handle_events() and its variants, and all the + * synchronous I/O functions - libusb hides this headache from you. + * + * \section Using libusb_handle_events() from multiple threads + * + * Even when only using libusb_handle_events() and synchronous I/O functions, + * you can still have a race condition. You might be tempted to solve the + * above with libusb_handle_events() like so: + * +\code + libusb_submit_transfer(transfer); + + while (!completed) { + libusb_handle_events(ctx); + } + printf("completed!"); +\endcode + * + * This however has a race between the checking of completed and + * libusb_handle_events() acquiring the events lock, so another thread + * could have completed the transfer, resulting in this thread hanging + * until either a timeout or another event occurs. See also commit + * 6696512aade99bb15d6792af90ae329af270eba6 which fixes this in the + * synchronous API implementation of libusb. + * + * Fixing this race requires checking the variable completed only after + * taking the event lock, which defeats the concept of just calling + * libusb_handle_events() without worrying about locking. This is why + * libusb-1.0.9 introduces the new libusb_handle_events_timeout_completed() + * and libusb_handle_events_completed() functions, which handles doing the + * completion check for you after they have acquired the lock: + * +\code + libusb_submit_transfer(transfer); + + while (!completed) { + libusb_handle_events_completed(ctx, &completed); + } + printf("completed!"); +\endcode + * + * This nicely fixes the race in our example. Note that if all you want to + * do is submit a single transfer and wait for its completion, then using + * one of the synchronous I/O functions is much easier. + * + * \section eventlock The events lock + * + * The problem is when we consider the fact that libusb exposes file + * descriptors to allow for you to integrate asynchronous USB I/O into + * existing main loops, effectively allowing you to do some work behind + * libusb's back. If you do take libusb's file descriptors and pass them to + * poll()/select() yourself, you need to be aware of the associated issues. + * + * The first concept to be introduced is the events lock. The events lock + * is used to serialize threads that want to handle events, such that only + * one thread is handling events at any one time. + * + * You must take the events lock before polling libusb file descriptors, + * using libusb_lock_events(). You must release the lock as soon as you have + * aborted your poll()/select() loop, using libusb_unlock_events(). + * + * \section threadwait Letting other threads do the work for you + * + * Although the events lock is a critical part of the solution, it is not + * enough on it's own. You might wonder if the following is sufficient... +\code + libusb_lock_events(ctx); + while (!completed) { + poll(libusb file descriptors, 120*1000); + if (poll indicates activity) + libusb_handle_events_timeout(ctx, &zero_tv); + } + libusb_unlock_events(ctx); +\endcode + * ...and the answer is that it is not. This is because the transfer in the + * code shown above may take a long time (say 30 seconds) to complete, and + * the lock is not released until the transfer is completed. + * + * Another thread with similar code that wants to do event handling may be + * working with a transfer that completes after a few milliseconds. Despite + * having such a quick completion time, the other thread cannot check that + * status of its transfer until the code above has finished (30 seconds later) + * due to contention on the lock. + * + * To solve this, libusb offers you a mechanism to determine when another + * thread is handling events. It also offers a mechanism to block your thread + * until the event handling thread has completed an event (and this mechanism + * does not involve polling of file descriptors). + * + * After determining that another thread is currently handling events, you + * obtain the event waiters lock using libusb_lock_event_waiters(). + * You then re-check that some other thread is still handling events, and if + * so, you call libusb_wait_for_event(). + * + * libusb_wait_for_event() puts your application to sleep until an event + * occurs, or until a thread releases the events lock. When either of these + * things happen, your thread is woken up, and should re-check the condition + * it was waiting on. It should also re-check that another thread is handling + * events, and if not, it should start handling events itself. + * + * This looks like the following, as pseudo-code: +\code +retry: +if (libusb_try_lock_events(ctx) == 0) { + // we obtained the event lock: do our own event handling + while (!completed) { + if (!libusb_event_handling_ok(ctx)) { + libusb_unlock_events(ctx); + goto retry; + } + poll(libusb file descriptors, 120*1000); + if (poll indicates activity) + libusb_handle_events_locked(ctx, 0); + } + libusb_unlock_events(ctx); +} else { + // another thread is doing event handling. wait for it to signal us that + // an event has completed + libusb_lock_event_waiters(ctx); + + while (!completed) { + // now that we have the event waiters lock, double check that another + // thread is still handling events for us. (it may have ceased handling + // events in the time it took us to reach this point) + if (!libusb_event_handler_active(ctx)) { + // whoever was handling events is no longer doing so, try again + libusb_unlock_event_waiters(ctx); + goto retry; + } + + libusb_wait_for_event(ctx, NULL); + } + libusb_unlock_event_waiters(ctx); +} +printf("completed!\n"); +\endcode + * + * A naive look at the above code may suggest that this can only support + * one event waiter (hence a total of 2 competing threads, the other doing + * event handling), because the event waiter seems to have taken the event + * waiters lock while waiting for an event. However, the system does support + * multiple event waiters, because libusb_wait_for_event() actually drops + * the lock while waiting, and reaquires it before continuing. + * + * We have now implemented code which can dynamically handle situations where + * nobody is handling events (so we should do it ourselves), and it can also + * handle situations where another thread is doing event handling (so we can + * piggyback onto them). It is also equipped to handle a combination of + * the two, for example, another thread is doing event handling, but for + * whatever reason it stops doing so before our condition is met, so we take + * over the event handling. + * + * Four functions were introduced in the above pseudo-code. Their importance + * should be apparent from the code shown above. + * -# libusb_try_lock_events() is a non-blocking function which attempts + * to acquire the events lock but returns a failure code if it is contended. + * -# libusb_event_handling_ok() checks that libusb is still happy for your + * thread to be performing event handling. Sometimes, libusb needs to + * interrupt the event handler, and this is how you can check if you have + * been interrupted. If this function returns 0, the correct behaviour is + * for you to give up the event handling lock, and then to repeat the cycle. + * The following libusb_try_lock_events() will fail, so you will become an + * events waiter. For more information on this, read \ref fullstory below. + * -# libusb_handle_events_locked() is a variant of + * libusb_handle_events_timeout() that you can call while holding the + * events lock. libusb_handle_events_timeout() itself implements similar + * logic to the above, so be sure not to call it when you are + * "working behind libusb's back", as is the case here. + * -# libusb_event_handler_active() determines if someone is currently + * holding the events lock + * + * You might be wondering why there is no function to wake up all threads + * blocked on libusb_wait_for_event(). This is because libusb can do this + * internally: it will wake up all such threads when someone calls + * libusb_unlock_events() or when a transfer completes (at the point after its + * callback has returned). + * + * \subsection fullstory The full story + * + * The above explanation should be enough to get you going, but if you're + * really thinking through the issues then you may be left with some more + * questions regarding libusb's internals. If you're curious, read on, and if + * not, skip to the next section to avoid confusing yourself! + * + * The immediate question that may spring to mind is: what if one thread + * modifies the set of file descriptors that need to be polled while another + * thread is doing event handling? + * + * There are 2 situations in which this may happen. + * -# libusb_open() will add another file descriptor to the poll set, + * therefore it is desirable to interrupt the event handler so that it + * restarts, picking up the new descriptor. + * -# libusb_close() will remove a file descriptor from the poll set. There + * are all kinds of race conditions that could arise here, so it is + * important that nobody is doing event handling at this time. + * + * libusb handles these issues internally, so application developers do not + * have to stop their event handlers while opening/closing devices. Here's how + * it works, focusing on the libusb_close() situation first: + * + * -# During initialization, libusb opens an internal pipe, and it adds the read + * end of this pipe to the set of file descriptors to be polled. + * -# During libusb_close(), libusb writes some dummy data on this control pipe. + * This immediately interrupts the event handler. libusb also records + * internally that it is trying to interrupt event handlers for this + * high-priority event. + * -# At this point, some of the functions described above start behaving + * differently: + * - libusb_event_handling_ok() starts returning 1, indicating that it is NOT + * OK for event handling to continue. + * - libusb_try_lock_events() starts returning 1, indicating that another + * thread holds the event handling lock, even if the lock is uncontended. + * - libusb_event_handler_active() starts returning 1, indicating that + * another thread is doing event handling, even if that is not true. + * -# The above changes in behaviour result in the event handler stopping and + * giving up the events lock very quickly, giving the high-priority + * libusb_close() operation a "free ride" to acquire the events lock. All + * threads that are competing to do event handling become event waiters. + * -# With the events lock held inside libusb_close(), libusb can safely remove + * a file descriptor from the poll set, in the safety of knowledge that + * nobody is polling those descriptors or trying to access the poll set. + * -# After obtaining the events lock, the close operation completes very + * quickly (usually a matter of milliseconds) and then immediately releases + * the events lock. + * -# At the same time, the behaviour of libusb_event_handling_ok() and friends + * reverts to the original, documented behaviour. + * -# The release of the events lock causes the threads that are waiting for + * events to be woken up and to start competing to become event handlers + * again. One of them will succeed; it will then re-obtain the list of poll + * descriptors, and USB I/O will then continue as normal. + * + * libusb_open() is similar, and is actually a more simplistic case. Upon a + * call to libusb_open(): + * + * -# The device is opened and a file descriptor is added to the poll set. + * -# libusb sends some dummy data on the control pipe, and records that it + * is trying to modify the poll descriptor set. + * -# The event handler is interrupted, and the same behaviour change as for + * libusb_close() takes effect, causing all event handling threads to become + * event waiters. + * -# The libusb_open() implementation takes its free ride to the events lock. + * -# Happy that it has successfully paused the events handler, libusb_open() + * releases the events lock. + * -# The event waiter threads are all woken up and compete to become event + * handlers again. The one that succeeds will obtain the list of poll + * descriptors again, which will include the addition of the new device. + * + * \subsection concl Closing remarks + * + * The above may seem a little complicated, but hopefully I have made it clear + * why such complications are necessary. Also, do not forget that this only + * applies to applications that take libusb's file descriptors and integrate + * them into their own polling loops. + * + * You may decide that it is OK for your multi-threaded application to ignore + * some of the rules and locks detailed above, because you don't think that + * two threads can ever be polling the descriptors at the same time. If that + * is the case, then that's good news for you because you don't have to worry. + * But be careful here; remember that the synchronous I/O functions do event + * handling internally. If you have one thread doing event handling in a loop + * (without implementing the rules and locking semantics documented above) + * and another trying to send a synchronous USB transfer, you will end up with + * two threads monitoring the same descriptors, and the above-described + * undesirable behaviour occuring. The solution is for your polling thread to + * play by the rules; the synchronous I/O functions do so, and this will result + * in them getting along in perfect harmony. + * + * If you do have a dedicated thread doing event handling, it is perfectly + * legal for it to take the event handling lock for long periods of time. Any + * synchronous I/O functions you call from other threads will transparently + * fall back to the "event waiters" mechanism detailed above. The only + * consideration that your event handling thread must apply is the one related + * to libusb_event_handling_ok(): you must call this before every poll(), and + * give up the events lock if instructed. + */ + +int usbi_io_init(struct libusb_context *ctx) +{ + int r; + + usbi_mutex_init(&ctx->flying_transfers_lock, NULL); + usbi_mutex_init(&ctx->pollfds_lock, NULL); + usbi_mutex_init(&ctx->pollfd_modify_lock, NULL); + usbi_mutex_init_recursive(&ctx->events_lock, NULL); + usbi_mutex_init(&ctx->event_waiters_lock, NULL); + usbi_cond_init(&ctx->event_waiters_cond, NULL); + list_init(&ctx->flying_transfers); + list_init(&ctx->pollfds); + + /* FIXME should use an eventfd on kernels that support it */ + r = usbi_pipe(ctx->ctrl_pipe); + if (r < 0) { + r = LIBUSB_ERROR_OTHER; + goto err; + } + + r = usbi_add_pollfd(ctx, ctx->ctrl_pipe[0], POLLIN); + if (r < 0) + goto err_close_pipe; + +#ifdef USBI_TIMERFD_AVAILABLE + ctx->timerfd = timerfd_create(usbi_backend->get_timerfd_clockid(), + TFD_NONBLOCK); + if (ctx->timerfd >= 0) { + usbi_dbg("using timerfd for timeouts"); + r = usbi_add_pollfd(ctx, ctx->timerfd, POLLIN); + if (r < 0) { + usbi_remove_pollfd(ctx, ctx->ctrl_pipe[0]); + close(ctx->timerfd); + goto err_close_pipe; + } + } else { + usbi_dbg("timerfd not available (code %d error %d)", ctx->timerfd, errno); + ctx->timerfd = -1; + } +#endif + + return 0; + +err_close_pipe: + usbi_close(ctx->ctrl_pipe[0]); + usbi_close(ctx->ctrl_pipe[1]); +err: + usbi_mutex_destroy(&ctx->flying_transfers_lock); + usbi_mutex_destroy(&ctx->pollfds_lock); + usbi_mutex_destroy(&ctx->pollfd_modify_lock); + usbi_mutex_destroy(&ctx->events_lock); + usbi_mutex_destroy(&ctx->event_waiters_lock); + usbi_cond_destroy(&ctx->event_waiters_cond); + return r; +} + +void usbi_io_exit(struct libusb_context *ctx) +{ + usbi_remove_pollfd(ctx, ctx->ctrl_pipe[0]); + usbi_close(ctx->ctrl_pipe[0]); + usbi_close(ctx->ctrl_pipe[1]); +#ifdef USBI_TIMERFD_AVAILABLE + if (usbi_using_timerfd(ctx)) { + usbi_remove_pollfd(ctx, ctx->timerfd); + close(ctx->timerfd); + } +#endif + usbi_mutex_destroy(&ctx->flying_transfers_lock); + usbi_mutex_destroy(&ctx->pollfds_lock); + usbi_mutex_destroy(&ctx->pollfd_modify_lock); + usbi_mutex_destroy(&ctx->events_lock); + usbi_mutex_destroy(&ctx->event_waiters_lock); + usbi_cond_destroy(&ctx->event_waiters_cond); +} + +static int calculate_timeout(struct usbi_transfer *transfer) +{ + int r; + struct timespec current_time; + unsigned int timeout = + USBI_TRANSFER_TO_LIBUSB_TRANSFER(transfer)->timeout; + + if (!timeout) + return 0; + + r = usbi_backend->clock_gettime(USBI_CLOCK_MONOTONIC, ¤t_time); + if (r < 0) { + usbi_err(ITRANSFER_CTX(transfer), + "failed to read monotonic clock, errno=%d", errno); + return r; + } + + current_time.tv_sec += timeout / 1000; + current_time.tv_nsec += (timeout % 1000) * 1000000; + + if (current_time.tv_nsec > 1000000000) { + current_time.tv_nsec -= 1000000000; + current_time.tv_sec++; + } + + TIMESPEC_TO_TIMEVAL(&transfer->timeout, ¤t_time); + return 0; +} + +/* add a transfer to the (timeout-sorted) active transfers list. + * returns 1 if the transfer has a timeout and it is the timeout next to + * expire */ +static int add_to_flying_list(struct usbi_transfer *transfer) +{ + struct usbi_transfer *cur; + struct timeval *timeout = &transfer->timeout; + struct libusb_context *ctx = ITRANSFER_CTX(transfer); + int r = 0; + int first = 1; + + usbi_mutex_lock(&ctx->flying_transfers_lock); + + /* if we have no other flying transfers, start the list with this one */ + if (list_empty(&ctx->flying_transfers)) { + list_add(&transfer->list, &ctx->flying_transfers); + if (timerisset(timeout)) + r = 1; + goto out; + } + + /* if we have infinite timeout, append to end of list */ + if (!timerisset(timeout)) { + list_add_tail(&transfer->list, &ctx->flying_transfers); + goto out; + } + + /* otherwise, find appropriate place in list */ + list_for_each_entry(cur, &ctx->flying_transfers, list, struct usbi_transfer) { + /* find first timeout that occurs after the transfer in question */ + struct timeval *cur_tv = &cur->timeout; + + if (!timerisset(cur_tv) || (cur_tv->tv_sec > timeout->tv_sec) || + (cur_tv->tv_sec == timeout->tv_sec && + cur_tv->tv_usec > timeout->tv_usec)) { + list_add_tail(&transfer->list, &cur->list); + r = first; + goto out; + } + first = 0; + } + + /* otherwise we need to be inserted at the end */ + list_add_tail(&transfer->list, &ctx->flying_transfers); +out: + usbi_mutex_unlock(&ctx->flying_transfers_lock); + return r; +} + +/** \ingroup asyncio + * Allocate a libusb transfer with a specified number of isochronous packet + * descriptors. The returned transfer is pre-initialized for you. When the new + * transfer is no longer needed, it should be freed with + * libusb_free_transfer(). + * + * Transfers intended for non-isochronous endpoints (e.g. control, bulk, + * interrupt) should specify an iso_packets count of zero. + * + * For transfers intended for isochronous endpoints, specify an appropriate + * number of packet descriptors to be allocated as part of the transfer. + * The returned transfer is not specially initialized for isochronous I/O; + * you are still required to set the + * \ref libusb_transfer::num_iso_packets "num_iso_packets" and + * \ref libusb_transfer::type "type" fields accordingly. + * + * It is safe to allocate a transfer with some isochronous packets and then + * use it on a non-isochronous endpoint. If you do this, ensure that at time + * of submission, num_iso_packets is 0 and that type is set appropriately. + * + * \param iso_packets number of isochronous packet descriptors to allocate + * \returns a newly allocated transfer, or NULL on error + */ +DEFAULT_VISIBILITY +struct libusb_transfer * LIBUSB_CALL libusb_alloc_transfer( + int iso_packets) +{ + size_t os_alloc_size = usbi_backend->transfer_priv_size + + (usbi_backend->add_iso_packet_size * iso_packets); + size_t alloc_size = sizeof(struct usbi_transfer) + + sizeof(struct libusb_transfer) + + (sizeof(struct libusb_iso_packet_descriptor) * iso_packets) + + os_alloc_size; + struct usbi_transfer *itransfer = malloc(alloc_size); + if (!itransfer) + return NULL; + + memset(itransfer, 0, alloc_size); + itransfer->num_iso_packets = iso_packets; + usbi_mutex_init(&itransfer->lock, NULL); + return USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); +} + +/** \ingroup asyncio + * Free a transfer structure. This should be called for all transfers + * allocated with libusb_alloc_transfer(). + * + * If the \ref libusb_transfer_flags::LIBUSB_TRANSFER_FREE_BUFFER + * "LIBUSB_TRANSFER_FREE_BUFFER" flag is set and the transfer buffer is + * non-NULL, this function will also free the transfer buffer using the + * standard system memory allocator (e.g. free()). + * + * It is legal to call this function with a NULL transfer. In this case, + * the function will simply return safely. + * + * It is not legal to free an active transfer (one which has been submitted + * and has not yet completed). + * + * \param transfer the transfer to free + */ +void API_EXPORTED libusb_free_transfer(struct libusb_transfer *transfer) +{ + struct usbi_transfer *itransfer; + if (!transfer) + return; + + if (transfer->flags & LIBUSB_TRANSFER_FREE_BUFFER && transfer->buffer) + free(transfer->buffer); + + itransfer = LIBUSB_TRANSFER_TO_USBI_TRANSFER(transfer); + usbi_mutex_destroy(&itransfer->lock); + free(itransfer); +} + +/** \ingroup asyncio + * Submit a transfer. This function will fire off the USB transfer and then + * return immediately. + * + * \param transfer the transfer to submit + * \returns 0 on success + * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected + * \returns LIBUSB_ERROR_BUSY if the transfer has already been submitted. + * \returns LIBUSB_ERROR_NOT_SUPPORTED if the transfer flags are not supported + * by the operating system. + * \returns another LIBUSB_ERROR code on other failure + */ +int API_EXPORTED libusb_submit_transfer(struct libusb_transfer *transfer) +{ + struct libusb_context *ctx = TRANSFER_CTX(transfer); + struct usbi_transfer *itransfer = + LIBUSB_TRANSFER_TO_USBI_TRANSFER(transfer); + int r; + int first; + + usbi_mutex_lock(&itransfer->lock); + itransfer->transferred = 0; + itransfer->flags = 0; + r = calculate_timeout(itransfer); + if (r < 0) { + r = LIBUSB_ERROR_OTHER; + goto out; + } + + first = add_to_flying_list(itransfer); + r = usbi_backend->submit_transfer(itransfer); + if (r) { + usbi_mutex_lock(&ctx->flying_transfers_lock); + list_del(&itransfer->list); + usbi_mutex_unlock(&ctx->flying_transfers_lock); + } +#ifdef USBI_TIMERFD_AVAILABLE + else if (first && usbi_using_timerfd(ctx)) { + /* if this transfer has the lowest timeout of all active transfers, + * rearm the timerfd with this transfer's timeout */ + const struct itimerspec it = { {0, 0}, + { itransfer->timeout.tv_sec, itransfer->timeout.tv_usec * 1000 } }; + usbi_dbg("arm timerfd for timeout in %dms (first in line)", transfer->timeout); + r = timerfd_settime(ctx->timerfd, TFD_TIMER_ABSTIME, &it, NULL); + if (r < 0) + r = LIBUSB_ERROR_OTHER; + } +#else + (void)first; +#endif + +out: + usbi_mutex_unlock(&itransfer->lock); + return r; +} + +/** \ingroup asyncio + * Asynchronously cancel a previously submitted transfer. + * This function returns immediately, but this does not indicate cancellation + * is complete. Your callback function will be invoked at some later time + * with a transfer status of + * \ref libusb_transfer_status::LIBUSB_TRANSFER_CANCELLED + * "LIBUSB_TRANSFER_CANCELLED." + * + * \param transfer the transfer to cancel + * \returns 0 on success + * \returns LIBUSB_ERROR_NOT_FOUND if the transfer is already complete or + * cancelled. + * \returns a LIBUSB_ERROR code on failure + */ +int API_EXPORTED libusb_cancel_transfer(struct libusb_transfer *transfer) +{ + struct usbi_transfer *itransfer = + LIBUSB_TRANSFER_TO_USBI_TRANSFER(transfer); + int r; + + usbi_dbg(""); + usbi_mutex_lock(&itransfer->lock); + r = usbi_backend->cancel_transfer(itransfer); + if (r < 0) { + if (r != LIBUSB_ERROR_NOT_FOUND) + usbi_err(TRANSFER_CTX(transfer), + "cancel transfer failed error %d", r); + else + usbi_dbg("cancel transfer failed error %d", r); + + if (r == LIBUSB_ERROR_NO_DEVICE) + itransfer->flags |= USBI_TRANSFER_DEVICE_DISAPPEARED; + } + + itransfer->flags |= USBI_TRANSFER_CANCELLING; + + usbi_mutex_unlock(&itransfer->lock); + return r; +} + +#ifdef USBI_TIMERFD_AVAILABLE +static int disarm_timerfd(struct libusb_context *ctx) +{ + const struct itimerspec disarm_timer = { { 0, 0 }, { 0, 0 } }; + int r; + + usbi_dbg(""); + r = timerfd_settime(ctx->timerfd, 0, &disarm_timer, NULL); + if (r < 0) + return LIBUSB_ERROR_OTHER; + else + return 0; +} + +/* iterates through the flying transfers, and rearms the timerfd based on the + * next upcoming timeout. + * must be called with flying_list locked. + * returns 0 if there was no timeout to arm, 1 if the next timeout was armed, + * or a LIBUSB_ERROR code on failure. + */ +static int arm_timerfd_for_next_timeout(struct libusb_context *ctx) +{ + struct usbi_transfer *transfer; + + list_for_each_entry(transfer, &ctx->flying_transfers, list, struct usbi_transfer) { + struct timeval *cur_tv = &transfer->timeout; + + /* if we've reached transfers of infinite timeout, then we have no + * arming to do */ + if (!timerisset(cur_tv)) + return 0; + + /* act on first transfer that is not already cancelled */ + if (!(transfer->flags & USBI_TRANSFER_TIMED_OUT)) { + int r; + const struct itimerspec it = { {0, 0}, + { cur_tv->tv_sec, cur_tv->tv_usec * 1000 } }; + usbi_dbg("next timeout originally %dms", USBI_TRANSFER_TO_LIBUSB_TRANSFER(transfer)->timeout); + r = timerfd_settime(ctx->timerfd, TFD_TIMER_ABSTIME, &it, NULL); + if (r < 0) + return LIBUSB_ERROR_OTHER; + return 1; + } + } + + return 0; +} +#else +static int disarm_timerfd(struct libusb_context *ctx) +{ + (void)ctx; + return 0; +} +static int arm_timerfd_for_next_timeout(struct libusb_context *ctx) +{ + (void)ctx; + return 0; +} +#endif + +/* Handle completion of a transfer (completion might be an error condition). + * This will invoke the user-supplied callback function, which may end up + * freeing the transfer. Therefore you cannot use the transfer structure + * after calling this function, and you should free all backend-specific + * data before calling it. + * Do not call this function with the usbi_transfer lock held. User-specified + * callback functions may attempt to directly resubmit the transfer, which + * will attempt to take the lock. */ +int usbi_handle_transfer_completion(struct usbi_transfer *itransfer, + enum libusb_transfer_status status) +{ + struct libusb_transfer *transfer = + USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_context *ctx = TRANSFER_CTX(transfer); + uint8_t flags; + int r = 0; + + /* FIXME: could be more intelligent with the timerfd here. we don't need + * to disarm the timerfd if there was no timer running, and we only need + * to rearm the timerfd if the transfer that expired was the one with + * the shortest timeout. */ + + usbi_mutex_lock(&ctx->flying_transfers_lock); + list_del(&itransfer->list); + if (usbi_using_timerfd(ctx)) + r = arm_timerfd_for_next_timeout(ctx); + usbi_mutex_unlock(&ctx->flying_transfers_lock); + + if (usbi_using_timerfd(ctx)) { + if (r < 0) + return r; + r = disarm_timerfd(ctx); + if (r < 0) + return r; + } + + if (status == LIBUSB_TRANSFER_COMPLETED + && transfer->flags & LIBUSB_TRANSFER_SHORT_NOT_OK) { + int rqlen = transfer->length; + if (transfer->type == LIBUSB_TRANSFER_TYPE_CONTROL) + rqlen -= LIBUSB_CONTROL_SETUP_SIZE; + if (rqlen != itransfer->transferred) { + usbi_dbg("interpreting short transfer as error"); + status = LIBUSB_TRANSFER_ERROR; + } + } + + flags = transfer->flags; + transfer->status = status; + transfer->actual_length = itransfer->transferred; + usbi_dbg("transfer %p has callback %p", transfer, transfer->callback); + if (transfer->callback) + transfer->callback(transfer); + /* transfer might have been freed by the above call, do not use from + * this point. */ + if (flags & LIBUSB_TRANSFER_FREE_TRANSFER) + libusb_free_transfer(transfer); + usbi_mutex_lock(&ctx->event_waiters_lock); + usbi_cond_broadcast(&ctx->event_waiters_cond); + usbi_mutex_unlock(&ctx->event_waiters_lock); + return 0; +} + +/* Similar to usbi_handle_transfer_completion() but exclusively for transfers + * that were asynchronously cancelled. The same concerns w.r.t. freeing of + * transfers exist here. + * Do not call this function with the usbi_transfer lock held. User-specified + * callback functions may attempt to directly resubmit the transfer, which + * will attempt to take the lock. */ +int usbi_handle_transfer_cancellation(struct usbi_transfer *transfer) +{ + /* if the URB was cancelled due to timeout, report timeout to the user */ + if (transfer->flags & USBI_TRANSFER_TIMED_OUT) { + usbi_dbg("detected timeout cancellation"); + return usbi_handle_transfer_completion(transfer, LIBUSB_TRANSFER_TIMED_OUT); + } + + /* otherwise its a normal async cancel */ + return usbi_handle_transfer_completion(transfer, LIBUSB_TRANSFER_CANCELLED); +} + +/** \ingroup poll + * Attempt to acquire the event handling lock. This lock is used to ensure that + * only one thread is monitoring libusb event sources at any one time. + * + * You only need to use this lock if you are developing an application + * which calls poll() or select() on libusb's file descriptors directly. + * If you stick to libusb's event handling loop functions (e.g. + * libusb_handle_events()) then you do not need to be concerned with this + * locking. + * + * While holding this lock, you are trusted to actually be handling events. + * If you are no longer handling events, you must call libusb_unlock_events() + * as soon as possible. + * + * \param ctx the context to operate on, or NULL for the default context + * \returns 0 if the lock was obtained successfully + * \returns 1 if the lock was not obtained (i.e. another thread holds the lock) + * \see \ref mtasync + */ +int API_EXPORTED libusb_try_lock_events(libusb_context *ctx) +{ + int r; + USBI_GET_CONTEXT(ctx); + + /* is someone else waiting to modify poll fds? if so, don't let this thread + * start event handling */ + usbi_mutex_lock(&ctx->pollfd_modify_lock); + r = ctx->pollfd_modify; + usbi_mutex_unlock(&ctx->pollfd_modify_lock); + if (r) { + usbi_dbg("someone else is modifying poll fds"); + return 1; + } + + r = usbi_mutex_trylock(&ctx->events_lock); + if (r) + return 1; + + ctx->event_handler_active = 1; + return 0; +} + +/** \ingroup poll + * Acquire the event handling lock, blocking until successful acquisition if + * it is contended. This lock is used to ensure that only one thread is + * monitoring libusb event sources at any one time. + * + * You only need to use this lock if you are developing an application + * which calls poll() or select() on libusb's file descriptors directly. + * If you stick to libusb's event handling loop functions (e.g. + * libusb_handle_events()) then you do not need to be concerned with this + * locking. + * + * While holding this lock, you are trusted to actually be handling events. + * If you are no longer handling events, you must call libusb_unlock_events() + * as soon as possible. + * + * \param ctx the context to operate on, or NULL for the default context + * \see \ref mtasync + */ +void API_EXPORTED libusb_lock_events(libusb_context *ctx) +{ + USBI_GET_CONTEXT(ctx); + usbi_mutex_lock(&ctx->events_lock); + ctx->event_handler_active = 1; +} + +/** \ingroup poll + * Release the lock previously acquired with libusb_try_lock_events() or + * libusb_lock_events(). Releasing this lock will wake up any threads blocked + * on libusb_wait_for_event(). + * + * \param ctx the context to operate on, or NULL for the default context + * \see \ref mtasync + */ +void API_EXPORTED libusb_unlock_events(libusb_context *ctx) +{ + USBI_GET_CONTEXT(ctx); + ctx->event_handler_active = 0; + usbi_mutex_unlock(&ctx->events_lock); + + /* FIXME: perhaps we should be a bit more efficient by not broadcasting + * the availability of the events lock when we are modifying pollfds + * (check ctx->pollfd_modify)? */ + usbi_mutex_lock(&ctx->event_waiters_lock); + usbi_cond_broadcast(&ctx->event_waiters_cond); + usbi_mutex_unlock(&ctx->event_waiters_lock); +} + +/** \ingroup poll + * Determine if it is still OK for this thread to be doing event handling. + * + * Sometimes, libusb needs to temporarily pause all event handlers, and this + * is the function you should use before polling file descriptors to see if + * this is the case. + * + * If this function instructs your thread to give up the events lock, you + * should just continue the usual logic that is documented in \ref mtasync. + * On the next iteration, your thread will fail to obtain the events lock, + * and will hence become an event waiter. + * + * This function should be called while the events lock is held: you don't + * need to worry about the results of this function if your thread is not + * the current event handler. + * + * \param ctx the context to operate on, or NULL for the default context + * \returns 1 if event handling can start or continue + * \returns 0 if this thread must give up the events lock + * \see \ref fullstory "Multi-threaded I/O: the full story" + */ +int API_EXPORTED libusb_event_handling_ok(libusb_context *ctx) +{ + int r; + USBI_GET_CONTEXT(ctx); + + /* is someone else waiting to modify poll fds? if so, don't let this thread + * continue event handling */ + usbi_mutex_lock(&ctx->pollfd_modify_lock); + r = ctx->pollfd_modify; + usbi_mutex_unlock(&ctx->pollfd_modify_lock); + if (r) { + usbi_dbg("someone else is modifying poll fds"); + return 0; + } + + return 1; +} + + +/** \ingroup poll + * Determine if an active thread is handling events (i.e. if anyone is holding + * the event handling lock). + * + * \param ctx the context to operate on, or NULL for the default context + * \returns 1 if a thread is handling events + * \returns 0 if there are no threads currently handling events + * \see \ref mtasync + */ +int API_EXPORTED libusb_event_handler_active(libusb_context *ctx) +{ + int r; + USBI_GET_CONTEXT(ctx); + + /* is someone else waiting to modify poll fds? if so, don't let this thread + * start event handling -- indicate that event handling is happening */ + usbi_mutex_lock(&ctx->pollfd_modify_lock); + r = ctx->pollfd_modify; + usbi_mutex_unlock(&ctx->pollfd_modify_lock); + if (r) { + usbi_dbg("someone else is modifying poll fds"); + return 1; + } + + return ctx->event_handler_active; +} + +/** \ingroup poll + * Acquire the event waiters lock. This lock is designed to be obtained under + * the situation where you want to be aware when events are completed, but + * some other thread is event handling so calling libusb_handle_events() is not + * allowed. + * + * You then obtain this lock, re-check that another thread is still handling + * events, then call libusb_wait_for_event(). + * + * You only need to use this lock if you are developing an application + * which calls poll() or select() on libusb's file descriptors directly, + * and may potentially be handling events from 2 threads simultaenously. + * If you stick to libusb's event handling loop functions (e.g. + * libusb_handle_events()) then you do not need to be concerned with this + * locking. + * + * \param ctx the context to operate on, or NULL for the default context + * \see \ref mtasync + */ +void API_EXPORTED libusb_lock_event_waiters(libusb_context *ctx) +{ + USBI_GET_CONTEXT(ctx); + usbi_mutex_lock(&ctx->event_waiters_lock); +} + +/** \ingroup poll + * Release the event waiters lock. + * \param ctx the context to operate on, or NULL for the default context + * \see \ref mtasync + */ +void API_EXPORTED libusb_unlock_event_waiters(libusb_context *ctx) +{ + USBI_GET_CONTEXT(ctx); + usbi_mutex_unlock(&ctx->event_waiters_lock); +} + +/** \ingroup poll + * Wait for another thread to signal completion of an event. Must be called + * with the event waiters lock held, see libusb_lock_event_waiters(). + * + * This function will block until any of the following conditions are met: + * -# The timeout expires + * -# A transfer completes + * -# A thread releases the event handling lock through libusb_unlock_events() + * + * Condition 1 is obvious. Condition 2 unblocks your thread after + * the callback for the transfer has completed. Condition 3 is important + * because it means that the thread that was previously handling events is no + * longer doing so, so if any events are to complete, another thread needs to + * step up and start event handling. + * + * This function releases the event waiters lock before putting your thread + * to sleep, and reacquires the lock as it is being woken up. + * + * \param ctx the context to operate on, or NULL for the default context + * \param tv maximum timeout for this blocking function. A NULL value + * indicates unlimited timeout. + * \returns 0 after a transfer completes or another thread stops event handling + * \returns 1 if the timeout expired + * \see \ref mtasync + */ +int API_EXPORTED libusb_wait_for_event(libusb_context *ctx, struct timeval *tv) +{ + struct timespec timeout; + int r; + + USBI_GET_CONTEXT(ctx); + if (tv == NULL) { + usbi_cond_wait(&ctx->event_waiters_cond, &ctx->event_waiters_lock); + return 0; + } + + r = usbi_backend->clock_gettime(USBI_CLOCK_REALTIME, &timeout); + if (r < 0) { + usbi_err(ctx, "failed to read realtime clock, error %d", errno); + return LIBUSB_ERROR_OTHER; + } + + timeout.tv_sec += tv->tv_sec; + timeout.tv_nsec += tv->tv_usec * 1000; + if (timeout.tv_nsec > 1000000000) { + timeout.tv_nsec -= 1000000000; + timeout.tv_sec++; + } + + r = usbi_cond_timedwait(&ctx->event_waiters_cond, + &ctx->event_waiters_lock, &timeout); + return (r == ETIMEDOUT); +} + +static void handle_timeout(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = + USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + int r; + + itransfer->flags |= USBI_TRANSFER_TIMED_OUT; + r = libusb_cancel_transfer(transfer); + if (r < 0) + usbi_warn(TRANSFER_CTX(transfer), + "async cancel failed %d errno=%d", r, errno); +} + +static int handle_timeouts_locked(struct libusb_context *ctx) +{ + int r; + struct timespec systime_ts; + struct timeval systime; + struct usbi_transfer *transfer; + + if (list_empty(&ctx->flying_transfers)) + return 0; + + /* get current time */ + r = usbi_backend->clock_gettime(USBI_CLOCK_MONOTONIC, &systime_ts); + if (r < 0) + return r; + + TIMESPEC_TO_TIMEVAL(&systime, &systime_ts); + + /* iterate through flying transfers list, finding all transfers that + * have expired timeouts */ + list_for_each_entry(transfer, &ctx->flying_transfers, list, struct usbi_transfer) { + struct timeval *cur_tv = &transfer->timeout; + + /* if we've reached transfers of infinite timeout, we're all done */ + if (!timerisset(cur_tv)) + return 0; + + /* ignore timeouts we've already handled */ + if (transfer->flags & (USBI_TRANSFER_TIMED_OUT | USBI_TRANSFER_OS_HANDLES_TIMEOUT)) + continue; + + /* if transfer has non-expired timeout, nothing more to do */ + if ((cur_tv->tv_sec > systime.tv_sec) || + (cur_tv->tv_sec == systime.tv_sec && + cur_tv->tv_usec > systime.tv_usec)) + return 0; + + /* otherwise, we've got an expired timeout to handle */ + handle_timeout(transfer); + } + return 0; +} + +static int handle_timeouts(struct libusb_context *ctx) +{ + int r; + USBI_GET_CONTEXT(ctx); + usbi_mutex_lock(&ctx->flying_transfers_lock); + r = handle_timeouts_locked(ctx); + usbi_mutex_unlock(&ctx->flying_transfers_lock); + return r; +} + +#ifdef USBI_TIMERFD_AVAILABLE +static int handle_timerfd_trigger(struct libusb_context *ctx) +{ + int r; + + r = disarm_timerfd(ctx); + if (r < 0) + return r; + + usbi_mutex_lock(&ctx->flying_transfers_lock); + + /* process the timeout that just happened */ + r = handle_timeouts_locked(ctx); + if (r < 0) + goto out; + + /* arm for next timeout*/ + r = arm_timerfd_for_next_timeout(ctx); + +out: + usbi_mutex_unlock(&ctx->flying_transfers_lock); + return r; +} +#endif + +/* do the actual event handling. assumes that no other thread is concurrently + * doing the same thing. */ +static int handle_events(struct libusb_context *ctx, struct timeval *tv) +{ + int r; + struct usbi_pollfd *ipollfd; + POLL_NFDS_TYPE nfds = 0; + struct pollfd *fds; + int i = -1; + int timeout_ms; + + usbi_mutex_lock(&ctx->pollfds_lock); + list_for_each_entry(ipollfd, &ctx->pollfds, list, struct usbi_pollfd) + nfds++; + + /* TODO: malloc when number of fd's changes, not on every poll */ + fds = malloc(sizeof(*fds) * nfds); + if (!fds) { + usbi_mutex_unlock(&ctx->pollfds_lock); + return LIBUSB_ERROR_NO_MEM; + } + + list_for_each_entry(ipollfd, &ctx->pollfds, list, struct usbi_pollfd) { + struct libusb_pollfd *pollfd = &ipollfd->pollfd; + int fd = pollfd->fd; + i++; + fds[i].fd = fd; + fds[i].events = pollfd->events; + fds[i].revents = 0; + } + usbi_mutex_unlock(&ctx->pollfds_lock); + + timeout_ms = (tv->tv_sec * 1000) + (tv->tv_usec / 1000); + + /* round up to next millisecond */ + if (tv->tv_usec % 1000) + timeout_ms++; + + usbi_dbg("poll() %d fds with timeout in %dms", nfds, timeout_ms); + r = usbi_poll(fds, nfds, timeout_ms); + usbi_dbg("poll() returned %d", r); + if (r == 0) { + free(fds); + return handle_timeouts(ctx); + } else if (r == -1 && errno == EINTR) { + free(fds); + return LIBUSB_ERROR_INTERRUPTED; + } else if (r < 0) { + free(fds); + usbi_err(ctx, "poll failed %d err=%d\n", r, errno); + return LIBUSB_ERROR_IO; + } + + /* fd[0] is always the ctrl pipe */ + if (fds[0].revents) { + /* another thread wanted to interrupt event handling, and it succeeded! + * handle any other events that cropped up at the same time, and + * simply return */ + usbi_dbg("caught a fish on the control pipe"); + + if (r == 1) { + r = 0; + goto handled; + } else { + /* prevent OS backend from trying to handle events on ctrl pipe */ + fds[0].revents = 0; + r--; + } + } + +#ifdef USBI_TIMERFD_AVAILABLE + /* on timerfd configurations, fds[1] is the timerfd */ + if (usbi_using_timerfd(ctx) && fds[1].revents) { + /* timerfd indicates that a timeout has expired */ + int ret; + usbi_dbg("timerfd triggered"); + + ret = handle_timerfd_trigger(ctx); + if (ret < 0) { + /* return error code */ + r = ret; + goto handled; + } else if (r == 1) { + /* no more active file descriptors, nothing more to do */ + r = 0; + goto handled; + } else { + /* more events pending... + * prevent OS backend from trying to handle events on timerfd */ + fds[1].revents = 0; + r--; + } + } +#endif + + r = usbi_backend->handle_events(ctx, fds, nfds, r); + if (r) + usbi_err(ctx, "backend handle_events failed with error %d", r); + +handled: + free(fds); + return r; +} + +/* returns the smallest of: + * 1. timeout of next URB + * 2. user-supplied timeout + * returns 1 if there is an already-expired timeout, otherwise returns 0 + * and populates out + */ +static int get_next_timeout(libusb_context *ctx, struct timeval *tv, + struct timeval *out) +{ + struct timeval timeout; + int r = libusb_get_next_timeout(ctx, &timeout); + if (r) { + /* timeout already expired? */ + if (!timerisset(&timeout)) + return 1; + + /* choose the smallest of next URB timeout or user specified timeout */ + if (timercmp(&timeout, tv, <)) + *out = timeout; + else + *out = *tv; + } else { + *out = *tv; + } + return 0; +} + +/** \ingroup poll + * Handle any pending events. + * + * libusb determines "pending events" by checking if any timeouts have expired + * and by checking the set of file descriptors for activity. + * + * If a zero timeval is passed, this function will handle any already-pending + * events and then immediately return in non-blocking style. + * + * If a non-zero timeval is passed and no events are currently pending, this + * function will block waiting for events to handle up until the specified + * timeout. If an event arrives or a signal is raised, this function will + * return early. + * + * If the parameter completed is not NULL then after obtaining the event + * handling lock this function will return immediately if the integer + * pointed to is not 0. This allows for race free waiting for the completion + * of a specific transfer. + * + * \param ctx the context to operate on, or NULL for the default context + * \param tv the maximum time to block waiting for events, or an all zero + * timeval struct for non-blocking mode + * \param completed pointer to completion integer to check, or NULL + * \returns 0 on success, or a LIBUSB_ERROR code on failure + * \see \ref mtasync + */ +int API_EXPORTED libusb_handle_events_timeout_completed(libusb_context *ctx, + struct timeval *tv, int *completed) +{ + int r; + struct timeval poll_timeout; + + USBI_GET_CONTEXT(ctx); + r = get_next_timeout(ctx, tv, &poll_timeout); + if (r) { + /* timeout already expired */ + return handle_timeouts(ctx); + } + +retry: + if (libusb_try_lock_events(ctx) == 0) { + if (completed == NULL || !*completed) { + /* we obtained the event lock: do our own event handling */ + usbi_dbg("doing our own event handling"); + r = handle_events(ctx, &poll_timeout); + } + libusb_unlock_events(ctx); + return r; + } + + /* another thread is doing event handling. wait for thread events that + * notify event completion. */ + libusb_lock_event_waiters(ctx); + + if (completed && *completed) + goto already_done; + + if (!libusb_event_handler_active(ctx)) { + /* we hit a race: whoever was event handling earlier finished in the + * time it took us to reach this point. try the cycle again. */ + libusb_unlock_event_waiters(ctx); + usbi_dbg("event handler was active but went away, retrying"); + goto retry; + } + + usbi_dbg("another thread is doing event handling"); + r = libusb_wait_for_event(ctx, &poll_timeout); + +already_done: + libusb_unlock_event_waiters(ctx); + + if (r < 0) + return r; + else if (r == 1) + return handle_timeouts(ctx); + else + return 0; +} + +/** \ingroup poll + * Handle any pending events + * + * Like libusb_handle_events_timeout_completed(), but without the completed + * parameter, calling this function is equivalent to calling + * libusb_handle_events_timeout_completed() with a NULL completed parameter. + * + * This function is kept primarily for backwards compatibility. + * All new code should call libusb_handle_events_completed() or + * libusb_handle_events_timeout_completed() to avoid race conditions. + * + * \param ctx the context to operate on, or NULL for the default context + * \param tv the maximum time to block waiting for events, or an all zero + * timeval struct for non-blocking mode + * \returns 0 on success, or a LIBUSB_ERROR code on failure + */ +int API_EXPORTED libusb_handle_events_timeout(libusb_context *ctx, + struct timeval *tv) +{ + return libusb_handle_events_timeout_completed(ctx, tv, NULL); +} + +/** \ingroup poll + * Handle any pending events in blocking mode. There is currently a timeout + * hardcoded at 60 seconds but we plan to make it unlimited in future. For + * finer control over whether this function is blocking or non-blocking, or + * for control over the timeout, use libusb_handle_events_timeout_completed() + * instead. + * + * This function is kept primarily for backwards compatibility. + * All new code should call libusb_handle_events_completed() or + * libusb_handle_events_timeout_completed() to avoid race conditions. + * + * \param ctx the context to operate on, or NULL for the default context + * \returns 0 on success, or a LIBUSB_ERROR code on failure + */ +int API_EXPORTED libusb_handle_events(libusb_context *ctx) +{ + struct timeval tv; + tv.tv_sec = 60; + tv.tv_usec = 0; + return libusb_handle_events_timeout_completed(ctx, &tv, NULL); +} + +/** \ingroup poll + * Handle any pending events in blocking mode. + * + * Like libusb_handle_events(), with the addition of a completed parameter + * to allow for race free waiting for the completion of a specific transfer. + * + * See libusb_handle_events_timeout_completed() for details on the completed + * parameter. + * + * \param ctx the context to operate on, or NULL for the default context + * \param completed pointer to completion integer to check, or NULL + * \returns 0 on success, or a LIBUSB_ERROR code on failure + * \see \ref mtasync + */ +int API_EXPORTED libusb_handle_events_completed(libusb_context *ctx, + int *completed) +{ + struct timeval tv; + tv.tv_sec = 60; + tv.tv_usec = 0; + return libusb_handle_events_timeout_completed(ctx, &tv, completed); +} + +/** \ingroup poll + * Handle any pending events by polling file descriptors, without checking if + * any other threads are already doing so. Must be called with the event lock + * held, see libusb_lock_events(). + * + * This function is designed to be called under the situation where you have + * taken the event lock and are calling poll()/select() directly on libusb's + * file descriptors (as opposed to using libusb_handle_events() or similar). + * You detect events on libusb's descriptors, so you then call this function + * with a zero timeout value (while still holding the event lock). + * + * \param ctx the context to operate on, or NULL for the default context + * \param tv the maximum time to block waiting for events, or zero for + * non-blocking mode + * \returns 0 on success, or a LIBUSB_ERROR code on failure + * \see \ref mtasync + */ +int API_EXPORTED libusb_handle_events_locked(libusb_context *ctx, + struct timeval *tv) +{ + int r; + struct timeval poll_timeout; + + USBI_GET_CONTEXT(ctx); + r = get_next_timeout(ctx, tv, &poll_timeout); + if (r) { + /* timeout already expired */ + return handle_timeouts(ctx); + } + + return handle_events(ctx, &poll_timeout); +} + +/** \ingroup poll + * Determines whether your application must apply special timing considerations + * when monitoring libusb's file descriptors. + * + * This function is only useful for applications which retrieve and poll + * libusb's file descriptors in their own main loop (\ref pollmain). + * + * Ordinarily, libusb's event handler needs to be called into at specific + * moments in time (in addition to times when there is activity on the file + * descriptor set). The usual approach is to use libusb_get_next_timeout() + * to learn about when the next timeout occurs, and to adjust your + * poll()/select() timeout accordingly so that you can make a call into the + * library at that time. + * + * Some platforms supported by libusb do not come with this baggage - any + * events relevant to timing will be represented by activity on the file + * descriptor set, and libusb_get_next_timeout() will always return 0. + * This function allows you to detect whether you are running on such a + * platform. + * + * Since v1.0.5. + * + * \param ctx the context to operate on, or NULL for the default context + * \returns 0 if you must call into libusb at times determined by + * libusb_get_next_timeout(), or 1 if all timeout events are handled internally + * or through regular activity on the file descriptors. + * \see \ref pollmain "Polling libusb file descriptors for event handling" + */ +int API_EXPORTED libusb_pollfds_handle_timeouts(libusb_context *ctx) +{ +#if defined(USBI_TIMERFD_AVAILABLE) + USBI_GET_CONTEXT(ctx); + return usbi_using_timerfd(ctx); +#else + (void)ctx; + return 0; +#endif +} + +/** \ingroup poll + * Determine the next internal timeout that libusb needs to handle. You only + * need to use this function if you are calling poll() or select() or similar + * on libusb's file descriptors yourself - you do not need to use it if you + * are calling libusb_handle_events() or a variant directly. + * + * You should call this function in your main loop in order to determine how + * long to wait for select() or poll() to return results. libusb needs to be + * called into at this timeout, so you should use it as an upper bound on + * your select() or poll() call. + * + * When the timeout has expired, call into libusb_handle_events_timeout() + * (perhaps in non-blocking mode) so that libusb can handle the timeout. + * + * This function may return 1 (success) and an all-zero timeval. If this is + * the case, it indicates that libusb has a timeout that has already expired + * so you should call libusb_handle_events_timeout() or similar immediately. + * A return code of 0 indicates that there are no pending timeouts. + * + * On some platforms, this function will always returns 0 (no pending + * timeouts). See \ref polltime. + * + * \param ctx the context to operate on, or NULL for the default context + * \param tv output location for a relative time against the current + * clock in which libusb must be called into in order to process timeout events + * \returns 0 if there are no pending timeouts, 1 if a timeout was returned, + * or LIBUSB_ERROR_OTHER on failure + */ +int API_EXPORTED libusb_get_next_timeout(libusb_context *ctx, + struct timeval *tv) +{ + struct usbi_transfer *transfer; + struct timespec cur_ts; + struct timeval cur_tv; + struct timeval *next_timeout; + int r; + int found = 0; + + USBI_GET_CONTEXT(ctx); + if (usbi_using_timerfd(ctx)) + return 0; + + usbi_mutex_lock(&ctx->flying_transfers_lock); + if (list_empty(&ctx->flying_transfers)) { + usbi_mutex_unlock(&ctx->flying_transfers_lock); + usbi_dbg("no URBs, no timeout!"); + return 0; + } + + /* find next transfer which hasn't already been processed as timed out */ + list_for_each_entry(transfer, &ctx->flying_transfers, list, struct usbi_transfer) { + if (transfer->flags & (USBI_TRANSFER_TIMED_OUT | USBI_TRANSFER_OS_HANDLES_TIMEOUT)) + continue; + + /* no timeout for this transfer? */ + if (!timerisset(&transfer->timeout)) + continue; + + found = 1; + break; + } + usbi_mutex_unlock(&ctx->flying_transfers_lock); + + if (!found) { + usbi_dbg("no URB with timeout or all handled by OS; no timeout!"); + return 0; + } + + next_timeout = &transfer->timeout; + + r = usbi_backend->clock_gettime(USBI_CLOCK_MONOTONIC, &cur_ts); + if (r < 0) { + usbi_err(ctx, "failed to read monotonic clock, errno=%d", errno); + return LIBUSB_ERROR_OTHER; + } + TIMESPEC_TO_TIMEVAL(&cur_tv, &cur_ts); + + if (!timercmp(&cur_tv, next_timeout, <)) { + usbi_dbg("first timeout already expired"); + timerclear(tv); + } else { + timersub(next_timeout, &cur_tv, tv); + usbi_dbg("next timeout in %d.%06ds", tv->tv_sec, tv->tv_usec); + } + + return 1; +} + +/** \ingroup poll + * Register notification functions for file descriptor additions/removals. + * These functions will be invoked for every new or removed file descriptor + * that libusb uses as an event source. + * + * To remove notifiers, pass NULL values for the function pointers. + * + * Note that file descriptors may have been added even before you register + * these notifiers (e.g. at libusb_init() time). + * + * Additionally, note that the removal notifier may be called during + * libusb_exit() (e.g. when it is closing file descriptors that were opened + * and added to the poll set at libusb_init() time). If you don't want this, + * remove the notifiers immediately before calling libusb_exit(). + * + * \param ctx the context to operate on, or NULL for the default context + * \param added_cb pointer to function for addition notifications + * \param removed_cb pointer to function for removal notifications + * \param user_data User data to be passed back to callbacks (useful for + * passing context information) + */ +void API_EXPORTED libusb_set_pollfd_notifiers(libusb_context *ctx, + libusb_pollfd_added_cb added_cb, libusb_pollfd_removed_cb removed_cb, + void *user_data) +{ + USBI_GET_CONTEXT(ctx); + ctx->fd_added_cb = added_cb; + ctx->fd_removed_cb = removed_cb; + ctx->fd_cb_user_data = user_data; +} + +/* Add a file descriptor to the list of file descriptors to be monitored. + * events should be specified as a bitmask of events passed to poll(), e.g. + * POLLIN and/or POLLOUT. */ +int usbi_add_pollfd(struct libusb_context *ctx, int fd, short events) +{ + struct usbi_pollfd *ipollfd = malloc(sizeof(*ipollfd)); + if (!ipollfd) + return LIBUSB_ERROR_NO_MEM; + + usbi_dbg("add fd %d events %d", fd, events); + ipollfd->pollfd.fd = fd; + ipollfd->pollfd.events = events; + usbi_mutex_lock(&ctx->pollfds_lock); + list_add_tail(&ipollfd->list, &ctx->pollfds); + usbi_mutex_unlock(&ctx->pollfds_lock); + + if (ctx->fd_added_cb) + ctx->fd_added_cb(fd, events, ctx->fd_cb_user_data); + return 0; +} + +/* Remove a file descriptor from the list of file descriptors to be polled. */ +void usbi_remove_pollfd(struct libusb_context *ctx, int fd) +{ + struct usbi_pollfd *ipollfd; + int found = 0; + + usbi_dbg("remove fd %d", fd); + usbi_mutex_lock(&ctx->pollfds_lock); + list_for_each_entry(ipollfd, &ctx->pollfds, list, struct usbi_pollfd) + if (ipollfd->pollfd.fd == fd) { + found = 1; + break; + } + + if (!found) { + usbi_dbg("couldn't find fd %d to remove", fd); + usbi_mutex_unlock(&ctx->pollfds_lock); + return; + } + + list_del(&ipollfd->list); + usbi_mutex_unlock(&ctx->pollfds_lock); + free(ipollfd); + if (ctx->fd_removed_cb) + ctx->fd_removed_cb(fd, ctx->fd_cb_user_data); +} + +/** \ingroup poll + * Retrieve a list of file descriptors that should be polled by your main loop + * as libusb event sources. + * + * The returned list is NULL-terminated and should be freed with free() when + * done. The actual list contents must not be touched. + * + * As file descriptors are a Unix-specific concept, this function is not + * available on Windows and will always return NULL. + * + * \param ctx the context to operate on, or NULL for the default context + * \returns a NULL-terminated list of libusb_pollfd structures + * \returns NULL on error + * \returns NULL on platforms where the functionality is not available + */ +DEFAULT_VISIBILITY +const struct libusb_pollfd ** LIBUSB_CALL libusb_get_pollfds( + libusb_context *ctx) +{ +#ifndef OS_WINDOWS + struct libusb_pollfd **ret = NULL; + struct usbi_pollfd *ipollfd; + size_t i = 0; + size_t cnt = 0; + USBI_GET_CONTEXT(ctx); + + usbi_mutex_lock(&ctx->pollfds_lock); + list_for_each_entry(ipollfd, &ctx->pollfds, list, struct usbi_pollfd) + cnt++; + + ret = calloc(cnt + 1, sizeof(struct libusb_pollfd *)); + if (!ret) + goto out; + + list_for_each_entry(ipollfd, &ctx->pollfds, list, struct usbi_pollfd) + ret[i++] = (struct libusb_pollfd *) ipollfd; + ret[cnt] = NULL; + +out: + usbi_mutex_unlock(&ctx->pollfds_lock); + return (const struct libusb_pollfd **) ret; +#else + usbi_err(ctx, "external polling of libusb's internal descriptors "\ + "is not yet supported on Windows platforms"); + return NULL; +#endif +} + +/* Backends call this from handle_events to report disconnection of a device. + * The transfers get cancelled appropriately. + */ +void usbi_handle_disconnect(struct libusb_device_handle *handle) +{ + struct usbi_transfer *cur; + struct usbi_transfer *to_cancel; + + usbi_dbg("device %d.%d", + handle->dev->bus_number, handle->dev->device_address); + + /* terminate all pending transfers with the LIBUSB_TRANSFER_NO_DEVICE + * status code. + * + * this is a bit tricky because: + * 1. we can't do transfer completion while holding flying_transfers_lock + * 2. the transfers list can change underneath us - if we were to build a + * list of transfers to complete (while holding look), the situation + * might be different by the time we come to free them + * + * so we resort to a loop-based approach as below + * FIXME: is this still potentially racy? + */ + + while (1) { + usbi_mutex_lock(&HANDLE_CTX(handle)->flying_transfers_lock); + to_cancel = NULL; + list_for_each_entry(cur, &HANDLE_CTX(handle)->flying_transfers, list, struct usbi_transfer) + if (USBI_TRANSFER_TO_LIBUSB_TRANSFER(cur)->dev_handle == handle) { + to_cancel = cur; + break; + } + usbi_mutex_unlock(&HANDLE_CTX(handle)->flying_transfers_lock); + + if (!to_cancel) + break; + + usbi_backend->clear_transfer_priv(to_cancel); + usbi_handle_transfer_completion(to_cancel, LIBUSB_TRANSFER_NO_DEVICE); + } + +} diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb-1.0.def b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb-1.0.def new file mode 100644 index 0000000..1d6a5d2 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb-1.0.def @@ -0,0 +1,120 @@ +LIBRARY +EXPORTS + libusb_alloc_transfer + libusb_alloc_transfer@4 = libusb_alloc_transfer + libusb_attach_kernel_driver + libusb_attach_kernel_driver@8 = libusb_attach_kernel_driver + libusb_bulk_transfer + libusb_bulk_transfer@24 = libusb_bulk_transfer + libusb_cancel_transfer + libusb_cancel_transfer@4 = libusb_cancel_transfer + libusb_claim_interface + libusb_claim_interface@8 = libusb_claim_interface + libusb_clear_halt + libusb_clear_halt@8 = libusb_clear_halt + libusb_close + libusb_close@4 = libusb_close + libusb_control_transfer + libusb_control_transfer@32 = libusb_control_transfer + libusb_detach_kernel_driver + libusb_detach_kernel_driver@8 = libusb_detach_kernel_driver + libusb_error_name + libusb_error_name@4 = libusb_error_name + libusb_event_handler_active + libusb_event_handler_active@4 = libusb_event_handler_active + libusb_event_handling_ok + libusb_event_handling_ok@4 = libusb_event_handling_ok + libusb_exit + libusb_exit@4 = libusb_exit + libusb_free_config_descriptor + libusb_free_config_descriptor@4 = libusb_free_config_descriptor + libusb_free_device_list + libusb_free_device_list@8 = libusb_free_device_list + libusb_free_transfer + libusb_free_transfer@4 = libusb_free_transfer + libusb_get_active_config_descriptor + libusb_get_active_config_descriptor@8 = libusb_get_active_config_descriptor + libusb_get_bus_number + libusb_get_bus_number@4 = libusb_get_bus_number + libusb_get_config_descriptor + libusb_get_config_descriptor@12 = libusb_get_config_descriptor + libusb_get_config_descriptor_by_value + libusb_get_config_descriptor_by_value@12 = libusb_get_config_descriptor_by_value + libusb_get_configuration + libusb_get_configuration@8 = libusb_get_configuration + libusb_get_device + libusb_get_device@4 = libusb_get_device + libusb_get_device_address + libusb_get_device_address@4 = libusb_get_device_address + libusb_get_device_descriptor + libusb_get_device_descriptor@8 = libusb_get_device_descriptor + libusb_get_device_list + libusb_get_device_list@8 = libusb_get_device_list + libusb_get_device_speed + libusb_get_device_speed@4 = libusb_get_device_speed + libusb_get_max_iso_packet_size + libusb_get_max_iso_packet_size@8 = libusb_get_max_iso_packet_size + libusb_get_max_packet_size + libusb_get_max_packet_size@8 = libusb_get_max_packet_size + libusb_get_next_timeout + libusb_get_next_timeout@8 = libusb_get_next_timeout + libusb_get_pollfds + libusb_get_pollfds@4 = libusb_get_pollfds + libusb_get_string_descriptor_ascii + libusb_get_string_descriptor_ascii@16 = libusb_get_string_descriptor_ascii + libusb_get_version + libusb_get_version@0 = libusb_get_version + libusb_handle_events + libusb_handle_events@4 = libusb_handle_events + libusb_handle_events_completed + libusb_handle_events_completed@8 = libusb_handle_events_completed + libusb_handle_events_locked + libusb_handle_events_locked@8 = libusb_handle_events_locked + libusb_handle_events_timeout + libusb_handle_events_timeout@8 = libusb_handle_events_timeout + libusb_handle_events_timeout_completed + libusb_handle_events_timeout_completed@12 = libusb_handle_events_timeout_completed + libusb_has_capability + libusb_has_capability@4 = libusb_has_capability + libusb_init + libusb_init@4 = libusb_init + libusb_interrupt_transfer + libusb_interrupt_transfer@24 = libusb_interrupt_transfer + libusb_kernel_driver_active + libusb_kernel_driver_active@8 = libusb_kernel_driver_active + libusb_lock_event_waiters + libusb_lock_event_waiters@4 = libusb_lock_event_waiters + libusb_lock_events + libusb_lock_events@4 = libusb_lock_events + libusb_open + libusb_open@8 = libusb_open + libusb_open_device_with_vid_pid + libusb_open_device_with_vid_pid@12 = libusb_open_device_with_vid_pid + libusb_pollfds_handle_timeouts + libusb_pollfds_handle_timeouts@4 = libusb_pollfds_handle_timeouts + libusb_ref_device + libusb_ref_device@4 = libusb_ref_device + libusb_release_interface + libusb_release_interface@8 = libusb_release_interface + libusb_reset_device + libusb_reset_device@4 = libusb_reset_device + libusb_set_configuration + libusb_set_configuration@8 = libusb_set_configuration + libusb_set_debug + libusb_set_debug@8 = libusb_set_debug + libusb_set_interface_alt_setting + libusb_set_interface_alt_setting@12 = libusb_set_interface_alt_setting + libusb_set_pollfd_notifiers + libusb_set_pollfd_notifiers@16 = libusb_set_pollfd_notifiers + libusb_submit_transfer + libusb_submit_transfer@4 = libusb_submit_transfer + libusb_try_lock_events + libusb_try_lock_events@4 = libusb_try_lock_events + libusb_unlock_event_waiters + libusb_unlock_event_waiters@4 = libusb_unlock_event_waiters + libusb_unlock_events + libusb_unlock_events@4 = libusb_unlock_events + libusb_unref_device + libusb_unref_device@4 = libusb_unref_device + libusb_wait_for_event + libusb_wait_for_event@8 = libusb_wait_for_event diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb-1.0.la b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb-1.0.la new file mode 100644 index 0000000..384d0b2 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb-1.0.la @@ -0,0 +1,41 @@ +# libusb-1.0.la - a libtool library file +# Generated by libtool (GNU libtool) 2.2.10 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='libusb-1.0.so.0' + +# Names of this library. +library_names='libusb-1.0.so.0.1.0 libusb-1.0.so.0 libusb-1.0.so' + +# The name of the static archive. +old_library='libusb-1.0.a' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags=' -pthread' + +# Libraries that this one depends upon. +dependency_libs=' -lrt' + +# Names of additional weak libraries provided by this library +weak_library_names='' + +# Version information for libusb-1.0. +current=1 +age=1 +revision=0 + +# Is this an already installed library? +installed=no + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/usr/local/lib' diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb-1.0.rc b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb-1.0.rc new file mode 100644 index 0000000..a59a430 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb-1.0.rc @@ -0,0 +1,56 @@ +/* + * For Windows: input this file to the Resoure Compiler to produce a binary + * .res file. This is then embedded in the resultant library (like any other + * compilation object). + * The information can then be queried using standard APIs and can also be + * viewed with utilities such as Windows Explorer. + */ +#include "winresrc.h" + +#include "version.h" +#ifndef LIBUSB_VERSIONSTRING +#define LU_STR(s) #s +#define LU_XSTR(s) LU_STR(s) +#if LIBUSB_NANO > 0 +#define LIBUSB_VERSIONSTRING LU_XSTR(LIBUSB_MAJOR) "." LU_XSTR(LIBUSB_MINOR) "." LU_XSTR(LIBUSB_MICRO) "." LU_XSTR(LIBUSB_NANO) LIBUSB_RC "\0" +#else +#define LIBUSB_VERSIONSTRING LU_XSTR(LIBUSB_MAJOR) "." LU_XSTR(LIBUSB_MINOR) "." LU_XSTR(LIBUSB_MICRO) LIBUSB_RC "\0" +#endif +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION LIBUSB_MAJOR,LIBUSB_MINOR,LIBUSB_MICRO,LIBUSB_NANO + PRODUCTVERSION LIBUSB_MAJOR,LIBUSB_MINOR,LIBUSB_MICRO,LIBUSB_NANO + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", "\0" + VALUE "CompanyName", "libusb.org\0" + VALUE "FileDescription", "C library for writing portable USB drivers in userspace\0" + VALUE "FileVersion", LIBUSB_VERSIONSTRING + VALUE "InternalName", "libusb\0" + VALUE "LegalCopyright", "See individual source files, GNU LGPL v2.1 or later.\0" + VALUE "LegalTrademarks", "http://www.gnu.org/licenses/lgpl-2.1.html\0" + VALUE "OriginalFilename", "libusb-1.0.dll\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "libusb-1.0\0" + VALUE "ProductVersion", LIBUSB_VERSIONSTRING + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb.h b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb.h new file mode 100644 index 0000000..58b406f --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb.h @@ -0,0 +1,1443 @@ +/* + * Public libusb header file + * Copyright (C) 2007-2008 Daniel Drake + * Copyright (c) 2001 Johannes Erdfelt + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef LIBUSB_H +#define LIBUSB_H + +#ifdef _MSC_VER +/* on MS environments, the inline keyword is available in C++ only */ +#define inline __inline +/* ssize_t is also not available (copy/paste from MinGW) */ +#ifndef _SSIZE_T_DEFINED +#define _SSIZE_T_DEFINED +#undef ssize_t +#ifdef _WIN64 + typedef __int64 ssize_t; +#else + typedef int ssize_t; +#endif /* _WIN64 */ +#endif /* _SSIZE_T_DEFINED */ +#endif /* _MSC_VER */ + +/* stdint.h is also not usually available on MS */ +#if defined(_MSC_VER) && (_MSC_VER < 1600) && (!defined(_STDINT)) && (!defined(_STDINT_H)) +typedef unsigned __int8 uint8_t; +typedef unsigned __int16 uint16_t; +typedef unsigned __int32 uint32_t; +#else +#include +#endif + +#include +#include +#include + +#if defined(__linux) || defined(__APPLE__) || defined(__CYGWIN__) +#include +#endif + +/* 'interface' might be defined as a macro on Windows, so we need to + * undefine it so as not to break the current libusb API, because + * libusb_config_descriptor has an 'interface' member + * As this can be problematic if you include windows.h after libusb.h + * in your sources, we force windows.h to be included first. */ +#if defined(_WIN32) || defined(__CYGWIN__) +#include +#if defined(interface) +#undef interface +#endif +#endif + +/** \def LIBUSB_CALL + * \ingroup misc + * libusb's Windows calling convention. + * + * Under Windows, the selection of available compilers and configurations + * means that, unlike other platforms, there is not one true calling + * convention (calling convention: the manner in which parameters are + * passed to funcions in the generated assembly code). + * + * Matching the Windows API itself, libusb uses the WINAPI convention (which + * translates to the stdcall convention) and guarantees that the + * library is compiled in this way. The public header file also includes + * appropriate annotations so that your own software will use the right + * convention, even if another convention is being used by default within + * your codebase. + * + * The one consideration that you must apply in your software is to mark + * all functions which you use as libusb callbacks with this LIBUSB_CALL + * annotation, so that they too get compiled for the correct calling + * convention. + * + * On non-Windows operating systems, this macro is defined as nothing. This + * means that you can apply it to your code without worrying about + * cross-platform compatibility. + */ +/* LIBUSB_CALL must be defined on both definition and declaration of libusb + * functions. You'd think that declaration would be enough, but cygwin will + * complain about conflicting types unless both are marked this way. + * The placement of this macro is important too; it must appear after the + * return type, before the function name. See internal documentation for + * API_EXPORTED. + */ +#if defined(_WIN32) || defined(__CYGWIN__) +#define LIBUSB_CALL WINAPI +#else +#define LIBUSB_CALL +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** \def libusb_cpu_to_le16 + * \ingroup misc + * Convert a 16-bit value from host-endian to little-endian format. On + * little endian systems, this function does nothing. On big endian systems, + * the bytes are swapped. + * \param x the host-endian value to convert + * \returns the value in little-endian byte order + */ +static inline uint16_t libusb_cpu_to_le16(const uint16_t x) +{ + union { + uint8_t b8[2]; + uint16_t b16; + } _tmp; + _tmp.b8[1] = x >> 8; + _tmp.b8[0] = x & 0xff; + return _tmp.b16; +} + +/** \def libusb_le16_to_cpu + * \ingroup misc + * Convert a 16-bit value from little-endian to host-endian format. On + * little endian systems, this function does nothing. On big endian systems, + * the bytes are swapped. + * \param x the little-endian value to convert + * \returns the value in host-endian byte order + */ +#define libusb_le16_to_cpu libusb_cpu_to_le16 + +/* standard USB stuff */ + +/** \ingroup desc + * Device and/or Interface Class codes */ +enum libusb_class_code { + /** In the context of a \ref libusb_device_descriptor "device descriptor", + * this bDeviceClass value indicates that each interface specifies its + * own class information and all interfaces operate independently. + */ + LIBUSB_CLASS_PER_INTERFACE = 0, + + /** Audio class */ + LIBUSB_CLASS_AUDIO = 1, + + /** Communications class */ + LIBUSB_CLASS_COMM = 2, + + /** Human Interface Device class */ + LIBUSB_CLASS_HID = 3, + + /** Physical */ + LIBUSB_CLASS_PHYSICAL = 5, + + /** Printer class */ + LIBUSB_CLASS_PRINTER = 7, + + /** Image class */ + LIBUSB_CLASS_PTP = 6, /* legacy name from libusb-0.1 usb.h */ + LIBUSB_CLASS_IMAGE = 6, + + /** Mass storage class */ + LIBUSB_CLASS_MASS_STORAGE = 8, + + /** Hub class */ + LIBUSB_CLASS_HUB = 9, + + /** Data class */ + LIBUSB_CLASS_DATA = 10, + + /** Smart Card */ + LIBUSB_CLASS_SMART_CARD = 0x0b, + + /** Content Security */ + LIBUSB_CLASS_CONTENT_SECURITY = 0x0d, + + /** Video */ + LIBUSB_CLASS_VIDEO = 0x0e, + + /** Personal Healthcare */ + LIBUSB_CLASS_PERSONAL_HEALTHCARE = 0x0f, + + /** Diagnostic Device */ + LIBUSB_CLASS_DIAGNOSTIC_DEVICE = 0xdc, + + /** Wireless class */ + LIBUSB_CLASS_WIRELESS = 0xe0, + + /** Application class */ + LIBUSB_CLASS_APPLICATION = 0xfe, + + /** Class is vendor-specific */ + LIBUSB_CLASS_VENDOR_SPEC = 0xff +}; + +/** \ingroup desc + * Descriptor types as defined by the USB specification. */ +enum libusb_descriptor_type { + /** Device descriptor. See libusb_device_descriptor. */ + LIBUSB_DT_DEVICE = 0x01, + + /** Configuration descriptor. See libusb_config_descriptor. */ + LIBUSB_DT_CONFIG = 0x02, + + /** String descriptor */ + LIBUSB_DT_STRING = 0x03, + + /** Interface descriptor. See libusb_interface_descriptor. */ + LIBUSB_DT_INTERFACE = 0x04, + + /** Endpoint descriptor. See libusb_endpoint_descriptor. */ + LIBUSB_DT_ENDPOINT = 0x05, + + /** HID descriptor */ + LIBUSB_DT_HID = 0x21, + + /** HID report descriptor */ + LIBUSB_DT_REPORT = 0x22, + + /** Physical descriptor */ + LIBUSB_DT_PHYSICAL = 0x23, + + /** Hub descriptor */ + LIBUSB_DT_HUB = 0x29, +}; + +/* Descriptor sizes per descriptor type */ +#define LIBUSB_DT_DEVICE_SIZE 18 +#define LIBUSB_DT_CONFIG_SIZE 9 +#define LIBUSB_DT_INTERFACE_SIZE 9 +#define LIBUSB_DT_ENDPOINT_SIZE 7 +#define LIBUSB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */ +#define LIBUSB_DT_HUB_NONVAR_SIZE 7 + +#define LIBUSB_ENDPOINT_ADDRESS_MASK 0x0f /* in bEndpointAddress */ +#define LIBUSB_ENDPOINT_DIR_MASK 0x80 + +/** \ingroup desc + * Endpoint direction. Values for bit 7 of the + * \ref libusb_endpoint_descriptor::bEndpointAddress "endpoint address" scheme. + */ +enum libusb_endpoint_direction { + /** In: device-to-host */ + LIBUSB_ENDPOINT_IN = 0x80, + + /** Out: host-to-device */ + LIBUSB_ENDPOINT_OUT = 0x00 +}; + +#define LIBUSB_TRANSFER_TYPE_MASK 0x03 /* in bmAttributes */ + +/** \ingroup desc + * Endpoint transfer type. Values for bits 0:1 of the + * \ref libusb_endpoint_descriptor::bmAttributes "endpoint attributes" field. + */ +enum libusb_transfer_type { + /** Control endpoint */ + LIBUSB_TRANSFER_TYPE_CONTROL = 0, + + /** Isochronous endpoint */ + LIBUSB_TRANSFER_TYPE_ISOCHRONOUS = 1, + + /** Bulk endpoint */ + LIBUSB_TRANSFER_TYPE_BULK = 2, + + /** Interrupt endpoint */ + LIBUSB_TRANSFER_TYPE_INTERRUPT = 3 +}; + +/** \ingroup misc + * Standard requests, as defined in table 9-3 of the USB2 specifications */ +enum libusb_standard_request { + /** Request status of the specific recipient */ + LIBUSB_REQUEST_GET_STATUS = 0x00, + + /** Clear or disable a specific feature */ + LIBUSB_REQUEST_CLEAR_FEATURE = 0x01, + + /* 0x02 is reserved */ + + /** Set or enable a specific feature */ + LIBUSB_REQUEST_SET_FEATURE = 0x03, + + /* 0x04 is reserved */ + + /** Set device address for all future accesses */ + LIBUSB_REQUEST_SET_ADDRESS = 0x05, + + /** Get the specified descriptor */ + LIBUSB_REQUEST_GET_DESCRIPTOR = 0x06, + + /** Used to update existing descriptors or add new descriptors */ + LIBUSB_REQUEST_SET_DESCRIPTOR = 0x07, + + /** Get the current device configuration value */ + LIBUSB_REQUEST_GET_CONFIGURATION = 0x08, + + /** Set device configuration */ + LIBUSB_REQUEST_SET_CONFIGURATION = 0x09, + + /** Return the selected alternate setting for the specified interface */ + LIBUSB_REQUEST_GET_INTERFACE = 0x0A, + + /** Select an alternate interface for the specified interface */ + LIBUSB_REQUEST_SET_INTERFACE = 0x0B, + + /** Set then report an endpoint's synchronization frame */ + LIBUSB_REQUEST_SYNCH_FRAME = 0x0C, +}; + +/** \ingroup misc + * Request type bits of the + * \ref libusb_control_setup::bmRequestType "bmRequestType" field in control + * transfers. */ +enum libusb_request_type { + /** Standard */ + LIBUSB_REQUEST_TYPE_STANDARD = (0x00 << 5), + + /** Class */ + LIBUSB_REQUEST_TYPE_CLASS = (0x01 << 5), + + /** Vendor */ + LIBUSB_REQUEST_TYPE_VENDOR = (0x02 << 5), + + /** Reserved */ + LIBUSB_REQUEST_TYPE_RESERVED = (0x03 << 5) +}; + +/** \ingroup misc + * Recipient bits of the + * \ref libusb_control_setup::bmRequestType "bmRequestType" field in control + * transfers. Values 4 through 31 are reserved. */ +enum libusb_request_recipient { + /** Device */ + LIBUSB_RECIPIENT_DEVICE = 0x00, + + /** Interface */ + LIBUSB_RECIPIENT_INTERFACE = 0x01, + + /** Endpoint */ + LIBUSB_RECIPIENT_ENDPOINT = 0x02, + + /** Other */ + LIBUSB_RECIPIENT_OTHER = 0x03, +}; + +#define LIBUSB_ISO_SYNC_TYPE_MASK 0x0C + +/** \ingroup desc + * Synchronization type for isochronous endpoints. Values for bits 2:3 of the + * \ref libusb_endpoint_descriptor::bmAttributes "bmAttributes" field in + * libusb_endpoint_descriptor. + */ +enum libusb_iso_sync_type { + /** No synchronization */ + LIBUSB_ISO_SYNC_TYPE_NONE = 0, + + /** Asynchronous */ + LIBUSB_ISO_SYNC_TYPE_ASYNC = 1, + + /** Adaptive */ + LIBUSB_ISO_SYNC_TYPE_ADAPTIVE = 2, + + /** Synchronous */ + LIBUSB_ISO_SYNC_TYPE_SYNC = 3 +}; + +#define LIBUSB_ISO_USAGE_TYPE_MASK 0x30 + +/** \ingroup desc + * Usage type for isochronous endpoints. Values for bits 4:5 of the + * \ref libusb_endpoint_descriptor::bmAttributes "bmAttributes" field in + * libusb_endpoint_descriptor. + */ +enum libusb_iso_usage_type { + /** Data endpoint */ + LIBUSB_ISO_USAGE_TYPE_DATA = 0, + + /** Feedback endpoint */ + LIBUSB_ISO_USAGE_TYPE_FEEDBACK = 1, + + /** Implicit feedback Data endpoint */ + LIBUSB_ISO_USAGE_TYPE_IMPLICIT = 2, +}; + +/** \ingroup desc + * A structure representing the standard USB device descriptor. This + * descriptor is documented in section 9.6.1 of the USB 2.0 specification. + * All multiple-byte fields are represented in host-endian format. + */ +struct libusb_device_descriptor { + /** Size of this descriptor (in bytes) */ + uint8_t bLength; + + /** Descriptor type. Will have value + * \ref libusb_descriptor_type::LIBUSB_DT_DEVICE LIBUSB_DT_DEVICE in this + * context. */ + uint8_t bDescriptorType; + + /** USB specification release number in binary-coded decimal. A value of + * 0x0200 indicates USB 2.0, 0x0110 indicates USB 1.1, etc. */ + uint16_t bcdUSB; + + /** USB-IF class code for the device. See \ref libusb_class_code. */ + uint8_t bDeviceClass; + + /** USB-IF subclass code for the device, qualified by the bDeviceClass + * value */ + uint8_t bDeviceSubClass; + + /** USB-IF protocol code for the device, qualified by the bDeviceClass and + * bDeviceSubClass values */ + uint8_t bDeviceProtocol; + + /** Maximum packet size for endpoint 0 */ + uint8_t bMaxPacketSize0; + + /** USB-IF vendor ID */ + uint16_t idVendor; + + /** USB-IF product ID */ + uint16_t idProduct; + + /** Device release number in binary-coded decimal */ + uint16_t bcdDevice; + + /** Index of string descriptor describing manufacturer */ + uint8_t iManufacturer; + + /** Index of string descriptor describing product */ + uint8_t iProduct; + + /** Index of string descriptor containing device serial number */ + uint8_t iSerialNumber; + + /** Number of possible configurations */ + uint8_t bNumConfigurations; +}; + +/** \ingroup desc + * A structure representing the standard USB endpoint descriptor. This + * descriptor is documented in section 9.6.3 of the USB 2.0 specification. + * All multiple-byte fields are represented in host-endian format. + */ +struct libusb_endpoint_descriptor { + /** Size of this descriptor (in bytes) */ + uint8_t bLength; + + /** Descriptor type. Will have value + * \ref libusb_descriptor_type::LIBUSB_DT_ENDPOINT LIBUSB_DT_ENDPOINT in + * this context. */ + uint8_t bDescriptorType; + + /** The address of the endpoint described by this descriptor. Bits 0:3 are + * the endpoint number. Bits 4:6 are reserved. Bit 7 indicates direction, + * see \ref libusb_endpoint_direction. + */ + uint8_t bEndpointAddress; + + /** Attributes which apply to the endpoint when it is configured using + * the bConfigurationValue. Bits 0:1 determine the transfer type and + * correspond to \ref libusb_transfer_type. Bits 2:3 are only used for + * isochronous endpoints and correspond to \ref libusb_iso_sync_type. + * Bits 4:5 are also only used for isochronous endpoints and correspond to + * \ref libusb_iso_usage_type. Bits 6:7 are reserved. + */ + uint8_t bmAttributes; + + /** Maximum packet size this endpoint is capable of sending/receiving. */ + uint16_t wMaxPacketSize; + + /** Interval for polling endpoint for data transfers. */ + uint8_t bInterval; + + /** For audio devices only: the rate at which synchronization feedback + * is provided. */ + uint8_t bRefresh; + + /** For audio devices only: the address if the synch endpoint */ + uint8_t bSynchAddress; + + /** Extra descriptors. If libusb encounters unknown endpoint descriptors, + * it will store them here, should you wish to parse them. */ + const unsigned char *extra; + + /** Length of the extra descriptors, in bytes. */ + int extra_length; +}; + +/** \ingroup desc + * A structure representing the standard USB interface descriptor. This + * descriptor is documented in section 9.6.5 of the USB 2.0 specification. + * All multiple-byte fields are represented in host-endian format. + */ +struct libusb_interface_descriptor { + /** Size of this descriptor (in bytes) */ + uint8_t bLength; + + /** Descriptor type. Will have value + * \ref libusb_descriptor_type::LIBUSB_DT_INTERFACE LIBUSB_DT_INTERFACE + * in this context. */ + uint8_t bDescriptorType; + + /** Number of this interface */ + uint8_t bInterfaceNumber; + + /** Value used to select this alternate setting for this interface */ + uint8_t bAlternateSetting; + + /** Number of endpoints used by this interface (excluding the control + * endpoint). */ + uint8_t bNumEndpoints; + + /** USB-IF class code for this interface. See \ref libusb_class_code. */ + uint8_t bInterfaceClass; + + /** USB-IF subclass code for this interface, qualified by the + * bInterfaceClass value */ + uint8_t bInterfaceSubClass; + + /** USB-IF protocol code for this interface, qualified by the + * bInterfaceClass and bInterfaceSubClass values */ + uint8_t bInterfaceProtocol; + + /** Index of string descriptor describing this interface */ + uint8_t iInterface; + + /** Array of endpoint descriptors. This length of this array is determined + * by the bNumEndpoints field. */ + const struct libusb_endpoint_descriptor *endpoint; + + /** Extra descriptors. If libusb encounters unknown interface descriptors, + * it will store them here, should you wish to parse them. */ + const unsigned char *extra; + + /** Length of the extra descriptors, in bytes. */ + int extra_length; +}; + +/** \ingroup desc + * A collection of alternate settings for a particular USB interface. + */ +struct libusb_interface { + /** Array of interface descriptors. The length of this array is determined + * by the num_altsetting field. */ + const struct libusb_interface_descriptor *altsetting; + + /** The number of alternate settings that belong to this interface */ + int num_altsetting; +}; + +/** \ingroup desc + * A structure representing the standard USB configuration descriptor. This + * descriptor is documented in section 9.6.3 of the USB 2.0 specification. + * All multiple-byte fields are represented in host-endian format. + */ +struct libusb_config_descriptor { + /** Size of this descriptor (in bytes) */ + uint8_t bLength; + + /** Descriptor type. Will have value + * \ref libusb_descriptor_type::LIBUSB_DT_CONFIG LIBUSB_DT_CONFIG + * in this context. */ + uint8_t bDescriptorType; + + /** Total length of data returned for this configuration */ + uint16_t wTotalLength; + + /** Number of interfaces supported by this configuration */ + uint8_t bNumInterfaces; + + /** Identifier value for this configuration */ + uint8_t bConfigurationValue; + + /** Index of string descriptor describing this configuration */ + uint8_t iConfiguration; + + /** Configuration characteristics */ + uint8_t bmAttributes; + + /** Maximum power consumption of the USB device from this bus in this + * configuration when the device is fully opreation. Expressed in units + * of 2 mA. */ + uint8_t MaxPower; + + /** Array of interfaces supported by this configuration. The length of + * this array is determined by the bNumInterfaces field. */ + const struct libusb_interface *interface; + + /** Extra descriptors. If libusb encounters unknown configuration + * descriptors, it will store them here, should you wish to parse them. */ + const unsigned char *extra; + + /** Length of the extra descriptors, in bytes. */ + int extra_length; +}; + +/** \ingroup asyncio + * Setup packet for control transfers. */ +struct libusb_control_setup { + /** Request type. Bits 0:4 determine recipient, see + * \ref libusb_request_recipient. Bits 5:6 determine type, see + * \ref libusb_request_type. Bit 7 determines data transfer direction, see + * \ref libusb_endpoint_direction. + */ + uint8_t bmRequestType; + + /** Request. If the type bits of bmRequestType are equal to + * \ref libusb_request_type::LIBUSB_REQUEST_TYPE_STANDARD + * "LIBUSB_REQUEST_TYPE_STANDARD" then this field refers to + * \ref libusb_standard_request. For other cases, use of this field is + * application-specific. */ + uint8_t bRequest; + + /** Value. Varies according to request */ + uint16_t wValue; + + /** Index. Varies according to request, typically used to pass an index + * or offset */ + uint16_t wIndex; + + /** Number of bytes to transfer */ + uint16_t wLength; +}; + +#define LIBUSB_CONTROL_SETUP_SIZE (sizeof(struct libusb_control_setup)) + +/* libusb */ + +struct libusb_context; +struct libusb_device; +struct libusb_device_handle; + +/** \ingroup lib + * Structure representing the libusb version. + */ +struct libusb_version { + /** Library major version. */ + const uint16_t major; + + /** Library minor version. */ + const uint16_t minor; + + /** Library micro version. */ + const uint16_t micro; + + /** Library nano version. This field is only nonzero on Windows. */ + const uint16_t nano; + + /** Library release candidate suffix string, e.g. "-rc4". */ + const char *rc; + + /** Output of `git describe --tags` at library build time. */ + const char *describe; +}; + +/** \ingroup lib + * Structure representing a libusb session. The concept of individual libusb + * sessions allows for your program to use two libraries (or dynamically + * load two modules) which both independently use libusb. This will prevent + * interference between the individual libusb users - for example + * libusb_set_debug() will not affect the other user of the library, and + * libusb_exit() will not destroy resources that the other user is still + * using. + * + * Sessions are created by libusb_init() and destroyed through libusb_exit(). + * If your application is guaranteed to only ever include a single libusb + * user (i.e. you), you do not have to worry about contexts: pass NULL in + * every function call where a context is required. The default context + * will be used. + * + * For more information, see \ref contexts. + */ +typedef struct libusb_context libusb_context; + +/** \ingroup dev + * Structure representing a USB device detected on the system. This is an + * opaque type for which you are only ever provided with a pointer, usually + * originating from libusb_get_device_list(). + * + * Certain operations can be performed on a device, but in order to do any + * I/O you will have to first obtain a device handle using libusb_open(). + * + * Devices are reference counted with libusb_device_ref() and + * libusb_device_unref(), and are freed when the reference count reaches 0. + * New devices presented by libusb_get_device_list() have a reference count of + * 1, and libusb_free_device_list() can optionally decrease the reference count + * on all devices in the list. libusb_open() adds another reference which is + * later destroyed by libusb_close(). + */ +typedef struct libusb_device libusb_device; + + +/** \ingroup dev + * Structure representing a handle on a USB device. This is an opaque type for + * which you are only ever provided with a pointer, usually originating from + * libusb_open(). + * + * A device handle is used to perform I/O and other operations. When finished + * with a device handle, you should call libusb_close(). + */ +typedef struct libusb_device_handle libusb_device_handle; + +/** \ingroup dev + * Speed codes. Indicates the speed at which the device is operating. + */ +enum libusb_speed { + /** The OS doesn't report or know the device speed. */ + LIBUSB_SPEED_UNKNOWN = 0, + + /** The device is operating at low speed (1.5MBit/s). */ + LIBUSB_SPEED_LOW = 1, + + /** The device is operating at full speed (12MBit/s). */ + LIBUSB_SPEED_FULL = 2, + + /** The device is operating at high speed (480MBit/s). */ + LIBUSB_SPEED_HIGH = 3, + + /** The device is operating at super speed (5000MBit/s). */ + LIBUSB_SPEED_SUPER = 4, +}; + +/** \ingroup misc + * Error codes. Most libusb functions return 0 on success or one of these + * codes on failure. + * You can call \ref libusb_error_name() to retrieve a string representation + * of an error code. + */ +enum libusb_error { + /** Success (no error) */ + LIBUSB_SUCCESS = 0, + + /** Input/output error */ + LIBUSB_ERROR_IO = -1, + + /** Invalid parameter */ + LIBUSB_ERROR_INVALID_PARAM = -2, + + /** Access denied (insufficient permissions) */ + LIBUSB_ERROR_ACCESS = -3, + + /** No such device (it may have been disconnected) */ + LIBUSB_ERROR_NO_DEVICE = -4, + + /** Entity not found */ + LIBUSB_ERROR_NOT_FOUND = -5, + + /** Resource busy */ + LIBUSB_ERROR_BUSY = -6, + + /** Operation timed out */ + LIBUSB_ERROR_TIMEOUT = -7, + + /** Overflow */ + LIBUSB_ERROR_OVERFLOW = -8, + + /** Pipe error */ + LIBUSB_ERROR_PIPE = -9, + + /** System call interrupted (perhaps due to signal) */ + LIBUSB_ERROR_INTERRUPTED = -10, + + /** Insufficient memory */ + LIBUSB_ERROR_NO_MEM = -11, + + /** Operation not supported or unimplemented on this platform */ + LIBUSB_ERROR_NOT_SUPPORTED = -12, + + /* NB! Remember to update libusb_error_name() + when adding new error codes here. */ + + /** Other error */ + LIBUSB_ERROR_OTHER = -99, +}; + +/** \ingroup asyncio + * Transfer status codes */ +enum libusb_transfer_status { + /** Transfer completed without error. Note that this does not indicate + * that the entire amount of requested data was transferred. */ + LIBUSB_TRANSFER_COMPLETED, + + /** Transfer failed */ + LIBUSB_TRANSFER_ERROR, + + /** Transfer timed out */ + LIBUSB_TRANSFER_TIMED_OUT, + + /** Transfer was cancelled */ + LIBUSB_TRANSFER_CANCELLED, + + /** For bulk/interrupt endpoints: halt condition detected (endpoint + * stalled). For control endpoints: control request not supported. */ + LIBUSB_TRANSFER_STALL, + + /** Device was disconnected */ + LIBUSB_TRANSFER_NO_DEVICE, + + /** Device sent more data than requested */ + LIBUSB_TRANSFER_OVERFLOW, +}; + +/** \ingroup asyncio + * libusb_transfer.flags values */ +enum libusb_transfer_flags { + /** Report short frames as errors */ + LIBUSB_TRANSFER_SHORT_NOT_OK = 1<<0, + + /** Automatically free() transfer buffer during libusb_free_transfer() */ + LIBUSB_TRANSFER_FREE_BUFFER = 1<<1, + + /** Automatically call libusb_free_transfer() after callback returns. + * If this flag is set, it is illegal to call libusb_free_transfer() + * from your transfer callback, as this will result in a double-free + * when this flag is acted upon. */ + LIBUSB_TRANSFER_FREE_TRANSFER = 1<<2, + + /** Terminate transfers that are a multiple of the endpoint's + * wMaxPacketSize with an extra zero length packet. This is useful + * when a device protocol mandates that each logical request is + * terminated by an incomplete packet (i.e. the logical requests are + * not separated by other means). + * + * This flag only affects host-to-device transfers to bulk and interrupt + * endpoints. In other situations, it is ignored. + * + * This flag only affects transfers with a length that is a multiple of + * the endpoint's wMaxPacketSize. On transfers of other lengths, this + * flag has no effect. Therefore, if you are working with a device that + * needs a ZLP whenever the end of the logical request falls on a packet + * boundary, then it is sensible to set this flag on every + * transfer (you do not have to worry about only setting it on transfers + * that end on the boundary). + * + * This flag is currently only supported on Linux. + * On other systems, libusb_submit_transfer() will return + * LIBUSB_ERROR_NOT_SUPPORTED for every transfer where this flag is set. + * + * Available since libusb-1.0.9. + */ + LIBUSB_TRANSFER_ADD_ZERO_PACKET = 1 << 3, +}; + +/** \ingroup asyncio + * Isochronous packet descriptor. */ +struct libusb_iso_packet_descriptor { + /** Length of data to request in this packet */ + unsigned int length; + + /** Amount of data that was actually transferred */ + unsigned int actual_length; + + /** Status code for this packet */ + enum libusb_transfer_status status; +}; + +struct libusb_transfer; + +/** \ingroup asyncio + * Asynchronous transfer callback function type. When submitting asynchronous + * transfers, you pass a pointer to a callback function of this type via the + * \ref libusb_transfer::callback "callback" member of the libusb_transfer + * structure. libusb will call this function later, when the transfer has + * completed or failed. See \ref asyncio for more information. + * \param transfer The libusb_transfer struct the callback function is being + * notified about. + */ +typedef void (LIBUSB_CALL *libusb_transfer_cb_fn)(struct libusb_transfer *transfer); + +/** \ingroup asyncio + * The generic USB transfer structure. The user populates this structure and + * then submits it in order to request a transfer. After the transfer has + * completed, the library populates the transfer with the results and passes + * it back to the user. + */ +struct libusb_transfer { + /** Handle of the device that this transfer will be submitted to */ + libusb_device_handle *dev_handle; + + /** A bitwise OR combination of \ref libusb_transfer_flags. */ + uint8_t flags; + + /** Address of the endpoint where this transfer will be sent. */ + unsigned char endpoint; + + /** Type of the endpoint from \ref libusb_transfer_type */ + unsigned char type; + + /** Timeout for this transfer in millseconds. A value of 0 indicates no + * timeout. */ + unsigned int timeout; + + /** The status of the transfer. Read-only, and only for use within + * transfer callback function. + * + * If this is an isochronous transfer, this field may read COMPLETED even + * if there were errors in the frames. Use the + * \ref libusb_iso_packet_descriptor::status "status" field in each packet + * to determine if errors occurred. */ + enum libusb_transfer_status status; + + /** Length of the data buffer */ + int length; + + /** Actual length of data that was transferred. Read-only, and only for + * use within transfer callback function. Not valid for isochronous + * endpoint transfers. */ + int actual_length; + + /** Callback function. This will be invoked when the transfer completes, + * fails, or is cancelled. */ + libusb_transfer_cb_fn callback; + + /** User context data to pass to the callback function. */ + void *user_data; + + /** Data buffer */ + unsigned char *buffer; + + /** Number of isochronous packets. Only used for I/O with isochronous + * endpoints. */ + int num_iso_packets; + + /** Isochronous packet descriptors, for isochronous transfers only. */ + struct libusb_iso_packet_descriptor iso_packet_desc +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) + [] /* valid C99 code */ +#else + [0] /* non-standard, but usually working code */ +#endif + ; +}; + +/** \ingroup misc + * Capabilities supported by this instance of libusb. Test if the loaded + * library supports a given capability by calling + * \ref libusb_has_capability(). + */ +enum libusb_capability { + /** The libusb_has_capability() API is available. */ + LIBUSB_CAP_HAS_CAPABILITY = 0, +}; + +int LIBUSB_CALL libusb_init(libusb_context **ctx); +void LIBUSB_CALL libusb_exit(libusb_context *ctx); +void LIBUSB_CALL libusb_set_debug(libusb_context *ctx, int level); +const struct libusb_version * LIBUSB_CALL libusb_get_version(void); +int LIBUSB_CALL libusb_has_capability(uint32_t capability); +const char * LIBUSB_CALL libusb_error_name(int errcode); + +ssize_t LIBUSB_CALL libusb_get_device_list(libusb_context *ctx, + libusb_device ***list); +void LIBUSB_CALL libusb_free_device_list(libusb_device **list, + int unref_devices); +libusb_device * LIBUSB_CALL libusb_ref_device(libusb_device *dev); +void LIBUSB_CALL libusb_unref_device(libusb_device *dev); + +int LIBUSB_CALL libusb_get_configuration(libusb_device_handle *dev, + int *config); +int LIBUSB_CALL libusb_get_device_descriptor(libusb_device *dev, + struct libusb_device_descriptor *desc); +int LIBUSB_CALL libusb_get_active_config_descriptor(libusb_device *dev, + struct libusb_config_descriptor **config); +int LIBUSB_CALL libusb_get_config_descriptor(libusb_device *dev, + uint8_t config_index, struct libusb_config_descriptor **config); +int LIBUSB_CALL libusb_get_config_descriptor_by_value(libusb_device *dev, + uint8_t bConfigurationValue, struct libusb_config_descriptor **config); +void LIBUSB_CALL libusb_free_config_descriptor( + struct libusb_config_descriptor *config); +uint8_t LIBUSB_CALL libusb_get_bus_number(libusb_device *dev); +uint8_t LIBUSB_CALL libusb_get_device_address(libusb_device *dev); +int LIBUSB_CALL libusb_get_device_speed(libusb_device *dev); +int LIBUSB_CALL libusb_get_max_packet_size(libusb_device *dev, + unsigned char endpoint); +int LIBUSB_CALL libusb_get_max_iso_packet_size(libusb_device *dev, + unsigned char endpoint); + +int LIBUSB_CALL libusb_open(libusb_device *dev, libusb_device_handle **handle); +void LIBUSB_CALL libusb_close(libusb_device_handle *dev_handle); +libusb_device * LIBUSB_CALL libusb_get_device(libusb_device_handle *dev_handle); + +int LIBUSB_CALL libusb_set_configuration(libusb_device_handle *dev, + int configuration); +int LIBUSB_CALL libusb_claim_interface(libusb_device_handle *dev, + int interface_number); +int LIBUSB_CALL libusb_release_interface(libusb_device_handle *dev, + int interface_number); + +libusb_device_handle * LIBUSB_CALL libusb_open_device_with_vid_pid( + libusb_context *ctx, uint16_t vendor_id, uint16_t product_id); + +int LIBUSB_CALL libusb_set_interface_alt_setting(libusb_device_handle *dev, + int interface_number, int alternate_setting); +int LIBUSB_CALL libusb_clear_halt(libusb_device_handle *dev, + unsigned char endpoint); +int LIBUSB_CALL libusb_reset_device(libusb_device_handle *dev); + +int LIBUSB_CALL libusb_kernel_driver_active(libusb_device_handle *dev, + int interface_number); +int LIBUSB_CALL libusb_detach_kernel_driver(libusb_device_handle *dev, + int interface_number); +int LIBUSB_CALL libusb_attach_kernel_driver(libusb_device_handle *dev, + int interface_number); + +/* async I/O */ + +/** \ingroup asyncio + * Get the data section of a control transfer. This convenience function is here + * to remind you that the data does not start until 8 bytes into the actual + * buffer, as the setup packet comes first. + * + * Calling this function only makes sense from a transfer callback function, + * or situations where you have already allocated a suitably sized buffer at + * transfer->buffer. + * + * \param transfer a transfer + * \returns pointer to the first byte of the data section + */ +static inline unsigned char *libusb_control_transfer_get_data( + struct libusb_transfer *transfer) +{ + return transfer->buffer + LIBUSB_CONTROL_SETUP_SIZE; +} + +/** \ingroup asyncio + * Get the control setup packet of a control transfer. This convenience + * function is here to remind you that the control setup occupies the first + * 8 bytes of the transfer data buffer. + * + * Calling this function only makes sense from a transfer callback function, + * or situations where you have already allocated a suitably sized buffer at + * transfer->buffer. + * + * \param transfer a transfer + * \returns a casted pointer to the start of the transfer data buffer + */ +static inline struct libusb_control_setup *libusb_control_transfer_get_setup( + struct libusb_transfer *transfer) +{ + return (struct libusb_control_setup *) transfer->buffer; +} + +/** \ingroup asyncio + * Helper function to populate the setup packet (first 8 bytes of the data + * buffer) for a control transfer. The wIndex, wValue and wLength values should + * be given in host-endian byte order. + * + * \param buffer buffer to output the setup packet into + * \param bmRequestType see the + * \ref libusb_control_setup::bmRequestType "bmRequestType" field of + * \ref libusb_control_setup + * \param bRequest see the + * \ref libusb_control_setup::bRequest "bRequest" field of + * \ref libusb_control_setup + * \param wValue see the + * \ref libusb_control_setup::wValue "wValue" field of + * \ref libusb_control_setup + * \param wIndex see the + * \ref libusb_control_setup::wIndex "wIndex" field of + * \ref libusb_control_setup + * \param wLength see the + * \ref libusb_control_setup::wLength "wLength" field of + * \ref libusb_control_setup + */ +static inline void libusb_fill_control_setup(unsigned char *buffer, + uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, + uint16_t wLength) +{ + struct libusb_control_setup *setup = (struct libusb_control_setup *) buffer; + setup->bmRequestType = bmRequestType; + setup->bRequest = bRequest; + setup->wValue = libusb_cpu_to_le16(wValue); + setup->wIndex = libusb_cpu_to_le16(wIndex); + setup->wLength = libusb_cpu_to_le16(wLength); +} + +struct libusb_transfer * LIBUSB_CALL libusb_alloc_transfer(int iso_packets); +int LIBUSB_CALL libusb_submit_transfer(struct libusb_transfer *transfer); +int LIBUSB_CALL libusb_cancel_transfer(struct libusb_transfer *transfer); +void LIBUSB_CALL libusb_free_transfer(struct libusb_transfer *transfer); + +/** \ingroup asyncio + * Helper function to populate the required \ref libusb_transfer fields + * for a control transfer. + * + * If you pass a transfer buffer to this function, the first 8 bytes will + * be interpreted as a control setup packet, and the wLength field will be + * used to automatically populate the \ref libusb_transfer::length "length" + * field of the transfer. Therefore the recommended approach is: + * -# Allocate a suitably sized data buffer (including space for control setup) + * -# Call libusb_fill_control_setup() + * -# If this is a host-to-device transfer with a data stage, put the data + * in place after the setup packet + * -# Call this function + * -# Call libusb_submit_transfer() + * + * It is also legal to pass a NULL buffer to this function, in which case this + * function will not attempt to populate the length field. Remember that you + * must then populate the buffer and length fields later. + * + * \param transfer the transfer to populate + * \param dev_handle handle of the device that will handle the transfer + * \param buffer data buffer. If provided, this function will interpret the + * first 8 bytes as a setup packet and infer the transfer length from that. + * \param callback callback function to be invoked on transfer completion + * \param user_data user data to pass to callback function + * \param timeout timeout for the transfer in milliseconds + */ +static inline void libusb_fill_control_transfer( + struct libusb_transfer *transfer, libusb_device_handle *dev_handle, + unsigned char *buffer, libusb_transfer_cb_fn callback, void *user_data, + unsigned int timeout) +{ + struct libusb_control_setup *setup = (struct libusb_control_setup *) buffer; + transfer->dev_handle = dev_handle; + transfer->endpoint = 0; + transfer->type = LIBUSB_TRANSFER_TYPE_CONTROL; + transfer->timeout = timeout; + transfer->buffer = buffer; + if (setup) + transfer->length = LIBUSB_CONTROL_SETUP_SIZE + + libusb_le16_to_cpu(setup->wLength); + transfer->user_data = user_data; + transfer->callback = callback; +} + +/** \ingroup asyncio + * Helper function to populate the required \ref libusb_transfer fields + * for a bulk transfer. + * + * \param transfer the transfer to populate + * \param dev_handle handle of the device that will handle the transfer + * \param endpoint address of the endpoint where this transfer will be sent + * \param buffer data buffer + * \param length length of data buffer + * \param callback callback function to be invoked on transfer completion + * \param user_data user data to pass to callback function + * \param timeout timeout for the transfer in milliseconds + */ +static inline void libusb_fill_bulk_transfer(struct libusb_transfer *transfer, + libusb_device_handle *dev_handle, unsigned char endpoint, + unsigned char *buffer, int length, libusb_transfer_cb_fn callback, + void *user_data, unsigned int timeout) +{ + transfer->dev_handle = dev_handle; + transfer->endpoint = endpoint; + transfer->type = LIBUSB_TRANSFER_TYPE_BULK; + transfer->timeout = timeout; + transfer->buffer = buffer; + transfer->length = length; + transfer->user_data = user_data; + transfer->callback = callback; +} + +/** \ingroup asyncio + * Helper function to populate the required \ref libusb_transfer fields + * for an interrupt transfer. + * + * \param transfer the transfer to populate + * \param dev_handle handle of the device that will handle the transfer + * \param endpoint address of the endpoint where this transfer will be sent + * \param buffer data buffer + * \param length length of data buffer + * \param callback callback function to be invoked on transfer completion + * \param user_data user data to pass to callback function + * \param timeout timeout for the transfer in milliseconds + */ +static inline void libusb_fill_interrupt_transfer( + struct libusb_transfer *transfer, libusb_device_handle *dev_handle, + unsigned char endpoint, unsigned char *buffer, int length, + libusb_transfer_cb_fn callback, void *user_data, unsigned int timeout) +{ + transfer->dev_handle = dev_handle; + transfer->endpoint = endpoint; + transfer->type = LIBUSB_TRANSFER_TYPE_INTERRUPT; + transfer->timeout = timeout; + transfer->buffer = buffer; + transfer->length = length; + transfer->user_data = user_data; + transfer->callback = callback; +} + +/** \ingroup asyncio + * Helper function to populate the required \ref libusb_transfer fields + * for an isochronous transfer. + * + * \param transfer the transfer to populate + * \param dev_handle handle of the device that will handle the transfer + * \param endpoint address of the endpoint where this transfer will be sent + * \param buffer data buffer + * \param length length of data buffer + * \param num_iso_packets the number of isochronous packets + * \param callback callback function to be invoked on transfer completion + * \param user_data user data to pass to callback function + * \param timeout timeout for the transfer in milliseconds + */ +static inline void libusb_fill_iso_transfer(struct libusb_transfer *transfer, + libusb_device_handle *dev_handle, unsigned char endpoint, + unsigned char *buffer, int length, int num_iso_packets, + libusb_transfer_cb_fn callback, void *user_data, unsigned int timeout) +{ + transfer->dev_handle = dev_handle; + transfer->endpoint = endpoint; + transfer->type = LIBUSB_TRANSFER_TYPE_ISOCHRONOUS; + transfer->timeout = timeout; + transfer->buffer = buffer; + transfer->length = length; + transfer->num_iso_packets = num_iso_packets; + transfer->user_data = user_data; + transfer->callback = callback; +} + +/** \ingroup asyncio + * Convenience function to set the length of all packets in an isochronous + * transfer, based on the num_iso_packets field in the transfer structure. + * + * \param transfer a transfer + * \param length the length to set in each isochronous packet descriptor + * \see libusb_get_max_packet_size() + */ +static inline void libusb_set_iso_packet_lengths( + struct libusb_transfer *transfer, unsigned int length) +{ + int i; + for (i = 0; i < transfer->num_iso_packets; i++) + transfer->iso_packet_desc[i].length = length; +} + +/** \ingroup asyncio + * Convenience function to locate the position of an isochronous packet + * within the buffer of an isochronous transfer. + * + * This is a thorough function which loops through all preceding packets, + * accumulating their lengths to find the position of the specified packet. + * Typically you will assign equal lengths to each packet in the transfer, + * and hence the above method is sub-optimal. You may wish to use + * libusb_get_iso_packet_buffer_simple() instead. + * + * \param transfer a transfer + * \param packet the packet to return the address of + * \returns the base address of the packet buffer inside the transfer buffer, + * or NULL if the packet does not exist. + * \see libusb_get_iso_packet_buffer_simple() + */ +static inline unsigned char *libusb_get_iso_packet_buffer( + struct libusb_transfer *transfer, unsigned int packet) +{ + int i; + size_t offset = 0; + int _packet; + + /* oops..slight bug in the API. packet is an unsigned int, but we use + * signed integers almost everywhere else. range-check and convert to + * signed to avoid compiler warnings. FIXME for libusb-2. */ + if (packet > INT_MAX) + return NULL; + _packet = packet; + + if (_packet >= transfer->num_iso_packets) + return NULL; + + for (i = 0; i < _packet; i++) + offset += transfer->iso_packet_desc[i].length; + + return transfer->buffer + offset; +} + +/** \ingroup asyncio + * Convenience function to locate the position of an isochronous packet + * within the buffer of an isochronous transfer, for transfers where each + * packet is of identical size. + * + * This function relies on the assumption that every packet within the transfer + * is of identical size to the first packet. Calculating the location of + * the packet buffer is then just a simple calculation: + * buffer + (packet_size * packet) + * + * Do not use this function on transfers other than those that have identical + * packet lengths for each packet. + * + * \param transfer a transfer + * \param packet the packet to return the address of + * \returns the base address of the packet buffer inside the transfer buffer, + * or NULL if the packet does not exist. + * \see libusb_get_iso_packet_buffer() + */ +static inline unsigned char *libusb_get_iso_packet_buffer_simple( + struct libusb_transfer *transfer, unsigned int packet) +{ + int _packet; + + /* oops..slight bug in the API. packet is an unsigned int, but we use + * signed integers almost everywhere else. range-check and convert to + * signed to avoid compiler warnings. FIXME for libusb-2. */ + if (packet > INT_MAX) + return NULL; + _packet = packet; + + if (_packet >= transfer->num_iso_packets) + return NULL; + + return transfer->buffer + (transfer->iso_packet_desc[0].length * _packet); +} + +/* sync I/O */ + +int LIBUSB_CALL libusb_control_transfer(libusb_device_handle *dev_handle, + uint8_t request_type, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, + unsigned char *data, uint16_t wLength, unsigned int timeout); + +int LIBUSB_CALL libusb_bulk_transfer(libusb_device_handle *dev_handle, + unsigned char endpoint, unsigned char *data, int length, + int *actual_length, unsigned int timeout); + +int LIBUSB_CALL libusb_interrupt_transfer(libusb_device_handle *dev_handle, + unsigned char endpoint, unsigned char *data, int length, + int *actual_length, unsigned int timeout); + +/** \ingroup desc + * Retrieve a descriptor from the default control pipe. + * This is a convenience function which formulates the appropriate control + * message to retrieve the descriptor. + * + * \param dev a device handle + * \param desc_type the descriptor type, see \ref libusb_descriptor_type + * \param desc_index the index of the descriptor to retrieve + * \param data output buffer for descriptor + * \param length size of data buffer + * \returns number of bytes returned in data, or LIBUSB_ERROR code on failure + */ +static inline int libusb_get_descriptor(libusb_device_handle *dev, + uint8_t desc_type, uint8_t desc_index, unsigned char *data, int length) +{ + return libusb_control_transfer(dev, LIBUSB_ENDPOINT_IN, + LIBUSB_REQUEST_GET_DESCRIPTOR, (desc_type << 8) | desc_index, 0, data, + (uint16_t) length, 1000); +} + +/** \ingroup desc + * Retrieve a descriptor from a device. + * This is a convenience function which formulates the appropriate control + * message to retrieve the descriptor. The string returned is Unicode, as + * detailed in the USB specifications. + * + * \param dev a device handle + * \param desc_index the index of the descriptor to retrieve + * \param langid the language ID for the string descriptor + * \param data output buffer for descriptor + * \param length size of data buffer + * \returns number of bytes returned in data, or LIBUSB_ERROR code on failure + * \see libusb_get_string_descriptor_ascii() + */ +static inline int libusb_get_string_descriptor(libusb_device_handle *dev, + uint8_t desc_index, uint16_t langid, unsigned char *data, int length) +{ + return libusb_control_transfer(dev, LIBUSB_ENDPOINT_IN, + LIBUSB_REQUEST_GET_DESCRIPTOR, (uint16_t)((LIBUSB_DT_STRING << 8) | desc_index), + langid, data, (uint16_t) length, 1000); +} + +int LIBUSB_CALL libusb_get_string_descriptor_ascii(libusb_device_handle *dev, + uint8_t desc_index, unsigned char *data, int length); + +/* polling and timeouts */ + +int LIBUSB_CALL libusb_try_lock_events(libusb_context *ctx); +void LIBUSB_CALL libusb_lock_events(libusb_context *ctx); +void LIBUSB_CALL libusb_unlock_events(libusb_context *ctx); +int LIBUSB_CALL libusb_event_handling_ok(libusb_context *ctx); +int LIBUSB_CALL libusb_event_handler_active(libusb_context *ctx); +void LIBUSB_CALL libusb_lock_event_waiters(libusb_context *ctx); +void LIBUSB_CALL libusb_unlock_event_waiters(libusb_context *ctx); +int LIBUSB_CALL libusb_wait_for_event(libusb_context *ctx, struct timeval *tv); + +int LIBUSB_CALL libusb_handle_events_timeout(libusb_context *ctx, + struct timeval *tv); +int LIBUSB_CALL libusb_handle_events_timeout_completed(libusb_context *ctx, + struct timeval *tv, int *completed); +int LIBUSB_CALL libusb_handle_events(libusb_context *ctx); +int LIBUSB_CALL libusb_handle_events_completed(libusb_context *ctx, int *completed); +int LIBUSB_CALL libusb_handle_events_locked(libusb_context *ctx, + struct timeval *tv); +int LIBUSB_CALL libusb_pollfds_handle_timeouts(libusb_context *ctx); +int LIBUSB_CALL libusb_get_next_timeout(libusb_context *ctx, + struct timeval *tv); + +/** \ingroup poll + * File descriptor for polling + */ +struct libusb_pollfd { + /** Numeric file descriptor */ + int fd; + + /** Event flags to poll for from . POLLIN indicates that you + * should monitor this file descriptor for becoming ready to read from, + * and POLLOUT indicates that you should monitor this file descriptor for + * nonblocking write readiness. */ + short events; +}; + +/** \ingroup poll + * Callback function, invoked when a new file descriptor should be added + * to the set of file descriptors monitored for events. + * \param fd the new file descriptor + * \param events events to monitor for, see \ref libusb_pollfd for a + * description + * \param user_data User data pointer specified in + * libusb_set_pollfd_notifiers() call + * \see libusb_set_pollfd_notifiers() + */ +typedef void (LIBUSB_CALL *libusb_pollfd_added_cb)(int fd, short events, + void *user_data); + +/** \ingroup poll + * Callback function, invoked when a file descriptor should be removed from + * the set of file descriptors being monitored for events. After returning + * from this callback, do not use that file descriptor again. + * \param fd the file descriptor to stop monitoring + * \param user_data User data pointer specified in + * libusb_set_pollfd_notifiers() call + * \see libusb_set_pollfd_notifiers() + */ +typedef void (LIBUSB_CALL *libusb_pollfd_removed_cb)(int fd, void *user_data); + +const struct libusb_pollfd ** LIBUSB_CALL libusb_get_pollfds( + libusb_context *ctx); +void LIBUSB_CALL libusb_set_pollfd_notifiers(libusb_context *ctx, + libusb_pollfd_added_cb added_cb, libusb_pollfd_removed_cb removed_cb, + void *user_data); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-core.lo b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-core.lo new file mode 100644 index 0000000..30e5bee --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-core.lo @@ -0,0 +1,12 @@ +# libusb_1_0_la-core.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.2.10 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/libusb_1_0_la-core.o' + +# Name of the non-PIC object +non_pic_object='libusb_1_0_la-core.o' + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-core.o b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-core.o new file mode 100644 index 0000000000000000000000000000000000000000..e02312f88b8aed03d1e7b1f3af53f46eb29c8449 GIT binary patch literal 80176 zcmeFad3+Q_`aj-1orK{q3E>bFWx#MLN5Ul_U_ug@K!A{oa5?0dkdctYWWpr^5%sSVs-CC1relS-dP82pbdPOYeAw1h%gr%rS&gGzG)ur)*4b7cE9K!C37hwYSNhxM zr?wuq{m&drDCn5!E$CS6>66`VZ`rrLD8GH)H(1n>u(6g$_YJ_iIx7cI$N zoV{d!&Gwp+Dg8Gi2hm=B+gI4+4^N|tWTS(yEWab1UamJ(k$KABc2FQ&_O(WJ(-Yut7HeUgnL5+(M78LC{LxH%X_H^6wp#s?Q zaZ8E6JrQ;2-?A^92&JcwfcP2yj@3TN6#LR%3@S{OmucR}a&BCx^qoaZJ`~I#w`d94 z8jb(_?6Ul}uhH!C4?h3Z>C>l$U{9l+fnsS?w(LvU{F)HuEq_YxIfBtaJX`*QSza$* z+j7&relQrYvv*GS!lEtvR$u0CuS*9TUSZAbnEWx)&2IZhO21`ae%pbR&DSBe<>Q$L z69l||d|u|eILXWrow((wtmqPtLY=2CNMkt6to?evm^VG?7)6f#fc}k!+3=+60-x% zY|E*z&)N)?GoS`je#%^+Z+b2eI zuV;V#>g=j_3kFmTJ@I1AcI;0MOy9PzinH5Z<;k)an`-+Is=ji}egFNMgn+APuqoG?AOM(OnCVGw(pCdMj|1}zwvoet(CU^T59DL5cUp!E5aE!&`|pkukOprg4w z^A!6&Onoie=*YoI=WomD1OHROS%Y`ZDTM!iQI1?z4;K>t6jVC*Vw_|9TQ#)`_Q8UeRx< zf&zcrIUuHW;-D(e+y@T$dR%s8eVDRpygH$qLob;PgOuO)8kp(qw&%c4ztr{x%>LBY zA3Z6Xzku@AAMKXTt>1W3uDKs_xb}Te&^`i^G*ZfMr)=H{puZj6V!LpP{)w-pbfn=B zetpF6B&7SVJdial#qtk(t?l!+XIsC6H3PslsF1Sx7}QPK^emiPzk`HhGADZ_Hp3sZ&_q%TbwR+8SB zGHhr1Mj%QVc31j#alJSFc5!_ueUG?4k-iVE{*KM*$KYDfA-bHK4hEl_?mGxMAHZ+GriT@;Pi=_usUN!?IkG-VN8kRJHger#zgSK47wURoAO?CS~pe-<+`s^nH0o z=DtUPi}e_uo^s$M#$_+4;Pi<%jQ*AugYC8bfJ?DhT?HwutmDN(m+~+aetP^um;@Ll zz&h}0$|L1+DTVg>V8{oi4)f@7^pGb`_}j0@FdEO?_xP<)CK#W10c;+c!$!g2BU*%T z1lDqD@p*8Y*y03iE;r@jr4GBHwxfeicY-O@`mP;5qvn|tU0eU|z_Oci|9%ii7@k;{ zgvUPd5y}%s9Vpa^7h&neu5USgAU8e5hB&?B{%=5I7&~#m+xi&*D&}p!Tnt0XV=%|a z;30^wWlz(7xrkDX;$e!}Zz7m+E!3sZq@^j(Bjk98X55Jq2pcENJuO!we}DeDd4+ zt7u=3MMP93;~fB%-Z!t+@bL8ZYK7k26fH0X4Z3tJC|m zyaw00^s`!C7L!0DI2Rd9{f9r9$Uwl2B3lT-Z#OCsrzn{t(4$BFyAF%jmsKvK^7Tz(ytr(0dq#)Op?FF+a z2SRBUC+_yQuOk^?Tp{k3_k%pf`R!$31k)#oySY@%`P-&RkzuKq7M0(=K1+0h7k`{g zkmfZgJ0NaMs2@?zfSZCoB!mYT(+dh|`h7SM+y#uUMu47GBd~#>X1lm^MAt?hC1rCP zkYQAgUbekFqoCs#=wP_nR_R?h8{50AW%G#bT`uyA81}dY%Na9jm5zq9%s}&zGCtAz zWB8k28~z4ZWbS(kiKJc1Hn;r{zfJbXx_zS4p}mJbTI|;6^pVzYz6^IKN9eA{=$5V8 z41-@*mqG>9Tvp1@@>r7h2bsj+7}7+{vx zM;tSM`)XJdL@l`{{zSX~hH)$Qw~MGQT;;!L3eZDC--YLkSao7fVYsixE>dMm$tpez zLre-zQ5rQQe5AT}7LiR_Ze%Je!A1}S!6H&x-(!&|B~m$F0`VUd1Sp$e_+bETPmEXV z!K%H8x1O$A1#>Rp2h6|?0{b^nxF11z6y#4UEuI$0&6`#_!wS{cG+3)Dn(9OK%dB8i zQ$v$g9jt6wX0_BWuWwjYZ`Fk=Tbe5;`36;w9F#G>+Bc}#w`frF5}y@rXz;D5s9)o& zYN)RXEo*722!|T#o2~QDFP$@M&fNKP&OhIxrt*r4<`xC!miY6EBB42RO9I8Eg@tpA zO7e2eqQLCD*^yZOoDyJFS{OxKm|vI|NjkSIuV{L~-1(7cN&f7-xuqqMAZTMjB!Xg1 zpIbU7TBO{(viuyQsqCDbyyD_W4*7G+vJ3Ka1BKZ|*=8r^GHG$CtV!ci)zDH`?W=DH z`AS*H3ciGnJhQBGE^1x)mGG3*Fjr#4b8!7->O<*;R`oa)Hl}zn|!M(ntjdT zP+gs`GKlRoHZ@cQn}Kk+ud*fV3)cogI>9EygdlW%uqq6^pl(e?6JAyYeP~ruvTR>f zMSWGUu1*+^uciS=>V2X55jAz8WwpSR8?UWst{)NxEv#s)3nD{o66Himw5DYbEQ2rA z26fhh@NjCbsts1RfP#Dt^`g3J2t|O7SJmoVp+nRbDfHjzeK^xYch;<`So0r_LsYf3 z!KMaZ<(hD?84aSPsU9Q_)%&W#O?65)7X$N(#>To(l~iI~uqNzlZdk#?(d=tz4A!#* z|9AaA4g8-5{+$NoiWdm34uu6N<(CD+frzD!`BXOqgwy0a(JKs=&rqPIIsl$MR6`S$ zY4NJ@Us16-5Nd7+G*(nChvu3?YlBhc5oK6k@NcfD4~2m|Al)$HeBfPcXU@d9-gKd5 zB?#P$q*gbR=4WXxg5i&qFn$7@9q&|3+eru|Vp=OqN=O7hX~Au~WhD(w@QQ>NbA1x6 zU%^F4B$IkNf$;l)#H*!Kt%L-@ql>pIa!IOM3}=z-bo2lusfh$zG?MrdLLO0rBuwy# z2r9uVE~2Kl^%G{|-Hgd@rEoeMv~WfhBy7pw+wM|zxXGU)tz>hri{7u2oimmIBO%Sv zE}y>%x)I&!auVxN`fJpq>}Hp5Fr6xCzQuGOnf@oHeKP$WriaS(_n6L*=^rpXL8gDi zbXGE)tS**~8NbZfB2y?c9+4@RnFKoxqU5DAlVtaSOs&j#ZIrfAX1a+?SZ0##ub^bL z%%s_GKxU)N^stXXW|PeHw9f@@tuoWc9toMNWoCelPgS?e%rN^tsB@#toG&uB%ghBL zbGOV47nwaWGtzz>>g<)7Q9`zTGLvbKg?65k*4O1{((JnI#7;^b-HJ&{--g|#F}M?Z zn+lfwR~RnGiv!pV4I9N4CV?mpr9g8T?O~+=5mbbu%SATgGCf&KPZ4Ryn+HURD}Y4U zPUo7*(1@5go$p3TWbz(2`D>NzdKQY;tr@5uga6&F#QV8I*Rv53b-SL6R5IBgQOApb zZui|5WwL3ec3XW8On#x3Zfnu>DSi12K_YaQdd9ianCJ|jOLWG7!5UHWtYu7;JR6ge zQ}P^4dqE83Av&Er7n6eZ(B#GML0Yt*dR$j=?#*XA})t0xf1bilD-CUIc1V- zKY(;kiH9)VTc$5v0qpx&X+x72rohba0VP)Q6{`W1$@MO};S($rL)#xn#efeXi8rE@ zJu{L!ehMX$^R=3^+cjx-APGr(9i~abpJG~0>g4P1gO+@f&ka~tPU_^JVR|?_v$Txl z_UE9Il=SE4tK^L?dei$b#8T*2ph!_RzL=4Po$SG#s8rI}g2p4xj!t=|y*3u5BPbKaIZ2#5iL+On zJBxD{aqcS4-K?{)^|Z8W?5WTx;kwec+bJL;Wo{4|TbA5p;}CdcW~V4gkeS;>CQ)YY z5}72K`IX3Yl9^u%240!jEizqXW{=2plbPR&I>|Egu*jsy%%dWcDl<=rOn2D_U)po_ z%c>6tL=pAjMUkOC{6S=>4{wT$Bia2~h(H}WCQ7Ie?}`ld;RBJOKAf;$fi_8=PlTQH zfj|T>$NMTMQK)xl+9|sg>|QnlkDOff{va|Wn&rU~63r1A60MWSkZ4^*hIE}QG9+i3 z$dH`9M26(->$w^PAUV(RpwNA!I6e>BuFpz*LkNv36hfz_4fZ^&gdXO394D@e_t0YYVAsju$&3MC_Bc*@F)arHETSgWREL6B*L}HjyEzt`(W2vzw}{wCg;$ zZc@`Xh)k-LSPd-ufqtyCdpt)VEq3w_*`Dve0GPfE#=O)aaq_- zISP|(QrKf28=`$NIOU#+_72EMu_g;1l$j#f4?VjoyxQ_yY<~e#Wk|AYF@q+^%rudi zC^I=CGf8H0?T>)-WSN;R6q6-0GwcJvF?lyfI-o%0e9be3crM26OuR?$4IE!#x%sgmqk2ld)hX08_*a*H>LzW8Lx zEzW&FCPz5!Hs@79rS+xVDe6e;OZ%nsCX`GD;n9j6FUr#mRrw*n1FImXYx%bh&NQJ% zb{_4CX8`1Qd%)R;Gj9NjH{b(2p#-F}pC^tLWRs8#9fl+m6yUzWfq2F?04yEPI85qk zjDxY38$^M-5*JDNMuNg z!-6W+>V{qW0RGGFiJpAsdBwgQwlkz4f3k5sq0BM+S|}hMAK19*Aq~}Ymgfn`P`Ac= zUWbfNGRX2Ahm5pM&wNiO2-Kx*dg?tFKt|f8XRD_KGFh_DEuMPF_+{o^&()AAl$obR zrd(!@h|E%%Ip+Blkk!h}C!S{@(5lgXxQMbnTs8nxK=3eJ94}go06(#W?=57-uk)>;}MxgDNBf z;2@KJfFPa##98flk3z`bX=6`V`#3`-T(L*a2MyaEed2BYl-9_YFvT??e$KqBNLNIfed zJl2ywc_`i*Rjf3R#UPkg)9RK7bx{RkhpDTTh)%Pf0D(gc~cCW$FGQfYcplVy)m{4PQ&yHSmj%-0+Fk(9HINpY)PC-$m zQdKdIRxb#S;uIf;;xV$=>2kBBu7@@w z=CA{ncvB3HXcBuRu9-z_vwcG`cO^n|{+w`_%SuwT+Rk7cG!N9^#4tg}djSwS-sifo z4?R@8~gpsT_DAtb{toN!K z|AzJLiV#_|YVDo-73v3P=aCy3V>a# z4ph5%4p)?Ppk45MEM|Ar3{r)N)ZRI;Ka1Jj5Hn5HKrwr&oD_3lY%#xZ#Zls;vbsVu zBz_DrAt)eio=ni^tZSmU_an7=G9hx#exYhyOr64pw83N6yA>hQ-9W_l&PE@z-fghH zFG1Y203~W*kE)M@Z*7EXuA|IFXaPWD!Yd#Qc_cw>bngf#C8U5Sy#UJHvGH!i1!)3= z54bdy<7t6sN5EaaFz`Uvga&Qs*?+Tc>;&GGTvN}@Dfyp?x7|ZCak9W z457)lfQze1r7^VnX#=Fjz(5p^=Cm*del}=$mB34&9n@{6TWJUsUQ3nqb#x5i_r|Mq z3!^Oqf#gGbBmu54tzjQ~J9s|UgK5rzMD; z1fY_)Fg+8*Jv8JeiAmH;>ofo%F6!icekJnYd4+s=c~ zZa3o*y}b*Ha73=qw15`&L<}5N{srOd{_WIM&0w|jK~ii+R{K{2taOgm+$#Ul2}JjK zTEa$XF-D(pBHXBii5&R{C7!Tj?}j9|1hw(Im?db@@5vHp-Q649DriPO#ApOr^@3rP z-Et$`VT7%RKS1JPdkVajQXvMHb6lbsOoYKDFq5H~@Ofw@!Z6|K9h#o>d7sElb*lCd zUG1GO3})l})ZtiC8t11DKElJp%u9#%xr23`9k*|g#(UDitu8z!iO}*3m6!BiI%w>$ zKd@m^$g;l@dvk&s{NX95RMZ52CqjU336zD0DRh885yxt1R5JYD!3X5djy)Tc#ms{7 zK-G%7R4man=z&^4hssi07|+7(y{q6OQ1q}Y=ISt@iu1BjSQGC`U`@b|O117*f}?PK z)SN#C`$BTH-t9c>6M~Z(?{lyW54le4ad@4OYJ5Pb3Cm^v!3ahDR<$?zJ~1pv2#+`9 z#j^J~cf!8al&7gonGf1y2b7?4R>p8^fLYTY9Y<`K+sn>N$n6N>Q=Vr6#dkg^{C&yS zS${}VC*FZM&`~uS`t4a2)EXiSo#sPAuXt~Y+b2_5go{*VcZ{$X#e{>zN(!7+%VXg0 z1J+8ozChv3x+MlZPO{$;uCI|e$zF7EWfU~|@V*qR0;4h+DKt6Uiw{_pJMV!up@ zl~97e#Apd6I28j&Pniszk@nyY9s2k@h5uJ;|GNLa8cKaVRa+Tn8VDzfdKXT#rr1x}3RX?p)PZLFb%nYua&a|PYFtb$ z9>_ywu%faNH1ZqW8Z+2b-Ib&i!ZAec8KOt_?|^!y@aYmD-#1Y84~e(q2@ZSbr_g<= zk%3AhzyXTR6PAuiY59X3r1k75pA>{!hQSWLz=DU=-w+31q{3s;%8EM69;y~3455dq z)}cSJ=MN(kW1`f7*|h^ZIZ@E(?s`1-4jt7))ciG>OP}N-K9W=CI9BG#PL1@ zoe{Q#q6u3%*Gl{f_<=crEKq^z)4yxWAtcqGaTbaA|@us5>8eQ_#a zP$FBnk1N24fD&%<5L0WK;{H7lO9kHK!89H+f3xaQrou=gd7p3tc5?A5BXb7BTvZJyWx z*N-4C`EV67perT}BCb{rsHjc5-ctyq!gA+cPlc*323uIyTL|Qnw<(Vf?*?%FYdjAE z`IMWe3<<@-1ap5$B@x4>THt_YC00`F%S%u$Wd;Z8fZpBNP9i0(v&N*K=fx-pO-qjS zbfq@rR)Z%vU|(=FkMwj8$G*}KXLt@sB2s+5;vh$Qrpl|n<2qLZ3{gI~gH=6YJp)GK zj8KMwZOo&F?42{mu)`gp*rOqhQuNa7GCWA>*-JF^ft3Fq0Jx|ghk$DZA*x`$>W=T)+y?G&YL*`w~B$ElVy z`!vN7)zL$#Bl49Udt6b-Rr|Qjo>6+7f5RV@7HTe1hGSn65s;9X#uOpDjbBwp^|Lqmy|Bd#Sa zNmA_Kvq^~;i>e}ubb7RX`WJ`*WZ~&K|d?JkOh< zb~*8|Qf4gRWanzzO*h*M8JDZBD)QX!lJz?2QMmJW4gaT$_eykBYtADs`B+c97J7Z` z*7odjxu%_$sH*q4Ov3{jzFfnXx_H_lN7Z%yXfNW8;p)33a6S9NHB215by4iMq52QU~0Pr0J#mQ7D zF~0{^O6dVSP?%Jb4sa=5_W{uPv@>nDy&i6RutCy8E9rHikh(Vzcx4Zf_n8So-25Ia zaG#;jSU)J~tCb|8cxS1eiR{_Lh=lA%U4ksUCN4-5ndiA$f4~I$izd#1c&nE^q%X1_ zkSJsuhzfwWBM_Dj4C!1``(`UytfX4t8*M#g?rb4dcG-;r0JTlDhF}5$VyATMi?hs2(kck_n z^+nbbWqpxD7Lzpg(1VM*kW5%}@;M+4cB8!O0x_yn60Jx3Ng zbsr7y)#x2Vb}NLJ9|a7vD&YwQ-IE0)BnSP~^_ zbj5kGD$e^4Di+16SQJ%}-#_aLo*obABPabX#K~fU`dDh;4BmDqg?|~t;P-ZW_t=$A zIvYb*;3pYtXJV44_?K|q1YE|jAfE|u&lNE+jq9`HCqJ=1m7DB{n5rRZ% zqMU{JrxIc@C%IV^qCAEWi=%}oj}~HagaD9vnp!%kT3m85b#SH{#3l17S?NLzlw9jV z@pwN^yunQ~$u7oTQ|*?U?ds&F0D74ziC)I-@pVsknL12YuzybWQI4yall>G_dJZM0 zDyY~`$xB^`o8c?JX1I~|RiQaf7I%_FwzZg(mFioSTQQ(WVWhR%)Qy+Ld^T1f(kk5b|uPx za93DvkCm~D(^P~579H#I^ObZ}v6Pe93M%I0T!Q52ajxDaGzTS`eMvO?vRLd(c15#~^1c(PWoBSo zOO_Jk3Kiv$x6?zYhv*7^fRisPsF;&)6D0f0xo=%Uv(M4&OQP8?j>W!YS2X*m7?9Z? zAPI0S<1{k`Jus)wH8M`S!bj<5Bav@W{VV0>qNW$0_-H7m`i8 zXZcsU{4-bLwp{)ZE^M@s-XN~$k>|0t)Nm)avRb@Ip?+*b@%)rZ2sW!3|(PJIQh1M$~bwsYOy$)cT{-) zFfn+Nu8tL6y^AxiyWBbXj)Dp~=~E4sMK>5V-B|Khh*5$C&%Ab-yd-L}lc-dNd;X3% zbtgF-tJxc6ol~i>L=mmeh$7kp8`XFmp)1TmPF5>%W9_MN#r>*c2`A?$g)QdfJdIb$ zF3xcaV8~Jm_sr~B7>Fx4S*X}A;UqIe`Plv2s zoSUY2&*NksK^}Oaj?*(EDw|Sp6HEohZ<5>&j{xy_lCEIGoE)rVFXrS3f}{;|Zi`FE z$*qcTC4>u{yGo(49O>Ulgin4_n6XOL=_5E#lkQpuW%u=Rz4Li zrmNS2*RallKPHXpcP>#>DrQlU&JZe^q(}s_#R*OipvHU(w8rY@v{SWR+S zqvF1L-7e0wxL`?)CV|pylG)AEn&fmHVYXGo;{U{jILSSVC2S6nGe;O`PV%A;K_e&K z_6oT@W*);re6(vY&fQSpeDqTVnUR}7wsfwh8lU!R)0nWL+ zqPAv76AxzKu`;8^hP&fe?Ul}^WRVLg@i;+G*ZR>F4W5z{6;#a0*#t=?aPE4S@OPAa z+l6{l6mGLP$&JFE+fkxQP`XN{Vp!lj&SP*5=^8wrx`g>ySxLM0(3%BiSAkwjS=7hUR-Fyoaj z#K|^-Jl2j1voW~k76-mCh6mUTCvQ|x87FTgNcM$u_qv3ViFT$U_$_>Kz>^+M?o`kc zPBKI31UcujkJ=yUM?CPS-0=X{!O1EG&5LFfcB#dh7?rH$x9U!)%)SlhAgG`d#KHy(YrE~RhNF0;t=|3%5xZ~2r0qQ zYa`|V9sR{b7yJ+D>&Vm^>AHcgY+uAiUCyNSsUKZ^bR9`oj=Fd)RTU|bPJ1T9=$b*- zv2>k6SKc)->zn)4+i6>wckxYn-lK+h%*ByJSKhNW>3O?)I??6RmA9`=`mF8}xq_}6 z>B^6sOnUqbp2yk-TDI-);2m@u4xqvOsFvoYQK9;(x|ZsoB{J}3ol(oGsz$AzFg`GT z>VTg6_=!WO|vx;ew(nNDLAqUrInxa35~49Omnyz z@{k4r;p=+!4Kg{ovL#d(9ucaaN<jKxGdg4Z3cr2jDoa^A1Ge22BbCGksz1{hE{k<*DHTEW_OZn@CJFc9v;G!vY z7qvoL&JH{|&)DU76$p0Uah_Vg39o){y3_EQvu#88@%gjnhn%Z`N0Zm*^u4Xe{Ojj< z2h6`df655wQ}}IY5cJR1V?CX7PM+E`e}S`Ra?V4Woi$$H<0Gbwa{3%Pb!TwFsG!s3 zF#zA)jo7)b^(x)Bpyi@F7jE`Ds}5}qIBR{EI6cdII%l5j>GVF?^YPhEFLCZ8&c2g9 zcDFd)U)z0WN!Eg&zXv@4F^{&CL-&8(<=qjZMmb%>k1rT8>e5;HyLQb6-F)9X8Okvs&JoIBTKP*?XwP=~m-C@91G?;cK&k zErQo77=iOnwk&g+?rmB2AY7a8bsPzG&9MKR9c`-h#4)&d`y+2WZi(1)E!HUvOFuA%30noE5%w;-b;s0WDj+ z1Dwv~a9-TnvZd8ob(_=deb?LC+T!%s1ZwnN+*G*Zr-w&Oajw}=1BUvwwdtB!tqXUI zm@*!8(y`_c^!m%B@>!5+UxUi}GHE8HuU)gf6*8YEl`qKM;?#M|FP^xdwbf}VpAuX! z%$acVpA)Ws!!xAk;R5Vx(x#-g!&mKE0Mo>2eAhYaq|@c3vvSj%Mc&y^>`C$rO!H1o z$_hDW+y<d)mieGck?pum(B?9yH`zIbg9$%-uHwKx(FTIFO(4Wrh$oq7IuRgdT(+Dd1pTL zcm^1jv%;IU&~skT(84R7E+d`h$=<`xQ;yfybJD=;o#e-Mc{jH{p0Q)cl>W}8n|3+9 zy(67EpLfvw-Og?H$*E3%ukWFro+NPGp~9wy>Xxdo)fB9$f^UUYX4i=iT84wg!EhMA zM;h_@(8$kh7Uj(=%`1klhvvbjI`iNYyhVBZAvJVl@VT`LaHQ3Ns!9vLq80%5dG*ze z4dCvwtE-#f+m!-GuV__=nyVUC2AhB!{wTaT03TEg)>m8A6-}!`^?^$K78_)xSJXex zrhShy5Lg}p8WNa=%PGjqE>hxAVM$T;oZ{(uMS+q9g?WK#r3JIBU}HcCLarJ=Ggl1~ zH{mxcVF98Jt!StY)vO8BHB>FP0)b}gRv>?FV00ie0A3oFf`C<-E55^7+)|lSR{^~Y z1ehx>6TlTKG*_$)24trItA*vks;CP$OSK0=)vKYJSfZf+Rq$!ihAOM7E?ChNs0A`h zd}I_T;0t$E%R?w>AW$D%9gY+f!0L){g=kOI08KUrS&j1Rcpw~f(h}dOl;75~Y8qNV zk+PSh@|vb#kUqT!1Ejuz%Af579-)=;TX_)%BfmFGJm4#!(38fB%1~V>yhiJ-5~!g* z+|*DPV6GrOD~><-89)tMVx$6r@Y?!{6+u^u%L!HwUx3whOOiD=27@pdsxrZn-l}d{ zv0@GADOkTU)YMSVrU%nH+yKpj$y9_^1cdf#Dyr1b!gt`b?6>}dg zPEK|)oj@`0QC;dC%V&OwQB0Ev3lpCmR{aaqx2&ji2Op-Fa5uVIVV<-!2b-GNQK+%a znLE3%AP>K5thI`^&Xn>K%I=4Wr8ZElO5K6Ls*2^omc~GH@G@|2%kX=#U~j5lpoaQj zU7#9fORy;*KP_yvfcO*0D@@NX$b;d;@NjKIeb53YT2&c9f#pn&p=t3&=IPlvc@O}@ z@PMt862YgVe!;A?iL{~xNCM4PWmR>qEMwEb2o+*YU21S~jUo7+bcDw9=gQAr3ZKLc z@I005L2EFP*I2VFRu?v`g7F9mCk6)k2y+Cd zd7v3hS-3>F(WnZntdL#k|8L-65H@K7)t(J`W&qPsAX zxX_?6;GBb%sJfvExWNnsf5pPNwo+HI%pI#axrKAVGy?f^1VbEM@TN^xOcRV8J|Rv` zW1yj?28N2wNh|?0hlLlGY4nx&d2-juM9j9v23Y0s76;BC!wTUAL5G3^4Z9jh_lx05 zy)?Gcg{ZdJcc9B$6$;k|R>B(Ch?;2>+Q#zA=4ur<1lR}y;R+SgsAfeJpgwHQ{h=kl zDYyax6A{JmBEj=P`TPZQa{Phm@R{*EtD#w}g;r%t4SclQYKABWKFKZyjhvAcUWpUB z%7S&bCbXKF6&L2^<>Hsv;REfUpMYF(;e!N$h=n-%6S(jl@MTRE=;T*6$WKrQE?;YYFju1*P zxHE@2Cwop#UO@qP+NO$C!df8wfM`<%cqkfKnq2j8P>1{h_=NN zhK4AGkV*p@;T&+u0%sz8tdK(+8!@w~1F+Dmp|k=Gb=B-sR)ngW8f0_=b4%G~vjw{_ z9Bo^b#cS%TYWZFv!px?Z78F>OE3(7kCh$J+eRc|bn^8`*9qL(lZD0j#IRU{cSd-Xz zqZc4p4k6M5e+$N-0wJ|*+iyMkFnt!l9~E+I1D2MdI9*mMJ*Q(4ojJfavzkPHHnif~ZL7XWD? zY_USKE9zTd(S~o{gBM$-)`F%W+=Da+-QKZOhBGamo8vEpO4^~*AoCxn7sxA|Of+al>Yg2jxG%hqPQUkjOxQQ<< zESy_}(Jxt3buh-rh`Ajg)z^fYU`hqxo;V2WoMG{7@VZfg!)yWnD&~Osv2;VA!0f!) zAPL-r2}1>C@J$ol3rEmTD=l6i?5wFqZ2&|XWX{|2Q=wC1vgB45NGUQ|z2K?E@0k~#Q z%P+_;SpaQRHZ@dKS5-jY@GgNmqGAcScLHIj=g%lD$}Y*DI|r9W_=hni#?-Vf;*Eh8 znFy6CbE>5NnVTvYQfMwNVqOFSHF#$L8y?H#)`T!EgM&r!FuMQD@nEW?LG*<3W`@>8 zoTODvA&?yIcG2eptq58n=!uF}nrj=H!ZMT~e%uqeB@;2!Dn!H?8DaR%s1tC+GFGdD zXub~De{nAbcEMXER;U_o*Tkk5wMIdZ^l9}FXoI@J(V(bEhOwL0Pnws)P^yEKEz2O( zQ}MjKbA!(QOO43Ll2)h{6_tP<8VUQ2SmMDB(LkH6 z74l9`?nwy?7(W)&;`&OpIfnDh-T1Pq!cBD$$wSl_vDQYfJGBiUEI7JQMZHyDBOGUC zQ4mbLxt8U17iiHVTo7{fwC205C*+-ofNmT!J` z(VYA_Go&MffS*Ijh*?P97ba~O_F>$PgW2K^h1@H`-37sC(Ch}=hV8_%CJeJdTop(Kmi%=EzLn=#0$q851%_`$nt?x6}uxEDOSh zRHzEF6-`yOQ{W-pi1A~6BbNC_%mo^daSGf)L+ueYD?`oj&nuEpcOV) zD7sYJFp zw-_RrIk^RS#Q_c;SF%ft^p^UaYs|Rbnvs(;$u~4NSP4#BdZZDVnZpd37>n39X%Rpi{s_`@}Ikm$xExFG&Cp+1BmxR5APDKu7__3qhH<-A2;kq?=^&wr_i$)Tj&>!5lGWy3{f8Zslfyw_fy^a ze^Ix^s5=enW&!`Wo{^lo4fVOz$w~ILCal;GIy?Yo^t)tlDFR!aZJy}>PA3rR zV;>I@4|=^(U~dz~eMCC`8=l^f#sjegdL2o}`ozG78(0C<%_2;Ej1hEp4UTDt10%K# z=fl=S&{=De=N0HW^hb?ie%H$kWO`R2%XZ?2wuVO`{J)DZ@%hsEstvFky^Z|jEYAyI zF8h;*g2H^Dus+jX0>!BdySv6h2s*}B7e!~7H5KSY|&>YB5&S-`ykRxcJOTu4N6YX}S1s&1&!rX67 zm=067sEcqG&=NQcFesd3H&UGsBKd;SaLv5w7GsF zrW^%b;T!KT{=};%^@;Qct+pnhLT=IZm*3SB(A0^#e3$Cq0BIag8Y}SB^OY)Rb)AXc zCTmIZ1kjLW`GB+^O`ONDUM~7T^lx5&*Gu4BB<(eeXwF0$IC{eW62f@iiGnyM>{5dD z`RQ224!)@s<8b)TDU32ld2qJ?=aEO_!)qB*IBFGe>Cp$+z{f|>P`X|~IF2nIWM<-r z?U6oJ!sVoC=dUoMGeV=Ygifx>7%uoT$A+(;TZ=02g0)m=Xv)b;rwp4h|{2r?+9-s z`m3qk6v)Sta}eMt4-A?(_)8FzP zXOD0T;r#1EA{GN)4-(EUOT<}#zsUTFv527n|A_D-gmYZ z2yvVj1c(?4@TcSOIS>bbB@X^p9Q@5VIR1%Otp0uoxR@{G61NEHE$bxV{C7qoCWEq0 zU^l2w{yXGGq8|u&EdJBu;24{U@g->e;^M2a2)(a zz)>Fl#SRh2LA$RL&cA{pVlu$Lj>D%X*fH|qA8Zn_6VMMJoPSSB#6*Bk0z6i~;0LA! zpFQ-dzKDf@{*pNK%ZZ+UznSBrD+u3Cf9k>WZad)JJ)Nx2V4U&5*c=c1X+Olh&_6ub zo_Rkc@}al64%=|#!v1?Q4JV0S7Nbs z8?jd#DJng=;+;K>r`QmtM+HKD!#KDKc91u%M4c$XnG&}RBeuo3z2&L;r{fdel(pHdCi=_@o`r*GA8o&I_a*Xeg@IO^?s6atQiHC*TOnuhCq{-WU- zP@nZYz!B_3zea2LI1L}8;qx^d<-vUuJi;2T^SMLAbvbuy_<2yD<-xcS4-|J4{AZju zE)dtpE05v~lYWziqnris9}kS{@Id;3@Spj=py9ea$2A=Jl)!&HFdoCh4KZ zn;MS&qTz-c71SNA_%;^60Nc#g(DmvHQ_E`Pp8ua8%ihNC>);6ENs8m`Y@{DwCk zD5s8Z(r|sgTt&Dk&o+%-m**E6j^p?p`Tso{j{U+u-2v$a30@Ibc2BM>vl3r z!>2)(mhrcEk$1572e2vdvHGHOq zf1=^DH2jRtf}I#gUH-lX&hlTR;eL%zHsLHk&H+4%A^ zocCjgp&)SJ_~yZX9>)?5M>`)5|M6HwILnV?jK?|+$6d`Mj)1ML8lM7ynEwMBK3BtE z)9^wK|5D?x@8W)|;n?mTYPSm!VZZct&(m4HYSPk#c zaNW-D)NoxtU&q1EN&%*Dpgg+X2FJliYq)OzlQdj!w^YM*{+DPtj&C{&0mm{89|d_H zFY!T9$fKP4xcrppdETvtay)L-aGWoNj)1LSYWxcTV*YzHdYpHkNpkCdHC*TOTpT`s z(CCqmpYF$A({P>7dvW;mOO*m(e|3Fcpy9ecr)aqD4`*t)ZYPU1ycF7CJ%lw}Z?{#$ z^>*7eT(^fi2uU|y z`_-TJol*a2pSkcKk7^Cadmz@^7Q(r|saO$?pJ+JBnL+)%S>vPk_Yn=(z-@K-hd zsGkYc?i(78?fR(Q;~F2m-On@}e?Xf1^|gkh9=gGQJUUUJh0SHaf2L23gAX7a^@H)D z5B}pZSfd{ZdFC@*!;zl#e_0#lg!pKB(t!=)Ryr!*zQIYkcsQi=X#hNjT~r z^~}c(jlP0GxZ?9cJn*8gBa5+T6@P5_1T7EUX@ zUo}B?rE%zMF9I>})Hpcr1Dkw≈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 b%CS9s^s2Xy(`#q#7dOiKUuX?#tnq&VJam_7 literal 0 HcmV?d00001 diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-io.lo b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-io.lo new file mode 100644 index 0000000..dd09400 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-io.lo @@ -0,0 +1,12 @@ +# libusb_1_0_la-io.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.2.10 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/libusb_1_0_la-io.o' + +# Name of the non-PIC object +non_pic_object='libusb_1_0_la-io.o' + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-io.o b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-io.o new file mode 100644 index 0000000000000000000000000000000000000000..026b9af7435c735982e2071eaf55de04655c7dd2 GIT binary patch literal 71112 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 literal 0 HcmV?d00001 diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-linux_usbfs.lo b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-linux_usbfs.lo new file mode 100644 index 0000000..3822630 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-linux_usbfs.lo @@ -0,0 +1,12 @@ +# libusb_1_0_la-linux_usbfs.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.2.10 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/libusb_1_0_la-linux_usbfs.o' + +# Name of the non-PIC object +non_pic_object='libusb_1_0_la-linux_usbfs.o' + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-linux_usbfs.o b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-linux_usbfs.o new file mode 100644 index 0000000000000000000000000000000000000000..eb458f5676e84d669359a0d9b1ea58c8e837d185 GIT binary patch literal 164400 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 z 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 literal 0 HcmV?d00001 diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-threads_posix.lo b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-threads_posix.lo new file mode 100644 index 0000000..06e649c --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-threads_posix.lo @@ -0,0 +1,12 @@ +# libusb_1_0_la-threads_posix.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.2.10 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/libusb_1_0_la-threads_posix.o' + +# Name of the non-PIC object +non_pic_object='libusb_1_0_la-threads_posix.o' + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-threads_posix.o b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusb_1_0_la-threads_posix.o new file mode 100644 index 0000000000000000000000000000000000000000..523873e6589e38f77ce996d5113e32b8aef09668 GIT binary patch literal 7408 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 literal 0 HcmV?d00001 diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusbi.h b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusbi.h new file mode 100644 index 0000000..976be0d --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/libusbi.h @@ -0,0 +1,935 @@ +/* + * Internal header for libusb + * Copyright (C) 2007-2009 Daniel Drake + * Copyright (c) 2001 Johannes Erdfelt + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef LIBUSBI_H +#define LIBUSBI_H + +#include + +#include +#include +#include +#include +#ifdef HAVE_POLL_H +#include +#endif + +#include +#include + +/* Inside the libusb code, mark all public functions as follows: + * return_type API_EXPORTED function_name(params) { ... } + * But if the function returns a pointer, mark it as follows: + * DEFAULT_VISIBILITY return_type * LIBUSB_CALL function_name(params) { ... } + * In the libusb public header, mark all declarations as: + * return_type LIBUSB_CALL function_name(params); + */ +#define API_EXPORTED LIBUSB_CALL DEFAULT_VISIBILITY + +#define DEVICE_DESC_LENGTH 18 + +#define USB_MAXENDPOINTS 32 +#define USB_MAXINTERFACES 32 +#define USB_MAXCONFIG 8 + +struct list_head { + struct list_head *prev, *next; +}; + +/* Get an entry from the list + * ptr - the address of this list_head element in "type" + * type - the data type that contains "member" + * member - the list_head element in "type" + */ +#define list_entry(ptr, type, member) \ + ((type *)((uintptr_t)(ptr) - (uintptr_t)(&((type *)0L)->member))) + +/* Get each entry from a list + * pos - A structure pointer has a "member" element + * head - list head + * member - the list_head element in "pos" + * type - the type of the first parameter + */ +#define list_for_each_entry(pos, head, member, type) \ + for (pos = list_entry((head)->next, type, member); \ + &pos->member != (head); \ + pos = list_entry(pos->member.next, type, member)) + +#define list_for_each_entry_safe(pos, n, head, member, type) \ + for (pos = list_entry((head)->next, type, member), \ + n = list_entry(pos->member.next, type, member); \ + &pos->member != (head); \ + pos = n, n = list_entry(n->member.next, type, member)) + +#define list_empty(entry) ((entry)->next == (entry)) + +static inline void list_init(struct list_head *entry) +{ + entry->prev = entry->next = entry; +} + +static inline void list_add(struct list_head *entry, struct list_head *head) +{ + entry->next = head->next; + entry->prev = head; + + head->next->prev = entry; + head->next = entry; +} + +static inline void list_add_tail(struct list_head *entry, + struct list_head *head) +{ + entry->next = head; + entry->prev = head->prev; + + head->prev->next = entry; + head->prev = entry; +} + +static inline void list_del(struct list_head *entry) +{ + entry->next->prev = entry->prev; + entry->prev->next = entry->next; +} + +#define container_of(ptr, type, member) ({ \ + const typeof( ((type *)0)->member ) *mptr = (ptr); \ + (type *)( (char *)mptr - offsetof(type,member) );}) + +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#define MAX(a, b) ((a) > (b) ? (a) : (b)) + +#define TIMESPEC_IS_SET(ts) ((ts)->tv_sec != 0 || (ts)->tv_nsec != 0) + +enum usbi_log_level { + LOG_LEVEL_DEBUG, + LOG_LEVEL_INFO, + LOG_LEVEL_WARNING, + LOG_LEVEL_ERROR, +}; + +void usbi_log(struct libusb_context *ctx, enum usbi_log_level level, + const char *function, const char *format, ...); + +void usbi_log_v(struct libusb_context *ctx, enum usbi_log_level level, + const char *function, const char *format, va_list args); + +#if !defined(_MSC_VER) || _MSC_VER >= 1400 + +#ifdef ENABLE_LOGGING +#define _usbi_log(ctx, level, ...) usbi_log(ctx, level, __FUNCTION__, __VA_ARGS__) +#else +#define _usbi_log(ctx, level, ...) do { (void)(ctx); } while(0) +#endif + +#ifdef ENABLE_DEBUG_LOGGING +#define usbi_dbg(...) _usbi_log(NULL, LOG_LEVEL_DEBUG, __VA_ARGS__) +#else +#define usbi_dbg(...) do {} while(0) +#endif + +#define usbi_info(ctx, ...) _usbi_log(ctx, LOG_LEVEL_INFO, __VA_ARGS__) +#define usbi_warn(ctx, ...) _usbi_log(ctx, LOG_LEVEL_WARNING, __VA_ARGS__) +#define usbi_err(ctx, ...) _usbi_log(ctx, LOG_LEVEL_ERROR, __VA_ARGS__) + +#else /* !defined(_MSC_VER) || _MSC_VER >= 1400 */ + +/* Old MS compilers don't support variadic macros. The code is simple, so we + * repeat it for each loglevel. Note that the debug case is special. + * + * Support for variadic macros was introduced in Visual C++ 2005. + * http://msdn.microsoft.com/en-us/library/ms177415%28v=VS.80%29.aspx + */ + +static inline void usbi_info(struct libusb_context *ctx, const char *fmt, ...) +{ +#ifdef ENABLE_LOGGING + va_list args; + va_start(args, fmt); + usbi_log_v(ctx, LOG_LEVEL_INFO, "", fmt, args); + va_end(args); +#else + (void)ctx; +#endif +} + +static inline void usbi_warn(struct libusb_context *ctx, const char *fmt, ...) +{ +#ifdef ENABLE_LOGGING + va_list args; + va_start(args, fmt); + usbi_log_v(ctx, LOG_LEVEL_WARNING, "", fmt, args); + va_end(args); +#else + (void)ctx; +#endif +} + +static inline void usbi_err(struct libusb_context *ctx, const char *fmt, ...) +{ +#ifdef ENABLE_LOGGING + va_list args; + va_start(args, fmt); + usbi_log_v(ctx, LOG_LEVEL_ERROR, "", fmt, args); + va_end(args); +#else + (void)ctx; +#endif +} + +static inline void usbi_dbg(const char *fmt, ...) +{ +#ifdef ENABLE_DEBUG_LOGGING + va_list args; + va_start(args, fmt); + usbi_log_v(NULL, LOG_LEVEL_DEBUG, "", fmt, args); + va_end(args); +#else + (void)fmt; +#endif +} + +#endif /* !defined(_MSC_VER) || _MSC_VER >= 1400 */ + +#define USBI_GET_CONTEXT(ctx) if (!(ctx)) (ctx) = usbi_default_context +#define DEVICE_CTX(dev) ((dev)->ctx) +#define HANDLE_CTX(handle) (DEVICE_CTX((handle)->dev)) +#define TRANSFER_CTX(transfer) (HANDLE_CTX((transfer)->dev_handle)) +#define ITRANSFER_CTX(transfer) \ + (TRANSFER_CTX(USBI_TRANSFER_TO_LIBUSB_TRANSFER(transfer))) + +#define IS_EPIN(ep) (0 != ((ep) & LIBUSB_ENDPOINT_IN)) +#define IS_EPOUT(ep) (!IS_EPIN(ep)) +#define IS_XFERIN(xfer) (0 != ((xfer)->endpoint & LIBUSB_ENDPOINT_IN)) +#define IS_XFEROUT(xfer) (!IS_XFERIN(xfer)) + +/* Internal abstractions for thread synchronization and poll */ +#if defined(THREADS_POSIX) +#include +#elif defined(OS_WINDOWS) +#include +#endif + +#if defined(OS_LINUX) || defined(OS_DARWIN) || defined(OS_OPENBSD) +#include +#include +#elif defined(OS_WINDOWS) +#include +#endif + +#if defined(OS_WINDOWS) && !defined(__GCC__) +#undef HAVE_GETTIMEOFDAY +int usbi_gettimeofday(struct timeval *tp, void *tzp); +#define LIBUSB_GETTIMEOFDAY_WIN32 +#define HAVE_USBI_GETTIMEOFDAY +#else +#ifdef HAVE_GETTIMEOFDAY +#define usbi_gettimeofday(tv, tz) gettimeofday((tv), (tz)) +#define HAVE_USBI_GETTIMEOFDAY +#endif +#endif + +extern struct libusb_context *usbi_default_context; + +struct libusb_context { + int debug; + int debug_fixed; + + /* internal control pipe, used for interrupting event handling when + * something needs to modify poll fds. */ + int ctrl_pipe[2]; + + struct list_head usb_devs; + usbi_mutex_t usb_devs_lock; + + /* A list of open handles. Backends are free to traverse this if required. + */ + struct list_head open_devs; + usbi_mutex_t open_devs_lock; + + /* this is a list of in-flight transfer handles, sorted by timeout + * expiration. URBs to timeout the soonest are placed at the beginning of + * the list, URBs that will time out later are placed after, and urbs with + * infinite timeout are always placed at the very end. */ + struct list_head flying_transfers; + usbi_mutex_t flying_transfers_lock; + + /* list of poll fds */ + struct list_head pollfds; + usbi_mutex_t pollfds_lock; + + /* a counter that is set when we want to interrupt event handling, in order + * to modify the poll fd set. and a lock to protect it. */ + unsigned int pollfd_modify; + usbi_mutex_t pollfd_modify_lock; + + /* user callbacks for pollfd changes */ + libusb_pollfd_added_cb fd_added_cb; + libusb_pollfd_removed_cb fd_removed_cb; + void *fd_cb_user_data; + + /* ensures that only one thread is handling events at any one time */ + usbi_mutex_t events_lock; + + /* used to see if there is an active thread doing event handling */ + int event_handler_active; + + /* used to wait for event completion in threads other than the one that is + * event handling */ + usbi_mutex_t event_waiters_lock; + usbi_cond_t event_waiters_cond; + +#ifdef USBI_TIMERFD_AVAILABLE + /* used for timeout handling, if supported by OS. + * this timerfd is maintained to trigger on the next pending timeout */ + int timerfd; +#endif +}; + +#ifdef USBI_TIMERFD_AVAILABLE +#define usbi_using_timerfd(ctx) ((ctx)->timerfd >= 0) +#else +#define usbi_using_timerfd(ctx) (0) +#endif + +struct libusb_device { + /* lock protects refcnt, everything else is finalized at initialization + * time */ + usbi_mutex_t lock; + int refcnt; + + struct libusb_context *ctx; + + uint8_t bus_number; + uint8_t device_address; + uint8_t num_configurations; + enum libusb_speed speed; + + struct list_head list; + unsigned long session_data; + unsigned char os_priv[0]; +}; + +struct libusb_device_handle { + /* lock protects claimed_interfaces */ + usbi_mutex_t lock; + unsigned long claimed_interfaces; + + struct list_head list; + struct libusb_device *dev; + unsigned char os_priv[0]; +}; + +enum { + USBI_CLOCK_MONOTONIC, + USBI_CLOCK_REALTIME +}; + +/* in-memory transfer layout: + * + * 1. struct usbi_transfer + * 2. struct libusb_transfer (which includes iso packets) [variable size] + * 3. os private data [variable size] + * + * from a libusb_transfer, you can get the usbi_transfer by rewinding the + * appropriate number of bytes. + * the usbi_transfer includes the number of allocated packets, so you can + * determine the size of the transfer and hence the start and length of the + * OS-private data. + */ + +struct usbi_transfer { + int num_iso_packets; + struct list_head list; + struct timeval timeout; + int transferred; + uint8_t flags; + + /* this lock is held during libusb_submit_transfer() and + * libusb_cancel_transfer() (allowing the OS backend to prevent duplicate + * cancellation, submission-during-cancellation, etc). the OS backend + * should also take this lock in the handle_events path, to prevent the user + * cancelling the transfer from another thread while you are processing + * its completion (presumably there would be races within your OS backend + * if this were possible). */ + usbi_mutex_t lock; +}; + +enum usbi_transfer_flags { + /* The transfer has timed out */ + USBI_TRANSFER_TIMED_OUT = 1 << 0, + + /* Set by backend submit_transfer() if the OS handles timeout */ + USBI_TRANSFER_OS_HANDLES_TIMEOUT = 1 << 1, + + /* Cancellation was requested via libusb_cancel_transfer() */ + USBI_TRANSFER_CANCELLING = 1 << 2, + + /* Operation on the transfer failed because the device disappeared */ + USBI_TRANSFER_DEVICE_DISAPPEARED = 1 << 3, +}; + +#define USBI_TRANSFER_TO_LIBUSB_TRANSFER(transfer) \ + ((struct libusb_transfer *)(((unsigned char *)(transfer)) \ + + sizeof(struct usbi_transfer))) +#define LIBUSB_TRANSFER_TO_USBI_TRANSFER(transfer) \ + ((struct usbi_transfer *)(((unsigned char *)(transfer)) \ + - sizeof(struct usbi_transfer))) + +static inline void *usbi_transfer_get_os_priv(struct usbi_transfer *transfer) +{ + return ((unsigned char *)transfer) + sizeof(struct usbi_transfer) + + sizeof(struct libusb_transfer) + + (transfer->num_iso_packets + * sizeof(struct libusb_iso_packet_descriptor)); +} + +/* bus structures */ + +/* All standard descriptors have these 2 fields in common */ +struct usb_descriptor_header { + uint8_t bLength; + uint8_t bDescriptorType; +}; + +/* shared data and functions */ + +int usbi_io_init(struct libusb_context *ctx); +void usbi_io_exit(struct libusb_context *ctx); + +struct libusb_device *usbi_alloc_device(struct libusb_context *ctx, + unsigned long session_id); +struct libusb_device *usbi_get_device_by_session_id(struct libusb_context *ctx, + unsigned long session_id); +int usbi_sanitize_device(struct libusb_device *dev); +void usbi_handle_disconnect(struct libusb_device_handle *handle); + +int usbi_handle_transfer_completion(struct usbi_transfer *itransfer, + enum libusb_transfer_status status); +int usbi_handle_transfer_cancellation(struct usbi_transfer *transfer); + +int usbi_parse_descriptor(unsigned char *source, const char *descriptor, + void *dest, int host_endian); +int usbi_get_config_index_by_value(struct libusb_device *dev, + uint8_t bConfigurationValue, int *idx); + +/* polling */ + +struct usbi_pollfd { + /* must come first */ + struct libusb_pollfd pollfd; + + struct list_head list; +}; + +int usbi_add_pollfd(struct libusb_context *ctx, int fd, short events); +void usbi_remove_pollfd(struct libusb_context *ctx, int fd); +void usbi_fd_notification(struct libusb_context *ctx); + +/* device discovery */ + +/* we traverse usbfs without knowing how many devices we are going to find. + * so we create this discovered_devs model which is similar to a linked-list + * which grows when required. it can be freed once discovery has completed, + * eliminating the need for a list node in the libusb_device structure + * itself. */ +struct discovered_devs { + size_t len; + size_t capacity; + struct libusb_device *devices[0]; +}; + +struct discovered_devs *discovered_devs_append( + struct discovered_devs *discdevs, struct libusb_device *dev); + +/* OS abstraction */ + +/* This is the interface that OS backends need to implement. + * All fields are mandatory, except ones explicitly noted as optional. */ +struct usbi_os_backend { + /* A human-readable name for your backend, e.g. "Linux usbfs" */ + const char *name; + + /* Perform initialization of your backend. You might use this function + * to determine specific capabilities of the system, allocate required + * data structures for later, etc. + * + * This function is called when a libusb user initializes the library + * prior to use. + * + * Return 0 on success, or a LIBUSB_ERROR code on failure. + */ + int (*init)(struct libusb_context *ctx); + + /* Deinitialization. Optional. This function should destroy anything + * that was set up by init. + * + * This function is called when the user deinitializes the library. + */ + void (*exit)(void); + + /* Enumerate all the USB devices on the system, returning them in a list + * of discovered devices. + * + * Your implementation should enumerate all devices on the system, + * regardless of whether they have been seen before or not. + * + * When you have found a device, compute a session ID for it. The session + * ID should uniquely represent that particular device for that particular + * connection session since boot (i.e. if you disconnect and reconnect a + * device immediately after, it should be assigned a different session ID). + * If your OS cannot provide a unique session ID as described above, + * presenting a session ID of (bus_number << 8 | device_address) should + * be sufficient. Bus numbers and device addresses wrap and get reused, + * but that is an unlikely case. + * + * After computing a session ID for a device, call + * usbi_get_device_by_session_id(). This function checks if libusb already + * knows about the device, and if so, it provides you with a libusb_device + * structure for it. + * + * If usbi_get_device_by_session_id() returns NULL, it is time to allocate + * a new device structure for the device. Call usbi_alloc_device() to + * obtain a new libusb_device structure with reference count 1. Populate + * the bus_number and device_address attributes of the new device, and + * perform any other internal backend initialization you need to do. At + * this point, you should be ready to provide device descriptors and so + * on through the get_*_descriptor functions. Finally, call + * usbi_sanitize_device() to perform some final sanity checks on the + * device. Assuming all of the above succeeded, we can now continue. + * If any of the above failed, remember to unreference the device that + * was returned by usbi_alloc_device(). + * + * At this stage we have a populated libusb_device structure (either one + * that was found earlier, or one that we have just allocated and + * populated). This can now be added to the discovered devices list + * using discovered_devs_append(). Note that discovered_devs_append() + * may reallocate the list, returning a new location for it, and also + * note that reallocation can fail. Your backend should handle these + * error conditions appropriately. + * + * This function should not generate any bus I/O and should not block. + * If I/O is required (e.g. reading the active configuration value), it is + * OK to ignore these suggestions :) + * + * This function is executed when the user wishes to retrieve a list + * of USB devices connected to the system. + * + * Return 0 on success, or a LIBUSB_ERROR code on failure. + */ + int (*get_device_list)(struct libusb_context *ctx, + struct discovered_devs **discdevs); + + /* Open a device for I/O and other USB operations. The device handle + * is preallocated for you, you can retrieve the device in question + * through handle->dev. + * + * Your backend should allocate any internal resources required for I/O + * and other operations so that those operations can happen (hopefully) + * without hiccup. This is also a good place to inform libusb that it + * should monitor certain file descriptors related to this device - + * see the usbi_add_pollfd() function. + * + * This function should not generate any bus I/O and should not block. + * + * This function is called when the user attempts to obtain a device + * handle for a device. + * + * Return: + * - 0 on success + * - LIBUSB_ERROR_ACCESS if the user has insufficient permissions + * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since + * discovery + * - another LIBUSB_ERROR code on other failure + * + * Do not worry about freeing the handle on failed open, the upper layers + * do this for you. + */ + int (*open)(struct libusb_device_handle *handle); + + /* Close a device such that the handle cannot be used again. Your backend + * should destroy any resources that were allocated in the open path. + * This may also be a good place to call usbi_remove_pollfd() to inform + * libusb of any file descriptors associated with this device that should + * no longer be monitored. + * + * This function is called when the user closes a device handle. + */ + void (*close)(struct libusb_device_handle *handle); + + /* Retrieve the device descriptor from a device. + * + * The descriptor should be retrieved from memory, NOT via bus I/O to the + * device. This means that you may have to cache it in a private structure + * during get_device_list enumeration. Alternatively, you may be able + * to retrieve it from a kernel interface (some Linux setups can do this) + * still without generating bus I/O. + * + * This function is expected to write DEVICE_DESC_LENGTH (18) bytes into + * buffer, which is guaranteed to be big enough. + * + * This function is called when sanity-checking a device before adding + * it to the list of discovered devices, and also when the user requests + * to read the device descriptor. + * + * This function is expected to return the descriptor in bus-endian format + * (LE). If it returns the multi-byte values in host-endian format, + * set the host_endian output parameter to "1". + * + * Return 0 on success or a LIBUSB_ERROR code on failure. + */ + int (*get_device_descriptor)(struct libusb_device *device, + unsigned char *buffer, int *host_endian); + + /* Get the ACTIVE configuration descriptor for a device. + * + * The descriptor should be retrieved from memory, NOT via bus I/O to the + * device. This means that you may have to cache it in a private structure + * during get_device_list enumeration. You may also have to keep track + * of which configuration is active when the user changes it. + * + * This function is expected to write len bytes of data into buffer, which + * is guaranteed to be big enough. If you can only do a partial write, + * return an error code. + * + * This function is expected to return the descriptor in bus-endian format + * (LE). If it returns the multi-byte values in host-endian format, + * set the host_endian output parameter to "1". + * + * Return: + * - 0 on success + * - LIBUSB_ERROR_NOT_FOUND if the device is in unconfigured state + * - another LIBUSB_ERROR code on other failure + */ + int (*get_active_config_descriptor)(struct libusb_device *device, + unsigned char *buffer, size_t len, int *host_endian); + + /* Get a specific configuration descriptor for a device. + * + * The descriptor should be retrieved from memory, NOT via bus I/O to the + * device. This means that you may have to cache it in a private structure + * during get_device_list enumeration. + * + * The requested descriptor is expressed as a zero-based index (i.e. 0 + * indicates that we are requesting the first descriptor). The index does + * not (necessarily) equal the bConfigurationValue of the configuration + * being requested. + * + * This function is expected to write len bytes of data into buffer, which + * is guaranteed to be big enough. If you can only do a partial write, + * return an error code. + * + * This function is expected to return the descriptor in bus-endian format + * (LE). If it returns the multi-byte values in host-endian format, + * set the host_endian output parameter to "1". + * + * Return 0 on success or a LIBUSB_ERROR code on failure. + */ + int (*get_config_descriptor)(struct libusb_device *device, + uint8_t config_index, unsigned char *buffer, size_t len, + int *host_endian); + + /* Get the bConfigurationValue for the active configuration for a device. + * Optional. This should only be implemented if you can retrieve it from + * cache (don't generate I/O). + * + * If you cannot retrieve this from cache, either do not implement this + * function, or return LIBUSB_ERROR_NOT_SUPPORTED. This will cause + * libusb to retrieve the information through a standard control transfer. + * + * This function must be non-blocking. + * Return: + * - 0 on success + * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since it + * was opened + * - LIBUSB_ERROR_NOT_SUPPORTED if the value cannot be retrieved without + * blocking + * - another LIBUSB_ERROR code on other failure. + */ + int (*get_configuration)(struct libusb_device_handle *handle, int *config); + + /* Set the active configuration for a device. + * + * A configuration value of -1 should put the device in unconfigured state. + * + * This function can block. + * + * Return: + * - 0 on success + * - LIBUSB_ERROR_NOT_FOUND if the configuration does not exist + * - LIBUSB_ERROR_BUSY if interfaces are currently claimed (and hence + * configuration cannot be changed) + * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since it + * was opened + * - another LIBUSB_ERROR code on other failure. + */ + int (*set_configuration)(struct libusb_device_handle *handle, int config); + + /* Claim an interface. When claimed, the application can then perform + * I/O to an interface's endpoints. + * + * This function should not generate any bus I/O and should not block. + * Interface claiming is a logical operation that simply ensures that + * no other drivers/applications are using the interface, and after + * claiming, no other drivers/applicatiosn can use the interface because + * we now "own" it. + * + * Return: + * - 0 on success + * - LIBUSB_ERROR_NOT_FOUND if the interface does not exist + * - LIBUSB_ERROR_BUSY if the interface is in use by another driver/app + * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since it + * was opened + * - another LIBUSB_ERROR code on other failure + */ + int (*claim_interface)(struct libusb_device_handle *handle, int interface_number); + + /* Release a previously claimed interface. + * + * This function should also generate a SET_INTERFACE control request, + * resetting the alternate setting of that interface to 0. It's OK for + * this function to block as a result. + * + * You will only ever be asked to release an interface which was + * successfully claimed earlier. + * + * Return: + * - 0 on success + * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since it + * was opened + * - another LIBUSB_ERROR code on other failure + */ + int (*release_interface)(struct libusb_device_handle *handle, int interface_number); + + /* Set the alternate setting for an interface. + * + * You will only ever be asked to set the alternate setting for an + * interface which was successfully claimed earlier. + * + * It's OK for this function to block. + * + * Return: + * - 0 on success + * - LIBUSB_ERROR_NOT_FOUND if the alternate setting does not exist + * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since it + * was opened + * - another LIBUSB_ERROR code on other failure + */ + int (*set_interface_altsetting)(struct libusb_device_handle *handle, + int interface_number, int altsetting); + + /* Clear a halt/stall condition on an endpoint. + * + * It's OK for this function to block. + * + * Return: + * - 0 on success + * - LIBUSB_ERROR_NOT_FOUND if the endpoint does not exist + * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since it + * was opened + * - another LIBUSB_ERROR code on other failure + */ + int (*clear_halt)(struct libusb_device_handle *handle, + unsigned char endpoint); + + /* Perform a USB port reset to reinitialize a device. + * + * If possible, the handle should still be usable after the reset + * completes, assuming that the device descriptors did not change during + * reset and all previous interface state can be restored. + * + * If something changes, or you cannot easily locate/verify the resetted + * device, return LIBUSB_ERROR_NOT_FOUND. This prompts the application + * to close the old handle and re-enumerate the device. + * + * Return: + * - 0 on success + * - LIBUSB_ERROR_NOT_FOUND if re-enumeration is required, or if the device + * has been disconnected since it was opened + * - another LIBUSB_ERROR code on other failure + */ + int (*reset_device)(struct libusb_device_handle *handle); + + /* Determine if a kernel driver is active on an interface. Optional. + * + * The presence of a kernel driver on an interface indicates that any + * calls to claim_interface would fail with the LIBUSB_ERROR_BUSY code. + * + * Return: + * - 0 if no driver is active + * - 1 if a driver is active + * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since it + * was opened + * - another LIBUSB_ERROR code on other failure + */ + int (*kernel_driver_active)(struct libusb_device_handle *handle, + int interface_number); + + /* Detach a kernel driver from an interface. Optional. + * + * After detaching a kernel driver, the interface should be available + * for claim. + * + * Return: + * - 0 on success + * - LIBUSB_ERROR_NOT_FOUND if no kernel driver was active + * - LIBUSB_ERROR_INVALID_PARAM if the interface does not exist + * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since it + * was opened + * - another LIBUSB_ERROR code on other failure + */ + int (*detach_kernel_driver)(struct libusb_device_handle *handle, + int interface_number); + + /* Attach a kernel driver to an interface. Optional. + * + * Reattach a kernel driver to the device. + * + * Return: + * - 0 on success + * - LIBUSB_ERROR_NOT_FOUND if no kernel driver was active + * - LIBUSB_ERROR_INVALID_PARAM if the interface does not exist + * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected since it + * was opened + * - LIBUSB_ERROR_BUSY if a program or driver has claimed the interface, + * preventing reattachment + * - another LIBUSB_ERROR code on other failure + */ + int (*attach_kernel_driver)(struct libusb_device_handle *handle, + int interface_number); + + /* Destroy a device. Optional. + * + * This function is called when the last reference to a device is + * destroyed. It should free any resources allocated in the get_device_list + * path. + */ + void (*destroy_device)(struct libusb_device *dev); + + /* Submit a transfer. Your implementation should take the transfer, + * morph it into whatever form your platform requires, and submit it + * asynchronously. + * + * This function must not block. + * + * Return: + * - 0 on success + * - LIBUSB_ERROR_NO_DEVICE if the device has been disconnected + * - another LIBUSB_ERROR code on other failure + */ + int (*submit_transfer)(struct usbi_transfer *itransfer); + + /* Cancel a previously submitted transfer. + * + * This function must not block. The transfer cancellation must complete + * later, resulting in a call to usbi_handle_transfer_cancellation() + * from the context of handle_events. + */ + int (*cancel_transfer)(struct usbi_transfer *itransfer); + + /* Clear a transfer as if it has completed or cancelled, but do not + * report any completion/cancellation to the library. You should free + * all private data from the transfer as if you were just about to report + * completion or cancellation. + * + * This function might seem a bit out of place. It is used when libusb + * detects a disconnected device - it calls this function for all pending + * transfers before reporting completion (with the disconnect code) to + * the user. Maybe we can improve upon this internal interface in future. + */ + void (*clear_transfer_priv)(struct usbi_transfer *itransfer); + + /* Handle any pending events. This involves monitoring any active + * transfers and processing their completion or cancellation. + * + * The function is passed an array of pollfd structures (size nfds) + * as a result of the poll() system call. The num_ready parameter + * indicates the number of file descriptors that have reported events + * (i.e. the poll() return value). This should be enough information + * for you to determine which actions need to be taken on the currently + * active transfers. + * + * For any cancelled transfers, call usbi_handle_transfer_cancellation(). + * For completed transfers, call usbi_handle_transfer_completion(). + * For control/bulk/interrupt transfers, populate the "transferred" + * element of the appropriate usbi_transfer structure before calling the + * above functions. For isochronous transfers, populate the status and + * transferred fields of the iso packet descriptors of the transfer. + * + * This function should also be able to detect disconnection of the + * device, reporting that situation with usbi_handle_disconnect(). + * + * When processing an event related to a transfer, you probably want to + * take usbi_transfer.lock to prevent races. See the documentation for + * the usbi_transfer structure. + * + * Return 0 on success, or a LIBUSB_ERROR code on failure. + */ + int (*handle_events)(struct libusb_context *ctx, + struct pollfd *fds, POLL_NFDS_TYPE nfds, int num_ready); + + /* Get time from specified clock. At least two clocks must be implemented + by the backend: USBI_CLOCK_REALTIME, and USBI_CLOCK_MONOTONIC. + + Description of clocks: + USBI_CLOCK_REALTIME : clock returns time since system epoch. + USBI_CLOCK_MONOTONIC: clock returns time since unspecified start + time (usually boot). + */ + int (*clock_gettime)(int clkid, struct timespec *tp); + +#ifdef USBI_TIMERFD_AVAILABLE + /* clock ID of the clock that should be used for timerfd */ + clockid_t (*get_timerfd_clockid)(void); +#endif + + /* Number of bytes to reserve for per-device private backend data. + * This private data area is accessible through the "os_priv" field of + * struct libusb_device. */ + size_t device_priv_size; + + /* Number of bytes to reserve for per-handle private backend data. + * This private data area is accessible through the "os_priv" field of + * struct libusb_device. */ + size_t device_handle_priv_size; + + /* Number of bytes to reserve for per-transfer private backend data. + * This private data area is accessible by calling + * usbi_transfer_get_os_priv() on the appropriate usbi_transfer instance. + */ + size_t transfer_priv_size; + + /* Mumber of additional bytes for os_priv for each iso packet. + * Can your backend use this? */ + /* FIXME: linux can't use this any more. if other OS's cannot either, + * then remove this */ + size_t add_iso_packet_size; +}; + +extern const struct usbi_os_backend * const usbi_backend; + +extern const struct usbi_os_backend linux_usbfs_backend; +extern const struct usbi_os_backend darwin_backend; +extern const struct usbi_os_backend openbsd_backend; +extern const struct usbi_os_backend windows_backend; + +#endif + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/darwin_usb.c b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/darwin_usb.c new file mode 100644 index 0000000..8834d0f --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/darwin_usb.c @@ -0,0 +1,1750 @@ +/* + * darwin backend for libusb 1.0 + * Copyright (C) 2008-2011 Nathan Hjelm + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 + #include +#endif + +#include +#include +#include + +#include "darwin_usb.h" + +/* async event thread */ +static pthread_mutex_t libusb_darwin_at_mutex; +static pthread_cond_t libusb_darwin_at_cond; + +static clock_serv_t clock_realtime; +static clock_serv_t clock_monotonic; + +static CFRunLoopRef libusb_darwin_acfl = NULL; /* async cf loop */ +static volatile int32_t initCount = 0; + +/* async event thread */ +static pthread_t libusb_darwin_at; + +static int darwin_get_config_descriptor(struct libusb_device *dev, uint8_t config_index, unsigned char *buffer, size_t len, int *host_endian); +static int darwin_claim_interface(struct libusb_device_handle *dev_handle, int iface); +static int darwin_release_interface(struct libusb_device_handle *dev_handle, int iface); +static int darwin_reset_device(struct libusb_device_handle *dev_handle); +static void darwin_async_io_callback (void *refcon, IOReturn result, void *arg0); + +static const char *darwin_error_str (int result) { + switch (result) { + case kIOReturnSuccess: + return "no error"; + case kIOReturnNotOpen: + return "device not opened for exclusive access"; + case kIOReturnNoDevice: + return "no connection to an IOService"; + case kIOUSBNoAsyncPortErr: + return "no async port has been opened for interface"; + case kIOReturnExclusiveAccess: + return "another process has device opened for exclusive access"; + case kIOUSBPipeStalled: + return "pipe is stalled"; + case kIOReturnError: + return "could not establish a connection to the Darwin kernel"; + case kIOUSBTransactionTimeout: + return "transaction timed out"; + case kIOReturnBadArgument: + return "invalid argument"; + case kIOReturnAborted: + return "transaction aborted"; + case kIOReturnNotResponding: + return "device not responding"; + case kIOReturnOverrun: + return "data overrun"; + case kIOReturnCannotWire: + return "physical memory can not be wired down"; + default: + return "unknown error"; + } +} + +static int darwin_to_libusb (int result) { + switch (result) { + case kIOReturnUnderrun: + case kIOReturnSuccess: + return LIBUSB_SUCCESS; + case kIOReturnNotOpen: + case kIOReturnNoDevice: + return LIBUSB_ERROR_NO_DEVICE; + case kIOReturnExclusiveAccess: + return LIBUSB_ERROR_ACCESS; + case kIOUSBPipeStalled: + return LIBUSB_ERROR_PIPE; + case kIOReturnBadArgument: + return LIBUSB_ERROR_INVALID_PARAM; + case kIOUSBTransactionTimeout: + return LIBUSB_ERROR_TIMEOUT; + case kIOReturnNotResponding: + case kIOReturnAborted: + case kIOReturnError: + case kIOUSBNoAsyncPortErr: + default: + return LIBUSB_ERROR_OTHER; + } +} + + +static int ep_to_pipeRef(struct libusb_device_handle *dev_handle, uint8_t ep, uint8_t *pipep, uint8_t *ifcp) { + struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)dev_handle->os_priv; + + /* current interface */ + struct darwin_interface *cInterface; + + int8_t i, iface; + + usbi_info (HANDLE_CTX(dev_handle), "converting ep address 0x%02x to pipeRef and interface", ep); + + for (iface = 0 ; iface < USB_MAXINTERFACES ; iface++) { + cInterface = &priv->interfaces[iface]; + + if (dev_handle->claimed_interfaces & (1 << iface)) { + for (i = 0 ; i < cInterface->num_endpoints ; i++) { + if (cInterface->endpoint_addrs[i] == ep) { + *pipep = i + 1; + *ifcp = iface; + usbi_info (HANDLE_CTX(dev_handle), "pipe %d on interface %d matches", *pipep, *ifcp); + return 0; + } + } + } + } + + /* No pipe found with the correct endpoint address */ + usbi_warn (HANDLE_CTX(dev_handle), "no pipeRef found with endpoint address 0x%02x.", ep); + + return -1; +} + +static int usb_setup_device_iterator (io_iterator_t *deviceIterator, long location) { + CFMutableDictionaryRef matchingDict = IOServiceMatching(kIOUSBDeviceClassName); + + if (!matchingDict) + return kIOReturnError; + + if (location) { + CFMutableDictionaryRef propertyMatchDict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks); + + if (propertyMatchDict) { + CFTypeRef locationCF = CFNumberCreate (NULL, kCFNumberLongType, &location); + + CFDictionarySetValue (propertyMatchDict, CFSTR(kUSBDevicePropertyLocationID), locationCF); + /* release our reference to the CFNumber (CFDictionarySetValue retains it) */ + CFRelease (locationCF); + + CFDictionarySetValue (matchingDict, CFSTR(kIOPropertyMatchKey), propertyMatchDict); + /* release out reference to the CFMutableDictionaryRef (CFDictionarySetValue retains it) */ + CFRelease (propertyMatchDict); + } + /* else we can still proceed as long as the caller accounts for the possibility of other devices in the iterator */ + } + + return IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDict, deviceIterator); +} + +static usb_device_t **usb_get_next_device (io_iterator_t deviceIterator, UInt32 *locationp) { + io_cf_plugin_ref_t *plugInInterface = NULL; + usb_device_t **device; + io_service_t usbDevice; + long result; + SInt32 score; + + if (!IOIteratorIsValid (deviceIterator)) + return NULL; + + + while ((usbDevice = IOIteratorNext(deviceIterator))) { + result = IOCreatePlugInInterfaceForService(usbDevice, kIOUSBDeviceUserClientTypeID, + kIOCFPlugInInterfaceID, &plugInInterface, + &score); + + /* we are done with the usb_device_t */ + (void)IOObjectRelease(usbDevice); + if (kIOReturnSuccess == result && plugInInterface) + break; + + usbi_dbg ("libusb/darwin.c usb_get_next_device: could not set up plugin for service: %s\n", darwin_error_str (result)); + } + + if (!usbDevice) + return NULL; + + (void)(*plugInInterface)->QueryInterface(plugInInterface, CFUUIDGetUUIDBytes(DeviceInterfaceID), + (LPVOID)&device); + + (*plugInInterface)->Stop(plugInInterface); + IODestroyPlugInInterface (plugInInterface); + + /* get the location from the device */ + if (locationp) + (*(device))->GetLocationID(device, locationp); + + return device; +} + +static kern_return_t darwin_get_device (uint32_t dev_location, usb_device_t ***darwin_device) { + kern_return_t kresult; + UInt32 location; + io_iterator_t deviceIterator; + + kresult = usb_setup_device_iterator (&deviceIterator, dev_location); + if (kresult) + return kresult; + + /* This port of libusb uses locations to keep track of devices. */ + while ((*darwin_device = usb_get_next_device (deviceIterator, &location)) != NULL) { + if (location == dev_location) + break; + + (**darwin_device)->Release(*darwin_device); + } + + IOObjectRelease (deviceIterator); + + if (!(*darwin_device)) + return kIOReturnNoDevice; + + return kIOReturnSuccess; +} + + + +static void darwin_devices_detached (void *ptr, io_iterator_t rem_devices) { + struct libusb_context *ctx = (struct libusb_context *)ptr; + struct libusb_device_handle *handle; + struct darwin_device_priv *dpriv; + struct darwin_device_handle_priv *priv; + + io_service_t device; + long location; + bool locationValid; + CFTypeRef locationCF; + UInt32 message; + + usbi_info (ctx, "a device has been detached"); + + while ((device = IOIteratorNext (rem_devices)) != 0) { + /* get the location from the i/o registry */ + locationCF = IORegistryEntryCreateCFProperty (device, CFSTR(kUSBDevicePropertyLocationID), kCFAllocatorDefault, 0); + + IOObjectRelease (device); + + if (!locationCF) + continue; + + locationValid = CFGetTypeID(locationCF) == CFNumberGetTypeID() && + CFNumberGetValue(locationCF, kCFNumberLongType, &location); + + CFRelease (locationCF); + + if (!locationValid) + continue; + + usbi_mutex_lock(&ctx->open_devs_lock); + list_for_each_entry(handle, &ctx->open_devs, list, struct libusb_device_handle) { + dpriv = (struct darwin_device_priv *)handle->dev->os_priv; + + /* the device may have been opened several times. write to each handle's event descriptor */ + if (dpriv->location == location && handle->os_priv) { + priv = (struct darwin_device_handle_priv *)handle->os_priv; + + message = MESSAGE_DEVICE_GONE; + write (priv->fds[1], &message, sizeof (message)); + } + } + + usbi_mutex_unlock(&ctx->open_devs_lock); + } +} + +static void darwin_clear_iterator (io_iterator_t iter) { + io_service_t device; + + while ((device = IOIteratorNext (iter)) != 0) + IOObjectRelease (device); +} + +static void *event_thread_main (void *arg0) { + IOReturn kresult; + struct libusb_context *ctx = (struct libusb_context *)arg0; + CFRunLoopRef runloop; + + /* Set this thread's name, so it can be seen in the debugger + and crash reports. */ +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 + pthread_setname_np ("org.libusb.device-detach"); +#endif + + /* Tell the Objective-C garbage collector about this thread. + This is required because, unlike NSThreads, pthreads are + not automatically registered. Although we don't use + Objective-C, we use CoreFoundation, which does. */ +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 + objc_registerThreadWithCollector(); +#endif + + /* hotplug (device removal) source */ + CFRunLoopSourceRef libusb_notification_cfsource; + io_notification_port_t libusb_notification_port; + io_iterator_t libusb_rem_device_iterator; + + usbi_info (ctx, "creating hotplug event source"); + + runloop = CFRunLoopGetCurrent (); + CFRetain (runloop); + + /* add the notification port to the run loop */ + libusb_notification_port = IONotificationPortCreate (kIOMasterPortDefault); + libusb_notification_cfsource = IONotificationPortGetRunLoopSource (libusb_notification_port); + CFRunLoopAddSource(runloop, libusb_notification_cfsource, kCFRunLoopDefaultMode); + + /* create notifications for removed devices */ + kresult = IOServiceAddMatchingNotification (libusb_notification_port, kIOTerminatedNotification, + IOServiceMatching(kIOUSBDeviceClassName), + (IOServiceMatchingCallback)darwin_devices_detached, + (void *)ctx, &libusb_rem_device_iterator); + + if (kresult != kIOReturnSuccess) { + usbi_err (ctx, "could not add hotplug event source: %s", darwin_error_str (kresult)); + + pthread_exit (NULL); + } + + /* arm notifiers */ + darwin_clear_iterator (libusb_rem_device_iterator); + + usbi_info (ctx, "thread ready to receive events"); + + /* signal the main thread that the async runloop has been created. */ + pthread_mutex_lock (&libusb_darwin_at_mutex); + libusb_darwin_acfl = runloop; + pthread_cond_signal (&libusb_darwin_at_cond); + pthread_mutex_unlock (&libusb_darwin_at_mutex); + + /* run the runloop */ + CFRunLoopRun(); + + usbi_info (ctx, "thread exiting"); + + /* delete notification port */ + IONotificationPortDestroy (libusb_notification_port); + IOObjectRelease (libusb_rem_device_iterator); + + CFRelease (runloop); + + libusb_darwin_acfl = NULL; + + pthread_exit (NULL); +} + +static int darwin_init(struct libusb_context *ctx) { + host_name_port_t host_self; + + if (OSAtomicIncrement32Barrier(&initCount) == 1) { + /* create the clocks that will be used */ + + host_self = mach_host_self(); + host_get_clock_service(host_self, CALENDAR_CLOCK, &clock_realtime); + host_get_clock_service(host_self, SYSTEM_CLOCK, &clock_monotonic); + mach_port_deallocate(mach_task_self(), host_self); + + pthread_mutex_init (&libusb_darwin_at_mutex, NULL); + pthread_cond_init (&libusb_darwin_at_cond, NULL); + + pthread_create (&libusb_darwin_at, NULL, event_thread_main, (void *)ctx); + + pthread_mutex_lock (&libusb_darwin_at_mutex); + while (!libusb_darwin_acfl) + pthread_cond_wait (&libusb_darwin_at_cond, &libusb_darwin_at_mutex); + pthread_mutex_unlock (&libusb_darwin_at_mutex); + } + + return 0; +} + +static void darwin_exit (void) { + if (OSAtomicDecrement32Barrier(&initCount) == 0) { + mach_port_deallocate(mach_task_self(), clock_realtime); + mach_port_deallocate(mach_task_self(), clock_monotonic); + + /* stop the async runloop and wait for the thread to terminate. */ + CFRunLoopStop (libusb_darwin_acfl); + pthread_join (libusb_darwin_at, NULL); + } +} + +static int darwin_get_device_descriptor(struct libusb_device *dev, unsigned char *buffer, int *host_endian) { + struct darwin_device_priv *priv = (struct darwin_device_priv *)dev->os_priv; + + /* return cached copy */ + memmove (buffer, &(priv->dev_descriptor), DEVICE_DESC_LENGTH); + + *host_endian = 0; + + return 0; +} + +static int get_configuration_index (struct libusb_device *dev, int config_value) { + struct darwin_device_priv *priv = (struct darwin_device_priv *)dev->os_priv; + UInt8 i, numConfig; + IOUSBConfigurationDescriptorPtr desc; + IOReturn kresult; + + /* is there a simpler way to determine the index? */ + kresult = (*(priv->device))->GetNumberOfConfigurations (priv->device, &numConfig); + if (kresult != kIOReturnSuccess) + return darwin_to_libusb (kresult); + + for (i = 0 ; i < numConfig ; i++) { + (*(priv->device))->GetConfigurationDescriptorPtr (priv->device, i, &desc); + + if (desc->bConfigurationValue == config_value) + return i; + } + + /* configuration not found */ + return LIBUSB_ERROR_OTHER; +} + +static int darwin_get_active_config_descriptor(struct libusb_device *dev, unsigned char *buffer, size_t len, int *host_endian) { + struct darwin_device_priv *priv = (struct darwin_device_priv *)dev->os_priv; + int config_index; + + if (0 == priv->active_config) + return LIBUSB_ERROR_INVALID_PARAM; + + config_index = get_configuration_index (dev, priv->active_config); + if (config_index < 0) + return config_index; + + return darwin_get_config_descriptor (dev, config_index, buffer, len, host_endian); +} + +static int darwin_get_config_descriptor(struct libusb_device *dev, uint8_t config_index, unsigned char *buffer, size_t len, int *host_endian) { + struct darwin_device_priv *priv = (struct darwin_device_priv *)dev->os_priv; + IOUSBConfigurationDescriptorPtr desc; + IOReturn kresult; + usb_device_t **device = NULL; + + if (!priv) + return LIBUSB_ERROR_OTHER; + + if (!priv->device) { + kresult = darwin_get_device (priv->location, &device); + if (kresult || !device) { + usbi_err (DEVICE_CTX (dev), "could not find device: %s", darwin_error_str (kresult)); + + return darwin_to_libusb (kresult); + } + + /* don't have to open the device to get a config descriptor */ + } else + device = priv->device; + + kresult = (*device)->GetConfigurationDescriptorPtr (device, config_index, &desc); + if (kresult == kIOReturnSuccess) { + /* copy descriptor */ + if (libusb_le16_to_cpu(desc->wTotalLength) < len) + len = libusb_le16_to_cpu(desc->wTotalLength); + + memmove (buffer, desc, len); + + /* GetConfigurationDescriptorPtr returns the descriptor in USB bus order */ + *host_endian = 0; + } + + if (!priv->device) + (*device)->Release (device); + + return darwin_to_libusb (kresult); +} + +/* check whether the os has configured the device */ +static int darwin_check_configuration (struct libusb_context *ctx, struct libusb_device *dev, usb_device_t **darwin_device) { + struct darwin_device_priv *priv = (struct darwin_device_priv *)dev->os_priv; + + IOUSBConfigurationDescriptorPtr configDesc; + IOUSBFindInterfaceRequest request; + kern_return_t kresult; + io_iterator_t interface_iterator; + io_service_t firstInterface; + + if (priv->dev_descriptor.bNumConfigurations < 1) { + usbi_err (ctx, "device has no configurations"); + return LIBUSB_ERROR_OTHER; /* no configurations at this speed so we can't use it */ + } + + /* find the first configuration */ + kresult = (*darwin_device)->GetConfigurationDescriptorPtr (darwin_device, 0, &configDesc); + priv->first_config = (kIOReturnSuccess == kresult) ? configDesc->bConfigurationValue : 1; + + /* check if the device is already configured. there is probably a better way than iterating over the + to accomplish this (the trick is we need to avoid a call to GetConfigurations since buggy devices + might lock up on the device request) */ + + /* Setup the Interface Request */ + request.bInterfaceClass = kIOUSBFindInterfaceDontCare; + request.bInterfaceSubClass = kIOUSBFindInterfaceDontCare; + request.bInterfaceProtocol = kIOUSBFindInterfaceDontCare; + request.bAlternateSetting = kIOUSBFindInterfaceDontCare; + + kresult = (*(darwin_device))->CreateInterfaceIterator(darwin_device, &request, &interface_iterator); + if (kresult) + return darwin_to_libusb (kresult); + + /* iterate once */ + firstInterface = IOIteratorNext(interface_iterator); + + /* done with the interface iterator */ + IOObjectRelease(interface_iterator); + + if (firstInterface) { + IOObjectRelease (firstInterface); + + /* device is configured */ + if (priv->dev_descriptor.bNumConfigurations == 1) + /* to avoid problems with some devices get the configurations value from the configuration descriptor */ + priv->active_config = priv->first_config; + else + /* devices with more than one configuration should work with GetConfiguration */ + (*darwin_device)->GetConfiguration (darwin_device, &priv->active_config); + } else + /* not configured */ + priv->active_config = 0; + + usbi_info (ctx, "active config: %u, first config: %u", priv->active_config, priv->first_config); + + return 0; +} + +static int darwin_cache_device_descriptor (struct libusb_context *ctx, struct libusb_device *dev, usb_device_t **device) { + struct darwin_device_priv *priv; + int retries = 5, delay = 30000; + int unsuspended = 0, try_unsuspend = 1, try_reconfigure = 1; + int is_open = 0; + int ret = 0, ret2; + IOUSBDevRequest req; + UInt8 bDeviceClass; + UInt16 idProduct, idVendor; + + (*device)->GetDeviceClass (device, &bDeviceClass); + (*device)->GetDeviceProduct (device, &idProduct); + (*device)->GetDeviceVendor (device, &idVendor); + + priv = (struct darwin_device_priv *)dev->os_priv; + + /* try to open the device (we can usually continue even if this fails) */ + is_open = ((*device)->USBDeviceOpenSeize(device) == kIOReturnSuccess); + + /**** retrieve device descriptor ****/ + do { + /* Set up request for device descriptor */ + memset (&(priv->dev_descriptor), 0, sizeof(IOUSBDeviceDescriptor)); + req.bmRequestType = USBmakebmRequestType(kUSBIn, kUSBStandard, kUSBDevice); + req.bRequest = kUSBRqGetDescriptor; + req.wValue = kUSBDeviceDesc << 8; + req.wIndex = 0; + req.wLength = sizeof(priv->dev_descriptor); + req.pData = &(priv->dev_descriptor); + + /* according to Apple's documentation the device must be open for DeviceRequest but we may not be able to open some + * devices and Apple's USB Prober doesn't bother to open the device before issuing a descriptor request. Still, + * to follow the spec as closely as possible, try opening the device */ + + ret = (*(device))->DeviceRequest (device, &req); + + if (kIOReturnOverrun == ret && kUSBDeviceDesc == priv->dev_descriptor.bDescriptorType) + /* received an overrun error but we still received a device descriptor */ + ret = kIOReturnSuccess; + + if (kIOReturnSuccess == ret && (0 == priv->dev_descriptor.bNumConfigurations || + 0 == priv->dev_descriptor.bcdUSB)) { + /* work around for incorrectly configured devices */ + if (try_reconfigure && is_open) { + usbi_dbg("descriptor appears to be invalid. resetting configuration before trying again..."); + + /* set the first configuration */ + (*device)->SetConfiguration(device, 1); + + /* don't try to reconfigure again */ + try_reconfigure = 0; + } + + ret = kIOUSBPipeStalled; + } + + if (kIOReturnSuccess != ret && is_open && try_unsuspend) { + /* device may be suspended. unsuspend it and try again */ +#if DeviceVersion >= 320 + UInt32 info; + + /* IOUSBFamily 320+ provides a way to detect device suspension but earlier versions do not */ + (void)(*device)->GetUSBDeviceInformation (device, &info); + + try_unsuspend = info & (1 << kUSBInformationDeviceIsSuspendedBit); +#endif + + if (try_unsuspend) { + /* resume the device */ + ret2 = (*device)->USBDeviceSuspend (device, 0); + if (kIOReturnSuccess != ret2) { + /* prevent log spew from poorly behaving devices. this indicates the + os actually had trouble communicating with the device */ + usbi_dbg("could not retrieve device descriptor. failed to unsuspend: %s",darwin_error_str(ret2)); + } else + unsuspended = 1; + + try_unsuspend = 0; + } + } + + if (kIOReturnSuccess != ret) { + usbi_dbg("kernel responded with code: 0x%08x. sleeping for %d ms before trying again", ret, delay/1000); + /* sleep for a little while before trying again */ + usleep (delay); + } + } while (kIOReturnSuccess != ret && retries--); + + if (unsuspended) + /* resuspend the device */ + (void)(*device)->USBDeviceSuspend (device, 1); + + if (is_open) + (void) (*device)->USBDeviceClose (device); + + if (ret != kIOReturnSuccess) { + /* a debug message was already printed out for this error */ + if (LIBUSB_CLASS_HUB == bDeviceClass) + usbi_dbg ("could not retrieve device descriptor %.4x:%.4x: %s. skipping device", idVendor, idProduct, darwin_error_str (ret)); + else + usbi_warn (ctx, "could not retrieve device descriptor %.4x:%.4x: %s. skipping device", idVendor, idProduct, darwin_error_str (ret)); + + return -1; + } + + usbi_dbg ("device descriptor:"); + usbi_dbg (" bDescriptorType: 0x%02x", priv->dev_descriptor.bDescriptorType); + usbi_dbg (" bcdUSB: 0x%04x", priv->dev_descriptor.bcdUSB); + usbi_dbg (" bDeviceClass: 0x%02x", priv->dev_descriptor.bDeviceClass); + usbi_dbg (" bDeviceSubClass: 0x%02x", priv->dev_descriptor.bDeviceSubClass); + usbi_dbg (" bDeviceProtocol: 0x%02x", priv->dev_descriptor.bDeviceProtocol); + usbi_dbg (" bMaxPacketSize0: 0x%02x", priv->dev_descriptor.bMaxPacketSize0); + usbi_dbg (" idVendor: 0x%04x", priv->dev_descriptor.idVendor); + usbi_dbg (" idProduct: 0x%04x", priv->dev_descriptor.idProduct); + usbi_dbg (" bcdDevice: 0x%04x", priv->dev_descriptor.bcdDevice); + usbi_dbg (" iManufacturer: 0x%02x", priv->dev_descriptor.iManufacturer); + usbi_dbg (" iProduct: 0x%02x", priv->dev_descriptor.iProduct); + usbi_dbg (" iSerialNumber: 0x%02x", priv->dev_descriptor.iSerialNumber); + usbi_dbg (" bNumConfigurations: 0x%02x", priv->dev_descriptor.bNumConfigurations); + + /* catch buggy hubs (which appear to be virtual). Apple's own USB prober has problems with these devices. */ + if (libusb_le16_to_cpu (priv->dev_descriptor.idProduct) != idProduct) { + /* not a valid device */ + usbi_warn (ctx, "idProduct from iokit (%04x) does not match idProduct in descriptor (%04x). skipping device", + idProduct, libusb_le16_to_cpu (priv->dev_descriptor.idProduct)); + return -1; + } + + return 0; +} + +static int process_new_device (struct libusb_context *ctx, usb_device_t **device, UInt32 locationID, struct discovered_devs **_discdevs) { + struct darwin_device_priv *priv; + struct libusb_device *dev; + struct discovered_devs *discdevs; + UInt16 address; + UInt8 devSpeed; + int ret = 0, need_unref = 0; + + do { + dev = usbi_get_device_by_session_id(ctx, locationID); + if (!dev) { + usbi_info (ctx, "allocating new device for location 0x%08x", locationID); + dev = usbi_alloc_device(ctx, locationID); + need_unref = 1; + } else + usbi_info (ctx, "using existing device for location 0x%08x", locationID); + + if (!dev) { + ret = LIBUSB_ERROR_NO_MEM; + break; + } + + priv = (struct darwin_device_priv *)dev->os_priv; + + (*device)->GetDeviceAddress (device, (USBDeviceAddress *)&address); + + ret = darwin_cache_device_descriptor (ctx, dev, device); + if (ret < 0) + break; + + /* check current active configuration (and cache the first configuration value-- which may be used by claim_interface) */ + ret = darwin_check_configuration (ctx, dev, device); + if (ret < 0) + break; + + dev->bus_number = locationID >> 24; + dev->device_address = address; + + (*device)->GetDeviceSpeed (device, &devSpeed); + + switch (devSpeed) { + case kUSBDeviceSpeedLow: dev->speed = LIBUSB_SPEED_LOW; break; + case kUSBDeviceSpeedFull: dev->speed = LIBUSB_SPEED_FULL; break; + case kUSBDeviceSpeedHigh: dev->speed = LIBUSB_SPEED_HIGH; break; + default: + usbi_warn (ctx, "Got unknown device speed %d", devSpeed); + } + + /* save our location, we'll need this later */ + priv->location = locationID; + snprintf(priv->sys_path, 20, "%03i-%04x-%04x-%02x-%02x", address, priv->dev_descriptor.idVendor, priv->dev_descriptor.idProduct, + priv->dev_descriptor.bDeviceClass, priv->dev_descriptor.bDeviceSubClass); + + ret = usbi_sanitize_device (dev); + if (ret < 0) + break; + + /* append the device to the list of discovered devices */ + discdevs = discovered_devs_append(*_discdevs, dev); + if (!discdevs) { + ret = LIBUSB_ERROR_NO_MEM; + break; + } + + *_discdevs = discdevs; + + usbi_info (ctx, "found device with address %d at %s", dev->device_address, priv->sys_path); + } while (0); + + if (need_unref) + libusb_unref_device(dev); + + return ret; +} + +static int darwin_get_device_list(struct libusb_context *ctx, struct discovered_devs **_discdevs) { + io_iterator_t deviceIterator; + usb_device_t **device; + kern_return_t kresult; + UInt32 location; + + kresult = usb_setup_device_iterator (&deviceIterator, 0); + if (kresult != kIOReturnSuccess) + return darwin_to_libusb (kresult); + + while ((device = usb_get_next_device (deviceIterator, &location)) != NULL) { + (void) process_new_device (ctx, device, location, _discdevs); + + (*(device))->Release(device); + } + + IOObjectRelease(deviceIterator); + + return 0; +} + +static int darwin_open (struct libusb_device_handle *dev_handle) { + struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)dev_handle->os_priv; + struct darwin_device_priv *dpriv = (struct darwin_device_priv *)dev_handle->dev->os_priv; + usb_device_t **darwin_device; + IOReturn kresult; + + if (0 == dpriv->open_count) { + kresult = darwin_get_device (dpriv->location, &darwin_device); + if (kresult) { + usbi_err (HANDLE_CTX (dev_handle), "could not find device: %s", darwin_error_str (kresult)); + return darwin_to_libusb (kresult); + } + + dpriv->device = darwin_device; + + /* try to open the device */ + kresult = (*(dpriv->device))->USBDeviceOpenSeize (dpriv->device); + + if (kresult != kIOReturnSuccess) { + usbi_err (HANDLE_CTX (dev_handle), "USBDeviceOpen: %s", darwin_error_str(kresult)); + + switch (kresult) { + case kIOReturnExclusiveAccess: + /* it is possible to perform some actions on a device that is not open so do not return an error */ + priv->is_open = 0; + + break; + default: + (*(dpriv->device))->Release (dpriv->device); + dpriv->device = NULL; + return darwin_to_libusb (kresult); + } + } else { + /* create async event source */ + kresult = (*(dpriv->device))->CreateDeviceAsyncEventSource (dpriv->device, &priv->cfSource); + if (kresult != kIOReturnSuccess) { + usbi_err (HANDLE_CTX (dev_handle), "CreateDeviceAsyncEventSource: %s", darwin_error_str(kresult)); + + (*(dpriv->device))->USBDeviceClose (dpriv->device); + (*(dpriv->device))->Release (dpriv->device); + + dpriv->device = NULL; + return darwin_to_libusb (kresult); + } + + priv->is_open = 1; + + CFRetain (libusb_darwin_acfl); + + /* add the cfSource to the aync run loop */ + CFRunLoopAddSource(libusb_darwin_acfl, priv->cfSource, kCFRunLoopCommonModes); + } + } + + /* device opened successfully */ + dpriv->open_count++; + + /* create a file descriptor for notifications */ + pipe (priv->fds); + + /* set the pipe to be non-blocking */ + fcntl (priv->fds[1], F_SETFD, O_NONBLOCK); + + usbi_add_pollfd(HANDLE_CTX(dev_handle), priv->fds[0], POLLIN); + + usbi_info (HANDLE_CTX (dev_handle), "device open for access"); + + return 0; +} + +static void darwin_close (struct libusb_device_handle *dev_handle) { + struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)dev_handle->os_priv; + struct darwin_device_priv *dpriv = (struct darwin_device_priv *)dev_handle->dev->os_priv; + IOReturn kresult; + int i; + + if (dpriv->open_count == 0) { + /* something is probably very wrong if this is the case */ + usbi_err (HANDLE_CTX (dev_handle), "Close called on a device that was not open!\n"); + return; + } + + dpriv->open_count--; + + /* make sure all interfaces are released */ + for (i = 0 ; i < USB_MAXINTERFACES ; i++) + if (dev_handle->claimed_interfaces & (1 << i)) + libusb_release_interface (dev_handle, i); + + if (0 == dpriv->open_count) { + if (priv->is_open) { + /* delete the device's async event source */ + if (priv->cfSource) { + CFRunLoopRemoveSource (libusb_darwin_acfl, priv->cfSource, kCFRunLoopDefaultMode); + CFRelease (priv->cfSource); + } + + /* close the device */ + kresult = (*(dpriv->device))->USBDeviceClose(dpriv->device); + if (kresult) { + /* Log the fact that we had a problem closing the file, however failing a + * close isn't really an error, so return success anyway */ + usbi_err (HANDLE_CTX (dev_handle), "USBDeviceClose: %s", darwin_error_str(kresult)); + } + } + + kresult = (*(dpriv->device))->Release(dpriv->device); + if (kresult) { + /* Log the fact that we had a problem closing the file, however failing a + * close isn't really an error, so return success anyway */ + usbi_err (HANDLE_CTX (dev_handle), "Release: %s", darwin_error_str(kresult)); + } + + dpriv->device = NULL; + } + + /* file descriptors are maintained per-instance */ + usbi_remove_pollfd (HANDLE_CTX (dev_handle), priv->fds[0]); + close (priv->fds[1]); + close (priv->fds[0]); + + priv->fds[0] = priv->fds[1] = -1; +} + +static int darwin_get_configuration(struct libusb_device_handle *dev_handle, int *config) { + struct darwin_device_priv *dpriv = (struct darwin_device_priv *)dev_handle->dev->os_priv; + + *config = (int) dpriv->active_config; + + return 0; +} + +static int darwin_set_configuration(struct libusb_device_handle *dev_handle, int config) { + struct darwin_device_priv *dpriv = (struct darwin_device_priv *)dev_handle->dev->os_priv; + IOReturn kresult; + int i; + + /* Setting configuration will invalidate the interface, so we need + to reclaim it. First, dispose of existing interfaces, if any. */ + for (i = 0 ; i < USB_MAXINTERFACES ; i++) + if (dev_handle->claimed_interfaces & (1 << i)) + darwin_release_interface (dev_handle, i); + + kresult = (*(dpriv->device))->SetConfiguration (dpriv->device, config); + if (kresult != kIOReturnSuccess) + return darwin_to_libusb (kresult); + + /* Reclaim any interfaces. */ + for (i = 0 ; i < USB_MAXINTERFACES ; i++) + if (dev_handle->claimed_interfaces & (1 << i)) + darwin_claim_interface (dev_handle, i); + + dpriv->active_config = config; + + return 0; +} + +static int darwin_get_interface (usb_device_t **darwin_device, uint8_t ifc, io_service_t *usbInterfacep) { + IOUSBFindInterfaceRequest request; + uint8_t current_interface; + kern_return_t kresult; + io_iterator_t interface_iterator; + + *usbInterfacep = IO_OBJECT_NULL; + + /* Setup the Interface Request */ + request.bInterfaceClass = kIOUSBFindInterfaceDontCare; + request.bInterfaceSubClass = kIOUSBFindInterfaceDontCare; + request.bInterfaceProtocol = kIOUSBFindInterfaceDontCare; + request.bAlternateSetting = kIOUSBFindInterfaceDontCare; + + kresult = (*(darwin_device))->CreateInterfaceIterator(darwin_device, &request, &interface_iterator); + if (kresult) + return kresult; + + for ( current_interface = 0 ; current_interface <= ifc ; current_interface++ ) { + *usbInterfacep = IOIteratorNext(interface_iterator); + if (current_interface != ifc) + (void) IOObjectRelease (*usbInterfacep); + } + + /* done with the interface iterator */ + IOObjectRelease(interface_iterator); + + return 0; +} + +static int get_endpoints (struct libusb_device_handle *dev_handle, int iface) { + struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)dev_handle->os_priv; + + /* current interface */ + struct darwin_interface *cInterface = &priv->interfaces[iface]; + + kern_return_t kresult; + + u_int8_t numep, direction, number; + u_int8_t dont_care1, dont_care3; + u_int16_t dont_care2; + int i; + + usbi_info (HANDLE_CTX (dev_handle), "building table of endpoints."); + + /* retrieve the total number of endpoints on this interface */ + kresult = (*(cInterface->interface))->GetNumEndpoints(cInterface->interface, &numep); + if (kresult) { + usbi_err (HANDLE_CTX (dev_handle), "can't get number of endpoints for interface: %s", darwin_error_str(kresult)); + return darwin_to_libusb (kresult); + } + + /* iterate through pipe references */ + for (i = 1 ; i <= numep ; i++) { + kresult = (*(cInterface->interface))->GetPipeProperties(cInterface->interface, i, &direction, &number, &dont_care1, + &dont_care2, &dont_care3); + + if (kresult != kIOReturnSuccess) { + usbi_err (HANDLE_CTX (dev_handle), "error getting pipe information for pipe %d: %s", i, darwin_error_str(kresult)); + + return darwin_to_libusb (kresult); + } + + usbi_info (HANDLE_CTX (dev_handle), "interface: %i pipe %i: dir: %i number: %i", iface, i, direction, number); + + cInterface->endpoint_addrs[i - 1] = ((direction << 7 & LIBUSB_ENDPOINT_DIR_MASK) | (number & LIBUSB_ENDPOINT_ADDRESS_MASK)); + } + + cInterface->num_endpoints = numep; + + return 0; +} + +static int darwin_claim_interface(struct libusb_device_handle *dev_handle, int iface) { + struct darwin_device_priv *dpriv = (struct darwin_device_priv *)dev_handle->dev->os_priv; + struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)dev_handle->os_priv; + io_service_t usbInterface = IO_OBJECT_NULL; + IOReturn kresult; + IOCFPlugInInterface **plugInInterface = NULL; + SInt32 score; + + /* current interface */ + struct darwin_interface *cInterface = &priv->interfaces[iface]; + + kresult = darwin_get_interface (dpriv->device, iface, &usbInterface); + if (kresult != kIOReturnSuccess) + return darwin_to_libusb (kresult); + + /* make sure we have an interface */ + if (!usbInterface && dpriv->first_config != 0) { + usbi_info (HANDLE_CTX (dev_handle), "no interface found; setting configuration: %d", dpriv->first_config); + + /* set the configuration */ + kresult = darwin_set_configuration (dev_handle, dpriv->first_config); + if (kresult != LIBUSB_SUCCESS) { + usbi_err (HANDLE_CTX (dev_handle), "could not set configuration"); + return kresult; + } + + kresult = darwin_get_interface (dpriv->device, iface, &usbInterface); + if (kresult) { + usbi_err (HANDLE_CTX (dev_handle), "darwin_get_interface: %s", darwin_error_str(kresult)); + return darwin_to_libusb (kresult); + } + } + + if (!usbInterface) { + usbi_err (HANDLE_CTX (dev_handle), "interface not found"); + return LIBUSB_ERROR_NOT_FOUND; + } + + /* get an interface to the device's interface */ + kresult = IOCreatePlugInInterfaceForService (usbInterface, kIOUSBInterfaceUserClientTypeID, + kIOCFPlugInInterfaceID, &plugInInterface, &score); + + /* ignore release error */ + (void)IOObjectRelease (usbInterface); + + if (kresult) { + usbi_err (HANDLE_CTX (dev_handle), "IOCreatePlugInInterfaceForService: %s", darwin_error_str(kresult)); + return darwin_to_libusb (kresult); + } + + if (!plugInInterface) { + usbi_err (HANDLE_CTX (dev_handle), "plugin interface not found"); + return LIBUSB_ERROR_NOT_FOUND; + } + + /* Do the actual claim */ + kresult = (*plugInInterface)->QueryInterface(plugInInterface, + CFUUIDGetUUIDBytes(kIOUSBInterfaceInterfaceID), + (LPVOID)&cInterface->interface); + /* We no longer need the intermediate plug-in */ + IODestroyPlugInInterface (plugInInterface); + if (kresult || !cInterface->interface) { + usbi_err (HANDLE_CTX (dev_handle), "QueryInterface: %s", darwin_error_str(kresult)); + return darwin_to_libusb (kresult); + } + + /* claim the interface */ + kresult = (*(cInterface->interface))->USBInterfaceOpen(cInterface->interface); + if (kresult) { + usbi_err (HANDLE_CTX (dev_handle), "USBInterfaceOpen: %s", darwin_error_str(kresult)); + return darwin_to_libusb (kresult); + } + + /* update list of endpoints */ + kresult = get_endpoints (dev_handle, iface); + if (kresult) { + /* this should not happen */ + darwin_release_interface (dev_handle, iface); + usbi_err (HANDLE_CTX (dev_handle), "could not build endpoint table"); + return kresult; + } + + cInterface->cfSource = NULL; + + /* create async event source */ + kresult = (*(cInterface->interface))->CreateInterfaceAsyncEventSource (cInterface->interface, &cInterface->cfSource); + if (kresult != kIOReturnSuccess) { + usbi_err (HANDLE_CTX (dev_handle), "could not create async event source"); + + /* can't continue without an async event source */ + (void)darwin_release_interface (dev_handle, iface); + + return darwin_to_libusb (kresult); + } + + /* add the cfSource to the async thread's run loop */ + CFRunLoopAddSource(libusb_darwin_acfl, cInterface->cfSource, kCFRunLoopDefaultMode); + + usbi_info (HANDLE_CTX (dev_handle), "interface opened"); + + return 0; +} + +static int darwin_release_interface(struct libusb_device_handle *dev_handle, int iface) { + struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)dev_handle->os_priv; + IOReturn kresult; + + /* current interface */ + struct darwin_interface *cInterface = &priv->interfaces[iface]; + + /* Check to see if an interface is open */ + if (!cInterface->interface) + return LIBUSB_SUCCESS; + + /* clean up endpoint data */ + cInterface->num_endpoints = 0; + + /* delete the interface's async event source */ + if (cInterface->cfSource) { + CFRunLoopRemoveSource (libusb_darwin_acfl, cInterface->cfSource, kCFRunLoopDefaultMode); + CFRelease (cInterface->cfSource); + } + + kresult = (*(cInterface->interface))->USBInterfaceClose(cInterface->interface); + if (kresult) + usbi_err (HANDLE_CTX (dev_handle), "USBInterfaceClose: %s", darwin_error_str(kresult)); + + kresult = (*(cInterface->interface))->Release(cInterface->interface); + if (kresult != kIOReturnSuccess) + usbi_err (HANDLE_CTX (dev_handle), "Release: %s", darwin_error_str(kresult)); + + cInterface->interface = IO_OBJECT_NULL; + + return darwin_to_libusb (kresult); +} + +static int darwin_set_interface_altsetting(struct libusb_device_handle *dev_handle, int iface, int altsetting) { + struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)dev_handle->os_priv; + IOReturn kresult; + + /* current interface */ + struct darwin_interface *cInterface = &priv->interfaces[iface]; + + if (!cInterface->interface) + return LIBUSB_ERROR_NO_DEVICE; + + kresult = (*(cInterface->interface))->SetAlternateInterface (cInterface->interface, altsetting); + if (kresult != kIOReturnSuccess) + darwin_reset_device (dev_handle); + + /* update list of endpoints */ + kresult = get_endpoints (dev_handle, iface); + if (kresult) { + /* this should not happen */ + darwin_release_interface (dev_handle, iface); + usbi_err (HANDLE_CTX (dev_handle), "could not build endpoint table"); + return kresult; + } + + return darwin_to_libusb (kresult); +} + +static int darwin_clear_halt(struct libusb_device_handle *dev_handle, unsigned char endpoint) { + struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)dev_handle->os_priv; + + /* current interface */ + struct darwin_interface *cInterface; + uint8_t pipeRef, iface; + IOReturn kresult; + + /* determine the interface/endpoint to use */ + if (ep_to_pipeRef (dev_handle, endpoint, &pipeRef, &iface) != 0) { + usbi_err (HANDLE_CTX (dev_handle), "endpoint not found on any open interface"); + + return LIBUSB_ERROR_NOT_FOUND; + } + + cInterface = &priv->interfaces[iface]; + +#if (InterfaceVersion < 190) + kresult = (*(cInterface->interface))->ClearPipeStall(cInterface->interface, pipeRef); +#else + /* newer versions of darwin support clearing additional bits on the device's endpoint */ + kresult = (*(cInterface->interface))->ClearPipeStallBothEnds(cInterface->interface, pipeRef); +#endif + if (kresult) + usbi_err (HANDLE_CTX (dev_handle), "ClearPipeStall: %s", darwin_error_str (kresult)); + + return darwin_to_libusb (kresult); +} + +static int darwin_reset_device(struct libusb_device_handle *dev_handle) { + struct darwin_device_priv *dpriv = (struct darwin_device_priv *)dev_handle->dev->os_priv; + IOReturn kresult; + + kresult = (*(dpriv->device))->ResetDevice (dpriv->device); + if (kresult) + usbi_err (HANDLE_CTX (dev_handle), "ResetDevice: %s", darwin_error_str (kresult)); + + return darwin_to_libusb (kresult); +} + +static int darwin_kernel_driver_active(struct libusb_device_handle *dev_handle, int interface) { + struct darwin_device_priv *dpriv = (struct darwin_device_priv *)dev_handle->dev->os_priv; + io_service_t usbInterface; + CFTypeRef driver; + IOReturn kresult; + + kresult = darwin_get_interface (dpriv->device, interface, &usbInterface); + if (kresult) { + usbi_err (HANDLE_CTX (dev_handle), "darwin_get_interface: %s", darwin_error_str(kresult)); + + return darwin_to_libusb (kresult); + } + + driver = IORegistryEntryCreateCFProperty (usbInterface, kIOBundleIdentifierKey, kCFAllocatorDefault, 0); + IOObjectRelease (usbInterface); + + if (driver) { + CFRelease (driver); + + return 1; + } + + /* no driver */ + return 0; +} + +/* attaching/detaching kernel drivers is not currently supported (maybe in the future?) */ +static int darwin_attach_kernel_driver (struct libusb_device_handle *dev_handle, int interface) { + (void)dev_handle; + (void)interface; + return LIBUSB_ERROR_NOT_SUPPORTED; +} + +static int darwin_detach_kernel_driver (struct libusb_device_handle *dev_handle, int interface) { + (void)dev_handle; + (void)interface; + return LIBUSB_ERROR_NOT_SUPPORTED; +} + +static void darwin_destroy_device(struct libusb_device *dev) { + (void)dev; +} + +static int submit_bulk_transfer(struct usbi_transfer *itransfer) { + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)transfer->dev_handle->os_priv; + + IOReturn ret; + uint8_t transferType; + /* None of the values below are used in libusb for bulk transfers */ + uint8_t direction, number, interval, pipeRef, iface; + uint16_t maxPacketSize; + + struct darwin_interface *cInterface; + + if (IS_XFEROUT(transfer) && transfer->flags & LIBUSB_TRANSFER_ADD_ZERO_PACKET) + return LIBUSB_ERROR_NOT_SUPPORTED; + + if (ep_to_pipeRef (transfer->dev_handle, transfer->endpoint, &pipeRef, &iface) != 0) { + usbi_err (TRANSFER_CTX (transfer), "endpoint not found on any open interface"); + + return LIBUSB_ERROR_NOT_FOUND; + } + + cInterface = &priv->interfaces[iface]; + + (*(cInterface->interface))->GetPipeProperties (cInterface->interface, pipeRef, &direction, &number, + &transferType, &maxPacketSize, &interval); + + /* submit the request */ + /* timeouts are unavailable on interrupt endpoints */ + if (transferType == kUSBInterrupt) { + if (IS_XFERIN(transfer)) + ret = (*(cInterface->interface))->ReadPipeAsync(cInterface->interface, pipeRef, transfer->buffer, + transfer->length, darwin_async_io_callback, itransfer); + else + ret = (*(cInterface->interface))->WritePipeAsync(cInterface->interface, pipeRef, transfer->buffer, + transfer->length, darwin_async_io_callback, itransfer); + } else { + itransfer->flags |= USBI_TRANSFER_OS_HANDLES_TIMEOUT; + + if (IS_XFERIN(transfer)) + ret = (*(cInterface->interface))->ReadPipeAsyncTO(cInterface->interface, pipeRef, transfer->buffer, + transfer->length, transfer->timeout, transfer->timeout, + darwin_async_io_callback, (void *)itransfer); + else + ret = (*(cInterface->interface))->WritePipeAsyncTO(cInterface->interface, pipeRef, transfer->buffer, + transfer->length, transfer->timeout, transfer->timeout, + darwin_async_io_callback, (void *)itransfer); + } + + if (ret) + usbi_err (TRANSFER_CTX (transfer), "bulk transfer failed (dir = %s): %s (code = 0x%08x)", IS_XFERIN(transfer) ? "In" : "Out", + darwin_error_str(ret), ret); + + return darwin_to_libusb (ret); +} + +static int submit_iso_transfer(struct usbi_transfer *itransfer) { + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct darwin_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer); + struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)transfer->dev_handle->os_priv; + + IOReturn kresult; + uint8_t pipeRef, iface; + UInt64 frame; + AbsoluteTime atTime; + int i; + + struct darwin_interface *cInterface; + + /* construct an array of IOUSBIsocFrames, reuse the old one if possible */ + if (tpriv->isoc_framelist && tpriv->num_iso_packets != transfer->num_iso_packets) { + free(tpriv->isoc_framelist); + tpriv->isoc_framelist = NULL; + } + + if (!tpriv->isoc_framelist) { + tpriv->num_iso_packets = transfer->num_iso_packets; + tpriv->isoc_framelist = (IOUSBIsocFrame*) calloc (transfer->num_iso_packets, sizeof(IOUSBIsocFrame)); + if (!tpriv->isoc_framelist) + return LIBUSB_ERROR_NO_MEM; + } + + /* copy the frame list from the libusb descriptor (the structures differ only is member order) */ + for (i = 0 ; i < transfer->num_iso_packets ; i++) + tpriv->isoc_framelist[i].frReqCount = transfer->iso_packet_desc[i].length; + + /* determine the interface/endpoint to use */ + if (ep_to_pipeRef (transfer->dev_handle, transfer->endpoint, &pipeRef, &iface) != 0) { + usbi_err (TRANSFER_CTX (transfer), "endpoint not found on any open interface"); + + return LIBUSB_ERROR_NOT_FOUND; + } + + cInterface = &priv->interfaces[iface]; + + /* Last but not least we need the bus frame number */ + kresult = (*(cInterface->interface))->GetBusFrameNumber(cInterface->interface, &frame, &atTime); + if (kresult) { + usbi_err (TRANSFER_CTX (transfer), "failed to get bus frame number: %d", kresult); + free(tpriv->isoc_framelist); + tpriv->isoc_framelist = NULL; + + return darwin_to_libusb (kresult); + } + + /* schedule for a frame a little in the future */ + frame += 4; + + if (cInterface->frames[transfer->endpoint] && frame < cInterface->frames[transfer->endpoint]) + frame = cInterface->frames[transfer->endpoint]; + + /* submit the request */ + if (IS_XFERIN(transfer)) + kresult = (*(cInterface->interface))->ReadIsochPipeAsync(cInterface->interface, pipeRef, transfer->buffer, frame, + transfer->num_iso_packets, tpriv->isoc_framelist, darwin_async_io_callback, + itransfer); + else + kresult = (*(cInterface->interface))->WriteIsochPipeAsync(cInterface->interface, pipeRef, transfer->buffer, frame, + transfer->num_iso_packets, tpriv->isoc_framelist, darwin_async_io_callback, + itransfer); + + cInterface->frames[transfer->endpoint] = frame + transfer->num_iso_packets / 8; + + if (kresult != kIOReturnSuccess) { + usbi_err (TRANSFER_CTX (transfer), "isochronous transfer failed (dir: %s): %s", IS_XFERIN(transfer) ? "In" : "Out", + darwin_error_str(kresult)); + free (tpriv->isoc_framelist); + tpriv->isoc_framelist = NULL; + } + + return darwin_to_libusb (kresult); +} + +static int submit_control_transfer(struct usbi_transfer *itransfer) { + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_control_setup *setup = (struct libusb_control_setup *) transfer->buffer; + struct darwin_device_priv *dpriv = (struct darwin_device_priv *)transfer->dev_handle->dev->os_priv; + struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)transfer->dev_handle->os_priv; + struct darwin_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer); + + IOReturn kresult; + + bzero(&tpriv->req, sizeof(tpriv->req)); + + /* IOUSBDeviceInterface expects the request in cpu endianess */ + tpriv->req.bmRequestType = setup->bmRequestType; + tpriv->req.bRequest = setup->bRequest; + /* these values should be in bus order from libusb_fill_control_setup */ + tpriv->req.wValue = OSSwapLittleToHostInt16 (setup->wValue); + tpriv->req.wIndex = OSSwapLittleToHostInt16 (setup->wIndex); + tpriv->req.wLength = OSSwapLittleToHostInt16 (setup->wLength); + /* data is stored after the libusb control block */ + tpriv->req.pData = transfer->buffer + LIBUSB_CONTROL_SETUP_SIZE; + tpriv->req.completionTimeout = transfer->timeout; + tpriv->req.noDataTimeout = transfer->timeout; + + itransfer->flags |= USBI_TRANSFER_OS_HANDLES_TIMEOUT; + + /* all transfers in libusb-1.0 are async */ + + if (transfer->endpoint) { + struct darwin_interface *cInterface; + uint8_t pipeRef, iface; + + if (ep_to_pipeRef (transfer->dev_handle, transfer->endpoint, &pipeRef, &iface) != 0) { + usbi_err (TRANSFER_CTX (transfer), "endpoint not found on any open interface"); + + return LIBUSB_ERROR_NOT_FOUND; + } + + cInterface = &priv->interfaces[iface]; + + kresult = (*(cInterface->interface))->ControlRequestAsyncTO (cInterface->interface, pipeRef, &(tpriv->req), darwin_async_io_callback, itransfer); + } else + /* control request on endpoint 0 */ + kresult = (*(dpriv->device))->DeviceRequestAsyncTO(dpriv->device, &(tpriv->req), darwin_async_io_callback, itransfer); + + if (kresult != kIOReturnSuccess) + usbi_err (TRANSFER_CTX (transfer), "control request failed: %s", darwin_error_str(kresult)); + + return darwin_to_libusb (kresult); +} + +static int darwin_submit_transfer(struct usbi_transfer *itransfer) { + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + + switch (transfer->type) { + case LIBUSB_TRANSFER_TYPE_CONTROL: + return submit_control_transfer(itransfer); + case LIBUSB_TRANSFER_TYPE_BULK: + case LIBUSB_TRANSFER_TYPE_INTERRUPT: + return submit_bulk_transfer(itransfer); + case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: + return submit_iso_transfer(itransfer); + default: + usbi_err (TRANSFER_CTX(transfer), "unknown endpoint type %d", transfer->type); + return LIBUSB_ERROR_INVALID_PARAM; + } +} + +static int cancel_control_transfer(struct usbi_transfer *itransfer) { + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct darwin_device_priv *dpriv = (struct darwin_device_priv *)transfer->dev_handle->dev->os_priv; + IOReturn kresult; + + usbi_info (ITRANSFER_CTX (itransfer), "WARNING: aborting all transactions control pipe"); + + if (!dpriv->device) + return LIBUSB_ERROR_NO_DEVICE; + + kresult = (*(dpriv->device))->USBDeviceAbortPipeZero (dpriv->device); + + return darwin_to_libusb (kresult); +} + +static int darwin_abort_transfers (struct usbi_transfer *itransfer) { + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct darwin_device_priv *dpriv = (struct darwin_device_priv *)transfer->dev_handle->dev->os_priv; + struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)transfer->dev_handle->os_priv; + struct darwin_interface *cInterface; + uint8_t pipeRef, iface; + IOReturn kresult; + + if (ep_to_pipeRef (transfer->dev_handle, transfer->endpoint, &pipeRef, &iface) != 0) { + usbi_err (TRANSFER_CTX (transfer), "endpoint not found on any open interface"); + + return LIBUSB_ERROR_NOT_FOUND; + } + + cInterface = &priv->interfaces[iface]; + + if (!dpriv->device) + return LIBUSB_ERROR_NO_DEVICE; + + usbi_info (ITRANSFER_CTX (itransfer), "WARNING: aborting all transactions on interface %d pipe %d", iface, pipeRef); + + /* abort transactions */ + (*(cInterface->interface))->AbortPipe (cInterface->interface, pipeRef); + + usbi_info (ITRANSFER_CTX (itransfer), "calling clear pipe stall to clear the data toggle bit"); + + /* clear the data toggle bit */ +#if (InterfaceVersion < 190) + kresult = (*(cInterface->interface))->ClearPipeStall(cInterface->interface, pipeRef); +#else + /* newer versions of darwin support clearing additional bits on the device's endpoint */ + kresult = (*(cInterface->interface))->ClearPipeStallBothEnds(cInterface->interface, pipeRef); +#endif + + return darwin_to_libusb (kresult); +} + +static int darwin_cancel_transfer(struct usbi_transfer *itransfer) { + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + + switch (transfer->type) { + case LIBUSB_TRANSFER_TYPE_CONTROL: + return cancel_control_transfer(itransfer); + case LIBUSB_TRANSFER_TYPE_BULK: + case LIBUSB_TRANSFER_TYPE_INTERRUPT: + case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: + return darwin_abort_transfers (itransfer); + default: + usbi_err (TRANSFER_CTX(transfer), "unknown endpoint type %d", transfer->type); + return LIBUSB_ERROR_INVALID_PARAM; + } +} + +static void darwin_clear_transfer_priv (struct usbi_transfer *itransfer) { + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct darwin_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer); + + if (transfer->type == LIBUSB_TRANSFER_TYPE_ISOCHRONOUS && tpriv->isoc_framelist) { + free (tpriv->isoc_framelist); + tpriv->isoc_framelist = NULL; + } +} + +static void darwin_async_io_callback (void *refcon, IOReturn result, void *arg0) { + struct usbi_transfer *itransfer = (struct usbi_transfer *)refcon; + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct darwin_device_handle_priv *priv = (struct darwin_device_handle_priv *)transfer->dev_handle->os_priv; + UInt32 message, size; + + usbi_info (ITRANSFER_CTX (itransfer), "an async io operation has completed"); + + size = (UInt32) (uintptr_t) arg0; + + /* send a completion message to the device's file descriptor */ + message = MESSAGE_ASYNC_IO_COMPLETE; + write (priv->fds[1], &message, sizeof (message)); + write (priv->fds[1], &itransfer, sizeof (itransfer)); + write (priv->fds[1], &result, sizeof (IOReturn)); + write (priv->fds[1], &size, sizeof (size)); +} + +static int darwin_transfer_status (struct usbi_transfer *itransfer, kern_return_t result) { + if (itransfer->flags & USBI_TRANSFER_TIMED_OUT) + result = kIOUSBTransactionTimeout; + + switch (result) { + case kIOReturnUnderrun: + case kIOReturnSuccess: + return LIBUSB_TRANSFER_COMPLETED; + case kIOReturnAborted: + return LIBUSB_TRANSFER_CANCELLED; + case kIOUSBPipeStalled: + usbi_warn (ITRANSFER_CTX (itransfer), "transfer error: pipe is stalled"); + return LIBUSB_TRANSFER_STALL; + case kIOReturnOverrun: + usbi_err (ITRANSFER_CTX (itransfer), "transfer error: data overrun"); + return LIBUSB_TRANSFER_OVERFLOW; + case kIOUSBTransactionTimeout: + usbi_err (ITRANSFER_CTX (itransfer), "transfer error: timed out"); + itransfer->flags |= USBI_TRANSFER_TIMED_OUT; + return LIBUSB_TRANSFER_TIMED_OUT; + default: + usbi_err (ITRANSFER_CTX (itransfer), "transfer error: %s (value = 0x%08x)", darwin_error_str (result), result); + return LIBUSB_TRANSFER_ERROR; + } +} + +static void darwin_handle_callback (struct usbi_transfer *itransfer, kern_return_t result, UInt32 io_size) { + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct darwin_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer); + int isIsoc = LIBUSB_TRANSFER_TYPE_ISOCHRONOUS == transfer->type; + int isBulk = LIBUSB_TRANSFER_TYPE_BULK == transfer->type; + int isControl = LIBUSB_TRANSFER_TYPE_CONTROL == transfer->type; + int isInterrupt = LIBUSB_TRANSFER_TYPE_INTERRUPT == transfer->type; + int i; + + if (!isIsoc && !isBulk && !isControl && !isInterrupt) { + usbi_err (TRANSFER_CTX(transfer), "unknown endpoint type %d", transfer->type); + return; + } + + usbi_info (ITRANSFER_CTX (itransfer), "handling %s completion with kernel status %d", + isControl ? "control" : isBulk ? "bulk" : isIsoc ? "isoc" : "interrupt", result); + + if (kIOReturnSuccess == result || kIOReturnUnderrun == result) { + if (isIsoc && tpriv->isoc_framelist) { + /* copy isochronous results back */ + + for (i = 0; i < transfer->num_iso_packets ; i++) { + struct libusb_iso_packet_descriptor *lib_desc = &transfer->iso_packet_desc[i]; + lib_desc->status = darwin_to_libusb (tpriv->isoc_framelist[i].frStatus); + lib_desc->actual_length = tpriv->isoc_framelist[i].frActCount; + } + } else if (!isIsoc) + itransfer->transferred += io_size; + } + + /* it is ok to handle cancelled transfers without calling usbi_handle_transfer_cancellation (we catch timeout transfers) */ + usbi_handle_transfer_completion (itransfer, darwin_transfer_status (itransfer, result)); +} + +static int op_handle_events(struct libusb_context *ctx, struct pollfd *fds, POLL_NFDS_TYPE nfds, int num_ready) { + struct usbi_transfer *itransfer; + UInt32 io_size; + IOReturn kresult; + POLL_NFDS_TYPE i = 0; + ssize_t ret; + UInt32 message; + + usbi_mutex_lock(&ctx->open_devs_lock); + for (i = 0; i < nfds && num_ready > 0; i++) { + struct pollfd *pollfd = &fds[i]; + struct libusb_device_handle *handle; + struct darwin_device_handle_priv *hpriv = NULL; + + usbi_info (ctx, "checking fd %i with revents = %x", fds[i], pollfd->revents); + + if (!pollfd->revents) + continue; + + num_ready--; + list_for_each_entry(handle, &ctx->open_devs, list, struct libusb_device_handle) { + hpriv = (struct darwin_device_handle_priv *)handle->os_priv; + if (hpriv->fds[0] == pollfd->fd) + break; + } + + if (!(pollfd->revents & POLLERR)) { + ret = read (hpriv->fds[0], &message, sizeof (message)); + if (ret < (ssize_t)sizeof (message)) + continue; + } else + /* could not poll the device-- response is to delete the device (this seems a little heavy-handed) */ + message = MESSAGE_DEVICE_GONE; + + switch (message) { + case MESSAGE_DEVICE_GONE: + /* remove the device's async port from the runloop */ + if (hpriv->cfSource) { + if (libusb_darwin_acfl) + CFRunLoopRemoveSource (libusb_darwin_acfl, hpriv->cfSource, kCFRunLoopDefaultMode); + CFRelease (hpriv->cfSource); + hpriv->cfSource = NULL; + } + + usbi_remove_pollfd(HANDLE_CTX(handle), hpriv->fds[0]); + usbi_handle_disconnect(handle); + + /* done with this device */ + continue; + case MESSAGE_ASYNC_IO_COMPLETE: + read (hpriv->fds[0], &itransfer, sizeof (itransfer)); + read (hpriv->fds[0], &kresult, sizeof (IOReturn)); + read (hpriv->fds[0], &io_size, sizeof (UInt32)); + + darwin_handle_callback (itransfer, kresult, io_size); + break; + default: + usbi_err (ctx, "unknown message received from device pipe"); + } + } + + usbi_mutex_unlock(&ctx->open_devs_lock); + + return 0; +} + +static int darwin_clock_gettime(int clk_id, struct timespec *tp) { + mach_timespec_t sys_time; + clock_serv_t clock_ref; + + switch (clk_id) { + case USBI_CLOCK_REALTIME: + /* CLOCK_REALTIME represents time since the epoch */ + clock_ref = clock_realtime; + break; + case USBI_CLOCK_MONOTONIC: + /* use system boot time as reference for the monotonic clock */ + clock_ref = clock_monotonic; + break; + default: + return LIBUSB_ERROR_INVALID_PARAM; + } + + clock_get_time (clock_ref, &sys_time); + + tp->tv_sec = sys_time.tv_sec; + tp->tv_nsec = sys_time.tv_nsec; + + return 0; +} + +const struct usbi_os_backend darwin_backend = { + .name = "Darwin", + .init = darwin_init, + .exit = darwin_exit, + .get_device_list = darwin_get_device_list, + .get_device_descriptor = darwin_get_device_descriptor, + .get_active_config_descriptor = darwin_get_active_config_descriptor, + .get_config_descriptor = darwin_get_config_descriptor, + + .open = darwin_open, + .close = darwin_close, + .get_configuration = darwin_get_configuration, + .set_configuration = darwin_set_configuration, + .claim_interface = darwin_claim_interface, + .release_interface = darwin_release_interface, + + .set_interface_altsetting = darwin_set_interface_altsetting, + .clear_halt = darwin_clear_halt, + .reset_device = darwin_reset_device, + + .kernel_driver_active = darwin_kernel_driver_active, + .detach_kernel_driver = darwin_detach_kernel_driver, + .attach_kernel_driver = darwin_attach_kernel_driver, + + .destroy_device = darwin_destroy_device, + + .submit_transfer = darwin_submit_transfer, + .cancel_transfer = darwin_cancel_transfer, + .clear_transfer_priv = darwin_clear_transfer_priv, + + .handle_events = op_handle_events, + + .clock_gettime = darwin_clock_gettime, + + .device_priv_size = sizeof(struct darwin_device_priv), + .device_handle_priv_size = sizeof(struct darwin_device_handle_priv), + .transfer_priv_size = sizeof(struct darwin_transfer_priv), + .add_iso_packet_size = 0, +}; + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/darwin_usb.h b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/darwin_usb.h new file mode 100644 index 0000000..59d0a69 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/darwin_usb.h @@ -0,0 +1,169 @@ +/* + * darwin backend for libusb 1.0 + * Copyright (C) 2008-2009 Nathan Hjelm + * + * 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 + */ + +#if !defined(LIBUSB_DARWIN_H) +#define LIBUSB_DARWIN_H + +#include "libusbi.h" + +#include +#include +#include +#include + +/* IOUSBInterfaceInferface */ +#if defined (kIOUSBInterfaceInterfaceID300) + +#define usb_interface_t IOUSBInterfaceInterface300 +#define InterfaceInterfaceID kIOUSBInterfaceInterfaceID300 +#define InterfaceVersion 300 + +#elif defined (kIOUSBInterfaceInterfaceID245) + +#define usb_interface_t IOUSBInterfaceInterface245 +#define InterfaceInterfaceID kIOUSBInterfaceInterfaceID245 +#define InterfaceVersion 245 + +#elif defined (kIOUSBInterfaceInterfaceID220) + +#define usb_interface_t IOUSBInterfaceInterface220 +#define InterfaceInterfaceID kIOUSBInterfaceInterfaceID220 +#define InterfaceVersion 220 + +#elif defined (kIOUSBInterfaceInterfaceID197) + +#define usb_interface_t IOUSBInterfaceInterface197 +#define InterfaceInterfaceID kIOUSBInterfaceInterfaceID197 +#define InterfaceVersion 197 + +#elif defined (kIOUSBInterfaceInterfaceID190) + +#define usb_interface_t IOUSBInterfaceInterface190 +#define InterfaceInterfaceID kIOUSBInterfaceInterfaceID190 +#define InterfaceVersion 190 + +#elif defined (kIOUSBInterfaceInterfaceID182) + +#define usb_interface_t IOUSBInterfaceInterface182 +#define InterfaceInterfaceID kIOUSBInterfaceInterfaceID182 +#define InterfaceVersion 182 + +#else + +#error "IOUSBFamily is too old. Please upgrade your OS" + +#endif + +/* IOUSBDeviceInterface */ +#if defined (kIOUSBDeviceInterfaceID320) + +#define usb_device_t IOUSBDeviceInterface320 +#define DeviceInterfaceID kIOUSBDeviceInterfaceID320 +#define DeviceVersion 320 + +#elif defined (kIOUSBDeviceInterfaceID300) + +#define usb_device_t IOUSBDeviceInterface300 +#define DeviceInterfaceID kIOUSBDeviceInterfaceID300 +#define DeviceVersion 300 + +#elif defined (kIOUSBDeviceInterfaceID245) + +#define usb_device_t IOUSBDeviceInterface245 +#define DeviceInterfaceID kIOUSBDeviceInterfaceID245 +#define DeviceVersion 245 + +#elif defined (kIOUSBDeviceInterfaceID197) + +#define usb_device_t IOUSBDeviceInterface197 +#define DeviceInterfaceID kIOUSBDeviceInterfaceID197 +#define DeviceVersion 197 + +#elif defined (kIOUSBDeviceInterfaceID187) + +#define usb_device_t IOUSBDeviceInterface187 +#define DeviceInterfaceID kIOUSBDeviceInterfaceID187 +#define DeviceVersion 187 + +#elif defined (kIOUSBDeviceInterfaceID182) + +#define usb_device_t IOUSBDeviceInterface182 +#define DeviceInterfaceID kIOUSBDeviceInterfaceID182 +#define DeviceVersion 182 + +#else + +#error "IOUSBFamily is too old. Please upgrade your OS" + +#endif + +#if !defined(IO_OBJECT_NULL) +#define IO_OBJECT_NULL ((io_object_t) 0) +#endif + +typedef IOCFPlugInInterface *io_cf_plugin_ref_t; +typedef IONotificationPortRef io_notification_port_t; + +/* private structures */ +struct darwin_device_priv { + IOUSBDeviceDescriptor dev_descriptor; + UInt32 location; + char sys_path[21]; + usb_device_t **device; + int open_count; + UInt8 first_config, active_config; +}; + +struct darwin_device_handle_priv { + int is_open; + CFRunLoopSourceRef cfSource; + int fds[2]; + + struct darwin_interface { + usb_interface_t **interface; + uint8_t num_endpoints; + CFRunLoopSourceRef cfSource; + uint64_t frames[256]; + uint8_t endpoint_addrs[USB_MAXENDPOINTS]; + } interfaces[USB_MAXINTERFACES]; +}; + +struct darwin_transfer_priv { + /* Isoc */ + IOUSBIsocFrame *isoc_framelist; + size_t num_iso_packets; + + /* Control */ +#if !defined (LIBUSB_NO_TIMEOUT_DEVICE) + IOUSBDevRequestTO req; +#else + IOUSBDevRequest req; +#endif + + /* Bulk */ +}; + +enum { + MESSAGE_DEVICE_GONE, + MESSAGE_ASYNC_IO_COMPLETE +}; + + + +#endif diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/linux_usbfs.c b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/linux_usbfs.c new file mode 100644 index 0000000..02d182d --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/linux_usbfs.c @@ -0,0 +1,2438 @@ +/* + * Linux usbfs backend for libusb + * Copyright (C) 2007-2009 Daniel Drake + * Copyright (c) 2001 Johannes Erdfelt + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "libusb.h" +#include "libusbi.h" +#include "linux_usbfs.h" + +/* sysfs vs usbfs: + * opening a usbfs node causes the device to be resumed, so we attempt to + * avoid this during enumeration. + * + * sysfs allows us to read the kernel's in-memory copies of device descriptors + * and so forth, avoiding the need to open the device: + * - The binary "descriptors" file was added in 2.6.23. + * - The "busnum" file was added in 2.6.22 + * - The "devnum" file has been present since pre-2.6.18 + * - the "bConfigurationValue" file has been present since pre-2.6.18 + * + * If we have bConfigurationValue, busnum, and devnum, then we can determine + * the active configuration without having to open the usbfs node in RDWR mode. + * We assume this is the case if we see the busnum file (indicates 2.6.22+). + * The busnum file is important as that is the only way we can relate sysfs + * devices to usbfs nodes. + * + * If we also have descriptors, we can obtain the device descriptor and active + * configuration without touching usbfs at all. + * + * The descriptors file originally only contained the active configuration + * descriptor alongside the device descriptor, but all configurations are + * included as of Linux 2.6.26. + */ + +/* endianness for multi-byte fields: + * + * Descriptors exposed by usbfs have the multi-byte fields in the device + * descriptor as host endian. Multi-byte fields in the other descriptors are + * bus-endian. The kernel documentation says otherwise, but it is wrong. + */ + +static const char *usbfs_path = NULL; + +/* use usbdev*.* device names in /dev instead of the usbfs bus directories */ +static int usbdev_names = 0; + +/* Linux 2.6.32 adds support for a bulk continuation URB flag. this basically + * allows us to mark URBs as being part of a specific logical transfer when + * we submit them to the kernel. then, on any error except a cancellation, all + * URBs within that transfer will be cancelled and no more URBs will be + * accepted for the transfer, meaning that no more data can creep in. + * + * The BULK_CONTINUATION flag must be set on all URBs within a bulk transfer + * (in either direction) except the first. + * For IN transfers, we must also set SHORT_NOT_OK on all URBs except the + * last; it means that the kernel should treat a short reply as an error. + * For OUT transfers, SHORT_NOT_OK must not be set. it isn't needed (OUT + * transfers can't be short unless there's already some sort of error), and + * setting this flag is disallowed (a kernel with USB debugging enabled will + * reject such URBs). + */ +static int supports_flag_bulk_continuation = -1; + +/* Linux 2.6.31 fixes support for the zero length packet URB flag. This + * allows us to mark URBs that should be followed by a zero length data + * packet, which can be required by device- or class-specific protocols. + */ +static int supports_flag_zero_packet = -1; + +/* clock ID for monotonic clock, as not all clock sources are available on all + * systems. appropriate choice made at initialization time. */ +static clockid_t monotonic_clkid = -1; + +/* do we have a busnum to relate devices? this also implies that we can read + * the active configuration through bConfigurationValue */ +static int sysfs_can_relate_devices = 0; + +/* do we have a descriptors file? */ +static int sysfs_has_descriptors = 0; + +struct linux_device_priv { + char *sysfs_dir; + unsigned char *dev_descriptor; + unsigned char *config_descriptor; +}; + +struct linux_device_handle_priv { + int fd; +}; + +enum reap_action { + NORMAL = 0, + /* submission failed after the first URB, so await cancellation/completion + * of all the others */ + SUBMIT_FAILED, + + /* cancelled by user or timeout */ + CANCELLED, + + /* completed multi-URB transfer in non-final URB */ + COMPLETED_EARLY, + + /* one or more urbs encountered a low-level error */ + ERROR, +}; + +struct linux_transfer_priv { + union { + struct usbfs_urb *urbs; + struct usbfs_urb **iso_urbs; + }; + + enum reap_action reap_action; + int num_urbs; + unsigned int num_retired; + enum libusb_transfer_status reap_status; + + /* next iso packet in user-supplied transfer to be populated */ + int iso_packet_offset; +}; + +static void _get_usbfs_path(struct libusb_device *dev, char *path) +{ + if (usbdev_names) + snprintf(path, PATH_MAX, "%s/usbdev%d.%d", + usbfs_path, dev->bus_number, dev->device_address); + else + snprintf(path, PATH_MAX, "%s/%03d/%03d", + usbfs_path, dev->bus_number, dev->device_address); +} + +static struct linux_device_priv *_device_priv(struct libusb_device *dev) +{ + return (struct linux_device_priv *) dev->os_priv; +} + +static struct linux_device_handle_priv *_device_handle_priv( + struct libusb_device_handle *handle) +{ + return (struct linux_device_handle_priv *) handle->os_priv; +} + +/* check dirent for a /dev/usbdev%d.%d name + * optionally return bus/device on success */ +static int _is_usbdev_entry(struct dirent *entry, int *bus_p, int *dev_p) +{ + int busnum, devnum; + + if (sscanf(entry->d_name, "usbdev%d.%d", &busnum, &devnum) != 2) + return 0; + + usbi_dbg("found: %s", entry->d_name); + if (bus_p != NULL) + *bus_p = busnum; + if (dev_p != NULL) + *dev_p = devnum; + return 1; +} + +static int check_usb_vfs(const char *dirname) +{ + DIR *dir; + struct dirent *entry; + int found = 0; + + dir = opendir(dirname); + if (!dir) + return 0; + + while ((entry = readdir(dir)) != NULL) { + if (entry->d_name[0] == '.') + continue; + + /* We assume if we find any files that it must be the right place */ + found = 1; + break; + } + + closedir(dir); + return found; +} + +static const char *find_usbfs_path(void) +{ + const char *path = "/dev/bus/usb"; + const char *ret = NULL; + + if (check_usb_vfs(path)) { + ret = path; + } else { + path = "/proc/bus/usb"; + if (check_usb_vfs(path)) + ret = path; + } + + /* look for /dev/usbdev*.* if the normal places fail */ + if (ret == NULL) { + struct dirent *entry; + DIR *dir; + + path = "/dev"; + dir = opendir(path); + if (dir != NULL) { + while ((entry = readdir(dir)) != NULL) { + if (_is_usbdev_entry(entry, NULL, NULL)) { + /* found one; that's enough */ + ret = path; + usbdev_names = 1; + break; + } + } + closedir(dir); + } + } + + if (ret != NULL) + usbi_dbg("found usbfs at %s", ret); + + return ret; +} + +/* the monotonic clock is not usable on all systems (e.g. embedded ones often + * seem to lack it). fall back to REALTIME if we have to. */ +static clockid_t find_monotonic_clock(void) +{ +#ifdef CLOCK_MONOTONIC + struct timespec ts; + int r; + + /* Linux 2.6.28 adds CLOCK_MONOTONIC_RAW but we don't use it + * because it's not available through timerfd */ + r = clock_gettime(CLOCK_MONOTONIC, &ts); + if (r == 0) + return CLOCK_MONOTONIC; + usbi_dbg("monotonic clock doesn't work, errno %d", errno); +#endif + + return CLOCK_REALTIME; +} + +static int kernel_version_ge(int major, int minor, int sublevel) +{ + struct utsname uts; + int atoms, kmajor, kminor, ksublevel; + + if (uname(&uts) < 0) + return -1; + atoms = sscanf(uts.release, "%d.%d.%d", &kmajor, &kminor, &ksublevel); + if (atoms < 1) + return -1; + + if (kmajor > major) + return 1; + if (kmajor < major) + return 0; + + /* kmajor == major */ + if (atoms < 2) + return 0 == minor && 0 == sublevel; + if (kminor > minor) + return 1; + if (kminor < minor) + return 0; + + /* kminor == minor */ + if (atoms < 3) + return 0 == sublevel; + + return ksublevel >= sublevel; +} + +/* Return 1 if filename exists inside dirname in sysfs. + SYSFS_DEVICE_PATH is assumed to be the beginning of the path. */ +static int sysfs_has_file(const char *dirname, const char *filename) +{ + struct stat statbuf; + char path[PATH_MAX]; + int r; + + snprintf(path, PATH_MAX, "%s/%s/%s", SYSFS_DEVICE_PATH, dirname, filename); + r = stat(path, &statbuf); + if (r == 0 && S_ISREG(statbuf.st_mode)) + return 1; + + return 0; +} + +static int op_init(struct libusb_context *ctx) +{ + struct stat statbuf; + int r; + + usbfs_path = find_usbfs_path(); + if (!usbfs_path) { + usbi_err(ctx, "could not find usbfs"); + return LIBUSB_ERROR_OTHER; + } + + if (monotonic_clkid == -1) + monotonic_clkid = find_monotonic_clock(); + + if (supports_flag_bulk_continuation == -1) { + /* bulk continuation URB flag available from Linux 2.6.32 */ + supports_flag_bulk_continuation = kernel_version_ge(2,6,32); + if (supports_flag_bulk_continuation == -1) { + usbi_err(ctx, "error checking for bulk continuation support"); + return LIBUSB_ERROR_OTHER; + } + } + + if (supports_flag_bulk_continuation) + usbi_dbg("bulk continuation flag supported"); + + if (-1 == supports_flag_zero_packet) { + /* zero length packet URB flag fixed since Linux 2.6.31 */ + supports_flag_zero_packet = kernel_version_ge(2,6,31); + if (-1 == supports_flag_zero_packet) { + usbi_err(ctx, "error checking for zero length packet support"); + return LIBUSB_ERROR_OTHER; + } + } + + if (supports_flag_zero_packet) + usbi_dbg("zero length packet flag supported"); + + r = stat(SYSFS_DEVICE_PATH, &statbuf); + if (r == 0 && S_ISDIR(statbuf.st_mode)) { + DIR *devices = opendir(SYSFS_DEVICE_PATH); + struct dirent *entry; + + usbi_dbg("found usb devices in sysfs"); + + if (!devices) { + usbi_err(ctx, "opendir devices failed errno=%d", errno); + return LIBUSB_ERROR_IO; + } + + /* Make sure sysfs supports all the required files. If it + * does not, then usbfs will be used instead. Determine + * this by looping through the directories in + * SYSFS_DEVICE_PATH. With the assumption that there will + * always be subdirectories of the name usbN (usb1, usb2, + * etc) representing the root hubs, check the usbN + * subdirectories to see if they have all the needed files. + * This algorithm uses the usbN subdirectories (root hubs) + * because a device disconnection will cause a race + * condition regarding which files are available, sometimes + * causing an incorrect result. The root hubs are used + * because it is assumed that they will always be present. + * See the "sysfs vs usbfs" comment at the top of this file + * for more details. */ + while ((entry = readdir(devices))) { + int has_busnum=0, has_devnum=0, has_descriptors=0; + int has_configuration_value=0; + + /* Only check the usbN directories. */ + if (strncmp(entry->d_name, "usb", 3) != 0) + continue; + + /* Check for the files libusb needs from sysfs. */ + has_busnum = sysfs_has_file(entry->d_name, "busnum"); + has_devnum = sysfs_has_file(entry->d_name, "devnum"); + has_descriptors = sysfs_has_file(entry->d_name, "descriptors"); + has_configuration_value = sysfs_has_file(entry->d_name, "bConfigurationValue"); + + if (has_busnum && has_devnum && has_configuration_value) + sysfs_can_relate_devices = 1; + if (has_descriptors) + sysfs_has_descriptors = 1; + + /* Only need to check until we've found ONE device which + has all the attributes. */ + if (sysfs_has_descriptors && sysfs_can_relate_devices) + break; + } + closedir(devices); + + /* Only use sysfs descriptors if the rest of + sysfs will work for libusb. */ + if (!sysfs_can_relate_devices) + sysfs_has_descriptors = 0; + } else { + usbi_dbg("sysfs usb info not available"); + sysfs_has_descriptors = 0; + sysfs_can_relate_devices = 0; + } + + return 0; +} + +static int usbfs_get_device_descriptor(struct libusb_device *dev, + unsigned char *buffer) +{ + struct linux_device_priv *priv = _device_priv(dev); + + /* return cached copy */ + memcpy(buffer, priv->dev_descriptor, DEVICE_DESC_LENGTH); + return 0; +} + +static int _open_sysfs_attr(struct libusb_device *dev, const char *attr) +{ + struct linux_device_priv *priv = _device_priv(dev); + char filename[PATH_MAX]; + int fd; + + snprintf(filename, PATH_MAX, "%s/%s/%s", + SYSFS_DEVICE_PATH, priv->sysfs_dir, attr); + fd = open(filename, O_RDONLY); + if (fd < 0) { + usbi_err(DEVICE_CTX(dev), + "open %s failed ret=%d errno=%d", filename, fd, errno); + return LIBUSB_ERROR_IO; + } + + return fd; +} + +/* Note only suitable for attributes which always read >= 0, < 0 is error */ +static int __read_sysfs_attr(struct libusb_context *ctx, + const char *devname, const char *attr) +{ + char filename[PATH_MAX]; + FILE *f; + int r, value; + + snprintf(filename, PATH_MAX, "%s/%s/%s", SYSFS_DEVICE_PATH, + devname, attr); + f = fopen(filename, "r"); + if (f == NULL) { + if (errno == ENOENT) { + /* File doesn't exist. Assume the device has been + disconnected (see trac ticket #70). */ + return LIBUSB_ERROR_NO_DEVICE; + } + usbi_err(ctx, "open %s failed errno=%d", filename, errno); + return LIBUSB_ERROR_IO; + } + + r = fscanf(f, "%d", &value); + fclose(f); + if (r != 1) { + usbi_err(ctx, "fscanf %s returned %d, errno=%d", attr, r, errno); + return LIBUSB_ERROR_NO_DEVICE; /* For unplug race (trac #70) */ + } + if (value < 0) { + usbi_err(ctx, "%s contains a negative value", filename); + return LIBUSB_ERROR_IO; + } + + return value; +} + +static int sysfs_get_device_descriptor(struct libusb_device *dev, + unsigned char *buffer) +{ + int fd; + ssize_t r; + + /* sysfs provides access to an in-memory copy of the device descriptor, + * so we use that rather than keeping our own copy */ + + fd = _open_sysfs_attr(dev, "descriptors"); + if (fd < 0) + return fd; + + r = read(fd, buffer, DEVICE_DESC_LENGTH);; + close(fd); + if (r < 0) { + usbi_err(DEVICE_CTX(dev), "read failed, ret=%d errno=%d", fd, errno); + return LIBUSB_ERROR_IO; + } else if (r < DEVICE_DESC_LENGTH) { + usbi_err(DEVICE_CTX(dev), "short read %d/%d", r, DEVICE_DESC_LENGTH); + return LIBUSB_ERROR_IO; + } + + return 0; +} + +static int op_get_device_descriptor(struct libusb_device *dev, + unsigned char *buffer, int *host_endian) +{ + if (sysfs_has_descriptors) { + return sysfs_get_device_descriptor(dev, buffer); + } else { + *host_endian = 1; + return usbfs_get_device_descriptor(dev, buffer); + } +} + +static int usbfs_get_active_config_descriptor(struct libusb_device *dev, + unsigned char *buffer, size_t len) +{ + struct linux_device_priv *priv = _device_priv(dev); + if (!priv->config_descriptor) + return LIBUSB_ERROR_NOT_FOUND; /* device is unconfigured */ + + /* retrieve cached copy */ + memcpy(buffer, priv->config_descriptor, len); + return 0; +} + +/* read the bConfigurationValue for a device */ +static int sysfs_get_active_config(struct libusb_device *dev, int *config) +{ + char *endptr; + char tmp[4] = {0, 0, 0, 0}; + long num; + int fd; + ssize_t r; + + fd = _open_sysfs_attr(dev, "bConfigurationValue"); + if (fd < 0) + return fd; + + r = read(fd, tmp, sizeof(tmp)); + close(fd); + if (r < 0) { + usbi_err(DEVICE_CTX(dev), + "read bConfigurationValue failed ret=%d errno=%d", r, errno); + return LIBUSB_ERROR_IO; + } else if (r == 0) { + usbi_dbg("device unconfigured"); + *config = -1; + return 0; + } + + if (tmp[sizeof(tmp) - 1] != 0) { + usbi_err(DEVICE_CTX(dev), "not null-terminated?"); + return LIBUSB_ERROR_IO; + } else if (tmp[0] == 0) { + usbi_err(DEVICE_CTX(dev), "no configuration value?"); + return LIBUSB_ERROR_IO; + } + + num = strtol(tmp, &endptr, 10); + if (endptr == tmp) { + usbi_err(DEVICE_CTX(dev), "error converting '%s' to integer", tmp); + return LIBUSB_ERROR_IO; + } + + *config = (int) num; + return 0; +} + +/* takes a usbfs/descriptors fd seeked to the start of a configuration, and + * seeks to the next one. */ +static int seek_to_next_config(struct libusb_context *ctx, int fd, + int host_endian) +{ + struct libusb_config_descriptor config; + unsigned char tmp[6]; + off_t off; + ssize_t r; + + /* read first 6 bytes of descriptor */ + r = read(fd, tmp, sizeof(tmp)); + if (r < 0) { + usbi_err(ctx, "read failed ret=%d errno=%d", r, errno); + return LIBUSB_ERROR_IO; + } else if (r < sizeof(tmp)) { + usbi_err(ctx, "short descriptor read %d/%d", r, sizeof(tmp)); + return LIBUSB_ERROR_IO; + } + + /* seek forward to end of config */ + usbi_parse_descriptor(tmp, "bbwbb", &config, host_endian); + off = lseek(fd, config.wTotalLength - sizeof(tmp), SEEK_CUR); + if (off < 0) { + usbi_err(ctx, "seek failed ret=%d errno=%d", off, errno); + return LIBUSB_ERROR_IO; + } + + return 0; +} + +static int sysfs_get_active_config_descriptor(struct libusb_device *dev, + unsigned char *buffer, size_t len) +{ + int fd; + ssize_t r; + off_t off; + int to_copy; + int config; + unsigned char tmp[6]; + + r = sysfs_get_active_config(dev, &config); + if (r < 0) + return r; + if (config == -1) + return LIBUSB_ERROR_NOT_FOUND; + + usbi_dbg("active configuration %d", config); + + /* sysfs provides access to an in-memory copy of the device descriptor, + * so we use that rather than keeping our own copy */ + + fd = _open_sysfs_attr(dev, "descriptors"); + if (fd < 0) + return fd; + + /* device might have been unconfigured since we read bConfigurationValue, + * so first check that there is any config descriptor data at all... */ + off = lseek(fd, 0, SEEK_END); + if (off < 1) { + usbi_err(DEVICE_CTX(dev), "end seek failed, ret=%d errno=%d", + off, errno); + close(fd); + return LIBUSB_ERROR_IO; + } else if (off == DEVICE_DESC_LENGTH) { + close(fd); + return LIBUSB_ERROR_NOT_FOUND; + } + + off = lseek(fd, DEVICE_DESC_LENGTH, SEEK_SET); + if (off < 0) { + usbi_err(DEVICE_CTX(dev), "seek failed, ret=%d errno=%d", off, errno); + close(fd); + return LIBUSB_ERROR_IO; + } + + /* unbounded loop: we expect the descriptor to be present under all + * circumstances */ + while (1) { + r = read(fd, tmp, sizeof(tmp)); + if (r < 0) { + usbi_err(DEVICE_CTX(dev), "read failed, ret=%d errno=%d", + fd, errno); + return LIBUSB_ERROR_IO; + } else if (r < sizeof(tmp)) { + usbi_err(DEVICE_CTX(dev), "short read %d/%d", r, sizeof(tmp)); + return LIBUSB_ERROR_IO; + } + + /* check bConfigurationValue */ + if (tmp[5] == config) + break; + + /* try the next descriptor */ + off = lseek(fd, 0 - sizeof(tmp), SEEK_CUR); + if (off < 0) + return LIBUSB_ERROR_IO; + + r = seek_to_next_config(DEVICE_CTX(dev), fd, 0); + if (r < 0) + return r; + } + + to_copy = (len < sizeof(tmp)) ? len : sizeof(tmp); + memcpy(buffer, tmp, to_copy); + if (len > sizeof(tmp)) { + r = read(fd, buffer + sizeof(tmp), len - sizeof(tmp)); + if (r < 0) { + usbi_err(DEVICE_CTX(dev), "read failed, ret=%d errno=%d", + fd, errno); + r = LIBUSB_ERROR_IO; + } else if (r == 0) { + usbi_dbg("device is unconfigured"); + r = LIBUSB_ERROR_NOT_FOUND; + } else if (r < len - sizeof(tmp)) { + usbi_err(DEVICE_CTX(dev), "short read %d/%d", r, len); + r = LIBUSB_ERROR_IO; + } + } else { + r = 0; + } + + close(fd); + return r; +} + +static int op_get_active_config_descriptor(struct libusb_device *dev, + unsigned char *buffer, size_t len, int *host_endian) +{ + if (sysfs_has_descriptors) { + return sysfs_get_active_config_descriptor(dev, buffer, len); + } else { + return usbfs_get_active_config_descriptor(dev, buffer, len); + } +} + +/* takes a usbfs fd, attempts to find the requested config and copy a certain + * amount of it into an output buffer. */ +static int get_config_descriptor(struct libusb_context *ctx, int fd, + uint8_t config_index, unsigned char *buffer, size_t len) +{ + off_t off; + ssize_t r; + + off = lseek(fd, DEVICE_DESC_LENGTH, SEEK_SET); + if (off < 0) { + usbi_err(ctx, "seek failed ret=%d errno=%d", off, errno); + return LIBUSB_ERROR_IO; + } + + /* might need to skip some configuration descriptors to reach the + * requested configuration */ + while (config_index > 0) { + r = seek_to_next_config(ctx, fd, 1); + if (r < 0) + return r; + config_index--; + } + + /* read the rest of the descriptor */ + r = read(fd, buffer, len); + if (r < 0) { + usbi_err(ctx, "read failed ret=%d errno=%d", r, errno); + return LIBUSB_ERROR_IO; + } else if (r < len) { + usbi_err(ctx, "short output read %d/%d", r, len); + return LIBUSB_ERROR_IO; + } + + return 0; +} + +static int op_get_config_descriptor(struct libusb_device *dev, + uint8_t config_index, unsigned char *buffer, size_t len, int *host_endian) +{ + char filename[PATH_MAX]; + int fd; + int r; + + /* always read from usbfs: sysfs only has the active descriptor + * this will involve waking the device up, but oh well! */ + + /* FIXME: the above is no longer true, new kernels have all descriptors + * in the descriptors file. but its kinda hard to detect if the kernel + * is sufficiently new. */ + + _get_usbfs_path(dev, filename); + fd = open(filename, O_RDONLY); + if (fd < 0) { + usbi_err(DEVICE_CTX(dev), + "open '%s' failed, ret=%d errno=%d", filename, fd, errno); + return LIBUSB_ERROR_IO; + } + + r = get_config_descriptor(DEVICE_CTX(dev), fd, config_index, buffer, len); + close(fd); + return r; +} + +/* cache the active config descriptor in memory. a value of -1 means that + * we aren't sure which one is active, so just assume the first one. + * only for usbfs. */ +static int cache_active_config(struct libusb_device *dev, int fd, + int active_config) +{ + struct linux_device_priv *priv = _device_priv(dev); + struct libusb_config_descriptor config; + unsigned char tmp[8]; + unsigned char *buf; + int idx; + int r; + + if (active_config == -1) { + idx = 0; + } else { + r = usbi_get_config_index_by_value(dev, active_config, &idx); + if (r < 0) + return r; + if (idx == -1) + return LIBUSB_ERROR_NOT_FOUND; + } + + r = get_config_descriptor(DEVICE_CTX(dev), fd, idx, tmp, sizeof(tmp)); + if (r < 0) { + usbi_err(DEVICE_CTX(dev), "first read error %d", r); + return r; + } + + usbi_parse_descriptor(tmp, "bbw", &config, 0); + buf = malloc(config.wTotalLength); + if (!buf) + return LIBUSB_ERROR_NO_MEM; + + r = get_config_descriptor(DEVICE_CTX(dev), fd, idx, buf, + config.wTotalLength); + if (r < 0) { + free(buf); + return r; + } + + if (priv->config_descriptor) + free(priv->config_descriptor); + priv->config_descriptor = buf; + return 0; +} + +/* send a control message to retrieve active configuration */ +static int usbfs_get_active_config(struct libusb_device *dev, int fd) +{ + unsigned char active_config = 0; + int r; + + struct usbfs_ctrltransfer ctrl = { + .bmRequestType = LIBUSB_ENDPOINT_IN, + .bRequest = LIBUSB_REQUEST_GET_CONFIGURATION, + .wValue = 0, + .wIndex = 0, + .wLength = 1, + .timeout = 1000, + .data = &active_config + }; + + r = ioctl(fd, IOCTL_USBFS_CONTROL, &ctrl); + if (r < 0) { + if (errno == ENODEV) + return LIBUSB_ERROR_NO_DEVICE; + + /* we hit this error path frequently with buggy devices :( */ + usbi_warn(DEVICE_CTX(dev), + "get_configuration failed ret=%d errno=%d", r, errno); + return LIBUSB_ERROR_IO; + } + + return active_config; +} + +static int initialize_device(struct libusb_device *dev, uint8_t busnum, + uint8_t devaddr, const char *sysfs_dir) +{ + struct linux_device_priv *priv = _device_priv(dev); + unsigned char *dev_buf; + char path[PATH_MAX]; + int fd, speed; + int active_config = 0; + int device_configured = 1; + ssize_t r; + + dev->bus_number = busnum; + dev->device_address = devaddr; + + if (sysfs_dir) { + priv->sysfs_dir = malloc(strlen(sysfs_dir) + 1); + if (!priv->sysfs_dir) + return LIBUSB_ERROR_NO_MEM; + strcpy(priv->sysfs_dir, sysfs_dir); + + /* Note speed can contain 1.5, in this case __read_sysfs_attr + will stop parsing at the '.' and return 1 */ + speed = __read_sysfs_attr(DEVICE_CTX(dev), sysfs_dir, "speed"); + if (speed >= 0) { + switch (speed) { + case 1: dev->speed = LIBUSB_SPEED_LOW; break; + case 12: dev->speed = LIBUSB_SPEED_FULL; break; + case 480: dev->speed = LIBUSB_SPEED_HIGH; break; + case 5000: dev->speed = LIBUSB_SPEED_SUPER; break; + default: + usbi_warn(DEVICE_CTX(dev), "Unknown device speed: %d Mbps", speed); + } + } + } + + if (sysfs_has_descriptors) + return 0; + + /* cache device descriptor in memory so that we can retrieve it later + * without waking the device up (op_get_device_descriptor) */ + + priv->dev_descriptor = NULL; + priv->config_descriptor = NULL; + + if (sysfs_can_relate_devices) { + int tmp = sysfs_get_active_config(dev, &active_config); + if (tmp < 0) + return tmp; + if (active_config == -1) + device_configured = 0; + } + + _get_usbfs_path(dev, path); + fd = open(path, O_RDWR); + if (fd < 0 && errno == EACCES) { + fd = open(path, O_RDONLY); + /* if we only have read-only access to the device, we cannot + * send a control message to determine the active config. just + * assume the first one is active. */ + active_config = -1; + } + + if (fd < 0) { + usbi_err(DEVICE_CTX(dev), "open failed, ret=%d errno=%d", fd, errno); + return LIBUSB_ERROR_IO; + } + + if (!sysfs_can_relate_devices) { + if (active_config == -1) { + /* if we only have read-only access to the device, we cannot + * send a control message to determine the active config. just + * assume the first one is active. */ + usbi_warn(DEVICE_CTX(dev), "access to %s is read-only; cannot " + "determine active configuration descriptor", path); + } else { + active_config = usbfs_get_active_config(dev, fd); + if (active_config == LIBUSB_ERROR_IO) { + /* buggy devices sometimes fail to report their active config. + * assume unconfigured and continue the probing */ + usbi_warn(DEVICE_CTX(dev), "couldn't query active " + "configuration, assumung unconfigured"); + device_configured = 0; + } else if (active_config < 0) { + close(fd); + return active_config; + } else if (active_config == 0) { + /* some buggy devices have a configuration 0, but we're + * reaching into the corner of a corner case here, so let's + * not support buggy devices in these circumstances. + * stick to the specs: a configuration value of 0 means + * unconfigured. */ + usbi_dbg("active cfg 0? assuming unconfigured device"); + device_configured = 0; + } + } + } + + dev_buf = malloc(DEVICE_DESC_LENGTH); + if (!dev_buf) { + close(fd); + return LIBUSB_ERROR_NO_MEM; + } + + r = read(fd, dev_buf, DEVICE_DESC_LENGTH); + if (r < 0) { + usbi_err(DEVICE_CTX(dev), + "read descriptor failed ret=%d errno=%d", fd, errno); + free(dev_buf); + close(fd); + return LIBUSB_ERROR_IO; + } else if (r < DEVICE_DESC_LENGTH) { + usbi_err(DEVICE_CTX(dev), "short descriptor read (%d)", r); + free(dev_buf); + close(fd); + return LIBUSB_ERROR_IO; + } + + /* bit of a hack: set num_configurations now because cache_active_config() + * calls usbi_get_config_index_by_value() which uses it */ + dev->num_configurations = dev_buf[DEVICE_DESC_LENGTH - 1]; + + if (device_configured) { + r = cache_active_config(dev, fd, active_config); + if (r < 0) { + close(fd); + free(dev_buf); + return r; + } + } + + close(fd); + priv->dev_descriptor = dev_buf; + return 0; +} + +static int enumerate_device(struct libusb_context *ctx, + struct discovered_devs **_discdevs, uint8_t busnum, uint8_t devaddr, + const char *sysfs_dir) +{ + struct discovered_devs *discdevs; + unsigned long session_id; + int need_unref = 0; + struct libusb_device *dev; + int r = 0; + + /* FIXME: session ID is not guaranteed unique as addresses can wrap and + * will be reused. instead we should add a simple sysfs attribute with + * a session ID. */ + session_id = busnum << 8 | devaddr; + usbi_dbg("busnum %d devaddr %d session_id %ld", busnum, devaddr, + session_id); + + dev = usbi_get_device_by_session_id(ctx, session_id); + if (dev) { + usbi_dbg("using existing device for %d/%d (session %ld)", + busnum, devaddr, session_id); + } else { + usbi_dbg("allocating new device for %d/%d (session %ld)", + busnum, devaddr, session_id); + dev = usbi_alloc_device(ctx, session_id); + if (!dev) + return LIBUSB_ERROR_NO_MEM; + need_unref = 1; + r = initialize_device(dev, busnum, devaddr, sysfs_dir); + if (r < 0) + goto out; + r = usbi_sanitize_device(dev); + if (r < 0) + goto out; + } + + discdevs = discovered_devs_append(*_discdevs, dev); + if (!discdevs) + r = LIBUSB_ERROR_NO_MEM; + else + *_discdevs = discdevs; + +out: + if (need_unref) + libusb_unref_device(dev); + return r; +} + +/* open a bus directory and adds all discovered devices to discdevs. on + * failure (non-zero return) the pre-existing discdevs should be destroyed + * (and devices freed). on success, the new discdevs pointer should be used + * as it may have been moved. */ +static int usbfs_scan_busdir(struct libusb_context *ctx, + struct discovered_devs **_discdevs, uint8_t busnum) +{ + DIR *dir; + char dirpath[PATH_MAX]; + struct dirent *entry; + struct discovered_devs *discdevs = *_discdevs; + int r = LIBUSB_ERROR_IO; + + snprintf(dirpath, PATH_MAX, "%s/%03d", usbfs_path, busnum); + usbi_dbg("%s", dirpath); + dir = opendir(dirpath); + if (!dir) { + usbi_err(ctx, "opendir '%s' failed, errno=%d", dirpath, errno); + /* FIXME: should handle valid race conditions like hub unplugged + * during directory iteration - this is not an error */ + return r; + } + + while ((entry = readdir(dir))) { + int devaddr; + + if (entry->d_name[0] == '.') + continue; + + devaddr = atoi(entry->d_name); + if (devaddr == 0) { + usbi_dbg("unknown dir entry %s", entry->d_name); + continue; + } + + if (enumerate_device(ctx, &discdevs, busnum, (uint8_t) devaddr, NULL)) { + usbi_dbg("failed to enumerate dir entry %s", entry->d_name); + continue; + } + + r = 0; + } + + if (!r) + *_discdevs = discdevs; + closedir(dir); + return r; +} + +static int usbfs_get_device_list(struct libusb_context *ctx, + struct discovered_devs **_discdevs) +{ + struct dirent *entry; + DIR *buses = opendir(usbfs_path); + struct discovered_devs *discdevs = *_discdevs; + int r = 0; + + if (!buses) { + usbi_err(ctx, "opendir buses failed errno=%d", errno); + return LIBUSB_ERROR_IO; + } + + while ((entry = readdir(buses))) { + struct discovered_devs *discdevs_new = discdevs; + int busnum; + + if (entry->d_name[0] == '.') + continue; + + if (usbdev_names) { + int devaddr; + if (!_is_usbdev_entry(entry, &busnum, &devaddr)) + continue; + + r = enumerate_device(ctx, &discdevs_new, busnum, + (uint8_t) devaddr, NULL); + if (r < 0) { + usbi_dbg("failed to enumerate dir entry %s", entry->d_name); + continue; + } + } else { + busnum = atoi(entry->d_name); + if (busnum == 0) { + usbi_dbg("unknown dir entry %s", entry->d_name); + continue; + } + + r = usbfs_scan_busdir(ctx, &discdevs_new, busnum); + if (r < 0) + goto out; + } + discdevs = discdevs_new; + } + +out: + closedir(buses); + *_discdevs = discdevs; + return r; + +} + +static int sysfs_scan_device(struct libusb_context *ctx, + struct discovered_devs **_discdevs, const char *devname) +{ + int busnum; + int devaddr; + + usbi_dbg("scan %s", devname); + + busnum = __read_sysfs_attr(ctx, devname, "busnum"); + if (busnum < 0) + return busnum; + + devaddr = __read_sysfs_attr(ctx, devname, "devnum"); + if (devaddr < 0) + return devaddr; + + usbi_dbg("bus=%d dev=%d", busnum, devaddr); + if (busnum > 255 || devaddr > 255) + return LIBUSB_ERROR_INVALID_PARAM; + + return enumerate_device(ctx, _discdevs, busnum & 0xff, devaddr & 0xff, + devname); +} + +static int sysfs_get_device_list(struct libusb_context *ctx, + struct discovered_devs **_discdevs) +{ + struct discovered_devs *discdevs = *_discdevs; + DIR *devices = opendir(SYSFS_DEVICE_PATH); + struct dirent *entry; + int r = LIBUSB_ERROR_IO; + + if (!devices) { + usbi_err(ctx, "opendir devices failed errno=%d", errno); + return r; + } + + while ((entry = readdir(devices))) { + struct discovered_devs *discdevs_new = discdevs; + + if ((!isdigit(entry->d_name[0]) && strncmp(entry->d_name, "usb", 3)) + || strchr(entry->d_name, ':')) + continue; + + if (sysfs_scan_device(ctx, &discdevs_new, entry->d_name)) { + usbi_dbg("failed to enumerate dir entry %s", entry->d_name); + continue; + } + + r = 0; + discdevs = discdevs_new; + } + + if (!r) + *_discdevs = discdevs; + closedir(devices); + return r; +} + +static int op_get_device_list(struct libusb_context *ctx, + struct discovered_devs **_discdevs) +{ + /* we can retrieve device list and descriptors from sysfs or usbfs. + * sysfs is preferable, because if we use usbfs we end up resuming + * any autosuspended USB devices. however, sysfs is not available + * everywhere, so we need a usbfs fallback too. + * + * as described in the "sysfs vs usbfs" comment at the top of this + * file, sometimes we have sysfs but not enough information to + * relate sysfs devices to usbfs nodes. op_init() determines the + * adequacy of sysfs and sets sysfs_can_relate_devices. + */ + if (sysfs_can_relate_devices != 0) + return sysfs_get_device_list(ctx, _discdevs); + else + return usbfs_get_device_list(ctx, _discdevs); +} + +static int op_open(struct libusb_device_handle *handle) +{ + struct linux_device_handle_priv *hpriv = _device_handle_priv(handle); + char filename[PATH_MAX]; + + _get_usbfs_path(handle->dev, filename); + usbi_dbg("opening %s", filename); + hpriv->fd = open(filename, O_RDWR); + if (hpriv->fd < 0) { + if (errno == EACCES) { + usbi_err(HANDLE_CTX(handle), "libusb couldn't open USB device %s: " + "Permission denied.", filename); + usbi_err(HANDLE_CTX(handle), + "libusb requires write access to USB device nodes."); + return LIBUSB_ERROR_ACCESS; + } else if (errno == ENOENT) { + usbi_err(HANDLE_CTX(handle), "libusb couldn't open USB device %s: " + "No such file or directory.", filename); + return LIBUSB_ERROR_NO_DEVICE; + } else { + usbi_err(HANDLE_CTX(handle), + "open failed, code %d errno %d", hpriv->fd, errno); + return LIBUSB_ERROR_IO; + } + } + + return usbi_add_pollfd(HANDLE_CTX(handle), hpriv->fd, POLLOUT); +} + +static void op_close(struct libusb_device_handle *dev_handle) +{ + int fd = _device_handle_priv(dev_handle)->fd; + usbi_remove_pollfd(HANDLE_CTX(dev_handle), fd); + close(fd); +} + +static int op_get_configuration(struct libusb_device_handle *handle, + int *config) +{ + int r; + if (sysfs_can_relate_devices != 1) + return LIBUSB_ERROR_NOT_SUPPORTED; + + r = sysfs_get_active_config(handle->dev, config); + if (r < 0) + return r; + + if (*config == -1) { + usbi_err(HANDLE_CTX(handle), "device unconfigured"); + *config = 0; + } + + return 0; +} + +static int op_set_configuration(struct libusb_device_handle *handle, int config) +{ + struct linux_device_priv *priv = _device_priv(handle->dev); + int fd = _device_handle_priv(handle)->fd; + int r = ioctl(fd, IOCTL_USBFS_SETCONFIG, &config); + if (r) { + if (errno == EINVAL) + return LIBUSB_ERROR_NOT_FOUND; + else if (errno == EBUSY) + return LIBUSB_ERROR_BUSY; + else if (errno == ENODEV) + return LIBUSB_ERROR_NO_DEVICE; + + usbi_err(HANDLE_CTX(handle), "failed, error %d errno %d", r, errno); + return LIBUSB_ERROR_OTHER; + } + + if (!sysfs_has_descriptors) { + /* update our cached active config descriptor */ + if (config == -1) { + if (priv->config_descriptor) { + free(priv->config_descriptor); + priv->config_descriptor = NULL; + } + } else { + r = cache_active_config(handle->dev, fd, config); + if (r < 0) + usbi_warn(HANDLE_CTX(handle), + "failed to update cached config descriptor, error %d", r); + } + } + + return 0; +} + +static int op_claim_interface(struct libusb_device_handle *handle, int iface) +{ + int fd = _device_handle_priv(handle)->fd; + int r = ioctl(fd, IOCTL_USBFS_CLAIMINTF, &iface); + if (r) { + if (errno == ENOENT) + return LIBUSB_ERROR_NOT_FOUND; + else if (errno == EBUSY) + return LIBUSB_ERROR_BUSY; + else if (errno == ENODEV) + return LIBUSB_ERROR_NO_DEVICE; + + usbi_err(HANDLE_CTX(handle), + "claim interface failed, error %d errno %d", r, errno); + return LIBUSB_ERROR_OTHER; + } + return 0; +} + +static int op_release_interface(struct libusb_device_handle *handle, int iface) +{ + int fd = _device_handle_priv(handle)->fd; + int r = ioctl(fd, IOCTL_USBFS_RELEASEINTF, &iface); + if (r) { + if (errno == ENODEV) + return LIBUSB_ERROR_NO_DEVICE; + + usbi_err(HANDLE_CTX(handle), + "release interface failed, error %d errno %d", r, errno); + return LIBUSB_ERROR_OTHER; + } + return 0; +} + +static int op_set_interface(struct libusb_device_handle *handle, int iface, + int altsetting) +{ + int fd = _device_handle_priv(handle)->fd; + struct usbfs_setinterface setintf; + int r; + + setintf.interface = iface; + setintf.altsetting = altsetting; + r = ioctl(fd, IOCTL_USBFS_SETINTF, &setintf); + if (r) { + if (errno == EINVAL) + return LIBUSB_ERROR_NOT_FOUND; + else if (errno == ENODEV) + return LIBUSB_ERROR_NO_DEVICE; + + usbi_err(HANDLE_CTX(handle), + "setintf failed error %d errno %d", r, errno); + return LIBUSB_ERROR_OTHER; + } + + return 0; +} + +static int op_clear_halt(struct libusb_device_handle *handle, + unsigned char endpoint) +{ + int fd = _device_handle_priv(handle)->fd; + unsigned int _endpoint = endpoint; + int r = ioctl(fd, IOCTL_USBFS_CLEAR_HALT, &_endpoint); + if (r) { + if (errno == ENOENT) + return LIBUSB_ERROR_NOT_FOUND; + else if (errno == ENODEV) + return LIBUSB_ERROR_NO_DEVICE; + + usbi_err(HANDLE_CTX(handle), + "clear_halt failed error %d errno %d", r, errno); + return LIBUSB_ERROR_OTHER; + } + + return 0; +} + +static int op_reset_device(struct libusb_device_handle *handle) +{ + int fd = _device_handle_priv(handle)->fd; + int i, r, ret = 0; + + /* Doing a device reset will cause the usbfs driver to get unbound + from any interfaces it is bound to. By voluntarily unbinding + the usbfs driver ourself, we stop the kernel from rebinding + the interface after reset (which would end up with the interface + getting bound to the in kernel driver if any). */ + for (i = 0; i < USB_MAXINTERFACES; i++) { + if (handle->claimed_interfaces & (1L << i)) { + op_release_interface(handle, i); + } + } + + usbi_mutex_lock(&handle->lock); + r = ioctl(fd, IOCTL_USBFS_RESET, NULL); + if (r) { + if (errno == ENODEV) { + ret = LIBUSB_ERROR_NOT_FOUND; + goto out; + } + + usbi_err(HANDLE_CTX(handle), + "reset failed error %d errno %d", r, errno); + ret = LIBUSB_ERROR_OTHER; + goto out; + } + + /* And re-claim any interfaces which were claimed before the reset */ + for (i = 0; i < USB_MAXINTERFACES; i++) { + if (handle->claimed_interfaces & (1L << i)) { + r = op_claim_interface(handle, i); + if (r) { + usbi_warn(HANDLE_CTX(handle), + "failed to re-claim interface %d after reset", i); + handle->claimed_interfaces &= ~(1L << i); + } + } + } +out: + usbi_mutex_unlock(&handle->lock); + return ret; +} + +static int op_kernel_driver_active(struct libusb_device_handle *handle, + int interface) +{ + int fd = _device_handle_priv(handle)->fd; + struct usbfs_getdriver getdrv; + int r; + + getdrv.interface = interface; + r = ioctl(fd, IOCTL_USBFS_GETDRIVER, &getdrv); + if (r) { + if (errno == ENODATA) + return 0; + else if (errno == ENODEV) + return LIBUSB_ERROR_NO_DEVICE; + + usbi_err(HANDLE_CTX(handle), + "get driver failed error %d errno %d", r, errno); + return LIBUSB_ERROR_OTHER; + } + + return 1; +} + +static int op_detach_kernel_driver(struct libusb_device_handle *handle, + int interface) +{ + int fd = _device_handle_priv(handle)->fd; + struct usbfs_ioctl command; + int r; + + command.ifno = interface; + command.ioctl_code = IOCTL_USBFS_DISCONNECT; + command.data = NULL; + + r = ioctl(fd, IOCTL_USBFS_IOCTL, &command); + if (r) { + if (errno == ENODATA) + return LIBUSB_ERROR_NOT_FOUND; + else if (errno == EINVAL) + return LIBUSB_ERROR_INVALID_PARAM; + else if (errno == ENODEV) + return LIBUSB_ERROR_NO_DEVICE; + + usbi_err(HANDLE_CTX(handle), + "detach failed error %d errno %d", r, errno); + return LIBUSB_ERROR_OTHER; + } + + return 0; +} + +static int op_attach_kernel_driver(struct libusb_device_handle *handle, + int interface) +{ + int fd = _device_handle_priv(handle)->fd; + struct usbfs_ioctl command; + int r; + + command.ifno = interface; + command.ioctl_code = IOCTL_USBFS_CONNECT; + command.data = NULL; + + r = ioctl(fd, IOCTL_USBFS_IOCTL, &command); + if (r < 0) { + if (errno == ENODATA) + return LIBUSB_ERROR_NOT_FOUND; + else if (errno == EINVAL) + return LIBUSB_ERROR_INVALID_PARAM; + else if (errno == ENODEV) + return LIBUSB_ERROR_NO_DEVICE; + else if (errno == EBUSY) + return LIBUSB_ERROR_BUSY; + + usbi_err(HANDLE_CTX(handle), + "attach failed error %d errno %d", r, errno); + return LIBUSB_ERROR_OTHER; + } else if (r == 0) { + return LIBUSB_ERROR_NOT_FOUND; + } + + return 0; +} + +static void op_destroy_device(struct libusb_device *dev) +{ + struct linux_device_priv *priv = _device_priv(dev); + if (!sysfs_has_descriptors) { + if (priv->dev_descriptor) + free(priv->dev_descriptor); + if (priv->config_descriptor) + free(priv->config_descriptor); + } + if (priv->sysfs_dir) + free(priv->sysfs_dir); +} + +/* URBs are discarded in reverse order of submission to avoid races. */ +static int discard_urbs(struct usbi_transfer *itransfer, int first, int last_plus_one) +{ + struct libusb_transfer *transfer = + USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct linux_transfer_priv *tpriv = + usbi_transfer_get_os_priv(itransfer); + struct linux_device_handle_priv *dpriv = + _device_handle_priv(transfer->dev_handle); + int i, ret = 0; + struct usbfs_urb *urb; + + for (i = last_plus_one - 1; i >= first; i--) { + if (LIBUSB_TRANSFER_TYPE_ISOCHRONOUS == transfer->type) + urb = tpriv->iso_urbs[i]; + else + urb = &tpriv->urbs[i]; + + if (0 == ioctl(dpriv->fd, IOCTL_USBFS_DISCARDURB, urb)) + continue; + + if (EINVAL == errno) { + usbi_dbg("URB not found --> assuming ready to be reaped"); + if (i == (last_plus_one - 1)) + ret = LIBUSB_ERROR_NOT_FOUND; + } else if (ENODEV == errno) { + usbi_dbg("Device not found for URB --> assuming ready to be reaped"); + ret = LIBUSB_ERROR_NO_DEVICE; + } else { + usbi_warn(TRANSFER_CTX(transfer), + "unrecognised discard errno %d", errno); + ret = LIBUSB_ERROR_OTHER; + } + } + return ret; +} + +static void free_iso_urbs(struct linux_transfer_priv *tpriv) +{ + int i; + for (i = 0; i < tpriv->num_urbs; i++) { + struct usbfs_urb *urb = tpriv->iso_urbs[i]; + if (!urb) + break; + free(urb); + } + + free(tpriv->iso_urbs); + tpriv->iso_urbs = NULL; +} + +static int submit_bulk_transfer(struct usbi_transfer *itransfer, + unsigned char urb_type) +{ + struct libusb_transfer *transfer = + USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer); + struct linux_device_handle_priv *dpriv = + _device_handle_priv(transfer->dev_handle); + struct usbfs_urb *urbs; + int is_out = (transfer->endpoint & LIBUSB_ENDPOINT_DIR_MASK) + == LIBUSB_ENDPOINT_OUT; + int r; + int i; + size_t alloc_size; + + if (tpriv->urbs) + return LIBUSB_ERROR_BUSY; + + if (is_out && transfer->flags & LIBUSB_TRANSFER_ADD_ZERO_PACKET && + !supports_flag_zero_packet) + return LIBUSB_ERROR_NOT_SUPPORTED; + + /* usbfs places a 16kb limit on bulk URBs. we divide up larger requests + * into smaller units to meet such restriction, then fire off all the + * units at once. it would be simpler if we just fired one unit at a time, + * but there is a big performance gain through doing it this way. */ + int num_urbs = transfer->length / MAX_BULK_BUFFER_LENGTH; + int last_urb_partial = 0; + + if (transfer->length == 0) { + num_urbs = 1; + } else if ((transfer->length % MAX_BULK_BUFFER_LENGTH) > 0) { + last_urb_partial = 1; + num_urbs++; + } + usbi_dbg("need %d urbs for new transfer with length %d", num_urbs, + transfer->length); + alloc_size = num_urbs * sizeof(struct usbfs_urb); + urbs = malloc(alloc_size); + if (!urbs) + return LIBUSB_ERROR_NO_MEM; + memset(urbs, 0, alloc_size); + tpriv->urbs = urbs; + tpriv->num_urbs = num_urbs; + tpriv->num_retired = 0; + tpriv->reap_action = NORMAL; + tpriv->reap_status = LIBUSB_TRANSFER_COMPLETED; + + for (i = 0; i < num_urbs; i++) { + struct usbfs_urb *urb = &urbs[i]; + urb->usercontext = itransfer; + urb->type = urb_type; + urb->endpoint = transfer->endpoint; + urb->buffer = transfer->buffer + (i * MAX_BULK_BUFFER_LENGTH); + if (supports_flag_bulk_continuation && !is_out) + urb->flags = USBFS_URB_SHORT_NOT_OK; + if (i == num_urbs - 1 && last_urb_partial) + urb->buffer_length = transfer->length % MAX_BULK_BUFFER_LENGTH; + else if (transfer->length == 0) + urb->buffer_length = 0; + else + urb->buffer_length = MAX_BULK_BUFFER_LENGTH; + + if (i > 0 && supports_flag_bulk_continuation) + urb->flags |= USBFS_URB_BULK_CONTINUATION; + + /* we have already checked that the flag is supported */ + if (is_out && i == num_urbs - 1 && + transfer->flags & LIBUSB_TRANSFER_ADD_ZERO_PACKET) + urb->flags |= USBFS_URB_ZERO_PACKET; + + r = ioctl(dpriv->fd, IOCTL_USBFS_SUBMITURB, urb); + if (r < 0) { + if (errno == ENODEV) { + r = LIBUSB_ERROR_NO_DEVICE; + } else { + usbi_err(TRANSFER_CTX(transfer), + "submiturb failed error %d errno=%d", r, errno); + r = LIBUSB_ERROR_IO; + } + + /* if the first URB submission fails, we can simply free up and + * return failure immediately. */ + if (i == 0) { + usbi_dbg("first URB failed, easy peasy"); + free(urbs); + tpriv->urbs = NULL; + return r; + } + + /* if it's not the first URB that failed, the situation is a bit + * tricky. we may need to discard all previous URBs. there are + * complications: + * - discarding is asynchronous - discarded urbs will be reaped + * later. the user must not have freed the transfer when the + * discarded URBs are reaped, otherwise libusb will be using + * freed memory. + * - the earlier URBs may have completed successfully and we do + * not want to throw away any data. + * - this URB failing may be no error; EREMOTEIO means that + * this transfer simply didn't need all the URBs we submitted + * so, we report that the transfer was submitted successfully and + * in case of error we discard all previous URBs. later when + * the final reap completes we can report error to the user, + * or success if an earlier URB was completed successfully. + */ + tpriv->reap_action = EREMOTEIO == errno ? COMPLETED_EARLY : SUBMIT_FAILED; + + /* The URBs we haven't submitted yet we count as already + * retired. */ + tpriv->num_retired += num_urbs - i; + + /* If we completed short then don't try to discard. */ + if (COMPLETED_EARLY == tpriv->reap_action) + return 0; + + discard_urbs(itransfer, 0, i); + + usbi_dbg("reporting successful submission but waiting for %d " + "discards before reporting error", i); + return 0; + } + } + + return 0; +} + +static int submit_iso_transfer(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = + USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer); + struct linux_device_handle_priv *dpriv = + _device_handle_priv(transfer->dev_handle); + struct usbfs_urb **urbs; + size_t alloc_size; + int num_packets = transfer->num_iso_packets; + int i; + int this_urb_len = 0; + int num_urbs = 1; + int packet_offset = 0; + unsigned int packet_len; + unsigned char *urb_buffer = transfer->buffer; + + if (tpriv->iso_urbs) + return LIBUSB_ERROR_BUSY; + + /* usbfs places a 32kb limit on iso URBs. we divide up larger requests + * into smaller units to meet such restriction, then fire off all the + * units at once. it would be simpler if we just fired one unit at a time, + * but there is a big performance gain through doing it this way. */ + + /* calculate how many URBs we need */ + for (i = 0; i < num_packets; i++) { + int space_remaining = MAX_ISO_BUFFER_LENGTH - this_urb_len; + packet_len = transfer->iso_packet_desc[i].length; + + if (packet_len > space_remaining) { + num_urbs++; + this_urb_len = packet_len; + } else { + this_urb_len += packet_len; + } + } + usbi_dbg("need %d 32k URBs for transfer", num_urbs); + + alloc_size = num_urbs * sizeof(*urbs); + urbs = malloc(alloc_size); + if (!urbs) + return LIBUSB_ERROR_NO_MEM; + memset(urbs, 0, alloc_size); + + tpriv->iso_urbs = urbs; + tpriv->num_urbs = num_urbs; + tpriv->num_retired = 0; + tpriv->reap_action = NORMAL; + tpriv->iso_packet_offset = 0; + + /* allocate + initialize each URB with the correct number of packets */ + for (i = 0; i < num_urbs; i++) { + struct usbfs_urb *urb; + int space_remaining_in_urb = MAX_ISO_BUFFER_LENGTH; + int urb_packet_offset = 0; + unsigned char *urb_buffer_orig = urb_buffer; + int j; + int k; + + /* swallow up all the packets we can fit into this URB */ + while (packet_offset < transfer->num_iso_packets) { + packet_len = transfer->iso_packet_desc[packet_offset].length; + if (packet_len <= space_remaining_in_urb) { + /* throw it in */ + urb_packet_offset++; + packet_offset++; + space_remaining_in_urb -= packet_len; + urb_buffer += packet_len; + } else { + /* it can't fit, save it for the next URB */ + break; + } + } + + alloc_size = sizeof(*urb) + + (urb_packet_offset * sizeof(struct usbfs_iso_packet_desc)); + urb = malloc(alloc_size); + if (!urb) { + free_iso_urbs(tpriv); + return LIBUSB_ERROR_NO_MEM; + } + memset(urb, 0, alloc_size); + urbs[i] = urb; + + /* populate packet lengths */ + for (j = 0, k = packet_offset - urb_packet_offset; + k < packet_offset; k++, j++) { + packet_len = transfer->iso_packet_desc[k].length; + urb->iso_frame_desc[j].length = packet_len; + } + + urb->usercontext = itransfer; + urb->type = USBFS_URB_TYPE_ISO; + /* FIXME: interface for non-ASAP data? */ + urb->flags = USBFS_URB_ISO_ASAP; + urb->endpoint = transfer->endpoint; + urb->number_of_packets = urb_packet_offset; + urb->buffer = urb_buffer_orig; + } + + /* submit URBs */ + for (i = 0; i < num_urbs; i++) { + int r = ioctl(dpriv->fd, IOCTL_USBFS_SUBMITURB, urbs[i]); + if (r < 0) { + if (errno == ENODEV) { + r = LIBUSB_ERROR_NO_DEVICE; + } else { + usbi_err(TRANSFER_CTX(transfer), + "submiturb failed error %d errno=%d", r, errno); + r = LIBUSB_ERROR_IO; + } + + /* if the first URB submission fails, we can simply free up and + * return failure immediately. */ + if (i == 0) { + usbi_dbg("first URB failed, easy peasy"); + free_iso_urbs(tpriv); + return r; + } + + /* if it's not the first URB that failed, the situation is a bit + * tricky. we must discard all previous URBs. there are + * complications: + * - discarding is asynchronous - discarded urbs will be reaped + * later. the user must not have freed the transfer when the + * discarded URBs are reaped, otherwise libusb will be using + * freed memory. + * - the earlier URBs may have completed successfully and we do + * not want to throw away any data. + * so, in this case we discard all the previous URBs BUT we report + * that the transfer was submitted successfully. then later when + * the final discard completes we can report error to the user. + */ + tpriv->reap_action = SUBMIT_FAILED; + + /* The URBs we haven't submitted yet we count as already + * retired. */ + tpriv->num_retired = num_urbs - i; + discard_urbs(itransfer, 0, i); + + usbi_dbg("reporting successful submission but waiting for %d " + "discards before reporting error", i); + return 0; + } + } + + return 0; +} + +static int submit_control_transfer(struct usbi_transfer *itransfer) +{ + struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer); + struct libusb_transfer *transfer = + USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct linux_device_handle_priv *dpriv = + _device_handle_priv(transfer->dev_handle); + struct usbfs_urb *urb; + int r; + + if (tpriv->urbs) + return LIBUSB_ERROR_BUSY; + + if (transfer->length - LIBUSB_CONTROL_SETUP_SIZE > MAX_CTRL_BUFFER_LENGTH) + return LIBUSB_ERROR_INVALID_PARAM; + + urb = malloc(sizeof(struct usbfs_urb)); + if (!urb) + return LIBUSB_ERROR_NO_MEM; + memset(urb, 0, sizeof(struct usbfs_urb)); + tpriv->urbs = urb; + tpriv->num_urbs = 1; + tpriv->reap_action = NORMAL; + + urb->usercontext = itransfer; + urb->type = USBFS_URB_TYPE_CONTROL; + urb->endpoint = transfer->endpoint; + urb->buffer = transfer->buffer; + urb->buffer_length = transfer->length; + + r = ioctl(dpriv->fd, IOCTL_USBFS_SUBMITURB, urb); + if (r < 0) { + free(urb); + tpriv->urbs = NULL; + if (errno == ENODEV) + return LIBUSB_ERROR_NO_DEVICE; + + usbi_err(TRANSFER_CTX(transfer), + "submiturb failed error %d errno=%d", r, errno); + return LIBUSB_ERROR_IO; + } + return 0; +} + +static int op_submit_transfer(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = + USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + + switch (transfer->type) { + case LIBUSB_TRANSFER_TYPE_CONTROL: + return submit_control_transfer(itransfer); + case LIBUSB_TRANSFER_TYPE_BULK: + return submit_bulk_transfer(itransfer, USBFS_URB_TYPE_BULK); + case LIBUSB_TRANSFER_TYPE_INTERRUPT: + return submit_bulk_transfer(itransfer, USBFS_URB_TYPE_INTERRUPT); + case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: + return submit_iso_transfer(itransfer); + default: + usbi_err(TRANSFER_CTX(transfer), + "unknown endpoint type %d", transfer->type); + return LIBUSB_ERROR_INVALID_PARAM; + } +} + +static int op_cancel_transfer(struct usbi_transfer *itransfer) +{ + struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer); + struct libusb_transfer *transfer = + USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + + switch (transfer->type) { + case LIBUSB_TRANSFER_TYPE_BULK: + if (tpriv->reap_action == ERROR) + break; + /* else, fall through */ + case LIBUSB_TRANSFER_TYPE_CONTROL: + case LIBUSB_TRANSFER_TYPE_INTERRUPT: + case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: + tpriv->reap_action = CANCELLED; + break; + default: + usbi_err(TRANSFER_CTX(transfer), + "unknown endpoint type %d", transfer->type); + return LIBUSB_ERROR_INVALID_PARAM; + } + + if (!tpriv->urbs) + return LIBUSB_ERROR_NOT_FOUND; + + return discard_urbs(itransfer, 0, tpriv->num_urbs); +} + +static void op_clear_transfer_priv(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = + USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer); + + /* urbs can be freed also in submit_transfer so lock mutex first */ + switch (transfer->type) { + case LIBUSB_TRANSFER_TYPE_CONTROL: + case LIBUSB_TRANSFER_TYPE_BULK: + case LIBUSB_TRANSFER_TYPE_INTERRUPT: + usbi_mutex_lock(&itransfer->lock); + if (tpriv->urbs) + free(tpriv->urbs); + tpriv->urbs = NULL; + usbi_mutex_unlock(&itransfer->lock); + break; + case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: + usbi_mutex_lock(&itransfer->lock); + if (tpriv->iso_urbs) + free_iso_urbs(tpriv); + usbi_mutex_unlock(&itransfer->lock); + break; + default: + usbi_err(TRANSFER_CTX(transfer), + "unknown endpoint type %d", transfer->type); + } +} + +static int handle_bulk_completion(struct usbi_transfer *itransfer, + struct usbfs_urb *urb) +{ + struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer); + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + int urb_idx = urb - tpriv->urbs; + + usbi_mutex_lock(&itransfer->lock); + usbi_dbg("handling completion status %d of bulk urb %d/%d", urb->status, + urb_idx + 1, tpriv->num_urbs); + + tpriv->num_retired++; + + if (tpriv->reap_action != NORMAL) { + /* cancelled, submit_fail, or completed early */ + usbi_dbg("abnormal reap: urb status %d", urb->status); + + /* even though we're in the process of cancelling, it's possible that + * we may receive some data in these URBs that we don't want to lose. + * examples: + * 1. while the kernel is cancelling all the packets that make up an + * URB, a few of them might complete. so we get back a successful + * cancellation *and* some data. + * 2. we receive a short URB which marks the early completion condition, + * so we start cancelling the remaining URBs. however, we're too + * slow and another URB completes (or at least completes partially). + * (this can't happen since we always use BULK_CONTINUATION.) + * + * When this happens, our objectives are not to lose any "surplus" data, + * and also to stick it at the end of the previously-received data + * (closing any holes), so that libusb reports the total amount of + * transferred data and presents it in a contiguous chunk. + */ + if (urb->actual_length > 0) { + unsigned char *target = transfer->buffer + itransfer->transferred; + usbi_dbg("received %d bytes of surplus data", urb->actual_length); + if (urb->buffer != target) { + usbi_dbg("moving surplus data from offset %d to offset %d", + (unsigned char *) urb->buffer - transfer->buffer, + target - transfer->buffer); + memmove(target, urb->buffer, urb->actual_length); + } + itransfer->transferred += urb->actual_length; + } + + if (tpriv->num_retired == tpriv->num_urbs) { + usbi_dbg("abnormal reap: last URB handled, reporting"); + if (tpriv->reap_action != COMPLETED_EARLY && + tpriv->reap_status == LIBUSB_TRANSFER_COMPLETED) + tpriv->reap_status = LIBUSB_TRANSFER_ERROR; + goto completed; + } + goto out_unlock; + } + + itransfer->transferred += urb->actual_length; + + /* Many of these errors can occur on *any* urb of a multi-urb + * transfer. When they do, we tear down the rest of the transfer. + */ + switch (urb->status) { + case 0: + break; + case -EREMOTEIO: /* short transfer */ + break; + case -ENOENT: /* cancelled */ + case -ECONNRESET: + break; + case -ENODEV: + case -ESHUTDOWN: + usbi_dbg("device removed"); + tpriv->reap_status = LIBUSB_TRANSFER_NO_DEVICE; + goto cancel_remaining; + case -EPIPE: + usbi_dbg("detected endpoint stall"); + if (tpriv->reap_status == LIBUSB_TRANSFER_COMPLETED) + tpriv->reap_status = LIBUSB_TRANSFER_STALL; + goto cancel_remaining; + case -EOVERFLOW: + /* overflow can only ever occur in the last urb */ + usbi_dbg("overflow, actual_length=%d", urb->actual_length); + if (tpriv->reap_status == LIBUSB_TRANSFER_COMPLETED) + tpriv->reap_status = LIBUSB_TRANSFER_OVERFLOW; + goto completed; + case -ETIME: + case -EPROTO: + case -EILSEQ: + case -ECOMM: + case -ENOSR: + usbi_dbg("low level error %d", urb->status); + tpriv->reap_action = ERROR; + goto cancel_remaining; + default: + usbi_warn(ITRANSFER_CTX(itransfer), + "unrecognised urb status %d", urb->status); + tpriv->reap_action = ERROR; + goto cancel_remaining; + } + + /* if we're the last urb or we got less data than requested then we're + * done */ + if (urb_idx == tpriv->num_urbs - 1) { + usbi_dbg("last URB in transfer --> complete!"); + goto completed; + } else if (urb->actual_length < urb->buffer_length) { + usbi_dbg("short transfer %d/%d --> complete!", + urb->actual_length, urb->buffer_length); + if (tpriv->reap_action == NORMAL) + tpriv->reap_action = COMPLETED_EARLY; + } else + goto out_unlock; + +cancel_remaining: + if (ERROR == tpriv->reap_action && LIBUSB_TRANSFER_COMPLETED == tpriv->reap_status) + tpriv->reap_status = LIBUSB_TRANSFER_ERROR; + + if (tpriv->num_retired == tpriv->num_urbs) /* nothing to cancel */ + goto completed; + + /* cancel remaining urbs and wait for their completion before + * reporting results */ + discard_urbs(itransfer, urb_idx + 1, tpriv->num_urbs); + +out_unlock: + usbi_mutex_unlock(&itransfer->lock); + return 0; + +completed: + free(tpriv->urbs); + tpriv->urbs = NULL; + usbi_mutex_unlock(&itransfer->lock); + return CANCELLED == tpriv->reap_action ? + usbi_handle_transfer_cancellation(itransfer) : + usbi_handle_transfer_completion(itransfer, tpriv->reap_status); +} + +static int handle_iso_completion(struct usbi_transfer *itransfer, + struct usbfs_urb *urb) +{ + struct libusb_transfer *transfer = + USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer); + int num_urbs = tpriv->num_urbs; + int urb_idx = 0; + int i; + enum libusb_transfer_status status = LIBUSB_TRANSFER_COMPLETED; + + usbi_mutex_lock(&itransfer->lock); + for (i = 0; i < num_urbs; i++) { + if (urb == tpriv->iso_urbs[i]) { + urb_idx = i + 1; + break; + } + } + if (urb_idx == 0) { + usbi_err(TRANSFER_CTX(transfer), "could not locate urb!"); + usbi_mutex_unlock(&itransfer->lock); + return LIBUSB_ERROR_NOT_FOUND; + } + + usbi_dbg("handling completion status %d of iso urb %d/%d", urb->status, + urb_idx, num_urbs); + + /* copy isochronous results back in */ + + for (i = 0; i < urb->number_of_packets; i++) { + struct usbfs_iso_packet_desc *urb_desc = &urb->iso_frame_desc[i]; + struct libusb_iso_packet_descriptor *lib_desc = + &transfer->iso_packet_desc[tpriv->iso_packet_offset++]; + lib_desc->status = LIBUSB_TRANSFER_COMPLETED; + switch (urb_desc->status) { + case 0: + break; + case -ENOENT: /* cancelled */ + case -ECONNRESET: + break; + case -ENODEV: + case -ESHUTDOWN: + usbi_dbg("device removed"); + lib_desc->status = LIBUSB_TRANSFER_NO_DEVICE; + break; + case -EPIPE: + usbi_dbg("detected endpoint stall"); + lib_desc->status = LIBUSB_TRANSFER_STALL; + break; + case -EOVERFLOW: + usbi_dbg("overflow error"); + lib_desc->status = LIBUSB_TRANSFER_OVERFLOW; + break; + case -ETIME: + case -EPROTO: + case -EILSEQ: + case -ECOMM: + case -ENOSR: + case -EXDEV: + usbi_dbg("low-level USB error %d", urb_desc->status); + lib_desc->status = LIBUSB_TRANSFER_ERROR; + break; + default: + usbi_warn(TRANSFER_CTX(transfer), + "unrecognised urb status %d", urb_desc->status); + lib_desc->status = LIBUSB_TRANSFER_ERROR; + break; + } + lib_desc->actual_length = urb_desc->actual_length; + } + + tpriv->num_retired++; + + if (tpriv->reap_action != NORMAL) { /* cancelled or submit_fail */ + usbi_dbg("CANCEL: urb status %d", urb->status); + + if (tpriv->num_retired == num_urbs) { + usbi_dbg("CANCEL: last URB handled, reporting"); + free_iso_urbs(tpriv); + if (tpriv->reap_action == CANCELLED) { + usbi_mutex_unlock(&itransfer->lock); + return usbi_handle_transfer_cancellation(itransfer); + } else { + usbi_mutex_unlock(&itransfer->lock); + return usbi_handle_transfer_completion(itransfer, + LIBUSB_TRANSFER_ERROR); + } + } + goto out; + } + + switch (urb->status) { + case 0: + break; + case -ENOENT: /* cancelled */ + case -ECONNRESET: + break; + case -ESHUTDOWN: + usbi_dbg("device removed"); + status = LIBUSB_TRANSFER_NO_DEVICE; + break; + default: + usbi_warn(TRANSFER_CTX(transfer), + "unrecognised urb status %d", urb->status); + status = LIBUSB_TRANSFER_ERROR; + break; + } + + /* if we're the last urb then we're done */ + if (urb_idx == num_urbs) { + usbi_dbg("last URB in transfer --> complete!"); + free_iso_urbs(tpriv); + usbi_mutex_unlock(&itransfer->lock); + return usbi_handle_transfer_completion(itransfer, status); + } + +out: + usbi_mutex_unlock(&itransfer->lock); + return 0; +} + +static int handle_control_completion(struct usbi_transfer *itransfer, + struct usbfs_urb *urb) +{ + struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer); + int status; + + usbi_mutex_lock(&itransfer->lock); + usbi_dbg("handling completion status %d", urb->status); + + itransfer->transferred += urb->actual_length; + + if (tpriv->reap_action == CANCELLED) { + if (urb->status != 0 && urb->status != -ENOENT) + usbi_warn(ITRANSFER_CTX(itransfer), + "cancel: unrecognised urb status %d", urb->status); + free(tpriv->urbs); + tpriv->urbs = NULL; + usbi_mutex_unlock(&itransfer->lock); + return usbi_handle_transfer_cancellation(itransfer); + } + + switch (urb->status) { + case 0: + status = LIBUSB_TRANSFER_COMPLETED; + break; + case -ENOENT: /* cancelled */ + status = LIBUSB_TRANSFER_CANCELLED; + break; + case -ENODEV: + case -ESHUTDOWN: + usbi_dbg("device removed"); + status = LIBUSB_TRANSFER_NO_DEVICE; + break; + case -EPIPE: + usbi_dbg("unsupported control request"); + status = LIBUSB_TRANSFER_STALL; + break; + case -EOVERFLOW: + usbi_dbg("control overflow error"); + status = LIBUSB_TRANSFER_OVERFLOW; + break; + case -ETIME: + case -EPROTO: + case -EILSEQ: + case -ECOMM: + case -ENOSR: + usbi_dbg("low-level bus error occurred"); + status = LIBUSB_TRANSFER_ERROR; + break; + default: + usbi_warn(ITRANSFER_CTX(itransfer), + "unrecognised urb status %d", urb->status); + status = LIBUSB_TRANSFER_ERROR; + break; + } + + free(tpriv->urbs); + tpriv->urbs = NULL; + usbi_mutex_unlock(&itransfer->lock); + return usbi_handle_transfer_completion(itransfer, status); +} + +static int reap_for_handle(struct libusb_device_handle *handle) +{ + struct linux_device_handle_priv *hpriv = _device_handle_priv(handle); + int r; + struct usbfs_urb *urb; + struct usbi_transfer *itransfer; + struct libusb_transfer *transfer; + + r = ioctl(hpriv->fd, IOCTL_USBFS_REAPURBNDELAY, &urb); + if (r == -1 && errno == EAGAIN) + return 1; + if (r < 0) { + if (errno == ENODEV) + return LIBUSB_ERROR_NO_DEVICE; + + usbi_err(HANDLE_CTX(handle), "reap failed error %d errno=%d", + r, errno); + return LIBUSB_ERROR_IO; + } + + itransfer = urb->usercontext; + transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + + usbi_dbg("urb type=%d status=%d transferred=%d", urb->type, urb->status, + urb->actual_length); + + switch (transfer->type) { + case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: + return handle_iso_completion(itransfer, urb); + case LIBUSB_TRANSFER_TYPE_BULK: + case LIBUSB_TRANSFER_TYPE_INTERRUPT: + return handle_bulk_completion(itransfer, urb); + case LIBUSB_TRANSFER_TYPE_CONTROL: + return handle_control_completion(itransfer, urb); + default: + usbi_err(HANDLE_CTX(handle), "unrecognised endpoint type %x", + transfer->type); + return LIBUSB_ERROR_OTHER; + } +} + +static int op_handle_events(struct libusb_context *ctx, + struct pollfd *fds, POLL_NFDS_TYPE nfds, int num_ready) +{ + int r; + int i = 0; + + usbi_mutex_lock(&ctx->open_devs_lock); + for (i = 0; i < nfds && num_ready > 0; i++) { + struct pollfd *pollfd = &fds[i]; + struct libusb_device_handle *handle; + struct linux_device_handle_priv *hpriv = NULL; + + if (!pollfd->revents) + continue; + + num_ready--; + list_for_each_entry(handle, &ctx->open_devs, list, struct libusb_device_handle) { + hpriv = _device_handle_priv(handle); + if (hpriv->fd == pollfd->fd) + break; + } + + if (pollfd->revents & POLLERR) { + usbi_remove_pollfd(HANDLE_CTX(handle), hpriv->fd); + usbi_handle_disconnect(handle); + continue; + } + + r = reap_for_handle(handle); + if (r == 1 || r == LIBUSB_ERROR_NO_DEVICE) + continue; + else if (r < 0) + goto out; + } + + r = 0; +out: + usbi_mutex_unlock(&ctx->open_devs_lock); + return r; +} + +static int op_clock_gettime(int clk_id, struct timespec *tp) +{ + switch (clk_id) { + case USBI_CLOCK_MONOTONIC: + return clock_gettime(monotonic_clkid, tp); + case USBI_CLOCK_REALTIME: + return clock_gettime(CLOCK_REALTIME, tp); + default: + return LIBUSB_ERROR_INVALID_PARAM; + } +} + +#ifdef USBI_TIMERFD_AVAILABLE +static clockid_t op_get_timerfd_clockid(void) +{ + return monotonic_clkid; + +} +#endif + +const struct usbi_os_backend linux_usbfs_backend = { + .name = "Linux usbfs", + .init = op_init, + .exit = NULL, + .get_device_list = op_get_device_list, + .get_device_descriptor = op_get_device_descriptor, + .get_active_config_descriptor = op_get_active_config_descriptor, + .get_config_descriptor = op_get_config_descriptor, + + .open = op_open, + .close = op_close, + .get_configuration = op_get_configuration, + .set_configuration = op_set_configuration, + .claim_interface = op_claim_interface, + .release_interface = op_release_interface, + + .set_interface_altsetting = op_set_interface, + .clear_halt = op_clear_halt, + .reset_device = op_reset_device, + + .kernel_driver_active = op_kernel_driver_active, + .detach_kernel_driver = op_detach_kernel_driver, + .attach_kernel_driver = op_attach_kernel_driver, + + .destroy_device = op_destroy_device, + + .submit_transfer = op_submit_transfer, + .cancel_transfer = op_cancel_transfer, + .clear_transfer_priv = op_clear_transfer_priv, + + .handle_events = op_handle_events, + + .clock_gettime = op_clock_gettime, + +#ifdef USBI_TIMERFD_AVAILABLE + .get_timerfd_clockid = op_get_timerfd_clockid, +#endif + + .device_priv_size = sizeof(struct linux_device_priv), + .device_handle_priv_size = sizeof(struct linux_device_handle_priv), + .transfer_priv_size = sizeof(struct linux_transfer_priv), + .add_iso_packet_size = 0, +}; + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/linux_usbfs.h b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/linux_usbfs.h new file mode 100644 index 0000000..487acb5 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/linux_usbfs.h @@ -0,0 +1,139 @@ +/* + * usbfs header structures + * Copyright (C) 2007 Daniel Drake + * Copyright (c) 2001 Johannes Erdfelt + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef LIBUSB_USBFS_H +#define LIBUSB_USBFS_H + +#define SYSFS_DEVICE_PATH "/sys/bus/usb/devices" + +struct usbfs_ctrltransfer { + /* keep in sync with usbdevice_fs.h:usbdevfs_ctrltransfer */ + uint8_t bmRequestType; + uint8_t bRequest; + uint16_t wValue; + uint16_t wIndex; + uint16_t wLength; + + uint32_t timeout; /* in milliseconds */ + + /* pointer to data */ + void *data; +}; + +struct usbfs_bulktransfer { + /* keep in sync with usbdevice_fs.h:usbdevfs_bulktransfer */ + unsigned int ep; + unsigned int len; + unsigned int timeout; /* in milliseconds */ + + /* pointer to data */ + void *data; +}; + +struct usbfs_setinterface { + /* keep in sync with usbdevice_fs.h:usbdevfs_setinterface */ + unsigned int interface; + unsigned int altsetting; +}; + +#define USBFS_MAXDRIVERNAME 255 + +struct usbfs_getdriver { + unsigned int interface; + char driver[USBFS_MAXDRIVERNAME + 1]; +}; + +#define USBFS_URB_SHORT_NOT_OK 0x01 +#define USBFS_URB_ISO_ASAP 0x02 +#define USBFS_URB_BULK_CONTINUATION 0x04 +#define USBFS_URB_QUEUE_BULK 0x10 +#define USBFS_URB_ZERO_PACKET 0x40 + +enum usbfs_urb_type { + USBFS_URB_TYPE_ISO = 0, + USBFS_URB_TYPE_INTERRUPT = 1, + USBFS_URB_TYPE_CONTROL = 2, + USBFS_URB_TYPE_BULK = 3, +}; + +struct usbfs_iso_packet_desc { + unsigned int length; + unsigned int actual_length; + unsigned int status; +}; + +#define MAX_ISO_BUFFER_LENGTH 32768 +#define MAX_BULK_BUFFER_LENGTH 16384 +#define MAX_CTRL_BUFFER_LENGTH 4096 + +struct usbfs_urb { + unsigned char type; + unsigned char endpoint; + int status; + unsigned int flags; + void *buffer; + int buffer_length; + int actual_length; + int start_frame; + int number_of_packets; + int error_count; + unsigned int signr; + void *usercontext; + struct usbfs_iso_packet_desc iso_frame_desc[0]; +}; + +struct usbfs_connectinfo { + unsigned int devnum; + unsigned char slow; +}; + +struct usbfs_ioctl { + int ifno; /* interface 0..N ; negative numbers reserved */ + int ioctl_code; /* MUST encode size + direction of data so the + * macros in give correct values */ + void *data; /* param buffer (in, or out) */ +}; + +struct usbfs_hub_portinfo { + unsigned char numports; + unsigned char port[127]; /* port to device num mapping */ +}; + +#define IOCTL_USBFS_CONTROL _IOWR('U', 0, struct usbfs_ctrltransfer) +#define IOCTL_USBFS_BULK _IOWR('U', 2, struct usbfs_bulktransfer) +#define IOCTL_USBFS_RESETEP _IOR('U', 3, unsigned int) +#define IOCTL_USBFS_SETINTF _IOR('U', 4, struct usbfs_setinterface) +#define IOCTL_USBFS_SETCONFIG _IOR('U', 5, unsigned int) +#define IOCTL_USBFS_GETDRIVER _IOW('U', 8, struct usbfs_getdriver) +#define IOCTL_USBFS_SUBMITURB _IOR('U', 10, struct usbfs_urb) +#define IOCTL_USBFS_DISCARDURB _IO('U', 11) +#define IOCTL_USBFS_REAPURB _IOW('U', 12, void *) +#define IOCTL_USBFS_REAPURBNDELAY _IOW('U', 13, void *) +#define IOCTL_USBFS_CLAIMINTF _IOR('U', 15, unsigned int) +#define IOCTL_USBFS_RELEASEINTF _IOR('U', 16, unsigned int) +#define IOCTL_USBFS_CONNECTINFO _IOW('U', 17, struct usbfs_connectinfo) +#define IOCTL_USBFS_IOCTL _IOWR('U', 18, struct usbfs_ioctl) +#define IOCTL_USBFS_HUB_PORTINFO _IOR('U', 19, struct usbfs_hub_portinfo) +#define IOCTL_USBFS_RESET _IO('U', 20) +#define IOCTL_USBFS_CLEAR_HALT _IOR('U', 21, unsigned int) +#define IOCTL_USBFS_DISCONNECT _IO('U', 22) +#define IOCTL_USBFS_CONNECT _IO('U', 23) + +#endif diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/openbsd_usb.c b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/openbsd_usb.c new file mode 100644 index 0000000..e31941b --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/openbsd_usb.c @@ -0,0 +1,727 @@ +/* + * Copyright (c) 2011 Martin Pieuchot + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include "libusb.h" +#include "libusbi.h" + +struct device_priv { + char devnode[16]; + int fd; + + unsigned char *cdesc; /* active config descriptor */ + usb_device_descriptor_t ddesc; /* usb device descriptor */ +}; + +struct handle_priv { + int pipe[2]; /* for event notification */ + int endpoints[USB_MAX_ENDPOINTS]; +}; + +/* + * Backend functions + */ +static int obsd_get_device_list(struct libusb_context *, + struct discovered_devs **); +static int obsd_open(struct libusb_device_handle *); +static void obsd_close(struct libusb_device_handle *); + +static int obsd_get_device_descriptor(struct libusb_device *, unsigned char *, + int *); +static int obsd_get_active_config_descriptor(struct libusb_device *, + unsigned char *, size_t, int *); +static int obsd_get_config_descriptor(struct libusb_device *, uint8_t, + unsigned char *, size_t, int *); + +static int obsd_get_configuration(struct libusb_device_handle *, int *); +static int obsd_set_configuration(struct libusb_device_handle *, int); + +static int obsd_claim_interface(struct libusb_device_handle *, int); +static int obsd_release_interface(struct libusb_device_handle *, int); + +static int obsd_set_interface_altsetting(struct libusb_device_handle *, int, + int); +static int obsd_clear_halt(struct libusb_device_handle *, unsigned char); +static int obsd_reset_device(struct libusb_device_handle *); +static void obsd_destroy_device(struct libusb_device *); + +static int obsd_submit_transfer(struct usbi_transfer *); +static int obsd_cancel_transfer(struct usbi_transfer *); +static void obsd_clear_transfer_priv(struct usbi_transfer *); +static int obsd_handle_events(struct libusb_context *ctx, struct pollfd *, + nfds_t, int); +static int obsd_clock_gettime(int, struct timespec *); + +/* + * Private functions + */ +static int _errno_to_libusb(int); +static int _cache_active_config_descriptor(struct libusb_device *, int); +static int _sync_control_transfer(struct usbi_transfer *); +static int _sync_gen_transfer(struct usbi_transfer *); +static int _access_endpoint(struct libusb_transfer *); + +const struct usbi_os_backend openbsd_backend = { + "Synchronous OpenBSD backend", + NULL, /* init() */ + NULL, /* exit() */ + obsd_get_device_list, + obsd_open, + obsd_close, + + obsd_get_device_descriptor, + obsd_get_active_config_descriptor, + obsd_get_config_descriptor, + + obsd_get_configuration, + obsd_set_configuration, + + obsd_claim_interface, + obsd_release_interface, + + obsd_set_interface_altsetting, + obsd_clear_halt, + obsd_reset_device, + + NULL, /* kernel_driver_active() */ + NULL, /* detach_kernel_driver() */ + NULL, /* attach_kernel_driver() */ + + obsd_destroy_device, + + obsd_submit_transfer, + obsd_cancel_transfer, + obsd_clear_transfer_priv, + + obsd_handle_events, + + obsd_clock_gettime, + sizeof(struct device_priv), + sizeof(struct handle_priv), + 0, /* transfer_priv_size */ + 0, /* add_iso_packet_size */ +}; + +int +obsd_get_device_list(struct libusb_context * ctx, + struct discovered_devs **discdevs) +{ + struct libusb_device *dev; + struct device_priv *dpriv; + struct usb_device_info di; + unsigned long session_id; + char devnode[16]; + int fd, err, i; + + usbi_dbg(""); + + /* Only ugen(4) is supported */ + for (i = 0; i < USB_MAX_DEVICES; i++) { + /* Control endpoint is always .00 */ + snprintf(devnode, sizeof(devnode), "/dev/ugen%d.00", i); + + if ((fd = open(devnode, O_RDONLY)) < 0) { + if (errno != ENOENT && errno != ENXIO) + usbi_err(ctx, "could not open %s", devnode); + continue; + } + + if (ioctl(fd, USB_GET_DEVICEINFO, &di) < 0) + continue; + + session_id = (di.udi_bus << 8 | di.udi_addr); + dev = usbi_get_device_by_session_id(ctx, session_id); + + if (dev == NULL) { + dev = usbi_alloc_device(ctx, session_id); + if (dev == NULL) + return (LIBUSB_ERROR_NO_MEM); + + dev->bus_number = di.udi_bus; + dev->device_address = di.udi_addr; + dev->speed = di.udi_speed; + + dpriv = (struct device_priv *)dev->os_priv; + strlcpy(dpriv->devnode, devnode, sizeof(devnode)); + dpriv->fd = -1; + + if (ioctl(fd, USB_GET_DEVICE_DESC, &dpriv->ddesc) < 0) { + err = errno; + goto error; + } + + dpriv->cdesc = NULL; + if (_cache_active_config_descriptor(dev, fd)) { + err = errno; + goto error; + } + + if ((err = usbi_sanitize_device(dev))) + goto error; + } + close(fd); + + if (discovered_devs_append(*discdevs, dev) == NULL) + return (LIBUSB_ERROR_NO_MEM); + } + + return (LIBUSB_SUCCESS); + +error: + close(fd); + libusb_unref_device(dev); + return _errno_to_libusb(err); +} + +int +obsd_open(struct libusb_device_handle *handle) +{ + struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv; + struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv; + + dpriv->fd = open(dpriv->devnode, O_RDWR); + if (dpriv->fd < 0) { + dpriv->fd = open(dpriv->devnode, O_RDONLY); + if (dpriv->fd < 0) + return _errno_to_libusb(errno); + } + + usbi_dbg("open %s: fd %d", dpriv->devnode, dpriv->fd); + + if (pipe(hpriv->pipe) < 0) + return _errno_to_libusb(errno); + + return usbi_add_pollfd(HANDLE_CTX(handle), hpriv->pipe[0], POLLIN); +} + +void +obsd_close(struct libusb_device_handle *handle) +{ + struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv; + struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv; + + usbi_dbg("close: fd %d", dpriv->fd); + + close(dpriv->fd); + dpriv->fd = -1; + + usbi_remove_pollfd(HANDLE_CTX(handle), hpriv->pipe[0]); + + close(hpriv->pipe[0]); + close(hpriv->pipe[1]); +} + +int +obsd_get_device_descriptor(struct libusb_device *dev, unsigned char *buf, + int *host_endian) +{ + struct device_priv *dpriv = (struct device_priv *)dev->os_priv; + + usbi_dbg(""); + + memcpy(buf, &dpriv->ddesc, DEVICE_DESC_LENGTH); + + *host_endian = 0; + + return (LIBUSB_SUCCESS); +} + +int +obsd_get_active_config_descriptor(struct libusb_device *dev, + unsigned char *buf, size_t len, int *host_endian) +{ + struct device_priv *dpriv = (struct device_priv *)dev->os_priv; + usb_config_descriptor_t *ucd; + + ucd = (usb_config_descriptor_t *) dpriv->cdesc; + len = MIN(len, UGETW(ucd->wTotalLength)); + + usbi_dbg("len %d", len); + + memcpy(buf, dpriv->cdesc, len); + + *host_endian = 0; + + return (LIBUSB_SUCCESS); +} + +int +obsd_get_config_descriptor(struct libusb_device *dev, uint8_t idx, + unsigned char *buf, size_t len, int *host_endian) +{ + struct device_priv *dpriv = (struct device_priv *)dev->os_priv; + struct usb_full_desc ufd; + int fd, err; + + usbi_dbg("index %d, len %d", idx, len); + + /* A config descriptor may be requested before opening the device */ + if (dpriv->fd >= 0) { + fd = dpriv->fd; + } else { + fd = open(dpriv->devnode, O_RDONLY); + if (fd < 0) + return _errno_to_libusb(errno); + } + + ufd.ufd_config_index = idx; + ufd.ufd_size = len; + ufd.ufd_data = buf; + + if ((ioctl(fd, USB_GET_FULL_DESC, &ufd)) < 0) { + err = errno; + if (dpriv->fd < 0) + close(fd); + return _errno_to_libusb(err); + } + + if (dpriv->fd < 0) + close(fd); + + *host_endian = 0; + + return (LIBUSB_SUCCESS); +} + +int +obsd_get_configuration(struct libusb_device_handle *handle, int *config) +{ + struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv; + + usbi_dbg(""); + + if (ioctl(dpriv->fd, USB_GET_CONFIG, config) < 0) + return _errno_to_libusb(errno); + + usbi_dbg("configuration %d", *config); + + return (LIBUSB_SUCCESS); +} + +int +obsd_set_configuration(struct libusb_device_handle *handle, int config) +{ + struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv; + + usbi_dbg("configuration %d", config); + + if (ioctl(dpriv->fd, USB_SET_CONFIG, &config) < 0) + return _errno_to_libusb(errno); + + return _cache_active_config_descriptor(handle->dev, dpriv->fd); +} + +int +obsd_claim_interface(struct libusb_device_handle *handle, int iface) +{ + struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv; + int i; + + for (i = 0; i < USB_MAX_ENDPOINTS; i++) + hpriv->endpoints[i] = -1; + + return (LIBUSB_SUCCESS); +} + +int +obsd_release_interface(struct libusb_device_handle *handle, int iface) +{ + struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv; + int i; + + for (i = 0; i < USB_MAX_ENDPOINTS; i++) + if (hpriv->endpoints[i] >= 0) + close(hpriv->endpoints[i]); + + return (LIBUSB_SUCCESS); +} + +int +obsd_set_interface_altsetting(struct libusb_device_handle *handle, int iface, + int altsetting) +{ + struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv; + struct usb_alt_interface intf; + + usbi_dbg("iface %d, setting %d", iface, altsetting); + + memset(&intf, 0, sizeof(intf)); + + intf.uai_interface_index = iface; + intf.uai_alt_no = altsetting; + + if (ioctl(dpriv->fd, USB_SET_ALTINTERFACE, &intf) < 0) + return _errno_to_libusb(errno); + + return (LIBUSB_SUCCESS); +} + +int +obsd_clear_halt(struct libusb_device_handle *handle, unsigned char endpoint) +{ + struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv; + struct usb_ctl_request req; + + usbi_dbg(""); + + req.ucr_request.bmRequestType = UT_WRITE_ENDPOINT; + req.ucr_request.bRequest = UR_CLEAR_FEATURE; + USETW(req.ucr_request.wValue, UF_ENDPOINT_HALT); + USETW(req.ucr_request.wIndex, endpoint); + USETW(req.ucr_request.wLength, 0); + + if (ioctl(dpriv->fd, USB_DO_REQUEST, &req) < 0) + return _errno_to_libusb(errno); + + return (LIBUSB_SUCCESS); +} + +int +obsd_reset_device(struct libusb_device_handle *handle) +{ + usbi_dbg(""); + + return (LIBUSB_ERROR_NOT_SUPPORTED); +} + +void +obsd_destroy_device(struct libusb_device *dev) +{ + struct device_priv *dpriv = (struct device_priv *)dev->os_priv; + + usbi_dbg(""); + + free(dpriv->cdesc); +} + +int +obsd_submit_transfer(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer; + struct handle_priv *hpriv; + int err = 0; + + usbi_dbg(""); + + transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + hpriv = (struct handle_priv *)transfer->dev_handle->os_priv; + + switch (transfer->type) { + case LIBUSB_TRANSFER_TYPE_CONTROL: + err = _sync_control_transfer(itransfer); + break; + case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: + if (IS_XFEROUT(transfer)) { + /* Isochronous write is not supported */ + err = LIBUSB_ERROR_NOT_SUPPORTED; + break; + } + err = _sync_gen_transfer(itransfer); + break; + case LIBUSB_TRANSFER_TYPE_BULK: + case LIBUSB_TRANSFER_TYPE_INTERRUPT: + if (IS_XFEROUT(transfer) && + transfer->flags & LIBUSB_TRANSFER_ADD_ZERO_PACKET) { + err = LIBUSB_ERROR_NOT_SUPPORTED; + break; + } + err = _sync_gen_transfer(itransfer); + break; + } + + if (err) + return (err); + + if (write(hpriv->pipe[1], &itransfer, sizeof(itransfer)) < 0) + return _errno_to_libusb(errno); + + return (LIBUSB_SUCCESS); +} + +int +obsd_cancel_transfer(struct usbi_transfer *itransfer) +{ + usbi_dbg(""); + + return (LIBUSB_ERROR_NOT_SUPPORTED); +} + +void +obsd_clear_transfer_priv(struct usbi_transfer *itransfer) +{ + usbi_dbg(""); + + /* Nothing to do */ +} + +int +obsd_handle_events(struct libusb_context *ctx, struct pollfd *fds, nfds_t nfds, + int num_ready) +{ + struct libusb_device_handle *handle; + struct handle_priv *hpriv = NULL; + struct usbi_transfer *itransfer; + struct pollfd *pollfd; + int i, err = 0; + + usbi_dbg(""); + + pthread_mutex_lock(&ctx->open_devs_lock); + for (i = 0; i < nfds && num_ready > 0; i++) { + pollfd = &fds[i]; + + if (!pollfd->revents) + continue; + + hpriv = NULL; + num_ready--; + list_for_each_entry(handle, &ctx->open_devs, list, + struct libusb_device_handle) { + hpriv = (struct handle_priv *)handle->os_priv; + + if (hpriv->pipe[0] == pollfd->fd) + break; + + hpriv = NULL; + } + + if (NULL == hpriv) { + usbi_dbg("fd %d is not an event pipe!", pollfd->fd); + err = ENOENT; + break; + } + + if (pollfd->revents & POLLERR) { + usbi_remove_pollfd(HANDLE_CTX(handle), hpriv->pipe[0]); + usbi_handle_disconnect(handle); + continue; + } + + if (read(hpriv->pipe[0], &itransfer, sizeof(itransfer)) < 0) { + err = errno; + break; + } + + if ((err = usbi_handle_transfer_completion(itransfer, + LIBUSB_TRANSFER_COMPLETED))) + break; + } + pthread_mutex_unlock(&ctx->open_devs_lock); + + if (err) + return _errno_to_libusb(err); + + return (LIBUSB_SUCCESS); +} + +int +obsd_clock_gettime(int clkid, struct timespec *tp) +{ + usbi_dbg("clock %d", clkid); + + if (clkid == USBI_CLOCK_REALTIME) + return clock_gettime(CLOCK_REALTIME, tp); + + if (clkid == USBI_CLOCK_MONOTONIC) + return clock_gettime(CLOCK_MONOTONIC, tp); + + return (LIBUSB_ERROR_INVALID_PARAM); +} + +int +_errno_to_libusb(int err) +{ + switch (err) { + case EIO: + return (LIBUSB_ERROR_IO); + case EACCES: + return (LIBUSB_ERROR_ACCESS); + case ENOENT: + return (LIBUSB_ERROR_NO_DEVICE); + case ENOMEM: + return (LIBUSB_ERROR_NO_MEM); + } + + usbi_dbg("error: %s", strerror(err)); + + return (LIBUSB_ERROR_OTHER); +} + +int +_cache_active_config_descriptor(struct libusb_device *dev, int fd) +{ + struct device_priv *dpriv = (struct device_priv *)dev->os_priv; + struct usb_config_desc ucd; + struct usb_full_desc ufd; + unsigned char* buf; + int len; + + usbi_dbg("fd %d", fd); + + ucd.ucd_config_index = USB_CURRENT_CONFIG_INDEX; + + if ((ioctl(fd, USB_GET_CONFIG_DESC, &ucd)) < 0) + return _errno_to_libusb(errno); + + usbi_dbg("active bLength %d", ucd.ucd_desc.bLength); + + len = UGETW(ucd.ucd_desc.wTotalLength); + buf = malloc(len); + if (buf == NULL) + return (LIBUSB_ERROR_NO_MEM); + + ufd.ufd_config_index = ucd.ucd_config_index; + ufd.ufd_size = len; + ufd.ufd_data = buf; + + usbi_dbg("index %d, len %d", ufd.ufd_config_index, len); + + if ((ioctl(fd, USB_GET_FULL_DESC, &ufd)) < 0) { + free(buf); + return _errno_to_libusb(errno); + } + + if (dpriv->cdesc) + free(dpriv->cdesc); + dpriv->cdesc = buf; + + return (0); +} + +int +_sync_control_transfer(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer; + struct libusb_control_setup *setup; + struct device_priv *dpriv; + struct usb_ctl_request req; + + transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + dpriv = (struct device_priv *)transfer->dev_handle->dev->os_priv; + setup = (struct libusb_control_setup *)transfer->buffer; + + usbi_dbg("type %d request %d value %d index %d length %d timeout %d", + setup->bmRequestType, setup->bRequest, + libusb_le16_to_cpu(setup->wValue), + libusb_le16_to_cpu(setup->wIndex), + libusb_le16_to_cpu(setup->wLength), transfer->timeout); + + req.ucr_request.bmRequestType = setup->bmRequestType; + req.ucr_request.bRequest = setup->bRequest; + /* Don't use USETW, libusb already deals with the endianness */ + (*(uint16_t *)req.ucr_request.wValue) = setup->wValue; + (*(uint16_t *)req.ucr_request.wIndex) = setup->wIndex; + (*(uint16_t *)req.ucr_request.wLength) = setup->wLength; + req.ucr_data = transfer->buffer + LIBUSB_CONTROL_SETUP_SIZE; + + if ((transfer->flags & LIBUSB_TRANSFER_SHORT_NOT_OK) == 0) + req.ucr_flags = USBD_SHORT_XFER_OK; + + if ((ioctl(dpriv->fd, USB_SET_TIMEOUT, &transfer->timeout)) < 0) + return _errno_to_libusb(errno); + + if ((ioctl(dpriv->fd, USB_DO_REQUEST, &req)) < 0) + return _errno_to_libusb(errno); + + itransfer->transferred = req.ucr_actlen; + + usbi_dbg("transferred %d", itransfer->transferred); + + return (0); +} + +int +_access_endpoint(struct libusb_transfer *transfer) +{ + struct handle_priv *hpriv; + struct device_priv *dpriv; + char *s, devnode[16]; + int fd, endpt; + mode_t mode; + + hpriv = (struct handle_priv *)transfer->dev_handle->os_priv; + dpriv = (struct device_priv *)transfer->dev_handle->dev->os_priv; + + endpt = UE_GET_ADDR(transfer->endpoint); + mode = IS_XFERIN(transfer) ? O_RDONLY : O_WRONLY; + + usbi_dbg("endpoint %d mode %d", endpt, mode); + + if (hpriv->endpoints[endpt] < 0) { + /* Pick the right node given the control one */ + strlcpy(devnode, dpriv->devnode, sizeof(devnode)); + s = strchr(devnode, '.'); + snprintf(s, 4, ".%02d", endpt); + + /* We may need to read/write to the same endpoint later. */ + if (((fd = open(devnode, O_RDWR)) < 0) && (errno == ENXIO)) + if ((fd = open(devnode, mode)) < 0) + return (-1); + + hpriv->endpoints[endpt] = fd; + } + + return (hpriv->endpoints[endpt]); +} + +int +_sync_gen_transfer(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer; + int fd, nr = 1; + + transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + + /* + * Bulk, Interrupt or Isochronous transfer depends on the + * endpoint and thus the node to open. + */ + if ((fd = _access_endpoint(transfer)) < 0) + return _errno_to_libusb(errno); + + if ((ioctl(fd, USB_SET_TIMEOUT, &transfer->timeout)) < 0) + return _errno_to_libusb(errno); + + if (IS_XFERIN(transfer)) { + if ((transfer->flags & LIBUSB_TRANSFER_SHORT_NOT_OK) == 0) + if ((ioctl(fd, USB_SET_SHORT_XFER, &nr)) < 0) + return _errno_to_libusb(errno); + + nr = read(fd, transfer->buffer, transfer->length); + } else { + nr = write(fd, transfer->buffer, transfer->length); + } + + if (nr < 0) + return _errno_to_libusb(errno); + + itransfer->transferred = nr; + + return (0); +} diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/poll_posix.h b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/poll_posix.h new file mode 100644 index 0000000..0e5e7f5 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/poll_posix.h @@ -0,0 +1,10 @@ +#ifndef LIBUSB_POLL_POSIX_H +#define LIBUSB_POLL_POSIX_H + +#define usbi_write write +#define usbi_read read +#define usbi_close close +#define usbi_pipe pipe +#define usbi_poll poll + +#endif /* LIBUSB_POLL_POSIX_H */ diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/poll_windows.c b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/poll_windows.c new file mode 100644 index 0000000..7f4d9c4 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/poll_windows.c @@ -0,0 +1,745 @@ +/* + * poll_windows: poll compatibility wrapper for Windows + * Copyright (C) 2009-2010 Pete Batard + * With contributions from Michael Plante, Orin Eman et al. + * Parts of poll implementation from libusb-win32, by Stephan Meyer et al. + * + * 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 + * + */ + +/* + * poll() and pipe() Windows compatibility layer for libusb 1.0 + * + * The way this layer works is by using OVERLAPPED with async I/O transfers, as + * OVERLAPPED have an associated event which is flagged for I/O completion. + * + * For USB pollable async I/O, you would typically: + * - obtain a Windows HANDLE to a file or device that has been opened in + * OVERLAPPED mode + * - call usbi_create_fd with this handle to obtain a custom fd. + * Note that if you need simultaneous R/W access, you need to call create_fd + * twice, once in _O_RDONLY and once in _O_WRONLY mode to obtain 2 separate + * pollable fds + * - leave the core functions call the poll routine and flag POLLIN/POLLOUT + * + * The pipe pollable synchronous I/O works using the overlapped event associated + * with a fake pipe. The read/write functions are only meant to be used in that + * context. + */ +#include +#include +#include +#include +#include + +#include + +// Uncomment to debug the polling layer +//#define DEBUG_POLL_WINDOWS +#if defined(DEBUG_POLL_WINDOWS) +#define poll_dbg usbi_dbg +#else +// MSVC++ < 2005 cannot use a variadic argument and non MSVC +// compilers produce warnings if parenthesis are omitted. +#if defined(_MSC_VER) && _MSC_VER < 1400 +#define poll_dbg +#else +#define poll_dbg(...) +#endif +#endif + +#if defined(_PREFAST_) +#pragma warning(disable:28719) +#endif + +#if defined(__CYGWIN__) +// cygwin produces a warning unless these prototypes are defined +extern int _open(char* name, int flags); +extern int _close(int fd); +extern int _snprintf(char *buffer, size_t count, const char *format, ...); +#define NUL_DEVICE "/dev/null" +#else +#define NUL_DEVICE "NUL" +#endif + +#define CHECK_INIT_POLLING do {if(!is_polling_set) init_polling();} while(0) + +// public fd data +const struct winfd INVALID_WINFD = {-1, INVALID_HANDLE_VALUE, NULL, RW_NONE}; +struct winfd poll_fd[MAX_FDS]; +// internal fd data +struct { + CRITICAL_SECTION mutex; // lock for fds + // Additional variables for XP CancelIoEx partial emulation + HANDLE original_handle; + DWORD thread_id; +} _poll_fd[MAX_FDS]; + +// globals +BOOLEAN is_polling_set = FALSE; +LONG pipe_number = 0; +static volatile LONG compat_spinlock = 0; + +// CancelIoEx, available on Vista and later only, provides the ability to cancel +// a single transfer (OVERLAPPED) when used. As it may not be part of any of the +// platform headers, we hook into the Kernel32 system DLL directly to seek it. +static BOOL (__stdcall *pCancelIoEx)(HANDLE, LPOVERLAPPED) = NULL; +#define CancelIoEx_Available (pCancelIoEx != NULL) +static __inline BOOL cancel_io(int _index) +{ + if ((_index < 0) || (_index >= MAX_FDS)) { + return FALSE; + } + + if ( (poll_fd[_index].fd < 0) || (poll_fd[_index].handle == INVALID_HANDLE_VALUE) + || (poll_fd[_index].handle == 0) || (poll_fd[_index].overlapped == NULL) ) { + return TRUE; + } + if (CancelIoEx_Available) { + return (*pCancelIoEx)(poll_fd[_index].handle, poll_fd[_index].overlapped); + } + if (_poll_fd[_index].thread_id == GetCurrentThreadId()) { + return CancelIo(poll_fd[_index].handle); + } + usbi_warn(NULL, "Unable to cancel I/O that was started from another thread"); + return FALSE; +} + +// Init +void init_polling(void) +{ + int i; + + while (InterlockedExchange((LONG *)&compat_spinlock, 1) == 1) { + SleepEx(0, TRUE); + } + if (!is_polling_set) { + pCancelIoEx = (BOOL (__stdcall *)(HANDLE,LPOVERLAPPED)) + GetProcAddress(GetModuleHandleA("KERNEL32"), "CancelIoEx"); + usbi_dbg("Will use CancelIo%s for I/O cancellation", + CancelIoEx_Available?"Ex":""); + for (i=0; ihEvent = CreateEvent(NULL, TRUE, FALSE, NULL); + if(overlapped->hEvent == NULL) { + free (overlapped); + return NULL; + } + return overlapped; +} + +void free_overlapped(OVERLAPPED *overlapped) +{ + if (overlapped == NULL) + return; + + if ( (overlapped->hEvent != 0) + && (overlapped->hEvent != INVALID_HANDLE_VALUE) ) { + CloseHandle(overlapped->hEvent); + } + free(overlapped); +} + +void reset_overlapped(OVERLAPPED *overlapped) +{ + HANDLE event_handle; + if (overlapped == NULL) + return; + + event_handle = overlapped->hEvent; + if (event_handle != NULL) { + ResetEvent(event_handle); + } + memset(overlapped, 0, sizeof(OVERLAPPED)); + overlapped->hEvent = event_handle; +} + +void exit_polling(void) +{ + int i; + + while (InterlockedExchange((LONG *)&compat_spinlock, 1) == 1) { + SleepEx(0, TRUE); + } + if (is_polling_set) { + is_polling_set = FALSE; + + for (i=0; i 0) && (poll_fd[i].handle != INVALID_HANDLE_VALUE) && (poll_fd[i].handle != 0) + && (GetFileType(poll_fd[i].handle) == FILE_TYPE_UNKNOWN) ) { + _close(poll_fd[i].fd); + } + free_overlapped(poll_fd[i].overlapped); + if (!CancelIoEx_Available) { + // Close duplicate handle + if (_poll_fd[i].original_handle != INVALID_HANDLE_VALUE) { + CloseHandle(poll_fd[i].handle); + } + } + poll_fd[i] = INVALID_WINFD; + LeaveCriticalSection(&_poll_fd[i].mutex); + DeleteCriticalSection(&_poll_fd[i].mutex); + } + } + compat_spinlock = 0; +} + +/* + * Create a fake pipe. + * As libusb only uses pipes for signaling, all we need from a pipe is an + * event. To that extent, we create a single wfd and overlapped as a means + * to access that event. + */ +int usbi_pipe(int filedes[2]) +{ + int i; + OVERLAPPED* overlapped; + + CHECK_INIT_POLLING; + + overlapped = (OVERLAPPED*) calloc(1, sizeof(OVERLAPPED)); + if (overlapped == NULL) { + return -1; + } + // The overlapped must have status pending for signaling to work in poll + overlapped->Internal = STATUS_PENDING; + overlapped->InternalHigh = 0; + + // Read end of the "pipe" + filedes[0] = _open(NUL_DEVICE, _O_WRONLY); + if (filedes[0] < 0) { + usbi_err(NULL, "could not create pipe: errno %d", errno); + goto out1; + } + // We can use the same handle for both ends + filedes[1] = filedes[0]; + poll_dbg("pipe filedes = %d", filedes[0]); + + // Note: manual reset must be true (second param) as the reset occurs in read + overlapped->hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); + if(!overlapped->hEvent) { + goto out2; + } + + for (i=0; i= 0) { + LeaveCriticalSection(&_poll_fd[i].mutex); + continue; + } + + poll_fd[i].fd = filedes[0]; + poll_fd[i].handle = DUMMY_HANDLE; + poll_fd[i].overlapped = overlapped; + // There's no polling on the write end, so we just use READ for our needs + poll_fd[i].rw = RW_READ; + _poll_fd[i].original_handle = INVALID_HANDLE_VALUE; + LeaveCriticalSection(&_poll_fd[i].mutex); + return 0; + } + } + + CloseHandle(overlapped->hEvent); +out2: + _close(filedes[0]); +out1: + free(overlapped); + return -1; +} + +/* + * Create both an fd and an OVERLAPPED from an open Windows handle, so that + * it can be used with our polling function + * The handle MUST support overlapped transfers (usually requires CreateFile + * with FILE_FLAG_OVERLAPPED) + * Return a pollable file descriptor struct, or INVALID_WINFD on error + * + * Note that the fd returned by this function is a per-transfer fd, rather + * than a per-session fd and cannot be used for anything else but our + * custom functions (the fd itself points to the NUL: device) + * if you plan to do R/W on the same handle, you MUST create 2 fds: one for + * read and one for write. Using a single R/W fd is unsupported and will + * produce unexpected results + */ +struct winfd usbi_create_fd(HANDLE handle, int access_mode) +{ + int i, fd; + struct winfd wfd = INVALID_WINFD; + OVERLAPPED* overlapped = NULL; + + CHECK_INIT_POLLING; + + if ((handle == 0) || (handle == INVALID_HANDLE_VALUE)) { + return INVALID_WINFD; + } + + if ((access_mode != _O_RDONLY) && (access_mode != _O_WRONLY)) { + usbi_warn(NULL, "only one of _O_RDONLY or _O_WRONLY are supported.\n" + "If you want to poll for R/W simultaneously, create multiple fds from the same handle."); + return INVALID_WINFD; + } + if (access_mode == _O_RDONLY) { + wfd.rw = RW_READ; + } else { + wfd.rw = RW_WRITE; + } + + // Ensure that we get a non system conflicting unique fd, using + // the same fd attribution system as the pipe ends + fd = _open(NUL_DEVICE, _O_WRONLY); + if (fd < 0) { + return INVALID_WINFD; + } + + overlapped = create_overlapped(); + if(overlapped == NULL) { + _close(fd); + return INVALID_WINFD; + } + + for (i=0; i= 0) { + LeaveCriticalSection(&_poll_fd[i].mutex); + continue; + } + wfd.fd = fd; + // Attempt to emulate some of the CancelIoEx behaviour on platforms + // that don't have it + if (!CancelIoEx_Available) { + _poll_fd[i].thread_id = GetCurrentThreadId(); + if (!DuplicateHandle(GetCurrentProcess(), handle, GetCurrentProcess(), + &wfd.handle, 0, TRUE, DUPLICATE_SAME_ACCESS)) { + usbi_dbg("could not duplicate handle for CancelIo - using original one"); + wfd.handle = handle; + // Make sure we won't close the original handle on fd deletion then + _poll_fd[i].original_handle = INVALID_HANDLE_VALUE; + } else { + _poll_fd[i].original_handle = handle; + } + } else { + wfd.handle = handle; + } + wfd.overlapped = overlapped; + memcpy(&poll_fd[i], &wfd, sizeof(struct winfd)); + LeaveCriticalSection(&_poll_fd[i].mutex); + return wfd; + } + } + free_overlapped(overlapped); + _close(fd); + return INVALID_WINFD; +} + +void _free_index(int _index) +{ + // Cancel any async IO (Don't care about the validity of our handles for this) + cancel_io(_index); + // close fake handle for devices + if ( (poll_fd[_index].handle != INVALID_HANDLE_VALUE) && (poll_fd[_index].handle != 0) + && (GetFileType(poll_fd[_index].handle) == FILE_TYPE_UNKNOWN) ) { + _close(poll_fd[_index].fd); + } + // close the duplicate handle (if we have an actual duplicate) + if (!CancelIoEx_Available) { + if (_poll_fd[_index].original_handle != INVALID_HANDLE_VALUE) { + CloseHandle(poll_fd[_index].handle); + } + _poll_fd[_index].original_handle = INVALID_HANDLE_VALUE; + _poll_fd[_index].thread_id = 0; + } + free_overlapped(poll_fd[_index].overlapped); + poll_fd[_index] = INVALID_WINFD; +} + +/* + * Release a pollable file descriptor. + * + * Note that the associated Windows handle is not closed by this call + */ +void usbi_free_fd(int fd) +{ + int _index; + + CHECK_INIT_POLLING; + + _index = _fd_to_index_and_lock(fd); + if (_index < 0) { + return; + } + _free_index(_index); + LeaveCriticalSection(&_poll_fd[_index].mutex); +} + +/* + * The functions below perform various conversions between fd, handle and OVERLAPPED + */ +struct winfd fd_to_winfd(int fd) +{ + int i; + struct winfd wfd; + + CHECK_INIT_POLLING; + + if (fd <= 0) + return INVALID_WINFD; + + for (i=0; i= 0) { + LeaveCriticalSection(&_poll_fd[_index].mutex); + } + usbi_warn(NULL, "invalid fd"); + triggered = -1; + goto poll_exit; + } + + // IN or OUT must match our fd direction + if ((fds[i].events & POLLIN) && (poll_fd[_index].rw != RW_READ)) { + fds[i].revents |= POLLNVAL | POLLERR; + errno = EBADF; + usbi_warn(NULL, "attempted POLLIN on fd without READ access"); + LeaveCriticalSection(&_poll_fd[_index].mutex); + triggered = -1; + goto poll_exit; + } + + if ((fds[i].events & POLLOUT) && (poll_fd[_index].rw != RW_WRITE)) { + fds[i].revents |= POLLNVAL | POLLERR; + errno = EBADF; + usbi_warn(NULL, "attempted POLLOUT on fd without WRITE access"); + LeaveCriticalSection(&_poll_fd[_index].mutex); + triggered = -1; + goto poll_exit; + } + + // The following macro only works if overlapped I/O was reported pending + if ( (HasOverlappedIoCompleted(poll_fd[_index].overlapped)) + || (HasOverlappedIoCompletedSync(poll_fd[_index].overlapped)) ) { + poll_dbg(" completed"); + // checks above should ensure this works: + fds[i].revents = fds[i].events; + triggered++; + } else { + handles_to_wait_on[nb_handles_to_wait_on] = poll_fd[_index].overlapped->hEvent; + handle_to_index[nb_handles_to_wait_on] = i; + nb_handles_to_wait_on++; + } + LeaveCriticalSection(&_poll_fd[_index].mutex); + } + + // If nothing was triggered, wait on all fds that require it + if ((timeout != 0) && (triggered == 0) && (nb_handles_to_wait_on != 0)) { + if (timeout < 0) { + poll_dbg("starting infinite wait for %d handles...", (int)nb_handles_to_wait_on); + } else { + poll_dbg("starting %d ms wait for %d handles...", timeout, (int)nb_handles_to_wait_on); + } + ret = WaitForMultipleObjects(nb_handles_to_wait_on, handles_to_wait_on, + FALSE, (timeout<0)?INFINITE:(DWORD)timeout); + object_index = ret-WAIT_OBJECT_0; + if ((object_index >= 0) && ((DWORD)object_index < nb_handles_to_wait_on)) { + poll_dbg(" completed after wait"); + i = handle_to_index[object_index]; + _index = _fd_to_index_and_lock(fds[i].fd); + fds[i].revents = fds[i].events; + triggered++; + if (_index >= 0) { + LeaveCriticalSection(&_poll_fd[_index].mutex); + } + } else if (ret == WAIT_TIMEOUT) { + poll_dbg(" timed out"); + triggered = 0; // 0 = timeout + } else { + errno = EIO; + triggered = -1; // error + } + } + +poll_exit: + if (handles_to_wait_on != NULL) { + free(handles_to_wait_on); + } + if (handle_to_index != NULL) { + free(handle_to_index); + } + return triggered; +} + +/* + * close a fake pipe fd + */ +int usbi_close(int fd) +{ + int _index; + int r = -1; + + CHECK_INIT_POLLING; + + _index = _fd_to_index_and_lock(fd); + + if (_index < 0) { + errno = EBADF; + } else { + if (poll_fd[_index].overlapped != NULL) { + // Must be a different event for each end of the pipe + CloseHandle(poll_fd[_index].overlapped->hEvent); + free(poll_fd[_index].overlapped); + } + r = _close(poll_fd[_index].fd); + if (r != 0) { + errno = EIO; + } + poll_fd[_index] = INVALID_WINFD; + LeaveCriticalSection(&_poll_fd[_index].mutex); + } + return r; +} + +/* + * synchronous write for fake "pipe" signaling + */ +ssize_t usbi_write(int fd, const void *buf, size_t count) +{ + int _index; + + CHECK_INIT_POLLING; + + if (count != sizeof(unsigned char)) { + usbi_err(NULL, "this function should only used for signaling"); + return -1; + } + + _index = _fd_to_index_and_lock(fd); + + if ( (_index < 0) || (poll_fd[_index].overlapped == NULL) ) { + errno = EBADF; + if (_index >= 0) { + LeaveCriticalSection(&_poll_fd[_index].mutex); + } + return -1; + } + + poll_dbg("set pipe event (fd = %d, thread = %08X)", _index, GetCurrentThreadId()); + SetEvent(poll_fd[_index].overlapped->hEvent); + poll_fd[_index].overlapped->Internal = STATUS_WAIT_0; + // If two threads write on the pipe at the same time, we need to + // process two separate reads => use the overlapped as a counter + poll_fd[_index].overlapped->InternalHigh++; + + LeaveCriticalSection(&_poll_fd[_index].mutex); + return sizeof(unsigned char); +} + +/* + * synchronous read for fake "pipe" signaling + */ +ssize_t usbi_read(int fd, void *buf, size_t count) +{ + int _index; + ssize_t r = -1; + + CHECK_INIT_POLLING; + + if (count != sizeof(unsigned char)) { + usbi_err(NULL, "this function should only used for signaling"); + return -1; + } + + _index = _fd_to_index_and_lock(fd); + + if (_index < 0) { + errno = EBADF; + return -1; + } + + if (WaitForSingleObject(poll_fd[_index].overlapped->hEvent, INFINITE) != WAIT_OBJECT_0) { + usbi_warn(NULL, "waiting for event failed: %d", (int)GetLastError()); + errno = EIO; + goto out; + } + + poll_dbg("clr pipe event (fd = %d, thread = %08X)", _index, GetCurrentThreadId()); + poll_fd[_index].overlapped->InternalHigh--; + // Don't reset unless we don't have any more events to process + if (poll_fd[_index].overlapped->InternalHigh <= 0) { + ResetEvent(poll_fd[_index].overlapped->hEvent); + poll_fd[_index].overlapped->Internal = STATUS_PENDING; + } + + r = sizeof(unsigned char); + +out: + LeaveCriticalSection(&_poll_fd[_index].mutex); + return r; +} diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/poll_windows.h b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/poll_windows.h new file mode 100644 index 0000000..6e5bf2b --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/poll_windows.h @@ -0,0 +1,115 @@ +/* + * Windows compat: POSIX compatibility wrapper + * Copyright (C) 2009-2010 Pete Batard + * With contributions from Michael Plante, Orin Eman et al. + * Parts of poll implementation from libusb-win32, by Stephan Meyer et al. + * + * 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 + * + */ +#pragma once + +#if defined(_MSC_VER) +// disable /W4 MSVC warnings that are benign +#pragma warning(disable:4127) // conditional expression is constant +#endif + +// Handle synchronous completion through the overlapped structure +#if !defined(STATUS_REPARSE) // reuse the REPARSE status code +#define STATUS_REPARSE ((LONG)0x00000104L) +#endif +#define STATUS_COMPLETED_SYNCHRONOUSLY STATUS_REPARSE +#define HasOverlappedIoCompletedSync(lpOverlapped) (((DWORD)(lpOverlapped)->Internal) == STATUS_COMPLETED_SYNCHRONOUSLY) + +#define DUMMY_HANDLE ((HANDLE)(LONG_PTR)-2) + +enum windows_version { + WINDOWS_UNSUPPORTED, + WINDOWS_XP, + WINDOWS_2003, // also includes XP 64 + WINDOWS_VISTA_AND_LATER, +}; +extern enum windows_version windows_version; + +#define MAX_FDS 256 + +#define POLLIN 0x0001 /* There is data to read */ +#define POLLPRI 0x0002 /* There is urgent data to read */ +#define POLLOUT 0x0004 /* Writing now will not block */ +#define POLLERR 0x0008 /* Error condition */ +#define POLLHUP 0x0010 /* Hung up */ +#define POLLNVAL 0x0020 /* Invalid request: fd not open */ + +struct pollfd { + int fd; /* file descriptor */ + short events; /* requested events */ + short revents; /* returned events */ +}; + +// access modes +enum rw_type { + RW_NONE, + RW_READ, + RW_WRITE, +}; + +// fd struct that can be used for polling on Windows +struct winfd { + int fd; // what's exposed to libusb core + HANDLE handle; // what we need to attach overlapped to the I/O op, so we can poll it + OVERLAPPED* overlapped; // what will report our I/O status + enum rw_type rw; // I/O transfer direction: read *XOR* write (NOT BOTH) +}; +extern const struct winfd INVALID_WINFD; + +int usbi_pipe(int pipefd[2]); +int usbi_poll(struct pollfd *fds, unsigned int nfds, int timeout); +ssize_t usbi_write(int fd, const void *buf, size_t count); +ssize_t usbi_read(int fd, void *buf, size_t count); +int usbi_close(int fd); + +void init_polling(void); +void exit_polling(void); +struct winfd usbi_create_fd(HANDLE handle, int access_mode); +void usbi_free_fd(int fd); +struct winfd fd_to_winfd(int fd); +struct winfd handle_to_winfd(HANDLE handle); +struct winfd overlapped_to_winfd(OVERLAPPED* overlapped); + +/* + * Timeval operations + */ +#if defined(DDKBUILD) +#include // defines timeval functions on DDK +#endif + +#if !defined(TIMESPEC_TO_TIMEVAL) +#define TIMESPEC_TO_TIMEVAL(tv, ts) { \ + (tv)->tv_sec = (long)(ts)->tv_sec; \ + (tv)->tv_usec = (long)(ts)->tv_nsec / 1000; \ +} +#endif +#if !defined(timersub) +#define timersub(a, b, result) \ +do { \ + (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ + (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ + if ((result)->tv_usec < 0) { \ + --(result)->tv_sec; \ + (result)->tv_usec += 1000000; \ + } \ +} while (0) +#endif + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/threads_posix.c b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/threads_posix.c new file mode 100644 index 0000000..60c57cf --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/threads_posix.c @@ -0,0 +1,55 @@ +/* + * libusb synchronization using POSIX Threads + * + * Copyright (C) 2011 Vitali Lovich + * Copyright (C) 2011 Peter Stuge + * + * 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 + */ + +#ifdef _XOPEN_SOURCE +# if _XOPEN_SOURCE < 500 +# undef _XOPEN_SOURCE +# define _XOPEN_SOURCE 500 +# endif +#else +#define _XOPEN_SOURCE 500 +#endif /* _XOPEN_SOURCE */ + +#include "threads_posix.h" + +int usbi_mutex_init_recursive(pthread_mutex_t *mutex, pthread_mutexattr_t *attr) +{ + int err; + pthread_mutexattr_t stack_attr; + if (!attr) { + attr = &stack_attr; + err = pthread_mutexattr_init(&stack_attr); + if (err != 0) + return err; + } + + err = pthread_mutexattr_settype(attr, PTHREAD_MUTEX_RECURSIVE); + if (err != 0) + goto finish; + + err = pthread_mutex_init(mutex, attr); + +finish: + if (attr == &stack_attr) + pthread_mutexattr_destroy(&stack_attr); + + return err; +} diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/threads_posix.h b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/threads_posix.h new file mode 100644 index 0000000..9752208 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/threads_posix.h @@ -0,0 +1,48 @@ +/* + * libusb synchronization using POSIX Threads + * + * Copyright (C) 2010 Peter Stuge + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef LIBUSB_THREADS_POSIX_H +#define LIBUSB_THREADS_POSIX_H + +#include + +#define usbi_mutex_static_t pthread_mutex_t +#define USBI_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER +#define usbi_mutex_static_lock pthread_mutex_lock +#define usbi_mutex_static_unlock pthread_mutex_unlock + +#define usbi_mutex_t pthread_mutex_t +#define usbi_mutex_init pthread_mutex_init +#define usbi_mutex_lock pthread_mutex_lock +#define usbi_mutex_unlock pthread_mutex_unlock +#define usbi_mutex_trylock pthread_mutex_trylock +#define usbi_mutex_destroy pthread_mutex_destroy + +#define usbi_cond_t pthread_cond_t +#define usbi_cond_init pthread_cond_init +#define usbi_cond_wait pthread_cond_wait +#define usbi_cond_timedwait pthread_cond_timedwait +#define usbi_cond_broadcast pthread_cond_broadcast +#define usbi_cond_destroy pthread_cond_destroy +#define usbi_cond_signal pthread_cond_signal + +extern int usbi_mutex_init_recursive(pthread_mutex_t *mutex, pthread_mutexattr_t *attr); + +#endif /* LIBUSB_THREADS_POSIX_H */ diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/threads_windows.c b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/threads_windows.c new file mode 100644 index 0000000..1394bb0 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/threads_windows.c @@ -0,0 +1,207 @@ +/* + * libusb synchronization on Microsoft Windows + * + * Copyright (C) 2010 Michael Plante + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include + +#include "libusbi.h" + + +int usbi_mutex_init(usbi_mutex_t *mutex, + const usbi_mutexattr_t *attr) { + if(! mutex) return ((errno=EINVAL)); + *mutex = CreateMutex(NULL, FALSE, NULL); + if(!*mutex) return ((errno=ENOMEM)); + return 0; +} +int usbi_mutex_destroy(usbi_mutex_t *mutex) { + // It is not clear if CloseHandle failure is due to failure to unlock. + // If so, this should be errno=EBUSY. + if(!mutex || !CloseHandle(*mutex)) return ((errno=EINVAL)); + *mutex = NULL; + return 0; +} +int usbi_mutex_trylock(usbi_mutex_t *mutex) { + DWORD result; + if(!mutex) return ((errno=EINVAL)); + result = WaitForSingleObject(*mutex, 0); + if(result == WAIT_OBJECT_0 || result == WAIT_ABANDONED) + return 0; // acquired (ToDo: check that abandoned is ok) + if(result == WAIT_TIMEOUT) + return ((errno=EBUSY)); + return ((errno=EINVAL)); // don't know how this would happen + // so don't know proper errno +} +int usbi_mutex_lock(usbi_mutex_t *mutex) { + DWORD result; + if(!mutex) return ((errno=EINVAL)); + result = WaitForSingleObject(*mutex, INFINITE); + if(result == WAIT_OBJECT_0 || result == WAIT_ABANDONED) + return 0; // acquired (ToDo: check that abandoned is ok) + return ((errno=EINVAL)); // don't know how this would happen + // so don't know proper errno +} +int usbi_mutex_unlock(usbi_mutex_t *mutex) { + if(!mutex) return ((errno=EINVAL)); + if(!ReleaseMutex(*mutex)) return ((errno=EPERM )); + return 0; +} + +int usbi_mutex_static_lock(usbi_mutex_static_t *mutex) { + if(!mutex) return ((errno=EINVAL)); + while (InterlockedExchange((LONG *)mutex, 1) == 1) { + SleepEx(0, TRUE); + } + return 0; +} +int usbi_mutex_static_unlock(usbi_mutex_static_t *mutex) { + if(!mutex) return ((errno=EINVAL)); + *mutex = 0; + return 0; +} + + + +int usbi_cond_init(usbi_cond_t *cond, + const usbi_condattr_t *attr) { + if(!cond) return ((errno=EINVAL)); + list_init(&cond->waiters ); + list_init(&cond->not_waiting); + return 0; +} +int usbi_cond_destroy(usbi_cond_t *cond) { + // This assumes no one is using this anymore. The check MAY NOT BE safe. + struct usbi_cond_perthread *pos, *prev_pos = NULL; + if(!cond) return ((errno=EINVAL)); + if(!list_empty(&cond->waiters)) return ((errno=EBUSY )); // (!see above!) + list_for_each_entry(pos, &cond->not_waiting, list, struct usbi_cond_perthread) { + free(prev_pos); + list_del(&pos->list); + prev_pos = pos; + } + free(prev_pos); + + return 0; +} + +int usbi_cond_broadcast(usbi_cond_t *cond) { + // Assumes mutex is locked; this is not in keeping with POSIX spec, but + // libusb does this anyway, so we simplify by not adding more sync + // primitives to the CV definition! + int fail = 0; + struct usbi_cond_perthread *pos; + if(!cond) return ((errno=EINVAL)); + list_for_each_entry(pos, &cond->waiters, list, struct usbi_cond_perthread) { + if(!SetEvent(pos->event)) + fail = 1; + } + // The wait function will remove its respective item from the list. + return fail ? ((errno=EINVAL)) : 0; +} +int usbi_cond_signal(usbi_cond_t *cond) { + // Assumes mutex is locked; this is not in keeping with POSIX spec, but + // libusb does this anyway, so we simplify by not adding more sync + // primitives to the CV definition! + struct usbi_cond_perthread *pos; + if(!cond) return ((errno=EINVAL)); + if(list_empty(&cond->waiters)) return 0; // no one to wakeup. + pos = list_entry(&cond->waiters.next, struct usbi_cond_perthread, list); + // The wait function will remove its respective item from the list. + return SetEvent(pos->event) ? 0 : ((errno=EINVAL)); +} +static int __inline usbi_cond_intwait(usbi_cond_t *cond, + usbi_mutex_t *mutex, + DWORD timeout_ms) { + struct usbi_cond_perthread *pos; + int found = 0, r; + DWORD r2,tid = GetCurrentThreadId(); + if(!cond || !mutex) return ((errno=EINVAL)); + list_for_each_entry(pos, &cond->not_waiting, list, struct usbi_cond_perthread) { + if(tid == pos->tid) { + found = 1; + break; + } + } + if(!found) { + pos = (struct usbi_cond_perthread*) calloc(1, sizeof(struct usbi_cond_perthread)); + if(!pos) return ((errno=ENOMEM)); // This errno is not POSIX-allowed. + pos->tid = tid; + pos->event = CreateEvent(NULL, FALSE, FALSE, NULL); // auto-reset. + if(!pos->event) { + free(pos); + return ((errno=ENOMEM)); + } + list_add(&pos->list, &cond->not_waiting); + } + + list_del(&pos->list); // remove from not_waiting list. + list_add(&pos->list, &cond->waiters); + + r = usbi_mutex_unlock(mutex); + if(r) return r; + r2 = WaitForSingleObject(pos->event, timeout_ms); + r = usbi_mutex_lock(mutex); + if(r) return r; + + list_del(&pos->list); + list_add(&pos->list, &cond->not_waiting); + + if(r2 == WAIT_TIMEOUT) return ((errno=ETIMEDOUT)); + + return 0; +} +// N.B.: usbi_cond_*wait() can also return ENOMEM, even though pthread_cond_*wait cannot! +int usbi_cond_wait(usbi_cond_t *cond, usbi_mutex_t *mutex) { + return usbi_cond_intwait(cond, mutex, INFINITE); +} +int usbi_cond_timedwait(usbi_cond_t *cond, + usbi_mutex_t *mutex, + const struct timespec *abstime) { + FILETIME filetime; + ULARGE_INTEGER rtime; + struct timeval targ_time, cur_time, delta_time; + struct timespec cur_time_ns; + DWORD millis; + extern const uint64_t epoch_time; + + GetSystemTimeAsFileTime(&filetime); + rtime.LowPart = filetime.dwLowDateTime; + rtime.HighPart = filetime.dwHighDateTime; + rtime.QuadPart -= epoch_time; + cur_time_ns.tv_sec = (long)(rtime.QuadPart / 10000000); + cur_time_ns.tv_nsec = (long)((rtime.QuadPart % 10000000)*100); + TIMESPEC_TO_TIMEVAL(&cur_time, &cur_time_ns); + + TIMESPEC_TO_TIMEVAL(&targ_time, abstime); + timersub(&targ_time, &cur_time, &delta_time); + if(delta_time.tv_sec < 0) // abstime already passed? + millis = 0; + else { + millis = delta_time.tv_usec/1000; + millis += delta_time.tv_sec *1000; + if (delta_time.tv_usec % 1000) // round up to next millisecond + millis++; + } + + return usbi_cond_intwait(cond, mutex, millis); +} + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/threads_windows.h b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/threads_windows.h new file mode 100644 index 0000000..7bb144a --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/threads_windows.h @@ -0,0 +1,86 @@ +/* + * libusb synchronization on Microsoft Windows + * + * Copyright (C) 2010 Michael Plante + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef LIBUSB_THREADS_WINDOWS_H +#define LIBUSB_THREADS_WINDOWS_H + +#define usbi_mutex_static_t volatile LONG +#define USBI_MUTEX_INITIALIZER 0 + +#define usbi_mutex_t HANDLE + +struct usbi_cond_perthread { + struct list_head list; + DWORD tid; + HANDLE event; +}; +struct usbi_cond_t_ { + // Every time a thread touches the CV, it winds up in one of these lists. + // It stays there until the CV is destroyed, even if the thread + // terminates. + struct list_head waiters; + struct list_head not_waiting; +}; +typedef struct usbi_cond_t_ usbi_cond_t; + +// We *were* getting timespec from pthread.h: +#if (!defined(HAVE_STRUCT_TIMESPEC) && !defined(_TIMESPEC_DEFINED)) +#define HAVE_STRUCT_TIMESPEC 1 +#define _TIMESPEC_DEFINED 1 +struct timespec { + long tv_sec; + long tv_nsec; +}; +#endif /* HAVE_STRUCT_TIMESPEC | _TIMESPEC_DEFINED */ + +// We *were* getting ETIMEDOUT from pthread.h: +#ifndef ETIMEDOUT +# define ETIMEDOUT 10060 /* This is the value in winsock.h. */ +#endif + +#define usbi_mutexattr_t void +#define usbi_condattr_t void + +// all Windows mutexes are recursive +#define usbi_mutex_init_recursive(mutex, attr) usbi_mutex_init((mutex), (attr)) + +int usbi_mutex_static_lock(usbi_mutex_static_t *mutex); +int usbi_mutex_static_unlock(usbi_mutex_static_t *mutex); + + +int usbi_mutex_init(usbi_mutex_t *mutex, + const usbi_mutexattr_t *attr); +int usbi_mutex_lock(usbi_mutex_t *mutex); +int usbi_mutex_unlock(usbi_mutex_t *mutex); +int usbi_mutex_trylock(usbi_mutex_t *mutex); +int usbi_mutex_destroy(usbi_mutex_t *mutex); + +int usbi_cond_init(usbi_cond_t *cond, + const usbi_condattr_t *attr); +int usbi_cond_destroy(usbi_cond_t *cond); +int usbi_cond_wait(usbi_cond_t *cond, usbi_mutex_t *mutex); +int usbi_cond_timedwait(usbi_cond_t *cond, + usbi_mutex_t *mutex, + const struct timespec *abstime); +int usbi_cond_broadcast(usbi_cond_t *cond); +int usbi_cond_signal(usbi_cond_t *cond); + +#endif /* LIBUSB_THREADS_WINDOWS_H */ + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/windows_usb.c b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/windows_usb.c new file mode 100644 index 0000000..0739c19 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/windows_usb.c @@ -0,0 +1,2996 @@ +/* + * windows backend for libusb 1.0 + * Copyright (c) 2009-2010 Pete Batard + * With contributions from Michael Plante, Orin Eman et al. + * Parts of this code adapted from libusb-win32-v1 by Stephan Meyer + * Hash table functions adapted from glibc, by Ulrich Drepper et al. + * Major code testing contribution by Xiaofan Chen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "poll_windows.h" +#include "windows_usb.h" + +// The following prevents "banned API" errors when using the MS's WDK OACR/Prefast +#if defined(_PREFAST_) +#pragma warning(disable:28719) +#endif + +// The 2 macros below are used in conjunction with safe loops. +#define LOOP_CHECK(fcall) { r=fcall; if (r != LIBUSB_SUCCESS) continue; } +#define LOOP_BREAK(err) { r=err; continue; } + +extern void usbi_fd_notification(struct libusb_context *ctx); + +// Helper prototypes +static int windows_get_active_config_descriptor(struct libusb_device *dev, unsigned char *buffer, size_t len, int *host_endian); +static int windows_clock_gettime(int clk_id, struct timespec *tp); +unsigned __stdcall windows_clock_gettime_threaded(void* param); +// WinUSB API prototypes +static int winusb_init(struct libusb_context *ctx); +static int winusb_exit(void); +static int winusb_open(struct libusb_device_handle *dev_handle); +static void winusb_close(struct libusb_device_handle *dev_handle); +static int winusb_configure_endpoints(struct libusb_device_handle *dev_handle, int iface); +static int winusb_claim_interface(struct libusb_device_handle *dev_handle, int iface); +static int winusb_release_interface(struct libusb_device_handle *dev_handle, int iface); +static int winusb_submit_control_transfer(struct usbi_transfer *itransfer); +static int winusb_set_interface_altsetting(struct libusb_device_handle *dev_handle, int iface, int altsetting); +static int winusb_submit_bulk_transfer(struct usbi_transfer *itransfer); +static int winusb_clear_halt(struct libusb_device_handle *dev_handle, unsigned char endpoint); +static int winusb_abort_transfers(struct usbi_transfer *itransfer); +static int winusb_abort_control(struct usbi_transfer *itransfer); +static int winusb_reset_device(struct libusb_device_handle *dev_handle); +static int winusb_copy_transfer_data(struct usbi_transfer *itransfer, uint32_t io_size); +// Composite API prototypes +static int composite_init(struct libusb_context *ctx); +static int composite_exit(void); +static int composite_open(struct libusb_device_handle *dev_handle); +static void composite_close(struct libusb_device_handle *dev_handle); +static int composite_claim_interface(struct libusb_device_handle *dev_handle, int iface); +static int composite_set_interface_altsetting(struct libusb_device_handle *dev_handle, int iface, int altsetting); +static int composite_release_interface(struct libusb_device_handle *dev_handle, int iface); +static int composite_submit_control_transfer(struct usbi_transfer *itransfer); +static int composite_submit_bulk_transfer(struct usbi_transfer *itransfer); +static int composite_submit_iso_transfer(struct usbi_transfer *itransfer); +static int composite_clear_halt(struct libusb_device_handle *dev_handle, unsigned char endpoint); +static int composite_abort_transfers(struct usbi_transfer *itransfer); +static int composite_abort_control(struct usbi_transfer *itransfer); +static int composite_reset_device(struct libusb_device_handle *dev_handle); +static int composite_copy_transfer_data(struct usbi_transfer *itransfer, uint32_t io_size); + + +// Global variables +uint64_t hires_frequency, hires_ticks_to_ps; +const uint64_t epoch_time = UINT64_C(116444736000000000); // 1970.01.01 00:00:000 in MS Filetime +enum windows_version windows_version = WINDOWS_UNSUPPORTED; +// Concurrency +static int concurrent_usage = -1; +usbi_mutex_t autoclaim_lock; +// Timer thread +// NB: index 0 is for monotonic and 1 is for the thread exit event +HANDLE timer_thread = NULL; +HANDLE timer_mutex = NULL; +struct timespec timer_tp; +volatile LONG request_count[2] = {0, 1}; // last one must be > 0 +HANDLE timer_request[2] = { NULL, NULL }; +HANDLE timer_response = NULL; +// API globals +bool api_winusb_available = false; +#define CHECK_WINUSB_AVAILABLE do { if (!api_winusb_available) return LIBUSB_ERROR_ACCESS; } while (0) + +static inline BOOLEAN guid_eq(const GUID *guid1, const GUID *guid2) { + if ((guid1 != NULL) && (guid2 != NULL)) { + return (memcmp(guid1, guid2, sizeof(GUID)) == 0); + } + return false; +} + +#if defined(ENABLE_DEBUG_LOGGING) || (defined(_MSC_VER) && _MSC_VER < 1400) +static char* guid_to_string(const GUID* guid) +{ + static char guid_string[MAX_GUID_STRING_LENGTH]; + + if (guid == NULL) return NULL; + sprintf(guid_string, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", + (unsigned int)guid->Data1, guid->Data2, guid->Data3, + guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3], + guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]); + return guid_string; +} +#endif + +/* + * Converts a windows error to human readable string + * uses retval as errorcode, or, if 0, use GetLastError() + */ +static char *windows_error_str(uint32_t retval) +{ +static char err_string[ERR_BUFFER_SIZE]; + + DWORD size; + size_t i; + uint32_t error_code, format_error; + + error_code = retval?retval:GetLastError(); + + safe_sprintf(err_string, ERR_BUFFER_SIZE, "[%d] ", error_code); + + size = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error_code, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), &err_string[safe_strlen(err_string)], + ERR_BUFFER_SIZE - (DWORD)safe_strlen(err_string), NULL); + if (size == 0) { + format_error = GetLastError(); + if (format_error) + safe_sprintf(err_string, ERR_BUFFER_SIZE, + "Windows error code %u (FormatMessage error code %u)", error_code, format_error); + else + safe_sprintf(err_string, ERR_BUFFER_SIZE, "Unknown error code %u", error_code); + } else { + // Remove CR/LF terminators + for (i=safe_strlen(err_string)-1; ((err_string[i]==0x0A) || (err_string[i]==0x0D)); i--) { + err_string[i] = 0; + } + } + return err_string; +} + +/* + * Sanitize Microsoft's paths: convert to uppercase, add prefix and fix backslashes. + * Return an allocated sanitized string or NULL on error. + */ +static char* sanitize_path(const char* path) +{ + const char root_prefix[] = "\\\\.\\"; + size_t j, size, root_size; + char* ret_path = NULL; + size_t add_root = 0; + + if (path == NULL) + return NULL; + + size = safe_strlen(path)+1; + root_size = sizeof(root_prefix)-1; + + // Microsoft indiscriminatly uses '\\?\', '\\.\', '##?#" or "##.#" for root prefixes. + if (!((size > 3) && (((path[0] == '\\') && (path[1] == '\\') && (path[3] == '\\')) || + ((path[0] == '#') && (path[1] == '#') && (path[3] == '#'))))) { + add_root = root_size; + size += add_root; + } + + if ((ret_path = (char*)calloc(size, 1)) == NULL) + return NULL; + + safe_strcpy(&ret_path[add_root], size-add_root, path); + + // Ensure consistancy with root prefix + for (j=0; jcbSize = sizeof(SP_DEVINFO_DATA); + if (!pSetupDiEnumDeviceInfo(*dev_info, _index, dev_info_data)) { + if (GetLastError() != ERROR_NO_MORE_ITEMS) { + usbi_err(ctx, "Could not obtain device info data for index %u: %s", + _index, windows_error_str(0)); + } + pSetupDiDestroyDeviceInfoList(*dev_info); + *dev_info = INVALID_HANDLE_VALUE; + return false; + } + return true; +} + +/* + * enumerate interfaces for a specific GUID + * + * Parameters: + * dev_info: a pointer to a dev_info list + * dev_info_data: a pointer to an SP_DEVINFO_DATA to be filled (or NULL if not needed) + * guid: the GUID for which to retrieve interface details + * index: zero based index of the interface in the device info list + * + * Note: it is the responsibility of the caller to free the DEVICE_INTERFACE_DETAIL_DATA + * structure returned and call this function repeatedly using the same guid (with an + * incremented index starting at zero) until all interfaces have been returned. + */ +static SP_DEVICE_INTERFACE_DETAIL_DATA_A *get_interface_details(struct libusb_context *ctx, + HDEVINFO *dev_info, SP_DEVINFO_DATA *dev_info_data, const GUID* guid, unsigned _index) +{ + SP_DEVICE_INTERFACE_DATA dev_interface_data; + SP_DEVICE_INTERFACE_DETAIL_DATA_A *dev_interface_details = NULL; + DWORD size; + + if (_index <= 0) { + *dev_info = pSetupDiGetClassDevsA(guid, NULL, NULL, DIGCF_PRESENT|DIGCF_DEVICEINTERFACE); + } + + if (dev_info_data != NULL) { + dev_info_data->cbSize = sizeof(SP_DEVINFO_DATA); + if (!pSetupDiEnumDeviceInfo(*dev_info, _index, dev_info_data)) { + if (GetLastError() != ERROR_NO_MORE_ITEMS) { + usbi_err(ctx, "Could not obtain device info data for index %u: %s", + _index, windows_error_str(0)); + } + pSetupDiDestroyDeviceInfoList(*dev_info); + *dev_info = INVALID_HANDLE_VALUE; + return NULL; + } + } + + dev_interface_data.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); + if (!pSetupDiEnumDeviceInterfaces(*dev_info, NULL, guid, _index, &dev_interface_data)) { + if (GetLastError() != ERROR_NO_MORE_ITEMS) { + usbi_err(ctx, "Could not obtain interface data for index %u: %s", + _index, windows_error_str(0)); + } + pSetupDiDestroyDeviceInfoList(*dev_info); + *dev_info = INVALID_HANDLE_VALUE; + return NULL; + } + + // Read interface data (dummy + actual) to access the device path + if (!pSetupDiGetDeviceInterfaceDetailA(*dev_info, &dev_interface_data, NULL, 0, &size, NULL)) { + // The dummy call should fail with ERROR_INSUFFICIENT_BUFFER + if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) { + usbi_err(ctx, "could not access interface data (dummy) for index %u: %s", + _index, windows_error_str(0)); + goto err_exit; + } + } else { + usbi_err(ctx, "program assertion failed - http://msdn.microsoft.com/en-us/library/ms792901.aspx is wrong."); + goto err_exit; + } + + if ((dev_interface_details = (SP_DEVICE_INTERFACE_DETAIL_DATA_A*) calloc(size, 1)) == NULL) { + usbi_err(ctx, "could not allocate interface data for index %u.", _index); + goto err_exit; + } + + dev_interface_details->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A); + if (!pSetupDiGetDeviceInterfaceDetailA(*dev_info, &dev_interface_data, + dev_interface_details, size, &size, NULL)) { + usbi_err(ctx, "could not access interface data (actual) for index %u: %s", + _index, windows_error_str(0)); + } + + return dev_interface_details; + +err_exit: + pSetupDiDestroyDeviceInfoList(*dev_info); + *dev_info = INVALID_HANDLE_VALUE; + return NULL; +} + +/* Hash table functions - modified From glibc 2.3.2: + [Aho,Sethi,Ullman] Compilers: Principles, Techniques and Tools, 1986 + [Knuth] The Art of Computer Programming, part 3 (6.4) */ +typedef struct htab_entry { + unsigned long used; + char* str; +} htab_entry; +htab_entry* htab_table = NULL; +usbi_mutex_t htab_write_mutex = NULL; +unsigned long htab_size, htab_filled; + +/* For the used double hash method the table size has to be a prime. To + correct the user given table size we need a prime test. This trivial + algorithm is adequate because the code is called only during init and + the number is likely to be small */ +static int isprime(unsigned long number) +{ + // no even number will be passed + unsigned int divider = 3; + + while((divider * divider < number) && (number % divider != 0)) + divider += 2; + + return (number % divider != 0); +} + +/* Before using the hash table we must allocate memory for it. + We allocate one element more as the found prime number says. + This is done for more effective indexing as explained in the + comment for the hash function. */ +static int htab_create(struct libusb_context *ctx, unsigned long nel) +{ + if (htab_table != NULL) { + usbi_err(ctx, "hash table already allocated"); + } + + // Create a mutex + usbi_mutex_init(&htab_write_mutex, NULL); + + // Change nel to the first prime number not smaller as nel. + nel |= 1; + while(!isprime(nel)) + nel += 2; + + htab_size = nel; + usbi_dbg("using %d entries hash table", nel); + htab_filled = 0; + + // allocate memory and zero out. + htab_table = (htab_entry*)calloc(htab_size + 1, sizeof(htab_entry)); + if (htab_table == NULL) { + usbi_err(ctx, "could not allocate space for hash table"); + return 0; + } + + return 1; +} + +/* After using the hash table it has to be destroyed. */ +static void htab_destroy(void) +{ + size_t i; + if (htab_table == NULL) { + return; + } + + for (i=0; i New entry + + // If the table is full return an error + if (htab_filled >= htab_size) { + usbi_err(NULL, "hash table is full (%d entries)", htab_size); + return 0; + } + + // Concurrent threads might be storing the same entry at the same time + // (eg. "simultaneous" enums from different threads) => use a mutex + usbi_mutex_lock(&htab_write_mutex); + // Just free any previously allocated string (which should be the same as + // new one). The possibility of concurrent threads storing a collision + // string (same hash, different string) at the same time is extremely low + safe_free(htab_table[idx].str); + htab_table[idx].used = hval; + htab_table[idx].str = (char*) calloc(1, safe_strlen(str)+1); + if (htab_table[idx].str == NULL) { + usbi_err(NULL, "could not duplicate string for hash table"); + usbi_mutex_unlock(&htab_write_mutex); + return 0; + } + memcpy(htab_table[idx].str, str, safe_strlen(str)+1); + ++htab_filled; + usbi_mutex_unlock(&htab_write_mutex); + + return idx; +} + +/* + * Returns the session ID of a device's nth level ancestor + * If there's no device at the nth level, return 0 + */ +static unsigned long get_ancestor_session_id(DWORD devinst, unsigned level) +{ + DWORD parent_devinst; + unsigned long session_id = 0; + char* sanitized_path = NULL; + char path[MAX_PATH_LENGTH]; + unsigned i; + + if (level < 1) return 0; + for (i = 0; idev); + struct libusb_config_descriptor *conf_desc; + const struct libusb_interface_descriptor *if_desc; + struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); + + r = libusb_get_config_descriptor(dev_handle->dev, 0, &conf_desc); + if (r != LIBUSB_SUCCESS) { + usbi_warn(ctx, "could not read config descriptor: error %d", r); + return r; + } + + if_desc = &conf_desc->interface[iface].altsetting[altsetting]; + safe_free(priv->usb_interface[iface].endpoint); + + if (if_desc->bNumEndpoints == 0) { + usbi_dbg("no endpoints found for interface %d", iface); + return LIBUSB_SUCCESS; + } + + priv->usb_interface[iface].endpoint = (uint8_t*) calloc(1, if_desc->bNumEndpoints); + if (priv->usb_interface[iface].endpoint == NULL) { + return LIBUSB_ERROR_NO_MEM; + } + + priv->usb_interface[iface].nb_endpoints = if_desc->bNumEndpoints; + for (i=0; ibNumEndpoints; i++) { + priv->usb_interface[iface].endpoint[i] = if_desc->endpoint[i].bEndpointAddress; + usbi_dbg("(re)assigned endpoint %02X to interface %d", priv->usb_interface[iface].endpoint[i], iface); + } + libusb_free_config_descriptor(conf_desc); + + // Extra init is required for WinUSB endpoints + if (priv->apib->id == USB_API_WINUSB) { + return winusb_configure_endpoints(dev_handle, iface); + } + + return LIBUSB_SUCCESS; +} + +// Lookup for a match in the list of API driver names +static bool is_api_driver(char* driver, uint8_t api) +{ + uint8_t i; + const char sep_str[2] = {LIST_SEPARATOR, 0}; + char *tok, *tmp_str; + size_t len = safe_strlen(driver); + + if (len == 0) return false; + tmp_str = (char*) calloc(1, len+1); + if (tmp_str == NULL) return false; + memcpy(tmp_str, driver, len+1); + tok = strtok(tmp_str, sep_str); + while (tok != NULL) { + for (i=0; idev_handle->dev); + struct windows_device_handle_priv *handle_priv = _device_handle_priv( + transfer->dev_handle); + struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); + int current_interface = *interface_number; + int r = LIBUSB_SUCCESS; + + usbi_mutex_lock(&autoclaim_lock); + if (current_interface < 0) // No serviceable interface was found + { + for (current_interface=0; current_interfaceusb_interface[current_interface].apib->id == api_type) + && (libusb_claim_interface(transfer->dev_handle, current_interface) == LIBUSB_SUCCESS) ) { + usbi_dbg("auto-claimed interface %d for control request", current_interface); + if (handle_priv->autoclaim_count[current_interface] != 0) { + usbi_warn(ctx, "program assertion failed - autoclaim_count was nonzero"); + } + handle_priv->autoclaim_count[current_interface]++; + break; + } + } + if (current_interface == USB_MAXINTERFACES) { + usbi_err(ctx, "could not auto-claim any interface"); + r = LIBUSB_ERROR_NOT_FOUND; + } + } else { + // If we have a valid interface that was autoclaimed, we must increment + // its autoclaim count so that we can prevent an early release. + if (handle_priv->autoclaim_count[current_interface] != 0) { + handle_priv->autoclaim_count[current_interface]++; + } + } + usbi_mutex_unlock(&autoclaim_lock); + + *interface_number = current_interface; + return r; + +} + +static void auto_release(struct usbi_transfer *itransfer) +{ + struct windows_transfer_priv *transfer_priv = (struct windows_transfer_priv*)usbi_transfer_get_os_priv(itransfer); + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + libusb_device_handle *dev_handle = transfer->dev_handle; + struct windows_device_handle_priv* handle_priv = _device_handle_priv(dev_handle); + int r; + + usbi_mutex_lock(&autoclaim_lock); + if (handle_priv->autoclaim_count[transfer_priv->interface_number] > 0) { + handle_priv->autoclaim_count[transfer_priv->interface_number]--; + if (handle_priv->autoclaim_count[transfer_priv->interface_number] == 0) { + r = libusb_release_interface(dev_handle, transfer_priv->interface_number); + if (r == LIBUSB_SUCCESS) { + usbi_dbg("auto-released interface %d", transfer_priv->interface_number); + } else { + usbi_dbg("failed to auto-release interface %d (%s)", + transfer_priv->interface_number, libusb_error_name((enum libusb_error)r)); + } + } + } + usbi_mutex_unlock(&autoclaim_lock); +} + +/* + * init: libusb backend init function + * + * This function enumerates the HCDs (Host Controller Drivers) and populates our private HCD list + * In our implementation, we equate Windows' "HCD" to LibUSB's "bus". Note that bus is zero indexed. + * HCDs are not expected to change after init (might not hold true for hot pluggable USB PCI card?) + */ +static int windows_init(struct libusb_context *ctx) +{ + int i, r = LIBUSB_ERROR_OTHER; + OSVERSIONINFO os_version; + HANDLE semaphore; + char sem_name[11+1+8]; // strlen(libusb_init)+'\0'+(32-bit hex PID) + + sprintf(sem_name, "libusb_init%08X", (unsigned int)GetCurrentProcessId()&0xFFFFFFFF); + semaphore = CreateSemaphoreA(NULL, 1, 1, sem_name); + if (semaphore == NULL) { + usbi_err(ctx, "could not create semaphore: %s", windows_error_str(0)); + return LIBUSB_ERROR_NO_MEM; + } + + // A successful wait brings our semaphore count to 0 (unsignaled) + // => any concurent wait stalls until the semaphore's release + if (WaitForSingleObject(semaphore, INFINITE) != WAIT_OBJECT_0) { + usbi_err(ctx, "failure to access semaphore: %s", windows_error_str(0)); + CloseHandle(semaphore); + return LIBUSB_ERROR_NO_MEM; + } + + // NB: concurrent usage supposes that init calls are equally balanced with + // exit calls. If init is called more than exit, we will not exit properly + if ( ++concurrent_usage == 0 ) { // First init? + // Detect OS version + memset(&os_version, 0, sizeof(OSVERSIONINFO)); + os_version.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + windows_version = WINDOWS_UNSUPPORTED; + if ((GetVersionEx(&os_version) != 0) && (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT)) { + if ((os_version.dwMajorVersion == 5) && (os_version.dwMinorVersion == 1)) { + windows_version = WINDOWS_XP; + } else if ((os_version.dwMajorVersion == 5) && (os_version.dwMinorVersion == 2)) { + windows_version = WINDOWS_2003; // also includes XP 64 + } else if (os_version.dwMajorVersion >= 6) { + windows_version = WINDOWS_VISTA_AND_LATER; + } + } + if (windows_version == WINDOWS_UNSUPPORTED) { + usbi_err(ctx, "This version of Windows is NOT supported"); + r = LIBUSB_ERROR_NOT_SUPPORTED; + goto init_exit; + } + + // We need a lock for proper auto-release + usbi_mutex_init(&autoclaim_lock, NULL); + + // Initialize pollable file descriptors + init_polling(); + + // Load DLL imports + if (init_dlls() != LIBUSB_SUCCESS) { + usbi_err(ctx, "could not resolve DLL functions"); + return LIBUSB_ERROR_NOT_FOUND; + } + + // Initialize the low level APIs (we don't care about errors at this stage) + for (i=0; inum_configurations = 1; + priv->dev_descriptor.bLength = sizeof(USB_DEVICE_DESCRIPTOR); + priv->dev_descriptor.bDescriptorType = USB_DEVICE_DESCRIPTOR_TYPE; + priv->dev_descriptor.bNumConfigurations = 1; + priv->active_config = 1; + + if (priv->parent_dev == NULL) { + usbi_err(ctx, "program assertion failed - HCD hub has no parent"); + return LIBUSB_ERROR_NO_DEVICE; + } + parent_priv = _device_priv(priv->parent_dev); + if (sscanf(parent_priv->path, "\\\\.\\PCI#VEN_%04x&DEV_%04x%*s", &vid, &pid) == 2) { + priv->dev_descriptor.idVendor = (uint16_t)vid; + priv->dev_descriptor.idProduct = (uint16_t)pid; + } else { + usbi_warn(ctx, "could not infer VID/PID of HCD hub from '%s'", parent_priv->path); + priv->dev_descriptor.idVendor = 0x1d6b; // Linux Foundation root hub + priv->dev_descriptor.idProduct = 1; + } + return LIBUSB_SUCCESS; +} + +/* + * fetch and cache all the config descriptors through I/O + */ +static int cache_config_descriptors(struct libusb_device *dev, HANDLE hub_handle, char* device_id) +{ + DWORD size, ret_size; + struct libusb_context *ctx = DEVICE_CTX(dev); + struct windows_device_priv *priv = _device_priv(dev); + int r; + uint8_t i; + + USB_CONFIGURATION_DESCRIPTOR_SHORT cd_buf_short; // dummy request + PUSB_DESCRIPTOR_REQUEST cd_buf_actual = NULL; // actual request + PUSB_CONFIGURATION_DESCRIPTOR cd_data = NULL; + + if (dev->num_configurations == 0) + return LIBUSB_ERROR_INVALID_PARAM; + + priv->config_descriptor = (unsigned char**) calloc(dev->num_configurations, sizeof(PUSB_CONFIGURATION_DESCRIPTOR)); + if (priv->config_descriptor == NULL) + return LIBUSB_ERROR_NO_MEM; + for (i=0; inum_configurations; i++) + priv->config_descriptor[i] = NULL; + + for (i=0, r=LIBUSB_SUCCESS; ; i++) + { + // safe loop: release all dynamic resources + safe_free(cd_buf_actual); + + // safe loop: end of loop condition + if ((i >= dev->num_configurations) || (r != LIBUSB_SUCCESS)) + break; + + size = sizeof(USB_CONFIGURATION_DESCRIPTOR_SHORT); + memset(&cd_buf_short, 0, size); + + cd_buf_short.req.ConnectionIndex = (ULONG)priv->port; + cd_buf_short.req.SetupPacket.bmRequest = LIBUSB_ENDPOINT_IN; + cd_buf_short.req.SetupPacket.bRequest = USB_REQUEST_GET_DESCRIPTOR; + cd_buf_short.req.SetupPacket.wValue = (USB_CONFIGURATION_DESCRIPTOR_TYPE << 8) | i; + cd_buf_short.req.SetupPacket.wIndex = i; + cd_buf_short.req.SetupPacket.wLength = (USHORT)(size - sizeof(USB_DESCRIPTOR_REQUEST)); + + // Dummy call to get the required data size + if (!DeviceIoControl(hub_handle, IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, &cd_buf_short, size, + &cd_buf_short, size, &ret_size, NULL)) { + usbi_err(ctx, "could not access configuration descriptor (dummy) for '%s': %s", device_id, windows_error_str(0)); + LOOP_BREAK(LIBUSB_ERROR_IO); + } + + if ((ret_size != size) || (cd_buf_short.data.wTotalLength < sizeof(USB_CONFIGURATION_DESCRIPTOR))) { + usbi_err(ctx, "unexpected configuration descriptor size (dummy) for '%s'.", device_id); + LOOP_BREAK(LIBUSB_ERROR_IO); + } + + size = sizeof(USB_DESCRIPTOR_REQUEST) + cd_buf_short.data.wTotalLength; + if ((cd_buf_actual = (PUSB_DESCRIPTOR_REQUEST) calloc(1, size)) == NULL) { + usbi_err(ctx, "could not allocate configuration descriptor buffer for '%s'.", device_id); + LOOP_BREAK(LIBUSB_ERROR_NO_MEM); + } + memset(cd_buf_actual, 0, size); + + // Actual call + cd_buf_actual->ConnectionIndex = (ULONG)priv->port; + cd_buf_actual->SetupPacket.bmRequest = LIBUSB_ENDPOINT_IN; + cd_buf_actual->SetupPacket.bRequest = USB_REQUEST_GET_DESCRIPTOR; + cd_buf_actual->SetupPacket.wValue = (USB_CONFIGURATION_DESCRIPTOR_TYPE << 8) | i; + cd_buf_actual->SetupPacket.wIndex = i; + cd_buf_actual->SetupPacket.wLength = (USHORT)(size - sizeof(USB_DESCRIPTOR_REQUEST)); + + if (!DeviceIoControl(hub_handle, IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, cd_buf_actual, size, + cd_buf_actual, size, &ret_size, NULL)) { + usbi_err(ctx, "could not access configuration descriptor (actual) for '%s': %s", device_id, windows_error_str(0)); + LOOP_BREAK(LIBUSB_ERROR_IO); + } + + cd_data = (PUSB_CONFIGURATION_DESCRIPTOR)((UCHAR*)cd_buf_actual+sizeof(USB_DESCRIPTOR_REQUEST)); + + if ((size != ret_size) || (cd_data->wTotalLength != cd_buf_short.data.wTotalLength)) { + usbi_err(ctx, "unexpected configuration descriptor size (actual) for '%s'.", device_id); + LOOP_BREAK(LIBUSB_ERROR_IO); + } + + if (cd_data->bDescriptorType != USB_CONFIGURATION_DESCRIPTOR_TYPE) { + usbi_err(ctx, "not a configuration descriptor for '%s'", device_id); + LOOP_BREAK(LIBUSB_ERROR_IO); + } + + usbi_dbg("cached config descriptor %d (bConfigurationValue=%d, %d bytes)", + i, cd_data->bConfigurationValue, cd_data->wTotalLength); + + // Cache the descriptor + priv->config_descriptor[i] = (unsigned char*) calloc(1, cd_data->wTotalLength); + if (priv->config_descriptor[i] == NULL) + return LIBUSB_ERROR_NO_MEM; + memcpy(priv->config_descriptor[i], cd_data, cd_data->wTotalLength); + } + return LIBUSB_SUCCESS; +} + +/* + * Populate a libusb device structure + */ +static int init_device(struct libusb_device* dev, struct libusb_device* parent_dev, + uint8_t port_number, char* device_id, DWORD devinst) +{ + HANDLE handle; + DWORD size; + USB_NODE_CONNECTION_INFORMATION_EX conn_info; + struct windows_device_priv *priv, *parent_priv; + struct libusb_context *ctx = DEVICE_CTX(dev); + struct libusb_device* tmp_dev; + unsigned i; + + if ((dev == NULL) || (parent_dev == NULL)) { + return LIBUSB_ERROR_NOT_FOUND; + } + priv = _device_priv(dev); + parent_priv = _device_priv(parent_dev); + if (parent_priv->apib->id != USB_API_HUB) { + usbi_warn(ctx, "parent for device '%s' is not a hub", device_id); + return LIBUSB_ERROR_NOT_FOUND; + } + + // It is possible for the parent hub not to have been initialized yet + // If that's the case, lookup the ancestors to set the bus number + if (parent_dev->bus_number == 0) { + for (i=2; ; i++) { + tmp_dev = usbi_get_device_by_session_id(ctx, get_ancestor_session_id(devinst, i)); + if (tmp_dev == NULL) break; + if (tmp_dev->bus_number != 0) { + usbi_dbg("got bus number from ancestor #%d", i); + parent_dev->bus_number = tmp_dev->bus_number; + break; + } + } + } + if (parent_dev->bus_number == 0) { + usbi_err(ctx, "program assertion failed: unable to find ancestor bus number for '%s'", device_id); + return LIBUSB_ERROR_NOT_FOUND; + } + dev->bus_number = parent_dev->bus_number; + priv->port = port_number; + priv->depth = parent_priv->depth + 1; + priv->parent_dev = parent_dev; + + // If the device address is already set, we can stop here + if (dev->device_address != 0) { + return LIBUSB_SUCCESS; + } + memset(&conn_info, 0, sizeof(conn_info)); + if (priv->depth != 0) { // Not a HCD hub + handle = CreateFileA(parent_priv->path, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, + FILE_FLAG_OVERLAPPED, NULL); + if (handle == INVALID_HANDLE_VALUE) { + usbi_warn(ctx, "could not open hub %s: %s", parent_priv->path, windows_error_str(0)); + return LIBUSB_ERROR_ACCESS; + } + size = sizeof(conn_info); + conn_info.ConnectionIndex = (ULONG)port_number; + if (!DeviceIoControl(handle, IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX, &conn_info, size, + &conn_info, size, &size, NULL)) { + usbi_warn(ctx, "could not get node connection information for device '%s': %s", + device_id, windows_error_str(0)); + safe_closehandle(handle); + return LIBUSB_ERROR_NO_DEVICE; + } + if (conn_info.ConnectionStatus == NoDeviceConnected) { + usbi_err(ctx, "device '%s' is no longer connected!", device_id); + safe_closehandle(handle); + return LIBUSB_ERROR_NO_DEVICE; + } + memcpy(&priv->dev_descriptor, &(conn_info.DeviceDescriptor), sizeof(USB_DEVICE_DESCRIPTOR)); + dev->num_configurations = priv->dev_descriptor.bNumConfigurations; + priv->active_config = conn_info.CurrentConfigurationValue; + usbi_dbg("found %d configurations (active conf: %d)", dev->num_configurations, priv->active_config); + // If we can't read the config descriptors, just set the number of confs to zero + if (cache_config_descriptors(dev, handle, device_id) != LIBUSB_SUCCESS) { + dev->num_configurations = 0; + priv->dev_descriptor.bNumConfigurations = 0; + } + safe_closehandle(handle); + + if (conn_info.DeviceAddress > UINT8_MAX) { + usbi_err(ctx, "program assertion failed: device address overflow"); + } + dev->device_address = (uint8_t)conn_info.DeviceAddress; + switch (conn_info.Speed) { + case 0: dev->speed = LIBUSB_SPEED_LOW; break; + case 1: dev->speed = LIBUSB_SPEED_FULL; break; + case 2: dev->speed = LIBUSB_SPEED_HIGH; break; + case 3: dev->speed = LIBUSB_SPEED_SUPER; break; + default: + usbi_warn(ctx, "Got unknown device speed %d", conn_info.Speed); + break; + } + } else { + dev->device_address = UINT8_MAX; // Hubs from HCD have a devaddr of 255 + force_hcd_device_descriptor(dev); + } + + usbi_dbg("(bus: %d, addr: %d, depth: %d, port: %d): '%s'", + dev->bus_number, dev->device_address, priv->depth, priv->port, device_id); + + return LIBUSB_SUCCESS; +} + +// Returns the api type, or 0 if not found/unsupported +static uint8_t get_api_type(struct libusb_context *ctx, + HDEVINFO *dev_info, SP_DEVINFO_DATA *dev_info_data) +{ + // Precedence for filter drivers vs driver is in the order of this array + struct driver_lookup lookup[3] = { + {"\0\0", SPDRP_SERVICE, "driver"}, + {"\0\0", SPDRP_UPPERFILTERS, "upper filter driver"}, + {"\0\0", SPDRP_LOWERFILTERS, "lower filter driver"} + }; + DWORD size, reg_type; + unsigned k, l; + uint8_t api; + + // Check the service & filter names to know the API we should use + for (k=0; k<3; k++) { + if (pSetupDiGetDeviceRegistryPropertyA(*dev_info, dev_info_data, lookup[k].reg_prop, + ®_type, (BYTE*)lookup[k].list, MAX_KEY_LENGTH, &size)) { + // Turn the REG_SZ SPDRP_SERVICE into REG_MULTI_SZ + if (lookup[k].reg_prop == SPDRP_SERVICE) { + // our buffers are MAX_KEY_LENGTH+1 so we can overflow if needed + lookup[k].list[safe_strlen(lookup[k].list)+1] = 0; + } + // MULTI_SZ is a pain to work with. Turn it into something much more manageable + // NB: none of the driver names we check against contain LIST_SEPARATOR, + // (currently ';'), so even if an unsuported one does, it's not an issue + for (l=0; (lookup[k].list[l] != 0) || (lookup[k].list[l+1] != 0); l++) { + if (lookup[k].list[l] == 0) { + lookup[k].list[l] = LIST_SEPARATOR; + } + } + upperize(lookup[k].list); + usbi_dbg("%s(s): %s", lookup[k].designation, lookup[k].list); + } else { + if (GetLastError() != ERROR_INVALID_DATA) { + usbi_dbg("could not access %s: %s", lookup[k].designation, windows_error_str(0)); + } + lookup[k].list[0] = 0; + } + } + + for (api=1; api= 3) continue; + return api; + } + return 0; +} + +static int set_composite_interface(struct libusb_context* ctx, struct libusb_device* dev, + char* dev_interface_path, char* device_id, uint8_t api) +{ + unsigned i; + struct windows_device_priv *priv = _device_priv(dev); + int interface_number; + + if (priv->apib->id != USB_API_COMPOSITE) { + usbi_err(ctx, "program assertion failed: '%s' is not composite", device_id); + return LIBUSB_ERROR_NO_DEVICE; + } + + // Because MI_## are not necessarily in sequential order (some composite + // devices will have only MI_00 & MI_03 for instance), we retrieve the actual + // interface number from the path's MI value + interface_number = 0; + for (i=0; device_id[i] != 0; ) { + if ( (device_id[i++] == 'M') && (device_id[i++] == 'I') + && (device_id[i++] == '_') ) { + interface_number = (device_id[i++] - '0')*10; + interface_number += device_id[i] - '0'; + break; + } + } + + if (device_id[i] == 0) { + usbi_warn(ctx, "failure to read interface number for %s. Using default value %d", + device_id, interface_number); + } + + if (priv->usb_interface[interface_number].path != NULL) { + usbi_warn(ctx, "interface[%d] already set - ignoring: %s", interface_number, device_id); + return LIBUSB_ERROR_ACCESS; + } + + usbi_dbg("interface[%d] = %s", interface_number, dev_interface_path); + priv->usb_interface[interface_number].path = dev_interface_path; + priv->usb_interface[interface_number].apib = &usb_api_backend[api]; + priv->composite_api_flags |= 1<DevicePath); + if (dev_interface_path == NULL) { + usbi_warn(ctx, "could not sanitize device interface path for '%s'", dev_interface_details->DevicePath); + continue; + } + } + } else { + // Workaround for a Nec/Renesas USB 3.0 driver bug where root hubs are + // being listed under the "NUSB3" PnP Symbolic Name rather than "USB" + while ( (class_index < 2) && + (!(b = get_devinfo_data(ctx, &dev_info, &dev_info_data, usb_class[class_index], i))) ) { + class_index++; + i = 0; + } + if (!b) break; + } + + // Read the Device ID path. This is what we'll use as UID + // Note that if the device is plugged in a different port or hub, the Device ID changes + if (CM_Get_Device_IDA(dev_info_data.DevInst, path, sizeof(path), 0) != CR_SUCCESS) { + usbi_warn(ctx, "could not read the device id path for devinst %X, skipping", + dev_info_data.DevInst); + continue; + } + dev_id_path = sanitize_path(path); + if (dev_id_path == NULL) { + usbi_warn(ctx, "could not sanitize device id path for devinst %X, skipping", + dev_info_data.DevInst); + continue; + } +#ifdef ENUM_DEBUG + usbi_dbg("PRO: %s", dev_id_path); +#endif + + // The SPDRP_ADDRESS for USB devices is the device port number on the hub + port_nr = 0; + if ((pass >= HUB_PASS) && (pass <= GEN_PASS)) { + if ( (!pSetupDiGetDeviceRegistryPropertyA(dev_info, &dev_info_data, SPDRP_ADDRESS, + ®_type, (BYTE*)&port_nr, 4, &size)) + || (size != 4) ) { + usbi_warn(ctx, "could not retrieve port number for device '%s', skipping: %s", + dev_id_path, windows_error_str(0)); + continue; + } + } + + // Set API to use or get additional data from generic pass + api = USB_API_UNSUPPORTED; + switch (pass) { + case HCD_PASS: + break; + case GEN_PASS: + // We use the GEN pass to detect driverless devices... + size = sizeof(strbuf); + if (!pSetupDiGetDeviceRegistryPropertyA(dev_info, &dev_info_data, SPDRP_DRIVER, + ®_type, (BYTE*)strbuf, size, &size)) { + usbi_info(ctx, "The following device has no driver: '%s'", dev_id_path); + usbi_info(ctx, "libusb will not be able to access it."); + } + // ...and to add the additional device interface GUIDs + key = pSetupDiOpenDevRegKey(dev_info, &dev_info_data, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ); + if (key != INVALID_HANDLE_VALUE) { + size = sizeof(guid_string_w); + s = pRegQueryValueExW(key, L"DeviceInterfaceGUIDs", NULL, ®_type, + (BYTE*)guid_string_w, &size); + pRegCloseKey(key); + if (s == ERROR_SUCCESS) { + if (nb_guids >= MAX_ENUM_GUIDS) { + // If this assert is ever reported, grow a GUID table dynamically + usbi_err(ctx, "program assertion failed: too many GUIDs"); + LOOP_BREAK(LIBUSB_ERROR_OVERFLOW); + } + if_guid = (GUID*) calloc(1, sizeof(GUID)); + pCLSIDFromString(guid_string_w, if_guid); + guid[nb_guids++] = if_guid; + usbi_dbg("extra GUID: %s", guid_to_string(if_guid)); + } + } + break; + default: + // Get the API type (after checking that the driver installation is OK) + if ( (!pSetupDiGetDeviceRegistryPropertyA(dev_info, &dev_info_data, SPDRP_INSTALL_STATE, + ®_type, (BYTE*)&install_state, 4, &size)) + || (size != 4) ){ + usbi_warn(ctx, "could not detect installation state of driver for '%s': %s", + dev_id_path, windows_error_str(0)); + } else if (install_state != 0) { + usbi_warn(ctx, "driver for device '%s' is reporting an issue (code: %d) - skipping", + dev_id_path, install_state); + continue; + } + api = get_api_type(ctx, &dev_info, &dev_info_data); + break; + } + + // Find parent device (for the passes that need it) + switch (pass) { + case HCD_PASS: + case DEV_PASS: + case HUB_PASS: + break; + default: + // Go through the ancestors until we see a face we recognize + parent_dev = NULL; + for (ancestor = 1; parent_dev == NULL; ancestor++) { + session_id = get_ancestor_session_id(dev_info_data.DevInst, ancestor); + if (session_id == 0) { + break; + } + parent_dev = usbi_get_device_by_session_id(ctx, session_id); + } + if (parent_dev == NULL) { + usbi_dbg("unlisted ancestor for '%s' (newly connected, etc.) - ignoring", dev_id_path); + continue; + } + parent_priv = _device_priv(parent_dev); + // virtual USB devices are also listed during GEN - don't process these yet + if ( (pass == GEN_PASS) && (parent_priv->apib->id != USB_API_HUB) ) { + continue; + } + break; + } + + // Create new or match existing device, using the (hashed) device_id as session id + if (pass <= DEV_PASS) { // For subsequent passes, we'll lookup the parent + // These are the passes that create "new" devices + session_id = htab_hash(dev_id_path); + dev = usbi_get_device_by_session_id(ctx, session_id); + if (dev == NULL) { + if (pass == DEV_PASS) { + // This can occur if the OS only reports a newly plugged device after we started enum + usbi_warn(ctx, "'%s' was only detected in late pass (newly connected device?)" + " - ignoring", dev_id_path); + continue; + } + usbi_dbg("allocating new device for session [%X]", session_id); + if ((dev = usbi_alloc_device(ctx, session_id)) == NULL) { + LOOP_BREAK(LIBUSB_ERROR_NO_MEM); + } + windows_device_priv_init(dev); + // Keep track of devices that need unref + unref_list[unref_cur++] = dev; + if (unref_cur >= unref_size) { + unref_size += 64; + unref_list = realloc(unref_list, unref_size*sizeof(libusb_device*)); + if (unref_list == NULL) { + usbi_err(ctx, "could not realloc list for unref - aborting."); + LOOP_BREAK(LIBUSB_ERROR_NO_MEM); + } + } + } else { + usbi_dbg("found existing device for session [%X] (%d.%d)", + session_id, dev->bus_number, dev->device_address); + } + priv = _device_priv(dev); + } + + // Setup device + switch (pass) { + case HCD_PASS: + dev->bus_number = (uint8_t)(i + 1); // bus 0 is reserved for disconnected + dev->device_address = 0; + dev->num_configurations = 0; + priv->apib = &usb_api_backend[USB_API_HUB]; + priv->depth = UINT8_MAX; // Overflow to 0 for HCD Hubs + priv->path = dev_interface_path; dev_interface_path = NULL; + break; + case HUB_PASS: + case DEV_PASS: + // If the device has already been setup, don't do it again + if (priv->path != NULL) + break; + // Take care of API initialization + priv->path = dev_interface_path; dev_interface_path = NULL; + priv->apib = &usb_api_backend[api]; + switch(api) { + case USB_API_COMPOSITE: + case USB_API_HUB: + break; + default: + // For other devices, the first interface is the same as the device + priv->usb_interface[0].path = (char*) calloc(safe_strlen(priv->path)+1, 1); + if (priv->usb_interface[0].path != NULL) { + safe_strcpy(priv->usb_interface[0].path, safe_strlen(priv->path)+1, priv->path); + } else { + usbi_warn(ctx, "could not duplicate interface path '%s'", priv->path); + } + // The following is needed if we want API calls to work for both simple + // and composite devices. + for(j=0; jusb_interface[j].apib = &usb_api_backend[api]; + } + break; + } + break; + case GEN_PASS: + r = init_device(dev, parent_dev, (uint8_t)port_nr, dev_id_path, dev_info_data.DevInst); + if (r == LIBUSB_SUCCESS) { + // Append device to the list of discovered devices + discdevs = discovered_devs_append(*_discdevs, dev); + if (!discdevs) { + LOOP_BREAK(LIBUSB_ERROR_NO_MEM); + } + *_discdevs = discdevs; + } else if (r == LIBUSB_ERROR_NO_DEVICE) { + // This can occur if the device was disconnected but Windows hasn't + // refreshed its enumeration yet - in that case, we ignore the device + r = LIBUSB_SUCCESS; + } + break; + default: // later passes + if (parent_priv->apib->id == USB_API_COMPOSITE) { + usbi_dbg("setting composite interface for [%lX]:", parent_dev->session_data); + switch (set_composite_interface(ctx, parent_dev, dev_interface_path, dev_id_path, api)) { + case LIBUSB_SUCCESS: + dev_interface_path = NULL; + break; + case LIBUSB_ERROR_ACCESS: + // interface has already been set => make sure dev_interface_path is freed then + break; + default: + LOOP_BREAK(r); + break; + } + } + break; + } + } + } + + // Free any additional GUIDs + for (pass = DEV_PASS+1; pass < nb_guids; pass++) { + safe_free(guid[pass]); + } + + // Unref newly allocated devs + for (i=0; i any concurent wait stalls until the semaphore release + if (WaitForSingleObject(semaphore, INFINITE) != WAIT_OBJECT_0) { + CloseHandle(semaphore); + return; + } + + // Only works if exits and inits are balanced exactly + if (--concurrent_usage < 0) { // Last exit + for (i=0; idev_descriptor), DEVICE_DESC_LENGTH); + *host_endian = 0; + + return LIBUSB_SUCCESS; +} + +static int windows_get_config_descriptor(struct libusb_device *dev, uint8_t config_index, unsigned char *buffer, size_t len, int *host_endian) +{ + struct windows_device_priv *priv = _device_priv(dev); + PUSB_CONFIGURATION_DESCRIPTOR config_header; + size_t size; + + // config index is zero based + if (config_index >= dev->num_configurations) + return LIBUSB_ERROR_INVALID_PARAM; + + if ((priv->config_descriptor == NULL) || (priv->config_descriptor[config_index] == NULL)) + return LIBUSB_ERROR_NOT_FOUND; + + config_header = (PUSB_CONFIGURATION_DESCRIPTOR)priv->config_descriptor[config_index]; + + size = min(config_header->wTotalLength, len); + memcpy(buffer, priv->config_descriptor[config_index], size); + + return LIBUSB_SUCCESS; +} + +/* + * return the cached copy of the active config descriptor + */ +static int windows_get_active_config_descriptor(struct libusb_device *dev, unsigned char *buffer, size_t len, int *host_endian) +{ + struct windows_device_priv *priv = _device_priv(dev); + + if (priv->active_config == 0) + return LIBUSB_ERROR_NOT_FOUND; + + // config index is zero based + return windows_get_config_descriptor(dev, (uint8_t)(priv->active_config-1), buffer, len, host_endian); +} + +static int windows_open(struct libusb_device_handle *dev_handle) +{ + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); + + if (priv->apib == NULL) { + usbi_err(ctx, "program assertion failed - device is not initialized"); + return LIBUSB_ERROR_NO_DEVICE; + } + + return priv->apib->open(dev_handle); +} + +static void windows_close(struct libusb_device_handle *dev_handle) +{ + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + + priv->apib->close(dev_handle); +} + +static int windows_get_configuration(struct libusb_device_handle *dev_handle, int *config) +{ + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + + if (priv->active_config == 0) { + *config = 0; + return LIBUSB_ERROR_NOT_FOUND; + } + + *config = priv->active_config; + return LIBUSB_SUCCESS; +} + +/* + * from http://msdn.microsoft.com/en-us/library/ms793522.aspx: "The port driver + * does not currently expose a service that allows higher-level drivers to set + * the configuration." + */ +static int windows_set_configuration(struct libusb_device_handle *dev_handle, int config) +{ + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + int r = LIBUSB_SUCCESS; + + if (config >= USB_MAXCONFIG) + return LIBUSB_ERROR_INVALID_PARAM; + + r = libusb_control_transfer(dev_handle, LIBUSB_ENDPOINT_OUT | + LIBUSB_REQUEST_TYPE_STANDARD | LIBUSB_RECIPIENT_DEVICE, + LIBUSB_REQUEST_SET_CONFIGURATION, (uint16_t)config, + 0, NULL, 0, 1000); + + if (r == LIBUSB_SUCCESS) { + priv->active_config = (uint8_t)config; + } + return r; +} + +static int windows_claim_interface(struct libusb_device_handle *dev_handle, int iface) +{ + int r = LIBUSB_SUCCESS; + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + + if (iface >= USB_MAXINTERFACES) + return LIBUSB_ERROR_INVALID_PARAM; + + safe_free(priv->usb_interface[iface].endpoint); + priv->usb_interface[iface].nb_endpoints= 0; + + r = priv->apib->claim_interface(dev_handle, iface); + + if (r == LIBUSB_SUCCESS) { + r = windows_assign_endpoints(dev_handle, iface, 0); + } + + return r; +} + +static int windows_set_interface_altsetting(struct libusb_device_handle *dev_handle, int iface, int altsetting) +{ + int r = LIBUSB_SUCCESS; + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + + safe_free(priv->usb_interface[iface].endpoint); + priv->usb_interface[iface].nb_endpoints= 0; + + r = priv->apib->set_interface_altsetting(dev_handle, iface, altsetting); + + if (r == LIBUSB_SUCCESS) { + r = windows_assign_endpoints(dev_handle, iface, altsetting); + } + + return r; +} + +static int windows_release_interface(struct libusb_device_handle *dev_handle, int iface) +{ + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + + return priv->apib->release_interface(dev_handle, iface); +} + +static int windows_clear_halt(struct libusb_device_handle *dev_handle, unsigned char endpoint) +{ + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + return priv->apib->clear_halt(dev_handle, endpoint); +} + +static int windows_reset_device(struct libusb_device_handle *dev_handle) +{ + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + return priv->apib->reset_device(dev_handle); +} + +// The 3 functions below are unlikely to ever get supported on Windows +static int windows_kernel_driver_active(struct libusb_device_handle *dev_handle, int iface) +{ + return LIBUSB_ERROR_NOT_SUPPORTED; +} + +static int windows_attach_kernel_driver(struct libusb_device_handle *dev_handle, int iface) +{ + return LIBUSB_ERROR_NOT_SUPPORTED; +} + +static int windows_detach_kernel_driver(struct libusb_device_handle *dev_handle, int iface) +{ + return LIBUSB_ERROR_NOT_SUPPORTED; +} + +static void windows_destroy_device(struct libusb_device *dev) +{ + windows_device_priv_release(dev); +} + +static void windows_clear_transfer_priv(struct usbi_transfer *itransfer) +{ + struct windows_transfer_priv *transfer_priv = (struct windows_transfer_priv*)usbi_transfer_get_os_priv(itransfer); + + usbi_free_fd(transfer_priv->pollable_fd.fd); + // When auto claim is in use, attempt to release the auto-claimed interface + auto_release(itransfer); +} + +static int submit_bulk_transfer(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); + struct windows_transfer_priv *transfer_priv = (struct windows_transfer_priv*)usbi_transfer_get_os_priv(itransfer); + struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); + int r; + + r = priv->apib->submit_bulk_transfer(itransfer); + if (r != LIBUSB_SUCCESS) { + return r; + } + + usbi_add_pollfd(ctx, transfer_priv->pollable_fd.fd, + (short)(IS_XFERIN(transfer) ? POLLIN : POLLOUT)); + + return LIBUSB_SUCCESS; +} + +static int submit_iso_transfer(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); + struct windows_transfer_priv *transfer_priv = (struct windows_transfer_priv*)usbi_transfer_get_os_priv(itransfer); + struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); + int r; + + r = priv->apib->submit_iso_transfer(itransfer); + if (r != LIBUSB_SUCCESS) { + return r; + } + + usbi_add_pollfd(ctx, transfer_priv->pollable_fd.fd, + (short)(IS_XFERIN(transfer) ? POLLIN : POLLOUT)); + + return LIBUSB_SUCCESS; +} + +static int submit_control_transfer(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); + struct windows_transfer_priv *transfer_priv = (struct windows_transfer_priv*)usbi_transfer_get_os_priv(itransfer); + struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); + int r; + + r = priv->apib->submit_control_transfer(itransfer); + if (r != LIBUSB_SUCCESS) { + return r; + } + + usbi_add_pollfd(ctx, transfer_priv->pollable_fd.fd, POLLIN); + + return LIBUSB_SUCCESS; + +} + +static int windows_submit_transfer(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + + switch (transfer->type) { + case LIBUSB_TRANSFER_TYPE_CONTROL: + return submit_control_transfer(itransfer); + case LIBUSB_TRANSFER_TYPE_BULK: + case LIBUSB_TRANSFER_TYPE_INTERRUPT: + if (IS_XFEROUT(transfer) && + transfer->flags & LIBUSB_TRANSFER_ADD_ZERO_PACKET) + return LIBUSB_ERROR_NOT_SUPPORTED; + return submit_bulk_transfer(itransfer); + case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: + return submit_iso_transfer(itransfer); + default: + usbi_err(TRANSFER_CTX(transfer), "unknown endpoint type %d", transfer->type); + return LIBUSB_ERROR_INVALID_PARAM; + } +} + +static int windows_abort_control(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); + + return priv->apib->abort_control(itransfer); +} + +static int windows_abort_transfers(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); + + return priv->apib->abort_transfers(itransfer); +} + +static int windows_cancel_transfer(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + + switch (transfer->type) { + case LIBUSB_TRANSFER_TYPE_CONTROL: + return windows_abort_control(itransfer); + case LIBUSB_TRANSFER_TYPE_BULK: + case LIBUSB_TRANSFER_TYPE_INTERRUPT: + case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: + return windows_abort_transfers(itransfer); + default: + usbi_err(ITRANSFER_CTX(itransfer), "unknown endpoint type %d", transfer->type); + return LIBUSB_ERROR_INVALID_PARAM; + } +} + +static void windows_transfer_callback(struct usbi_transfer *itransfer, uint32_t io_result, uint32_t io_size) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); + int status; + + usbi_dbg("handling I/O completion with errcode %d", io_result); + + switch(io_result) { + case NO_ERROR: + status = priv->apib->copy_transfer_data(itransfer, io_size); + break; + case ERROR_GEN_FAILURE: + usbi_dbg("detected endpoint stall"); + status = LIBUSB_TRANSFER_STALL; + break; + case ERROR_SEM_TIMEOUT: + usbi_dbg("detected semaphore timeout"); + status = LIBUSB_TRANSFER_TIMED_OUT; + break; + case ERROR_OPERATION_ABORTED: + if (itransfer->flags & USBI_TRANSFER_TIMED_OUT) { + usbi_dbg("detected timeout"); + status = LIBUSB_TRANSFER_TIMED_OUT; + } else { + usbi_dbg("detected operation aborted"); + status = LIBUSB_TRANSFER_CANCELLED; + } + break; + default: + usbi_err(ITRANSFER_CTX(itransfer), "detected I/O error: %s", windows_error_str(0)); + status = LIBUSB_TRANSFER_ERROR; + break; + } + windows_clear_transfer_priv(itransfer); // Cancel polling + usbi_handle_transfer_completion(itransfer, (enum libusb_transfer_status)status); +} + +static void windows_handle_callback (struct usbi_transfer *itransfer, uint32_t io_result, uint32_t io_size) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + + switch (transfer->type) { + case LIBUSB_TRANSFER_TYPE_CONTROL: + case LIBUSB_TRANSFER_TYPE_BULK: + case LIBUSB_TRANSFER_TYPE_INTERRUPT: + case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: + windows_transfer_callback (itransfer, io_result, io_size); + break; + default: + usbi_err(ITRANSFER_CTX(itransfer), "unknown endpoint type %d", transfer->type); + } +} + +static int windows_handle_events(struct libusb_context *ctx, struct pollfd *fds, POLL_NFDS_TYPE nfds, int num_ready) +{ + struct windows_transfer_priv* transfer_priv = NULL; + POLL_NFDS_TYPE i = 0; + bool found = false; + struct usbi_transfer *transfer; + DWORD io_size, io_result; + + usbi_mutex_lock(&ctx->open_devs_lock); + for (i = 0; i < nfds && num_ready > 0; i++) { + + usbi_dbg("checking fd %d with revents = %04x", fds[i].fd, fds[i].revents); + + if (!fds[i].revents) { + continue; + } + + num_ready--; + + // Because a Windows OVERLAPPED is used for poll emulation, + // a pollable fd is created and stored with each transfer + usbi_mutex_lock(&ctx->flying_transfers_lock); + list_for_each_entry(transfer, &ctx->flying_transfers, list, struct usbi_transfer) { + transfer_priv = usbi_transfer_get_os_priv(transfer); + if (transfer_priv->pollable_fd.fd == fds[i].fd) { + found = true; + break; + } + } + usbi_mutex_unlock(&ctx->flying_transfers_lock); + + if (found) { + // Handle async requests that completed synchronously first + if (HasOverlappedIoCompletedSync(transfer_priv->pollable_fd.overlapped)) { + io_result = NO_ERROR; + io_size = (DWORD)transfer_priv->pollable_fd.overlapped->InternalHigh; + // Regular async overlapped + } else if (GetOverlappedResult(transfer_priv->pollable_fd.handle, + transfer_priv->pollable_fd.overlapped, &io_size, false)) { + io_result = NO_ERROR; + } else { + io_result = GetLastError(); + } + usbi_remove_pollfd(ctx, transfer_priv->pollable_fd.fd); + // let handle_callback free the event using the transfer wfd + // If you don't use the transfer wfd, you run a risk of trying to free a + // newly allocated wfd that took the place of the one from the transfer. + windows_handle_callback(transfer, io_result, io_size); + } else { + usbi_err(ctx, "could not find a matching transfer for fd %x", fds[i]); + return LIBUSB_ERROR_NOT_FOUND; + } + } + + usbi_mutex_unlock(&ctx->open_devs_lock); + return LIBUSB_SUCCESS; +} + +/* + * Monotonic and real time functions + */ +unsigned __stdcall windows_clock_gettime_threaded(void* param) +{ + LARGE_INTEGER hires_counter, li_frequency; + LONG nb_responses; + int timer_index; + + // Init - find out if we have access to a monotonic (hires) timer + if (!QueryPerformanceFrequency(&li_frequency)) { + usbi_dbg("no hires timer available on this platform"); + hires_frequency = 0; + hires_ticks_to_ps = UINT64_C(0); + } else { + hires_frequency = li_frequency.QuadPart; + // The hires frequency can go as high as 4 GHz, so we'll use a conversion + // to picoseconds to compute the tv_nsecs part in clock_gettime + hires_ticks_to_ps = UINT64_C(1000000000000) / hires_frequency; + usbi_dbg("hires timer available (Frequency: %"PRIu64" Hz)", hires_frequency); + } + + // Main loop - wait for requests + while (1) { + timer_index = WaitForMultipleObjects(2, timer_request, FALSE, INFINITE) - WAIT_OBJECT_0; + if ( (timer_index != 0) && (timer_index != 1) ) { + usbi_dbg("failure to wait on requests: %s", windows_error_str(0)); + continue; + } + if (request_count[timer_index] == 0) { + // Request already handled + ResetEvent(timer_request[timer_index]); + // There's still a possiblity that a thread sends a request between the + // time we test request_count[] == 0 and we reset the event, in which case + // the request would be ignored. The simple solution to that is to test + // request_count again and process requests if non zero. + if (request_count[timer_index] == 0) + continue; + } + switch (timer_index) { + case 0: + WaitForSingleObject(timer_mutex, INFINITE); + // Requests to this thread are for hires always + if (QueryPerformanceCounter(&hires_counter) != 0) { + timer_tp.tv_sec = (long)(hires_counter.QuadPart / hires_frequency); + timer_tp.tv_nsec = (long)(((hires_counter.QuadPart % hires_frequency)/1000) * hires_ticks_to_ps); + } else { + // Fallback to real-time if we can't get monotonic value + // Note that real-time clock does not wait on the mutex or this thread. + windows_clock_gettime(USBI_CLOCK_REALTIME, &timer_tp); + } + ReleaseMutex(timer_mutex); + + nb_responses = InterlockedExchange((LONG*)&request_count[0], 0); + if ( (nb_responses) + && (ReleaseSemaphore(timer_response, nb_responses, NULL) == 0) ) { + usbi_dbg("unable to release timer semaphore %d: %s", windows_error_str(0)); + } + continue; + case 1: // time to quit + usbi_dbg("timer thread quitting"); + return 0; + } + } + usbi_dbg("ERROR: broken timer thread"); + return 1; +} + +static int windows_clock_gettime(int clk_id, struct timespec *tp) +{ + FILETIME filetime; + ULARGE_INTEGER rtime; + DWORD r; + switch(clk_id) { + case USBI_CLOCK_MONOTONIC: + if (hires_frequency != 0) { + while (1) { + InterlockedIncrement((LONG*)&request_count[0]); + SetEvent(timer_request[0]); + r = WaitForSingleObject(timer_response, TIMER_REQUEST_RETRY_MS); + switch(r) { + case WAIT_OBJECT_0: + WaitForSingleObject(timer_mutex, INFINITE); + *tp = timer_tp; + ReleaseMutex(timer_mutex); + return LIBUSB_SUCCESS; + case WAIT_TIMEOUT: + usbi_dbg("could not obtain a timer value within reasonable timeframe - too much load?"); + break; // Retry until successful + default: + usbi_dbg("WaitForSingleObject failed: %s", windows_error_str(0)); + return LIBUSB_ERROR_OTHER; + } + } + } + // Fall through and return real-time if monotonic was not detected @ timer init + case USBI_CLOCK_REALTIME: + // We follow http://msdn.microsoft.com/en-us/library/ms724928%28VS.85%29.aspx + // with a predef epoch_time to have an epoch that starts at 1970.01.01 00:00 + // Note however that our resolution is bounded by the Windows system time + // functions and is at best of the order of 1 ms (or, usually, worse) + GetSystemTimeAsFileTime(&filetime); + rtime.LowPart = filetime.dwLowDateTime; + rtime.HighPart = filetime.dwHighDateTime; + rtime.QuadPart -= epoch_time; + tp->tv_sec = (long)(rtime.QuadPart / 10000000); + tp->tv_nsec = (long)((rtime.QuadPart % 10000000)*100); + return LIBUSB_SUCCESS; + default: + return LIBUSB_ERROR_INVALID_PARAM; + } +} + + +// NB: MSVC6 does not support named initializers. +const struct usbi_os_backend windows_backend = { + "Windows", + windows_init, + windows_exit, + + windows_get_device_list, + windows_open, + windows_close, + + windows_get_device_descriptor, + windows_get_active_config_descriptor, + windows_get_config_descriptor, + + windows_get_configuration, + windows_set_configuration, + windows_claim_interface, + windows_release_interface, + + windows_set_interface_altsetting, + windows_clear_halt, + windows_reset_device, + + windows_kernel_driver_active, + windows_detach_kernel_driver, + windows_attach_kernel_driver, + + windows_destroy_device, + + windows_submit_transfer, + windows_cancel_transfer, + windows_clear_transfer_priv, + + windows_handle_events, + + windows_clock_gettime, +#if defined(USBI_TIMERFD_AVAILABLE) + NULL, +#endif + sizeof(struct windows_device_priv), + sizeof(struct windows_device_handle_priv), + sizeof(struct windows_transfer_priv), + 0, +}; + + +/* + * USB API backends + */ +static int unsupported_init(struct libusb_context *ctx) { + return LIBUSB_SUCCESS; +} +static int unsupported_exit(void) { + return LIBUSB_SUCCESS; +} +static int unsupported_open(struct libusb_device_handle *dev_handle) { + PRINT_UNSUPPORTED_API(open); +} +static void unsupported_close(struct libusb_device_handle *dev_handle) { + usbi_dbg("unsupported API call for 'close'"); +} +static int unsupported_claim_interface(struct libusb_device_handle *dev_handle, int iface) { + PRINT_UNSUPPORTED_API(claim_interface); +} +static int unsupported_set_interface_altsetting(struct libusb_device_handle *dev_handle, int iface, int altsetting) { + PRINT_UNSUPPORTED_API(set_interface_altsetting); +} +static int unsupported_release_interface(struct libusb_device_handle *dev_handle, int iface) { + PRINT_UNSUPPORTED_API(release_interface); +} +static int unsupported_clear_halt(struct libusb_device_handle *dev_handle, unsigned char endpoint) { + PRINT_UNSUPPORTED_API(clear_halt); +} +static int unsupported_reset_device(struct libusb_device_handle *dev_handle) { + PRINT_UNSUPPORTED_API(reset_device); +} +static int unsupported_submit_bulk_transfer(struct usbi_transfer *itransfer) { + PRINT_UNSUPPORTED_API(submit_bulk_transfer); +} +static int unsupported_submit_iso_transfer(struct usbi_transfer *itransfer) { + PRINT_UNSUPPORTED_API(submit_iso_transfer); +} +static int unsupported_submit_control_transfer(struct usbi_transfer *itransfer) { + PRINT_UNSUPPORTED_API(submit_control_transfer); +} +static int unsupported_abort_control(struct usbi_transfer *itransfer) { + PRINT_UNSUPPORTED_API(abort_control); +} +static int unsupported_abort_transfers(struct usbi_transfer *itransfer) { + PRINT_UNSUPPORTED_API(abort_transfers); +} +static int unsupported_copy_transfer_data(struct usbi_transfer *itransfer, uint32_t io_size) { + PRINT_UNSUPPORTED_API(copy_transfer_data); +} + +// These names must be uppercase +const char* hub_driver_names[] = {"USBHUB", "USBHUB3", "NUSB3HUB", "FLXHCIH", "TIHUB3", "ETRONHUB3", "VIAHUB3", "ASMTHUB3"}; +const char* composite_driver_names[] = {"USBCCGP"}; +const char* winusb_driver_names[] = {"WINUSB"}; +const struct windows_usb_api_backend usb_api_backend[USB_API_MAX] = { + { + USB_API_UNSUPPORTED, + "Unsupported API", + &CLASS_GUID_UNSUPPORTED, + NULL, + 0, + unsupported_init, + unsupported_exit, + unsupported_open, + unsupported_close, + unsupported_claim_interface, + unsupported_set_interface_altsetting, + unsupported_release_interface, + unsupported_clear_halt, + unsupported_reset_device, + unsupported_submit_bulk_transfer, + unsupported_submit_iso_transfer, + unsupported_submit_control_transfer, + unsupported_abort_control, + unsupported_abort_transfers, + unsupported_copy_transfer_data, + }, { + USB_API_HUB, + "HUB API", + &CLASS_GUID_UNSUPPORTED, + hub_driver_names, + sizeof(hub_driver_names)/sizeof(hub_driver_names[0]), + unsupported_init, + unsupported_exit, + unsupported_open, + unsupported_close, + unsupported_claim_interface, + unsupported_set_interface_altsetting, + unsupported_release_interface, + unsupported_clear_halt, + unsupported_reset_device, + unsupported_submit_bulk_transfer, + unsupported_submit_iso_transfer, + unsupported_submit_control_transfer, + unsupported_abort_control, + unsupported_abort_transfers, + unsupported_copy_transfer_data, + }, { + USB_API_COMPOSITE, + "Composite API", + &CLASS_GUID_COMPOSITE, + composite_driver_names, + sizeof(composite_driver_names)/sizeof(composite_driver_names[0]), + composite_init, + composite_exit, + composite_open, + composite_close, + composite_claim_interface, + composite_set_interface_altsetting, + composite_release_interface, + composite_clear_halt, + composite_reset_device, + composite_submit_bulk_transfer, + composite_submit_iso_transfer, + composite_submit_control_transfer, + composite_abort_control, + composite_abort_transfers, + composite_copy_transfer_data, + }, { + USB_API_WINUSB, + "WinUSB API", + &CLASS_GUID_LIBUSB_WINUSB, + winusb_driver_names, + sizeof(winusb_driver_names)/sizeof(winusb_driver_names[0]), + winusb_init, + winusb_exit, + winusb_open, + winusb_close, + winusb_claim_interface, + winusb_set_interface_altsetting, + winusb_release_interface, + winusb_clear_halt, + winusb_reset_device, + winusb_submit_bulk_transfer, + unsupported_submit_iso_transfer, + winusb_submit_control_transfer, + winusb_abort_control, + winusb_abort_transfers, + winusb_copy_transfer_data, + }, +}; + + +/* + * WinUSB API functions + */ +static int winusb_init(struct libusb_context *ctx) +{ + DLL_LOAD(winusb.dll, WinUsb_Initialize, TRUE); + DLL_LOAD(winusb.dll, WinUsb_Free, TRUE); + DLL_LOAD(winusb.dll, WinUsb_GetAssociatedInterface, TRUE); + DLL_LOAD(winusb.dll, WinUsb_GetDescriptor, TRUE); + DLL_LOAD(winusb.dll, WinUsb_QueryInterfaceSettings, TRUE); + DLL_LOAD(winusb.dll, WinUsb_QueryDeviceInformation, TRUE); + DLL_LOAD(winusb.dll, WinUsb_SetCurrentAlternateSetting, TRUE); + DLL_LOAD(winusb.dll, WinUsb_GetCurrentAlternateSetting, TRUE); + DLL_LOAD(winusb.dll, WinUsb_QueryPipe, TRUE); + DLL_LOAD(winusb.dll, WinUsb_SetPipePolicy, TRUE); + DLL_LOAD(winusb.dll, WinUsb_GetPipePolicy, TRUE); + DLL_LOAD(winusb.dll, WinUsb_ReadPipe, TRUE); + DLL_LOAD(winusb.dll, WinUsb_WritePipe, TRUE); + DLL_LOAD(winusb.dll, WinUsb_ControlTransfer, TRUE); + DLL_LOAD(winusb.dll, WinUsb_ResetPipe, TRUE); + DLL_LOAD(winusb.dll, WinUsb_AbortPipe, TRUE); + DLL_LOAD(winusb.dll, WinUsb_FlushPipe, TRUE); + + api_winusb_available = true; + return LIBUSB_SUCCESS; +} + +static int winusb_exit(void) +{ + return LIBUSB_SUCCESS; +} + +// NB: open and close must ensure that they only handle interface of +// the right API type, as these functions can be called wholesale from +// composite_open(), with interfaces belonging to different APIs +static int winusb_open(struct libusb_device_handle *dev_handle) +{ + struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + + HANDLE file_handle; + int i; + + CHECK_WINUSB_AVAILABLE; + + // WinUSB requires a seperate handle for each interface + for (i = 0; i < USB_MAXINTERFACES; i++) { + if ( (priv->usb_interface[i].path != NULL) + && (priv->usb_interface[i].apib->id == USB_API_WINUSB) ) { + file_handle = CreateFileA(priv->usb_interface[i].path, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, + NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); + if (file_handle == INVALID_HANDLE_VALUE) { + usbi_err(ctx, "could not open device %s (interface %d): %s", priv->usb_interface[i].path, i, windows_error_str(0)); + switch(GetLastError()) { + case ERROR_FILE_NOT_FOUND: // The device was disconnected + return LIBUSB_ERROR_NO_DEVICE; + case ERROR_ACCESS_DENIED: + return LIBUSB_ERROR_ACCESS; + default: + return LIBUSB_ERROR_IO; + } + } + handle_priv->interface_handle[i].dev_handle = file_handle; + } + } + + return LIBUSB_SUCCESS; +} + +static void winusb_close(struct libusb_device_handle *dev_handle) +{ + struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + HANDLE file_handle; + int i; + + if (!api_winusb_available) + return; + + for (i = 0; i < USB_MAXINTERFACES; i++) { + if (priv->usb_interface[i].apib->id == USB_API_WINUSB) { + file_handle = handle_priv->interface_handle[i].dev_handle; + if ( (file_handle != 0) && (file_handle != INVALID_HANDLE_VALUE)) { + CloseHandle(file_handle); + } + } + } +} + +static int winusb_configure_endpoints(struct libusb_device_handle *dev_handle, int iface) +{ + struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + HANDLE winusb_handle = handle_priv->interface_handle[iface].api_handle; + UCHAR policy; + ULONG timeout = 0; + uint8_t endpoint_address; + int i; + + CHECK_WINUSB_AVAILABLE; + + // With handle and enpoints set (in parent), we can setup the default pipe properties + // see http://download.microsoft.com/download/D/1/D/D1DD7745-426B-4CC3-A269-ABBBE427C0EF/DVC-T705_DDC08.pptx + for (i=-1; iusb_interface[iface].nb_endpoints; i++) { + endpoint_address =(i==-1)?0:priv->usb_interface[iface].endpoint[i]; + if (!WinUsb_SetPipePolicy(winusb_handle, endpoint_address, + PIPE_TRANSFER_TIMEOUT, sizeof(ULONG), &timeout)) { + usbi_dbg("failed to set PIPE_TRANSFER_TIMEOUT for control endpoint %02X", endpoint_address); + } + if (i == -1) continue; // Other policies don't apply to control endpoint + policy = false; + if (!WinUsb_SetPipePolicy(winusb_handle, endpoint_address, + SHORT_PACKET_TERMINATE, sizeof(UCHAR), &policy)) { + usbi_dbg("failed to disable SHORT_PACKET_TERMINATE for endpoint %02X", endpoint_address); + } + if (!WinUsb_SetPipePolicy(winusb_handle, endpoint_address, + IGNORE_SHORT_PACKETS, sizeof(UCHAR), &policy)) { + usbi_dbg("failed to disable IGNORE_SHORT_PACKETS for endpoint %02X", endpoint_address); + } + if (!WinUsb_SetPipePolicy(winusb_handle, endpoint_address, + ALLOW_PARTIAL_READS, sizeof(UCHAR), &policy)) { + usbi_dbg("failed to disable ALLOW_PARTIAL_READS for endpoint %02X", endpoint_address); + } + policy = true; + if (!WinUsb_SetPipePolicy(winusb_handle, endpoint_address, + AUTO_CLEAR_STALL, sizeof(UCHAR), &policy)) { + usbi_dbg("failed to enable AUTO_CLEAR_STALL for endpoint %02X", endpoint_address); + } + } + + return LIBUSB_SUCCESS; +} + +static int winusb_claim_interface(struct libusb_device_handle *dev_handle, int iface) +{ + struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); + struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + bool is_using_usbccgp = (priv->apib->id == USB_API_COMPOSITE); + HANDLE file_handle, winusb_handle; + + CHECK_WINUSB_AVAILABLE; + + // If the device is composite, but using the default Windows composite parent driver (usbccgp) + // or if it's the first WinUSB interface, we get a handle through WinUsb_Initialize(). + if ((is_using_usbccgp) || (iface == 0)) { + // composite device (independent interfaces) or interface 0 + file_handle = handle_priv->interface_handle[iface].dev_handle; + if ((file_handle == 0) || (file_handle == INVALID_HANDLE_VALUE)) { + return LIBUSB_ERROR_NOT_FOUND; + } + + if (!WinUsb_Initialize(file_handle, &winusb_handle)) { + usbi_err(ctx, "could not access interface %d: %s", iface, windows_error_str(0)); + handle_priv->interface_handle[iface].api_handle = INVALID_HANDLE_VALUE; + + switch(GetLastError()) { + case ERROR_BAD_COMMAND: // The device was disconnected + return LIBUSB_ERROR_NO_DEVICE; + default: + usbi_err(ctx, "could not claim interface %d: %s", iface, windows_error_str(0)); + return LIBUSB_ERROR_ACCESS; + } + } + handle_priv->interface_handle[iface].api_handle = winusb_handle; + } else { + // For all other interfaces, use WinUsb_GetAssociatedInterface() + winusb_handle = handle_priv->interface_handle[0].api_handle; + // It is a requirement for multiple interface devices using WinUSB that you + // must first claim the first interface before you claim any other + if ((winusb_handle == 0) || (winusb_handle == INVALID_HANDLE_VALUE)) { + file_handle = handle_priv->interface_handle[0].dev_handle; + if (WinUsb_Initialize(file_handle, &winusb_handle)) { + handle_priv->interface_handle[0].api_handle = winusb_handle; + usbi_warn(ctx, "auto-claimed interface 0 (required to claim %d with WinUSB)", iface); + } else { + usbi_warn(ctx, "failed to auto-claim interface 0 (required to claim %d with WinUSB)", iface); + return LIBUSB_ERROR_ACCESS; + } + } + if (!WinUsb_GetAssociatedInterface(winusb_handle, (UCHAR)(iface-1), + &handle_priv->interface_handle[iface].api_handle)) { + handle_priv->interface_handle[iface].api_handle = INVALID_HANDLE_VALUE; + switch(GetLastError()) { + case ERROR_NO_MORE_ITEMS: // invalid iface + return LIBUSB_ERROR_NOT_FOUND; + case ERROR_BAD_COMMAND: // The device was disconnected + return LIBUSB_ERROR_NO_DEVICE; + case ERROR_ALREADY_EXISTS: // already claimed + return LIBUSB_ERROR_BUSY; + default: + usbi_err(ctx, "could not claim interface %d: %s", iface, windows_error_str(0)); + return LIBUSB_ERROR_ACCESS; + } + } + } + usbi_dbg("claimed interface %d", iface); + handle_priv->active_interface = iface; + + return LIBUSB_SUCCESS; +} + +static int winusb_release_interface(struct libusb_device_handle *dev_handle, int iface) +{ + struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + HANDLE winusb_handle; + + CHECK_WINUSB_AVAILABLE; + + winusb_handle = handle_priv->interface_handle[iface].api_handle; + if ((winusb_handle == 0) || (winusb_handle == INVALID_HANDLE_VALUE)) { + return LIBUSB_ERROR_NOT_FOUND; + } + + WinUsb_Free(winusb_handle); + handle_priv->interface_handle[iface].api_handle = INVALID_HANDLE_VALUE; + + return LIBUSB_SUCCESS; +} + +/* + * Return the first valid interface (of the same API type), for control transfers + */ +static int winusb_get_valid_interface(struct libusb_device_handle *dev_handle) +{ + struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + int i; + + for (i=0; iinterface_handle[i].dev_handle != 0) + && (handle_priv->interface_handle[i].dev_handle != INVALID_HANDLE_VALUE) + && (handle_priv->interface_handle[i].api_handle != 0) + && (handle_priv->interface_handle[i].api_handle != INVALID_HANDLE_VALUE) ) { + return i; + } + } + return -1; +} + +/* + * Lookup interface by endpoint address. -1 if not found + */ +static int interface_by_endpoint(struct windows_device_priv *priv, + struct windows_device_handle_priv *handle_priv, uint8_t endpoint_address) +{ + int i, j; + for (i=0; iinterface_handle[i].api_handle == INVALID_HANDLE_VALUE) + continue; + if (handle_priv->interface_handle[i].api_handle == 0) + continue; + if (priv->usb_interface[i].endpoint == NULL) + continue; + for (j=0; jusb_interface[i].nb_endpoints; j++) { + if (priv->usb_interface[i].endpoint[j] == endpoint_address) { + return i; + } + } + } + return -1; +} + +static int winusb_submit_control_transfer(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); + struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); + struct windows_transfer_priv *transfer_priv = (struct windows_transfer_priv*)usbi_transfer_get_os_priv(itransfer); + struct windows_device_handle_priv *handle_priv = _device_handle_priv( + transfer->dev_handle); + WINUSB_SETUP_PACKET *setup = (WINUSB_SETUP_PACKET *) transfer->buffer; + ULONG size; + HANDLE winusb_handle; + int current_interface; + struct winfd wfd; + + CHECK_WINUSB_AVAILABLE; + + transfer_priv->pollable_fd = INVALID_WINFD; + size = transfer->length - LIBUSB_CONTROL_SETUP_SIZE; + + if (size > MAX_CTRL_BUFFER_LENGTH) + return LIBUSB_ERROR_INVALID_PARAM; + + current_interface = winusb_get_valid_interface(transfer->dev_handle); + if (current_interface < 0) { + if (auto_claim(transfer, ¤t_interface, USB_API_WINUSB) != LIBUSB_SUCCESS) { + return LIBUSB_ERROR_NOT_FOUND; + } + } + + usbi_dbg("will use interface %d", current_interface); + winusb_handle = handle_priv->interface_handle[current_interface].api_handle; + + wfd = usbi_create_fd(winusb_handle, _O_RDONLY); + // Always use the handle returned from usbi_create_fd (wfd.handle) + if (wfd.fd < 0) { + return LIBUSB_ERROR_NO_MEM; + } + + // Sending of set configuration control requests from WinUSB creates issues + if ( ((setup->request_type & (0x03 << 5)) == LIBUSB_REQUEST_TYPE_STANDARD) + && (setup->request == LIBUSB_REQUEST_SET_CONFIGURATION) ) { + if (setup->value != priv->active_config) { + usbi_warn(ctx, "cannot set configuration other than the default one"); + usbi_free_fd(wfd.fd); + return LIBUSB_ERROR_INVALID_PARAM; + } + wfd.overlapped->Internal = STATUS_COMPLETED_SYNCHRONOUSLY; + wfd.overlapped->InternalHigh = 0; + } else { + if (!WinUsb_ControlTransfer(wfd.handle, *setup, transfer->buffer + LIBUSB_CONTROL_SETUP_SIZE, size, NULL, wfd.overlapped)) { + if(GetLastError() != ERROR_IO_PENDING) { + usbi_err(ctx, "WinUsb_ControlTransfer failed: %s", windows_error_str(0)); + usbi_free_fd(wfd.fd); + return LIBUSB_ERROR_IO; + } + } else { + wfd.overlapped->Internal = STATUS_COMPLETED_SYNCHRONOUSLY; + wfd.overlapped->InternalHigh = (DWORD)size; + } + } + + // Use priv_transfer to store data needed for async polling + transfer_priv->pollable_fd = wfd; + transfer_priv->interface_number = (uint8_t)current_interface; + + return LIBUSB_SUCCESS; +} + +static int winusb_set_interface_altsetting(struct libusb_device_handle *dev_handle, int iface, int altsetting) +{ + struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); + struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + HANDLE winusb_handle; + + CHECK_WINUSB_AVAILABLE; + + if (altsetting > 255) { + return LIBUSB_ERROR_INVALID_PARAM; + } + + winusb_handle = handle_priv->interface_handle[iface].api_handle; + if ((winusb_handle == 0) || (winusb_handle == INVALID_HANDLE_VALUE)) { + usbi_err(ctx, "interface must be claimed first"); + return LIBUSB_ERROR_NOT_FOUND; + } + + if (!WinUsb_SetCurrentAlternateSetting(winusb_handle, (UCHAR)altsetting)) { + usbi_err(ctx, "WinUsb_SetCurrentAlternateSetting failed: %s", windows_error_str(0)); + return LIBUSB_ERROR_IO; + } + + return LIBUSB_SUCCESS; +} + +static int winusb_submit_bulk_transfer(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); + struct windows_transfer_priv *transfer_priv = (struct windows_transfer_priv*)usbi_transfer_get_os_priv(itransfer); + struct windows_device_handle_priv *handle_priv = _device_handle_priv(transfer->dev_handle); + struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); + HANDLE winusb_handle; + bool ret; + int current_interface; + struct winfd wfd; + + CHECK_WINUSB_AVAILABLE; + + transfer_priv->pollable_fd = INVALID_WINFD; + + current_interface = interface_by_endpoint(priv, handle_priv, transfer->endpoint); + if (current_interface < 0) { + usbi_err(ctx, "unable to match endpoint to an open interface - cancelling transfer"); + return LIBUSB_ERROR_NOT_FOUND; + } + + usbi_dbg("matched endpoint %02X with interface %d", transfer->endpoint, current_interface); + + winusb_handle = handle_priv->interface_handle[current_interface].api_handle; + + wfd = usbi_create_fd(winusb_handle, IS_XFERIN(transfer) ? _O_RDONLY : _O_WRONLY); + // Always use the handle returned from usbi_create_fd (wfd.handle) + if (wfd.fd < 0) { + return LIBUSB_ERROR_NO_MEM; + } + + if (IS_XFERIN(transfer)) { + usbi_dbg("reading %d bytes", transfer->length); + ret = WinUsb_ReadPipe(wfd.handle, transfer->endpoint, transfer->buffer, transfer->length, NULL, wfd.overlapped); + } else { + usbi_dbg("writing %d bytes", transfer->length); + ret = WinUsb_WritePipe(wfd.handle, transfer->endpoint, transfer->buffer, transfer->length, NULL, wfd.overlapped); + } + if (!ret) { + if(GetLastError() != ERROR_IO_PENDING) { + usbi_err(ctx, "WinUsb_Pipe Transfer failed: %s", windows_error_str(0)); + usbi_free_fd(wfd.fd); + return LIBUSB_ERROR_IO; + } + } else { + wfd.overlapped->Internal = STATUS_COMPLETED_SYNCHRONOUSLY; + wfd.overlapped->InternalHigh = (DWORD)transfer->length; + } + + transfer_priv->pollable_fd = wfd; + transfer_priv->interface_number = (uint8_t)current_interface; + + return LIBUSB_SUCCESS; +} + +static int winusb_clear_halt(struct libusb_device_handle *dev_handle, unsigned char endpoint) +{ + struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); + struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + HANDLE winusb_handle; + int current_interface; + + CHECK_WINUSB_AVAILABLE; + + current_interface = interface_by_endpoint(priv, handle_priv, endpoint); + if (current_interface < 0) { + usbi_err(ctx, "unable to match endpoint to an open interface - cannot clear"); + return LIBUSB_ERROR_NOT_FOUND; + } + + usbi_dbg("matched endpoint %02X with interface %d", endpoint, current_interface); + winusb_handle = handle_priv->interface_handle[current_interface].api_handle; + + if (!WinUsb_ResetPipe(winusb_handle, endpoint)) { + usbi_err(ctx, "WinUsb_ResetPipe failed: %s", windows_error_str(0)); + return LIBUSB_ERROR_NO_DEVICE; + } + + return LIBUSB_SUCCESS; +} + +/* + * from http://www.winvistatips.com/winusb-bugchecks-t335323.html (confirmed + * through testing as well): + * "You can not call WinUsb_AbortPipe on control pipe. You can possibly cancel + * the control transfer using CancelIo" + */ +static int winusb_abort_control(struct usbi_transfer *itransfer) +{ + // Cancelling of the I/O is done in the parent + return LIBUSB_SUCCESS; +} + +static int winusb_abort_transfers(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); + struct windows_device_handle_priv *handle_priv = _device_handle_priv(transfer->dev_handle); + struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); + HANDLE winusb_handle; + int current_interface; + + CHECK_WINUSB_AVAILABLE; + + current_interface = transfer_priv->interface_number; + if ((current_interface < 0) || (current_interface >= USB_MAXINTERFACES)) { + usbi_err(ctx, "program assertion failed: invalid interface_number"); + return LIBUSB_ERROR_NOT_FOUND; + } + usbi_dbg("will use interface %d", current_interface); + + winusb_handle = handle_priv->interface_handle[current_interface].api_handle; + + if (!WinUsb_AbortPipe(winusb_handle, transfer->endpoint)) { + usbi_err(ctx, "WinUsb_AbortPipe failed: %s", windows_error_str(0)); + return LIBUSB_ERROR_NO_DEVICE; + } + + return LIBUSB_SUCCESS; +} + +/* + * from the "How to Use WinUSB to Communicate with a USB Device" Microsoft white paper + * (http://www.microsoft.com/whdc/connect/usb/winusb_howto.mspx): + * "WinUSB does not support host-initiated reset port and cycle port operations" and + * IOCTL_INTERNAL_USB_CYCLE_PORT is only available in kernel mode and the + * IOCTL_USB_HUB_CYCLE_PORT ioctl was removed from Vista => the best we can do is + * cycle the pipes (and even then, the control pipe can not be reset using WinUSB) + */ +// TODO (post hotplug): see if we can force eject the device and redetect it (reuse hotplug?) +static int winusb_reset_device(struct libusb_device_handle *dev_handle) +{ + struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); + struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + struct winfd wfd; + HANDLE winusb_handle; + int i, j; + + CHECK_WINUSB_AVAILABLE; + + // Reset any available pipe (except control) + for (i=0; iinterface_handle[i].api_handle; + for (wfd = handle_to_winfd(winusb_handle); wfd.fd > 0;) + { + // Cancel any pollable I/O + usbi_remove_pollfd(ctx, wfd.fd); + usbi_free_fd(wfd.fd); + wfd = handle_to_winfd(winusb_handle); + } + + if ( (winusb_handle != 0) && (winusb_handle != INVALID_HANDLE_VALUE)) { + for (j=0; jusb_interface[i].nb_endpoints; j++) { + usbi_dbg("resetting ep %02X", priv->usb_interface[i].endpoint[j]); + if (!WinUsb_AbortPipe(winusb_handle, priv->usb_interface[i].endpoint[j])) { + usbi_err(ctx, "WinUsb_AbortPipe (pipe address %02X) failed: %s", + priv->usb_interface[i].endpoint[j], windows_error_str(0)); + } + // FlushPipe seems to fail on OUT pipes + if (IS_EPIN(priv->usb_interface[i].endpoint[j]) + && (!WinUsb_FlushPipe(winusb_handle, priv->usb_interface[i].endpoint[j])) ) { + usbi_err(ctx, "WinUsb_FlushPipe (pipe address %02X) failed: %s", + priv->usb_interface[i].endpoint[j], windows_error_str(0)); + } + if (!WinUsb_ResetPipe(winusb_handle, priv->usb_interface[i].endpoint[j])) { + usbi_err(ctx, "WinUsb_ResetPipe (pipe address %02X) failed: %s", + priv->usb_interface[i].endpoint[j], windows_error_str(0)); + } + } + } + } + + return LIBUSB_SUCCESS; +} + +static int winusb_copy_transfer_data(struct usbi_transfer *itransfer, uint32_t io_size) +{ + itransfer->transferred += io_size; + return LIBUSB_TRANSFER_COMPLETED; +} + + +/* + * Composite API functions + */ +static int composite_init(struct libusb_context *ctx) +{ + return LIBUSB_SUCCESS; +} + +static int composite_exit(void) +{ + return LIBUSB_SUCCESS; +} + +static int composite_open(struct libusb_device_handle *dev_handle) +{ + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + unsigned api; + int r; + uint8_t flag = 1<composite_api_flags & flag) { + r = usb_api_backend[api].open(dev_handle); + if (r != LIBUSB_SUCCESS) { + return r; + } + } + flag <<= 1; + } + return LIBUSB_SUCCESS; +} + +static void composite_close(struct libusb_device_handle *dev_handle) +{ + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + unsigned api; + uint8_t flag = 1<composite_api_flags & flag) { + usb_api_backend[api].close(dev_handle); + } + flag <<= 1; + } +} + +static int composite_claim_interface(struct libusb_device_handle *dev_handle, int iface) +{ + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + return priv->usb_interface[iface].apib->claim_interface(dev_handle, iface); +} + +static int composite_set_interface_altsetting(struct libusb_device_handle *dev_handle, int iface, int altsetting) +{ + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + return priv->usb_interface[iface].apib->set_interface_altsetting(dev_handle, iface, altsetting); +} + +static int composite_release_interface(struct libusb_device_handle *dev_handle, int iface) +{ + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + return priv->usb_interface[iface].apib->release_interface(dev_handle, iface); +} + +static int composite_submit_control_transfer(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); + struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); + int i; + + for (i=0; iusb_interface[i].path != NULL) { + usbi_dbg("using interface %d", i); + return priv->usb_interface[i].apib->submit_control_transfer(itransfer); + } + } + + usbi_err(ctx, "no libusb supported interfaces to complete request"); + return LIBUSB_ERROR_NOT_FOUND; +} + +static int composite_submit_bulk_transfer(struct usbi_transfer *itransfer) { + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); + struct windows_device_handle_priv *handle_priv = _device_handle_priv(transfer->dev_handle); + struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); + int current_interface; + + current_interface = interface_by_endpoint(priv, handle_priv, transfer->endpoint); + if (current_interface < 0) { + usbi_err(ctx, "unable to match endpoint to an open interface - cancelling transfer"); + return LIBUSB_ERROR_NOT_FOUND; + } + + return priv->usb_interface[current_interface].apib->submit_bulk_transfer(itransfer); +} + +static int composite_submit_iso_transfer(struct usbi_transfer *itransfer) { + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); + struct windows_device_handle_priv *handle_priv = _device_handle_priv(transfer->dev_handle); + struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); + int current_interface; + + current_interface = interface_by_endpoint(priv, handle_priv, transfer->endpoint); + if (current_interface < 0) { + usbi_err(ctx, "unable to match endpoint to an open interface - cancelling transfer"); + return LIBUSB_ERROR_NOT_FOUND; + } + + return priv->usb_interface[current_interface].apib->submit_iso_transfer(itransfer); +} + +static int composite_clear_halt(struct libusb_device_handle *dev_handle, unsigned char endpoint) +{ + struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); + struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + int current_interface; + + current_interface = interface_by_endpoint(priv, handle_priv, endpoint); + if (current_interface < 0) { + usbi_err(ctx, "unable to match endpoint to an open interface - cannot clear"); + return LIBUSB_ERROR_NOT_FOUND; + } + + return priv->usb_interface[current_interface].apib->clear_halt(dev_handle, endpoint); +} + +static int composite_abort_control(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); + struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); + + return priv->usb_interface[transfer_priv->interface_number].apib->abort_control(itransfer); +} + +static int composite_abort_transfers(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); + struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); + + return priv->usb_interface[transfer_priv->interface_number].apib->abort_transfers(itransfer); +} + +static int composite_reset_device(struct libusb_device_handle *dev_handle) +{ + struct windows_device_priv *priv = _device_priv(dev_handle->dev); + unsigned api; + int r; + uint8_t flag = 1<composite_api_flags & flag) { + r = usb_api_backend[api].reset_device(dev_handle); + if (r != LIBUSB_SUCCESS) { + return r; + } + } + flag <<= 1; + } + return LIBUSB_SUCCESS; +} + +static int composite_copy_transfer_data(struct usbi_transfer *itransfer, uint32_t io_size) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); + struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); + + return priv->usb_interface[transfer_priv->interface_number].apib->copy_transfer_data(itransfer, io_size); +} diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/windows_usb.h b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/windows_usb.h new file mode 100644 index 0000000..ddbd680 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/os/windows_usb.h @@ -0,0 +1,608 @@ +/* + * Windows backend for libusb 1.0 + * Copyright (C) 2009-2010 Pete Batard + * With contributions from Michael Plante, Orin Eman et al. + * Parts of this code adapted from libusb-win32-v1 by Stephan Meyer + * Major code testing contribution by Xiaofan Chen + * + * 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 + */ + +#pragma once + +#if defined(_MSC_VER) +// disable /W4 MSVC warnings that are benign +#pragma warning(disable:4127) // conditional expression is constant +#pragma warning(disable:4100) // unreferenced formal parameter +#pragma warning(disable:4214) // bit field types other than int +#pragma warning(disable:4201) // nameless struct/union +#endif + +// Windows API default is uppercase - ugh! +#if !defined(bool) +#define bool BOOL +#endif +#if !defined(true) +#define true TRUE +#endif +#if !defined(false) +#define false FALSE +#endif + +// Missing from MSVC6 setupapi.h +#if !defined(SPDRP_ADDRESS) +#define SPDRP_ADDRESS 28 +#endif +#if !defined(SPDRP_INSTALL_STATE) +#define SPDRP_INSTALL_STATE 34 +#endif + +#if defined(__CYGWIN__ ) +// cygwin produces a warning unless these prototypes are defined +extern int _snprintf(char *buffer, size_t count, const char *format, ...); +extern char *_strdup(const char *strSource); +// _beginthreadex is MSVCRT => unavailable for cygwin. Fallback to using CreateThread +#define _beginthreadex(a, b, c, d, e, f) CreateThread(a, b, (LPTHREAD_START_ROUTINE)c, d, e, f) +#endif +#define safe_free(p) do {if (p != NULL) {free((void*)p); p = NULL;}} while(0) +#define safe_closehandle(h) do {if (h != INVALID_HANDLE_VALUE) {CloseHandle(h); h = INVALID_HANDLE_VALUE;}} while(0) +#define safe_min(a, b) min((size_t)(a), (size_t)(b)) +#define safe_strcp(dst, dst_max, src, count) do {memcpy(dst, src, safe_min(count, dst_max)); \ + ((char*)dst)[safe_min(count, dst_max)-1] = 0;} while(0) +#define safe_strcpy(dst, dst_max, src) safe_strcp(dst, dst_max, src, safe_strlen(src)+1) +#define safe_strncat(dst, dst_max, src, count) strncat(dst, src, safe_min(count, dst_max - safe_strlen(dst) - 1)) +#define safe_strcat(dst, dst_max, src) safe_strncat(dst, dst_max, src, safe_strlen(src)+1) +#define safe_strcmp(str1, str2) strcmp(((str1==NULL)?"":str1), ((str2==NULL)?"":str2)) +#define safe_strncmp(str1, str2, count) strncmp(((str1==NULL)?"":str1), ((str2==NULL)?"":str2), count) +#define safe_strlen(str) ((str==NULL)?0:strlen(str)) +#define safe_sprintf _snprintf +#define safe_unref_device(dev) do {if (dev != NULL) {libusb_unref_device(dev); dev = NULL;}} while(0) +#define wchar_to_utf8_ms(wstr, str, strlen) WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, strlen, NULL, NULL) +static inline void upperize(char* str) { + size_t i; + if (str == NULL) return; + for (i=0; ios_priv; +} + +static inline void windows_device_priv_init(libusb_device* dev) { + struct windows_device_priv* p = _device_priv(dev); + int i; + p->depth = 0; + p->port = 0; + p->parent_dev = NULL; + p->path = NULL; + p->apib = &usb_api_backend[USB_API_UNSUPPORTED]; + p->composite_api_flags = 0; + p->active_config = 0; + p->config_descriptor = NULL; + memset(&(p->dev_descriptor), 0, sizeof(USB_DEVICE_DESCRIPTOR)); + for (i=0; iusb_interface[i].path = NULL; + p->usb_interface[i].apib = &usb_api_backend[USB_API_UNSUPPORTED]; + p->usb_interface[i].nb_endpoints = 0; + p->usb_interface[i].endpoint = NULL; + } +} + +static inline void windows_device_priv_release(libusb_device* dev) { + struct windows_device_priv* p = _device_priv(dev); + int i; + safe_free(p->path); + if ((dev->num_configurations > 0) && (p->config_descriptor != NULL)) { + for (i=0; i < dev->num_configurations; i++) + safe_free(p->config_descriptor[i]); + } + safe_free(p->config_descriptor); + for (i=0; iusb_interface[i].path); + safe_free(p->usb_interface[i].endpoint); + } +} + +struct interface_handle_t { + HANDLE dev_handle; // WinUSB needs an extra handle for the file + HANDLE api_handle; // used by the API to communicate with the device +}; + +struct windows_device_handle_priv { + int active_interface; + struct interface_handle_t interface_handle[USB_MAXINTERFACES]; + int autoclaim_count[USB_MAXINTERFACES]; // For auto-release +}; + +static inline struct windows_device_handle_priv *_device_handle_priv( + struct libusb_device_handle *handle) +{ + return (struct windows_device_handle_priv *) handle->os_priv; +} + +// used for async polling functions +struct windows_transfer_priv { + struct winfd pollable_fd; + uint8_t interface_number; +}; + +// used to match a device driver (including filter drivers) against a supported API +struct driver_lookup { + char list[MAX_KEY_LENGTH+1];// REG_MULTI_SZ list of services (driver) names + const DWORD reg_prop; // SPDRP registry key to use to retreive list + const char* designation; // internal designation (for debug output) +}; + +/* + * API macros - from libusb-win32 1.x + */ +#define DLL_DECLARE_PREFIXNAME(api, ret, prefixname, name, args) \ + typedef ret (api * __dll_##name##_t)args; \ + static __dll_##name##_t prefixname = NULL + +#define DLL_LOAD_PREFIXNAME(dll, prefixname, name, ret_on_failure) \ + do { \ + HMODULE h = GetModuleHandleA(#dll); \ + if (!h) \ + h = LoadLibraryA(#dll); \ + if (!h) { \ + if (ret_on_failure) { return LIBUSB_ERROR_NOT_FOUND; }\ + else { break; } \ + } \ + prefixname = (__dll_##name##_t)GetProcAddress(h, #name); \ + if (prefixname) break; \ + prefixname = (__dll_##name##_t)GetProcAddress(h, #name "A"); \ + if (prefixname) break; \ + prefixname = (__dll_##name##_t)GetProcAddress(h, #name "W"); \ + if (prefixname) break; \ + if(ret_on_failure) \ + return LIBUSB_ERROR_NOT_FOUND; \ + } while(0) + +#define DLL_DECLARE(api, ret, name, args) DLL_DECLARE_PREFIXNAME(api, ret, name, name, args) +#define DLL_LOAD(dll, name, ret_on_failure) DLL_LOAD_PREFIXNAME(dll, name, name, ret_on_failure) +#define DLL_DECLARE_PREFIXED(api, ret, prefix, name, args) DLL_DECLARE_PREFIXNAME(api, ret, prefix##name, name, args) +#define DLL_LOAD_PREFIXED(dll, prefix, name, ret_on_failure) DLL_LOAD_PREFIXNAME(dll, prefix##name, name, ret_on_failure) + +/* OLE32 dependency */ +DLL_DECLARE_PREFIXED(WINAPI, HRESULT, p, CLSIDFromString, (LPCOLESTR, LPCLSID)); + +/* SetupAPI dependencies */ +DLL_DECLARE_PREFIXED(WINAPI, HDEVINFO, p, SetupDiGetClassDevsA, (const GUID*, PCSTR, HWND, DWORD)); +DLL_DECLARE_PREFIXED(WINAPI, BOOL, p, SetupDiEnumDeviceInfo, (HDEVINFO, DWORD, PSP_DEVINFO_DATA)); +DLL_DECLARE_PREFIXED(WINAPI, BOOL, p, SetupDiEnumDeviceInterfaces, (HDEVINFO, PSP_DEVINFO_DATA, + const GUID*, DWORD, PSP_DEVICE_INTERFACE_DATA)); +DLL_DECLARE_PREFIXED(WINAPI, BOOL, p, SetupDiGetDeviceInterfaceDetailA, (HDEVINFO, PSP_DEVICE_INTERFACE_DATA, + PSP_DEVICE_INTERFACE_DETAIL_DATA_A, DWORD, PDWORD, PSP_DEVINFO_DATA)); +DLL_DECLARE_PREFIXED(WINAPI, BOOL, p, SetupDiDestroyDeviceInfoList, (HDEVINFO)); +DLL_DECLARE_PREFIXED(WINAPI, HKEY, p, SetupDiOpenDevRegKey, (HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, REGSAM)); +DLL_DECLARE_PREFIXED(WINAPI, BOOL, p, SetupDiGetDeviceRegistryPropertyA, (HDEVINFO, + PSP_DEVINFO_DATA, DWORD, PDWORD, PBYTE, DWORD, PDWORD)); +DLL_DECLARE_PREFIXED(WINAPI, LONG, p, RegQueryValueExW, (HKEY, LPCWSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD)); +DLL_DECLARE_PREFIXED(WINAPI, LONG, p, RegCloseKey, (HKEY)); + +/* + * Windows DDK API definitions. Most of it copied from MinGW's includes + */ +typedef DWORD DEVNODE, DEVINST; +typedef DEVNODE *PDEVNODE, *PDEVINST; +typedef DWORD RETURN_TYPE; +typedef RETURN_TYPE CONFIGRET; + +#define CR_SUCCESS 0x00000000 +#define CR_NO_SUCH_DEVNODE 0x0000000D + +#define USB_DEVICE_DESCRIPTOR_TYPE LIBUSB_DT_DEVICE +#define USB_CONFIGURATION_DESCRIPTOR_TYPE LIBUSB_DT_CONFIG +#define USB_STRING_DESCRIPTOR_TYPE LIBUSB_DT_STRING +#define USB_INTERFACE_DESCRIPTOR_TYPE LIBUSB_DT_INTERFACE +#define USB_ENDPOINT_DESCRIPTOR_TYPE LIBUSB_DT_ENDPOINT + +#define USB_REQUEST_GET_STATUS LIBUSB_REQUEST_GET_STATUS +#define USB_REQUEST_CLEAR_FEATURE LIBUSB_REQUEST_CLEAR_FEATURE +#define USB_REQUEST_SET_FEATURE LIBUSB_REQUEST_SET_FEATURE +#define USB_REQUEST_SET_ADDRESS LIBUSB_REQUEST_SET_ADDRESS +#define USB_REQUEST_GET_DESCRIPTOR LIBUSB_REQUEST_GET_DESCRIPTOR +#define USB_REQUEST_SET_DESCRIPTOR LIBUSB_REQUEST_SET_DESCRIPTOR +#define USB_REQUEST_GET_CONFIGURATION LIBUSB_REQUEST_GET_CONFIGURATION +#define USB_REQUEST_SET_CONFIGURATION LIBUSB_REQUEST_SET_CONFIGURATION +#define USB_REQUEST_GET_INTERFACE LIBUSB_REQUEST_GET_INTERFACE +#define USB_REQUEST_SET_INTERFACE LIBUSB_REQUEST_SET_INTERFACE +#define USB_REQUEST_SYNC_FRAME LIBUSB_REQUEST_SYNCH_FRAME + +#define USB_GET_NODE_INFORMATION 258 +#define USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION 260 +#define USB_GET_NODE_CONNECTION_NAME 261 +#define USB_GET_HUB_CAPABILITIES 271 +#if !defined(USB_GET_NODE_CONNECTION_INFORMATION_EX) +#define USB_GET_NODE_CONNECTION_INFORMATION_EX 274 +#endif +#if !defined(USB_GET_HUB_CAPABILITIES_EX) +#define USB_GET_HUB_CAPABILITIES_EX 276 +#endif + +#ifndef METHOD_BUFFERED +#define METHOD_BUFFERED 0 +#endif +#ifndef FILE_ANY_ACCESS +#define FILE_ANY_ACCESS 0x00000000 +#endif +#ifndef FILE_DEVICE_UNKNOWN +#define FILE_DEVICE_UNKNOWN 0x00000022 +#endif +#ifndef FILE_DEVICE_USB +#define FILE_DEVICE_USB FILE_DEVICE_UNKNOWN +#endif + +#ifndef CTL_CODE +#define CTL_CODE(DeviceType, Function, Method, Access)( \ + ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) +#endif + +typedef enum USB_CONNECTION_STATUS { + NoDeviceConnected, + DeviceConnected, + DeviceFailedEnumeration, + DeviceGeneralFailure, + DeviceCausedOvercurrent, + DeviceNotEnoughPower, + DeviceNotEnoughBandwidth, + DeviceHubNestedTooDeeply, + DeviceInLegacyHub +} USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS; + +typedef enum USB_HUB_NODE { + UsbHub, + UsbMIParent +} USB_HUB_NODE; + +/* Cfgmgr32.dll interface */ +DLL_DECLARE(WINAPI, CONFIGRET, CM_Get_Parent, (PDEVINST, DEVINST, ULONG)); +DLL_DECLARE(WINAPI, CONFIGRET, CM_Get_Child, (PDEVINST, DEVINST, ULONG)); +DLL_DECLARE(WINAPI, CONFIGRET, CM_Get_Sibling, (PDEVINST, DEVINST, ULONG)); +DLL_DECLARE(WINAPI, CONFIGRET, CM_Get_Device_IDA, (DEVINST, PCHAR, ULONG, ULONG)); + +#define IOCTL_USB_GET_HUB_CAPABILITIES_EX \ + CTL_CODE( FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES_EX, METHOD_BUFFERED, FILE_ANY_ACCESS) + +#define IOCTL_USB_GET_HUB_CAPABILITIES \ + CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS) + +#define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION \ + CTL_CODE(FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED, FILE_ANY_ACCESS) + +#define IOCTL_USB_GET_ROOT_HUB_NAME \ + CTL_CODE(FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) + +#define IOCTL_USB_GET_NODE_INFORMATION \ + CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS) + +#define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX \ + CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION_EX, METHOD_BUFFERED, FILE_ANY_ACCESS) + +#define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \ + CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS) + +#define IOCTL_USB_GET_NODE_CONNECTION_NAME \ + CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) + +// Most of the structures below need to be packed +#pragma pack(push, 1) + +typedef struct USB_INTERFACE_DESCRIPTOR { + UCHAR bLength; + UCHAR bDescriptorType; + UCHAR bInterfaceNumber; + UCHAR bAlternateSetting; + UCHAR bNumEndpoints; + UCHAR bInterfaceClass; + UCHAR bInterfaceSubClass; + UCHAR bInterfaceProtocol; + UCHAR iInterface; +} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR; + +typedef struct USB_CONFIGURATION_DESCRIPTOR { + UCHAR bLength; + UCHAR bDescriptorType; + USHORT wTotalLength; + UCHAR bNumInterfaces; + UCHAR bConfigurationValue; + UCHAR iConfiguration; + UCHAR bmAttributes; + UCHAR MaxPower; +} USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR; + +typedef struct USB_CONFIGURATION_DESCRIPTOR_SHORT { + struct { + ULONG ConnectionIndex; + struct { + UCHAR bmRequest; + UCHAR bRequest; + USHORT wValue; + USHORT wIndex; + USHORT wLength; + } SetupPacket; + } req; + USB_CONFIGURATION_DESCRIPTOR data; +} USB_CONFIGURATION_DESCRIPTOR_SHORT; + +typedef struct USB_ENDPOINT_DESCRIPTOR { + UCHAR bLength; + UCHAR bDescriptorType; + UCHAR bEndpointAddress; + UCHAR bmAttributes; + USHORT wMaxPacketSize; + UCHAR bInterval; +} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR; + +typedef struct USB_DESCRIPTOR_REQUEST { + ULONG ConnectionIndex; + struct { + UCHAR bmRequest; + UCHAR bRequest; + USHORT wValue; + USHORT wIndex; + USHORT wLength; + } SetupPacket; +// UCHAR Data[0]; +} USB_DESCRIPTOR_REQUEST, *PUSB_DESCRIPTOR_REQUEST; + +typedef struct USB_HUB_DESCRIPTOR { + UCHAR bDescriptorLength; + UCHAR bDescriptorType; + UCHAR bNumberOfPorts; + USHORT wHubCharacteristics; + UCHAR bPowerOnToPowerGood; + UCHAR bHubControlCurrent; + UCHAR bRemoveAndPowerMask[64]; +} USB_HUB_DESCRIPTOR, *PUSB_HUB_DESCRIPTOR; + +typedef struct USB_ROOT_HUB_NAME { + ULONG ActualLength; + WCHAR RootHubName[1]; +} USB_ROOT_HUB_NAME, *PUSB_ROOT_HUB_NAME; + +typedef struct USB_ROOT_HUB_NAME_FIXED { + ULONG ActualLength; + WCHAR RootHubName[MAX_PATH_LENGTH]; +} USB_ROOT_HUB_NAME_FIXED; + +typedef struct USB_NODE_CONNECTION_NAME { + ULONG ConnectionIndex; + ULONG ActualLength; + WCHAR NodeName[1]; +} USB_NODE_CONNECTION_NAME, *PUSB_NODE_CONNECTION_NAME; + +typedef struct USB_NODE_CONNECTION_NAME_FIXED { + ULONG ConnectionIndex; + ULONG ActualLength; + WCHAR NodeName[MAX_PATH_LENGTH]; +} USB_NODE_CONNECTION_NAME_FIXED; + +typedef struct USB_HUB_NAME_FIXED { + union { + USB_ROOT_HUB_NAME_FIXED root; + USB_NODE_CONNECTION_NAME_FIXED node; + } u; +} USB_HUB_NAME_FIXED; + +typedef struct USB_HUB_INFORMATION { + USB_HUB_DESCRIPTOR HubDescriptor; + BOOLEAN HubIsBusPowered; +} USB_HUB_INFORMATION, *PUSB_HUB_INFORMATION; + +typedef struct USB_MI_PARENT_INFORMATION { + ULONG NumberOfInterfaces; +} USB_MI_PARENT_INFORMATION, *PUSB_MI_PARENT_INFORMATION; + +typedef struct USB_NODE_INFORMATION { + USB_HUB_NODE NodeType; + union { + USB_HUB_INFORMATION HubInformation; + USB_MI_PARENT_INFORMATION MiParentInformation; + } u; +} USB_NODE_INFORMATION, *PUSB_NODE_INFORMATION; + +typedef struct USB_PIPE_INFO { + USB_ENDPOINT_DESCRIPTOR EndpointDescriptor; + ULONG ScheduleOffset; +} USB_PIPE_INFO, *PUSB_PIPE_INFO; + +typedef struct USB_NODE_CONNECTION_INFORMATION_EX { + ULONG ConnectionIndex; + USB_DEVICE_DESCRIPTOR DeviceDescriptor; + UCHAR CurrentConfigurationValue; + UCHAR Speed; + BOOLEAN DeviceIsHub; + USHORT DeviceAddress; + ULONG NumberOfOpenPipes; + USB_CONNECTION_STATUS ConnectionStatus; +// USB_PIPE_INFO PipeList[0]; +} USB_NODE_CONNECTION_INFORMATION_EX, *PUSB_NODE_CONNECTION_INFORMATION_EX; + +typedef struct USB_HUB_CAP_FLAGS { + ULONG HubIsHighSpeedCapable:1; + ULONG HubIsHighSpeed:1; + ULONG HubIsMultiTtCapable:1; + ULONG HubIsMultiTt:1; + ULONG HubIsRoot:1; + ULONG HubIsArmedWakeOnConnect:1; + ULONG ReservedMBZ:26; +} USB_HUB_CAP_FLAGS, *PUSB_HUB_CAP_FLAGS; + +typedef struct USB_HUB_CAPABILITIES { + ULONG HubIs2xCapable : 1; +} USB_HUB_CAPABILITIES, *PUSB_HUB_CAPABILITIES; + +typedef struct USB_HUB_CAPABILITIES_EX { + USB_HUB_CAP_FLAGS CapabilityFlags; +} USB_HUB_CAPABILITIES_EX, *PUSB_HUB_CAPABILITIES_EX; + +#pragma pack(pop) + +/* winusb.dll interface */ + +#define SHORT_PACKET_TERMINATE 0x01 +#define AUTO_CLEAR_STALL 0x02 +#define PIPE_TRANSFER_TIMEOUT 0x03 +#define IGNORE_SHORT_PACKETS 0x04 +#define ALLOW_PARTIAL_READS 0x05 +#define AUTO_FLUSH 0x06 +#define RAW_IO 0x07 +#define MAXIMUM_TRANSFER_SIZE 0x08 +#define AUTO_SUSPEND 0x81 +#define SUSPEND_DELAY 0x83 +#define DEVICE_SPEED 0x01 +#define LowSpeed 0x01 +#define FullSpeed 0x02 +#define HighSpeed 0x03 + +typedef enum USBD_PIPE_TYPE { + UsbdPipeTypeControl, + UsbdPipeTypeIsochronous, + UsbdPipeTypeBulk, + UsbdPipeTypeInterrupt +} USBD_PIPE_TYPE; + +typedef struct { + USBD_PIPE_TYPE PipeType; + UCHAR PipeId; + USHORT MaximumPacketSize; + UCHAR Interval; +} WINUSB_PIPE_INFORMATION, *PWINUSB_PIPE_INFORMATION; + +#pragma pack(1) +typedef struct { + UCHAR request_type; + UCHAR request; + USHORT value; + USHORT index; + USHORT length; +} WINUSB_SETUP_PACKET, *PWINUSB_SETUP_PACKET; +#pragma pack() + +typedef void *WINUSB_INTERFACE_HANDLE, *PWINUSB_INTERFACE_HANDLE; + +DLL_DECLARE(WINAPI, BOOL, WinUsb_Initialize, (HANDLE, PWINUSB_INTERFACE_HANDLE)); +DLL_DECLARE(WINAPI, BOOL, WinUsb_Free, (WINUSB_INTERFACE_HANDLE)); +DLL_DECLARE(WINAPI, BOOL, WinUsb_GetAssociatedInterface, (WINUSB_INTERFACE_HANDLE, UCHAR, PWINUSB_INTERFACE_HANDLE)); +DLL_DECLARE(WINAPI, BOOL, WinUsb_GetDescriptor, (WINUSB_INTERFACE_HANDLE, UCHAR, UCHAR, USHORT, PUCHAR, ULONG, PULONG)); +DLL_DECLARE(WINAPI, BOOL, WinUsb_QueryInterfaceSettings, (WINUSB_INTERFACE_HANDLE, UCHAR, PUSB_INTERFACE_DESCRIPTOR)); +DLL_DECLARE(WINAPI, BOOL, WinUsb_QueryDeviceInformation, (WINUSB_INTERFACE_HANDLE, ULONG, PULONG, PVOID)); +DLL_DECLARE(WINAPI, BOOL, WinUsb_SetCurrentAlternateSetting, (WINUSB_INTERFACE_HANDLE, UCHAR)); +DLL_DECLARE(WINAPI, BOOL, WinUsb_GetCurrentAlternateSetting, (WINUSB_INTERFACE_HANDLE, PUCHAR)); +DLL_DECLARE(WINAPI, BOOL, WinUsb_QueryPipe, (WINUSB_INTERFACE_HANDLE, UCHAR, UCHAR, PWINUSB_PIPE_INFORMATION)); +DLL_DECLARE(WINAPI, BOOL, WinUsb_SetPipePolicy, (WINUSB_INTERFACE_HANDLE, UCHAR, ULONG, ULONG, PVOID)); +DLL_DECLARE(WINAPI, BOOL, WinUsb_GetPipePolicy, (WINUSB_INTERFACE_HANDLE, UCHAR, ULONG, PULONG, PVOID)); +DLL_DECLARE(WINAPI, BOOL, WinUsb_ReadPipe, (WINUSB_INTERFACE_HANDLE, UCHAR, PUCHAR, ULONG, PULONG, LPOVERLAPPED)); +DLL_DECLARE(WINAPI, BOOL, WinUsb_WritePipe, (WINUSB_INTERFACE_HANDLE, UCHAR, PUCHAR, ULONG, PULONG, LPOVERLAPPED)); +DLL_DECLARE(WINAPI, BOOL, WinUsb_ControlTransfer, (WINUSB_INTERFACE_HANDLE, WINUSB_SETUP_PACKET, PUCHAR, ULONG, PULONG, LPOVERLAPPED)); +DLL_DECLARE(WINAPI, BOOL, WinUsb_ResetPipe, (WINUSB_INTERFACE_HANDLE, UCHAR)); +DLL_DECLARE(WINAPI, BOOL, WinUsb_AbortPipe, (WINUSB_INTERFACE_HANDLE, UCHAR)); +DLL_DECLARE(WINAPI, BOOL, WinUsb_FlushPipe, (WINUSB_INTERFACE_HANDLE, UCHAR)); diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/sync.c b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/sync.c new file mode 100644 index 0000000..8eed47b --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/sync.c @@ -0,0 +1,314 @@ +/* + * Synchronous I/O functions for libusb + * Copyright (C) 2007-2008 Daniel Drake + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include + +#include "libusbi.h" + +/** + * @defgroup syncio Synchronous device I/O + * + * This page documents libusb's synchronous (blocking) API for USB device I/O. + * This interface is easy to use but has some limitations. More advanced users + * may wish to consider using the \ref asyncio "asynchronous I/O API" instead. + */ + +static void LIBUSB_CALL ctrl_transfer_cb(struct libusb_transfer *transfer) +{ + int *completed = transfer->user_data; + *completed = 1; + usbi_dbg("actual_length=%d", transfer->actual_length); + /* caller interprets result and frees transfer */ +} + +/** \ingroup syncio + * Perform a USB control transfer. + * + * The direction of the transfer is inferred from the bmRequestType field of + * the setup packet. + * + * The wValue, wIndex and wLength fields values should be given in host-endian + * byte order. + * + * \param dev_handle a handle for the device to communicate with + * \param bmRequestType the request type field for the setup packet + * \param bRequest the request field for the setup packet + * \param wValue the value field for the setup packet + * \param wIndex the index field for the setup packet + * \param data a suitably-sized data buffer for either input or output + * (depending on direction bits within bmRequestType) + * \param wLength the length field for the setup packet. The data buffer should + * be at least this size. + * \param timeout timeout (in millseconds) that this function should wait + * before giving up due to no response being received. For an unlimited + * timeout, use value 0. + * \returns on success, the number of bytes actually transferred + * \returns LIBUSB_ERROR_TIMEOUT if the transfer timed out + * \returns LIBUSB_ERROR_PIPE if the control request was not supported by the + * device + * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected + * \returns another LIBUSB_ERROR code on other failures + */ +int API_EXPORTED libusb_control_transfer(libusb_device_handle *dev_handle, + uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, + unsigned char *data, uint16_t wLength, unsigned int timeout) +{ + struct libusb_transfer *transfer = libusb_alloc_transfer(0); + unsigned char *buffer; + int completed = 0; + int r; + + if (!transfer) + return LIBUSB_ERROR_NO_MEM; + + buffer = malloc(LIBUSB_CONTROL_SETUP_SIZE + wLength); + if (!buffer) { + libusb_free_transfer(transfer); + return LIBUSB_ERROR_NO_MEM; + } + + libusb_fill_control_setup(buffer, bmRequestType, bRequest, wValue, wIndex, + wLength); + if ((bmRequestType & LIBUSB_ENDPOINT_DIR_MASK) == LIBUSB_ENDPOINT_OUT) + memcpy(buffer + LIBUSB_CONTROL_SETUP_SIZE, data, wLength); + + libusb_fill_control_transfer(transfer, dev_handle, buffer, + ctrl_transfer_cb, &completed, timeout); + transfer->flags = LIBUSB_TRANSFER_FREE_BUFFER; + r = libusb_submit_transfer(transfer); + if (r < 0) { + libusb_free_transfer(transfer); + return r; + } + + while (!completed) { + r = libusb_handle_events_completed(HANDLE_CTX(dev_handle), &completed); + if (r < 0) { + if (r == LIBUSB_ERROR_INTERRUPTED) + continue; + libusb_cancel_transfer(transfer); + while (!completed) + if (libusb_handle_events_completed(HANDLE_CTX(dev_handle), &completed) < 0) + break; + libusb_free_transfer(transfer); + return r; + } + } + + if ((bmRequestType & LIBUSB_ENDPOINT_DIR_MASK) == LIBUSB_ENDPOINT_IN) + memcpy(data, libusb_control_transfer_get_data(transfer), + transfer->actual_length); + + switch (transfer->status) { + case LIBUSB_TRANSFER_COMPLETED: + r = transfer->actual_length; + break; + case LIBUSB_TRANSFER_TIMED_OUT: + r = LIBUSB_ERROR_TIMEOUT; + break; + case LIBUSB_TRANSFER_STALL: + r = LIBUSB_ERROR_PIPE; + break; + case LIBUSB_TRANSFER_NO_DEVICE: + r = LIBUSB_ERROR_NO_DEVICE; + break; + case LIBUSB_TRANSFER_OVERFLOW: + r = LIBUSB_ERROR_OVERFLOW; + break; + default: + usbi_warn(HANDLE_CTX(dev_handle), + "unrecognised status code %d", transfer->status); + r = LIBUSB_ERROR_OTHER; + } + + libusb_free_transfer(transfer); + return r; +} + +static void LIBUSB_CALL bulk_transfer_cb(struct libusb_transfer *transfer) +{ + int *completed = transfer->user_data; + *completed = 1; + usbi_dbg("actual_length=%d", transfer->actual_length); + /* caller interprets results and frees transfer */ +} + +static int do_sync_bulk_transfer(struct libusb_device_handle *dev_handle, + unsigned char endpoint, unsigned char *buffer, int length, + int *transferred, unsigned int timeout, unsigned char type) +{ + struct libusb_transfer *transfer = libusb_alloc_transfer(0); + int completed = 0; + int r; + + if (!transfer) + return LIBUSB_ERROR_NO_MEM; + + libusb_fill_bulk_transfer(transfer, dev_handle, endpoint, buffer, length, + bulk_transfer_cb, &completed, timeout); + transfer->type = type; + + r = libusb_submit_transfer(transfer); + if (r < 0) { + libusb_free_transfer(transfer); + return r; + } + + while (!completed) { + r = libusb_handle_events_completed(HANDLE_CTX(dev_handle), &completed); + if (r < 0) { + if (r == LIBUSB_ERROR_INTERRUPTED) + continue; + libusb_cancel_transfer(transfer); + while (!completed) + if (libusb_handle_events_completed(HANDLE_CTX(dev_handle), &completed) < 0) + break; + libusb_free_transfer(transfer); + return r; + } + } + + *transferred = transfer->actual_length; + switch (transfer->status) { + case LIBUSB_TRANSFER_COMPLETED: + r = 0; + break; + case LIBUSB_TRANSFER_TIMED_OUT: + r = LIBUSB_ERROR_TIMEOUT; + break; + case LIBUSB_TRANSFER_STALL: + r = LIBUSB_ERROR_PIPE; + break; + case LIBUSB_TRANSFER_OVERFLOW: + r = LIBUSB_ERROR_OVERFLOW; + break; + case LIBUSB_TRANSFER_NO_DEVICE: + r = LIBUSB_ERROR_NO_DEVICE; + break; + default: + usbi_warn(HANDLE_CTX(dev_handle), + "unrecognised status code %d", transfer->status); + r = LIBUSB_ERROR_OTHER; + } + + libusb_free_transfer(transfer); + return r; +} + +/** \ingroup syncio + * Perform a USB bulk transfer. The direction of the transfer is inferred from + * the direction bits of the endpoint address. + * + * For bulk reads, the length field indicates the maximum length of + * data you are expecting to receive. If less data arrives than expected, + * this function will return that data, so be sure to check the + * transferred output parameter. + * + * You should also check the transferred parameter for bulk writes. + * Not all of the data may have been written. + * + * Also check transferred when dealing with a timeout error code. + * libusb may have to split your transfer into a number of chunks to satisfy + * underlying O/S requirements, meaning that the timeout may expire after + * the first few chunks have completed. libusb is careful not to lose any data + * that may have been transferred; do not assume that timeout conditions + * indicate a complete lack of I/O. + * + * \param dev_handle a handle for the device to communicate with + * \param endpoint the address of a valid endpoint to communicate with + * \param data a suitably-sized data buffer for either input or output + * (depending on endpoint) + * \param length for bulk writes, the number of bytes from data to be sent. for + * bulk reads, the maximum number of bytes to receive into the data buffer. + * \param transferred output location for the number of bytes actually + * transferred. + * \param timeout timeout (in millseconds) that this function should wait + * before giving up due to no response being received. For an unlimited + * timeout, use value 0. + * + * \returns 0 on success (and populates transferred) + * \returns LIBUSB_ERROR_TIMEOUT if the transfer timed out (and populates + * transferred) + * \returns LIBUSB_ERROR_PIPE if the endpoint halted + * \returns LIBUSB_ERROR_OVERFLOW if the device offered more data, see + * \ref packetoverflow + * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected + * \returns another LIBUSB_ERROR code on other failures + */ +int API_EXPORTED libusb_bulk_transfer(struct libusb_device_handle *dev_handle, + unsigned char endpoint, unsigned char *data, int length, int *transferred, + unsigned int timeout) +{ + return do_sync_bulk_transfer(dev_handle, endpoint, data, length, + transferred, timeout, LIBUSB_TRANSFER_TYPE_BULK); +} + +/** \ingroup syncio + * Perform a USB interrupt transfer. The direction of the transfer is inferred + * from the direction bits of the endpoint address. + * + * For interrupt reads, the length field indicates the maximum length + * of data you are expecting to receive. If less data arrives than expected, + * this function will return that data, so be sure to check the + * transferred output parameter. + * + * You should also check the transferred parameter for interrupt + * writes. Not all of the data may have been written. + * + * Also check transferred when dealing with a timeout error code. + * libusb may have to split your transfer into a number of chunks to satisfy + * underlying O/S requirements, meaning that the timeout may expire after + * the first few chunks have completed. libusb is careful not to lose any data + * that may have been transferred; do not assume that timeout conditions + * indicate a complete lack of I/O. + * + * The default endpoint bInterval value is used as the polling interval. + * + * \param dev_handle a handle for the device to communicate with + * \param endpoint the address of a valid endpoint to communicate with + * \param data a suitably-sized data buffer for either input or output + * (depending on endpoint) + * \param length for bulk writes, the number of bytes from data to be sent. for + * bulk reads, the maximum number of bytes to receive into the data buffer. + * \param transferred output location for the number of bytes actually + * transferred. + * \param timeout timeout (in millseconds) that this function should wait + * before giving up due to no response being received. For an unlimited + * timeout, use value 0. + * + * \returns 0 on success (and populates transferred) + * \returns LIBUSB_ERROR_TIMEOUT if the transfer timed out + * \returns LIBUSB_ERROR_PIPE if the endpoint halted + * \returns LIBUSB_ERROR_OVERFLOW if the device offered more data, see + * \ref packetoverflow + * \returns LIBUSB_ERROR_NO_DEVICE if the device has been disconnected + * \returns another LIBUSB_ERROR code on other error + */ +int API_EXPORTED libusb_interrupt_transfer( + struct libusb_device_handle *dev_handle, unsigned char endpoint, + unsigned char *data, int length, int *transferred, unsigned int timeout) +{ + return do_sync_bulk_transfer(dev_handle, endpoint, data, length, + transferred, timeout, LIBUSB_TRANSFER_TYPE_INTERRUPT); +} + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/version.h b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/version.h new file mode 100644 index 0000000..62446da --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/libusb/version.h @@ -0,0 +1,18 @@ +/* This file is parsed by m4 and windres and RC.EXE so please keep it simple. */ +#ifndef LIBUSB_MAJOR +#define LIBUSB_MAJOR 1 +#endif +#ifndef LIBUSB_MINOR +#define LIBUSB_MINOR 0 +#endif +#ifndef LIBUSB_MICRO +#define LIBUSB_MICRO 9 +#endif +/* LIBUSB_NANO may be used for Windows internal versioning. 0 means unused. */ +#ifndef LIBUSB_NANO +#define LIBUSB_NANO 0 +#endif +/* LIBUSB_RC is the release candidate suffix. Should normally be empty. */ +#ifndef LIBUSB_RC +#define LIBUSB_RC "" +#endif diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/ltmain.sh b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/ltmain.sh new file mode 100755 index 0000000..04eaea4 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/ltmain.sh @@ -0,0 +1,8745 @@ +# Generated from ltmain.m4sh. + +# libtool (GNU libtool) 2.2.10 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --no-quiet, --no-silent +# print informational messages (default) +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print more informational messages than default +# --no-verbose don't print the extra informational messages +# --version print version information +# -h, --help, --help-all print short, long, or detailed help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. When passed as first option, +# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.2.10 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . + +PROGRAM=libtool +PACKAGE=libtool +VERSION=2.2.10 +TIMESTAMP="" +package_revision=1.3175 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# NLS nuisances: We save the old values to restore during execute mode. +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL + +$lt_unset CDPATH + + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + + + +: ${CP="cp -f"} +test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${EGREP="grep -E"} +: ${FGREP="grep -F"} +: ${GREP="grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="sed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` +} + +# Generated shell functions inserted here. + +# These SED scripts presuppose an absolute path with a trailing slash. +pathcar='s,^/\([^/]*\).*$,\1,' +pathcdr='s,^/[^/]*,,' +removedotparts=':dotsl + s@/\./@/@g + t dotsl + s,/\.$,/,' +collapseslashes='s@/\{1,\}@/@g' +finalslash='s,/*$,/,' + +# func_normal_abspath PATH +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +# value returned in "$func_normal_abspath_result" +func_normal_abspath () +{ + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` + while :; do + # Processed it all yet? + if test "$func_normal_abspath_tpath" = / ; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result" ; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + +# func_relative_path SRCDIR DSTDIR +# generates a relative path from SRCDIR to DSTDIR, with a trailing +# slash if non-empty, suitable for immediately appending a filename +# without needing to append a separator. +# value returned in "$func_relative_path_result" +func_relative_path () +{ + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=${func_dirname_result} + if test "x$func_relative_path_tlibdir" = x ; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test "x$func_stripname_result" != x ; then + func_relative_path_result=${func_relative_path_result}/${func_stripname_result} + fi + + # Normalisation. If bindir is libdir, return empty string, + # else relative path ending with a slash; either way, target + # file name can be directly appended. + if test ! -z "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result/" + func_relative_path_result=$func_stripname_result + fi +} + +# The name of this program: +func_dirname_and_basename "$progpath" +progname=$func_basename_result + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=: + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname${mode+: }$mode: $*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` + done + my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "$my_tmpdir" +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "$1" | $SED \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $SED -n '/(C)/!b go + :more + /\./!{ + N + s/\n# / / + b more + } + :go + /^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $SED -n '/^# Usage:/,/^# *.*--help/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + echo + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help [NOEXIT] +# Echo long help message to standard output and exit, +# unless 'noexit' is passed as argument. +func_help () +{ + $SED -n '/^# Usage:/,/# Report bugs to/ { + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ + p + }' < "$progpath" + ret=$? + if test -z "$1"; then + exit $ret + fi +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + func_error "missing argument for $1." + exit_cmd=exit +} + +exit_cmd=: + + + + + + +magic="%%%MAGIC variable%%%" +magic_exe="%%%MAGIC EXE variable%%%" + +# Global variables. +# $mode is unset +nonopt= +execute_dlfiles= +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +opt_dry_run=false +opt_duplicate_deps=false +opt_silent=false +opt_debug=: + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +# func_fatal_configuration arg... +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func_error ${1+"$@"} + func_error "See the $PACKAGE documentation for more information." + func_fatal_error "Fatal configuration error." +} + + +# func_config +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + +# func_features +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + +# func_enable_tag tagname +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname="$1" + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf="/$re_begincf/,/$re_endcf/p" + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# Parse options once, thoroughly. This comes as soon as possible in +# the script to make things like `libtool --version' happen quickly. +{ + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Parse non-mode specific arguments: + while test "$#" -gt 0; do + opt="$1" + shift + + case $opt in + --config) func_config ;; + + --debug) preserve_args="$preserve_args $opt" + func_echo "enabling shell trace mode" + opt_debug='set -x' + $opt_debug + ;; + + -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break + execute_dlfiles="$execute_dlfiles $1" + shift + ;; + + --dry-run | -n) opt_dry_run=: ;; + --features) func_features ;; + --finish) mode="finish" ;; + + --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break + case $1 in + # Valid mode arguments: + clean) ;; + compile) ;; + execute) ;; + finish) ;; + install) ;; + link) ;; + relink) ;; + uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; + esac + + mode="$1" + shift + ;; + + --preserve-dup-deps) + opt_duplicate_deps=: ;; + + --quiet|--silent) preserve_args="$preserve_args $opt" + opt_silent=: + opt_verbose=false + ;; + + --no-quiet|--no-silent) + preserve_args="$preserve_args $opt" + opt_silent=false + ;; + + --verbose| -v) preserve_args="$preserve_args $opt" + opt_silent=false + opt_verbose=: + ;; + + --no-verbose) preserve_args="$preserve_args $opt" + opt_verbose=false + ;; + + --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break + preserve_args="$preserve_args $opt $1" + func_enable_tag "$1" # tagname is set here + shift + ;; + + # Separate optargs to long options: + -dlopen=*|--mode=*|--tag=*) + func_opt_split "$opt" + set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} + shift + ;; + + -\?|-h) func_usage ;; + --help) opt_help=: ;; + --help-all) opt_help=': help-all' ;; + --version) func_version ;; + + -*) func_fatal_help "unrecognized option \`$opt'" ;; + + *) nonopt="$opt" + break + ;; + esac + done + + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_duplicate_deps + ;; + esac + + # Having warned about all mis-specified options, bail out if + # anything was wrong. + $exit_cmd $EXIT_FAILURE +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +## ----------- ## +## Main. ## +## ----------- ## + +$opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + test -z "$mode" && func_fatal_error "error: you must specify a MODE." + + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$mode' for more information." +} + + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_ltwrapper_scriptname_result="" + if func_ltwrapper_executable_p "$1"; then + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" + fi +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T <?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + removelist="$removelist $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + removelist="$removelist $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + command="$command -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + command="$command -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command="$command$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test "$mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$mode'" + ;; + esac + + echo + $ECHO "Try \`$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test "$opt_help" = :; then + func_mode_help + else + { + func_help noexit + for mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | sed -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + sed '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_quote_for_eval "$file" + args="$args $func_quote_for_eval_result" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + exit $EXIT_SUCCESS +} + +test "$mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + install_prog="$install_prog$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + files="$files $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test "x$prev" = x-m && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + install_prog="$install_prog $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + install_shared_prog="$install_shared_prog $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_verbose "extracting global C symbols from \`$progfile'" + $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +" + case $host in + *cygwin* | *mingw* | *cegcc* ) + echo >> "$output_objdir/$my_dlsyms" "\ +/* DATA imports from DLLs on WIN32 con't be const, because + runtime relocations are performed -- see ld's documentation + on pseudo-relocs. */" + lt_dlsym_const= ;; + *osf5*) + echo >> "$output_objdir/$my_dlsyms" "\ +/* This system does not cope well with relocations in const data */" + lt_dlsym_const= ;; + *) + lt_dlsym_const=const ;; + esac + + echo >> "$output_objdir/$my_dlsyms" "\ +extern $lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +$lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) symtab_cflags="$symtab_cflags $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + win32_nmres=`eval $NM -f posix -A $1 | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + if test "$lock_old_archive_extraction" = yes; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test "$lock_old_archive_extraction" = yes; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ which is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options which match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_to_host_path arg +# +# Convert paths to host format when used with build tools. +# Intended for use with "native" mingw (where libtool itself +# is running under the msys shell), or in the following cross- +# build environments: +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# where wine is equipped with the `winepath' executable. +# In the native mingw case, the (msys) shell automatically +# converts paths for any non-msys applications it launches, +# but that facility isn't available from inside the cwrapper. +# Similar accommodations are necessary for $host mingw and +# $build cygwin. Calling this function does no harm for other +# $host/$build combinations not listed above. +# +# ARG is the path (on $build) that should be converted to +# the proper representation for $host. The result is stored +# in $func_to_host_path_result. +func_to_host_path () +{ + func_to_host_path_result="$1" + if test -n "$1"; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + case $build in + *mingw* ) # actually, msys + # awkward: cmd appends spaces to result + func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_path_result=`cygpath -w "$1" | + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # Unfortunately, winepath does not exit with a non-zero + # error code, so we are forced to check the contents of + # stdout. On the other hand, if the command is not + # found, the shell will set an exit code of 127 and print + # *an error message* to stdout. So we must check for both + # error code of zero AND non-empty stdout, which explains + # the odd construction: + func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` + if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then + func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" | + $SED -e "$lt_sed_naive_backslashify"` + else + # Allow warning below. + func_to_host_path_result= + fi + ;; + esac + if test -z "$func_to_host_path_result" ; then + func_error "Could not determine host path corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_path_result="$1" + fi + ;; + esac + fi +} +# end: func_to_host_path + +# func_to_host_pathlist arg +# +# Convert pathlists to host format when used with build tools. +# See func_to_host_path(), above. This function supports the +# following $build/$host combinations (but does no harm for +# combinations not listed here): +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# +# Path separators are also converted from $build format to +# $host format. If ARG begins or ends with a path separator +# character, it is preserved (but converted to $host format) +# on output. +# +# ARG is a pathlist (on $build) that should be converted to +# the proper representation on $host. The result is stored +# in $func_to_host_pathlist_result. +func_to_host_pathlist () +{ + func_to_host_pathlist_result="$1" + if test -n "$1"; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_pathlist_tmp1=$func_stripname_result + case $build in + *mingw* ) # Actually, msys. + # Awkward: cmd appends spaces to result. + func_to_host_pathlist_result=` + ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" | + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # unfortunately, winepath doesn't convert pathlists + func_to_host_pathlist_result="" + func_to_host_pathlist_oldIFS=$IFS + IFS=: + for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do + IFS=$func_to_host_pathlist_oldIFS + if test -n "$func_to_host_pathlist_f" ; then + func_to_host_path "$func_to_host_pathlist_f" + if test -n "$func_to_host_path_result" ; then + if test -z "$func_to_host_pathlist_result" ; then + func_to_host_pathlist_result="$func_to_host_path_result" + else + func_append func_to_host_pathlist_result ";$func_to_host_path_result" + fi + fi + fi + done + IFS=$func_to_host_pathlist_oldIFS + ;; + esac + if test -z "$func_to_host_pathlist_result"; then + func_error "Could not determine the host path(s) corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This may break if $1 contains DOS-style drive + # specifications. The fix is not to complicate the expression + # below, but for the user to provide a working wine installation + # with winepath so that path translation in the cross-to-mingw + # case works properly. + lt_replace_pathsep_nix_to_dos="s|:|;|g" + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_replace_pathsep_nix_to_dos"` + fi + # Now, add the leading and trailing path separators back + case "$1" in + :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" + ;; + esac + case "$1" in + *: ) func_append func_to_host_pathlist_result ";" + ;; + esac + ;; + esac + fi +} +# end: func_to_host_pathlist + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +/* declarations of non-ANSI functions */ +#if defined(__MINGW32__) +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined(__CYGWIN__) +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined (other platforms) ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined(_MSC_VER) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +# ifndef _INTPTR_T_DEFINED +# define _INTPTR_T_DEFINED +# define intptr_t int +# endif +#elif defined(__MINGW32__) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined(__CYGWIN__) +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined (other platforms) ... */ +#endif + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#if defined(LT_DEBUGWRAPPER) +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -e 's/\([\\"]\)/\\\1/g' \ + -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' + + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $opt_debug + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir="$arg" + prev= + continue + ;; + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) deplibs="$deplibs $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + weak_libs="$weak_libs $arg" + prev= + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname '-L' '' "$arg" + dir=$func_stripname_result + if test -z "$dir"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $func_quote_for_eval_result" + compiler_flags="$compiler_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" + linker_flags="$linker_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + compiler_flags="$compiler_flags $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_duplicate_deps ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + case $lib in + *.la) func_source "$lib" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) deplibs="$deplibs $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags="$compiler_flags $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + dir=$func_stripname_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + else + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) temp_rpath="$temp_rpath$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + notinst_deplibs="$notinst_deplibs $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + echo + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system can not link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_dirname "$deplib" "" "." + dir="$func_dirname_result" + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|qnx|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + libobjs="$libobjs $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + delfiles="$delfiles $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + func_len " $cmd" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + $ECHO "$obj" >> $output + done + echo ')' >> $output + delfiles="$delfiles $output" + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + $ECHO "$obj" >> $output + done + delfiles="$delfiles $output" + output=$firstobj\"$file_list_spec$output\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\${concat_cmds}$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + delfiles="$delfiles $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=no + ;; + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + oldobjs="$oldobjs $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $addlibs + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + oldobjs="$oldobjs $gentop/$newobj" + ;; + *) oldobjs="$oldobjs $obj" ;; + esac + done + fi + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlfiles="$newdlfiles $libdir/$name" + ;; + *) newdlfiles="$newdlfiles $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlprefiles="$newdlprefiles $libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test "x$bindir" != x ; + then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$mode" = link || test "$mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) RM="$RM $arg"; rmforce=yes ;; + -*) RM="$RM $arg" ;; + *) files="$files $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + + case "$mode" in + clean) + case " $library_names " in + # " " in the beginning catches empty $dlname + *" $dlname "*) ;; + *) rmfiles="$rmfiles $objdir/$dlname" ;; + esac + test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + rmfiles="$rmfiles $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$mode" = uninstall || test "$mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing new file mode 100755 index 0000000..28055d2 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/missing @@ -0,0 +1,376 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, +# 2008, 2009 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case $1 in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and +\`g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# normalize program name to check for. +program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). This is about non-GNU programs, so use $1 not +# $program. +case $1 in + lex*|yacc*) + # Not GNU programs, they don't have --version. + ;; + + tar*) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case $program in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case $f in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te*) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison*|yacc*) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -f y.tab.c; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex*|flex*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -f lex.yy.c; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit $? + fi + ;; + + makeinfo*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar*) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case $firstarg in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case $firstarg in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/config.h b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/config.h new file mode 100644 index 0000000..43aa1f7 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/config.h @@ -0,0 +1,24 @@ +/* config.h. Manual config for MSVC. */ + +#ifndef _MSC_VER +#warn "msvc/config.h shouldn't be included for your development environment." +#error "Please make sure the msvc/ directory is removed from your build path." +#endif + +/* Default visibility */ +#define DEFAULT_VISIBILITY /**/ + +/* Debug message logging */ +//#define ENABLE_DEBUG_LOGGING 1 + +/* Message logging */ +#define ENABLE_LOGGING 1 + +/* Windows backend */ +#define OS_WINDOWS 1 + +/* type of second poll() argument */ +#define POLL_NFDS_TYPE unsigned int + +/* no way to run git describe from MSVC? */ +#define LIBUSB_DESCRIBE "" diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/ddk_build.cmd b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/ddk_build.cmd new file mode 100644 index 0000000..ed9b8a8 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/ddk_build.cmd @@ -0,0 +1,106 @@ +@rem default builds static library. +@rem you can pass the following arguments (case insensitive): +@rem - "DLL" to build a DLL instead of a static library +@rem - "/MT" to build a static library compatible with MSVC's /MT option (LIBCMT vs MSVCRT) +@echo off + +if Test%BUILD_ALT_DIR%==Test goto usage + +rem process commandline parameters +set TARGET=LIBRARY +set STATIC_LIBC= +set version=1.0 + +if "%1" == "" goto no_more_args +rem /I for case insensitive +if /I Test%1==TestDLL set TARGET=DYNLINK +if /I Test%1==Test/MT set STATIC_LIBC=1 +:no_more_args + +cd ..\libusb\os +echo TARGETTYPE=%TARGET% > target +copy target+..\..\msvc\libusb_sources sources >NUL 2>&1 +del target +@echo on +build -cwgZ +@echo off +if errorlevel 1 goto builderror +cd ..\.. + +set cpudir=i386 +set destType=Win32 +if %_BUILDARCH%==x86 goto isI386 +set cpudir=amd64 +set destType=x64 +:isI386 + +set srcPath=libusb\os\obj%BUILD_ALT_DIR%\%cpudir% + +set dstPath=%destType%\Debug +if %DDKBUILDENV%==chk goto isDebug +set dstPath=%destType%\Release +:isDebug + +if exist %destType% goto md2 +mkdir %destType% +:md2 +if exist %dstPath% goto md3 +mkdir %dstPath% +:md3 +if exist %dstPath%\dll goto md4 +mkdir %dstPath%\dll +:md4 +if exist %dstPath%\lib goto md5 +md %dstPath%\lib +:md5 +if exist %dstPath%\examples goto md6 +md %dstPath%\examples +:md6 +@echo on + +@if /I NOT Test%1==TestDLL goto copylib +copy %srcPath%\libusb-%version%.dll %dstPath%\dll +copy %srcPath%\libusb-%version%.pdb %dstPath%\dll +:copylib +copy %srcPath%\libusb-%version%.lib %dstPath%\lib + +@echo off + +if exist examples\listdevs_ddkbuild goto md7 +md examples\listdevs_ddkbuild +:md7 + +cd examples\listdevs_ddkbuild +copy ..\..\msvc\listdevs_sources sources >NUL 2>&1 +@echo on +build -cwgZ +@echo off +if errorlevel 1 goto buildlistdevserror +cd ..\.. + +set srcPath=examples\listdevs_ddkbuild\obj%BUILD_ALT_DIR%\%cpudir% +@echo on + +copy %srcPath%\listdevs.exe %dstPath%\examples +copy %srcPath%\listdevs.pdb %dstPath%\examples + +cd msvc +goto done + + +:builderror +cd ..\..\msvc +echo Build failed +goto done + +:buildlistdevserror +cd ..\..\msvc +echo listdevs build failed +goto done + +:usage +echo ddk_build must be run in a WDK build environment +pause +goto done + +:done diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/inttypes.h b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/inttypes.h new file mode 100644 index 0000000..289bb50 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/inttypes.h @@ -0,0 +1,295 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file was original part of the w64 mingw-runtime package. + */ + +/* + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * Modified for libusb/MSVC: Pete Batard + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * Date: 2010-04-02 + */ + +#ifndef _MSC_VER +#error This header should only be used with Microsoft compilers +#endif + +/* 7.8 Format conversion of integer types */ + +#ifndef _INTTYPES_H_ +#define _INTTYPES_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + intmax_t quot; + intmax_t rem; + } imaxdiv_t; + + +/* 7.8.1 Macros for format specifiers + * + * MS runtime does not yet understand C9x standard "ll" + * length specifier. It appears to treat "ll" as "l". + * The non-standard I64 length specifier causes warning in GCC, + * but understood by MS runtime functions. + */ + +/* fprintf macros for signed types */ +#define PRId8 "d" +#define PRId16 "d" +#define PRId32 "d" +#define PRId64 "I64d" + +#define PRIdLEAST8 "d" +#define PRIdLEAST16 "d" +#define PRIdLEAST32 "d" +#define PRIdLEAST64 "I64d" + +#define PRIdFAST8 "d" +#define PRIdFAST16 "d" +#define PRIdFAST32 "d" +#define PRIdFAST64 "I64d" + +#define PRIdMAX "I64d" + +#define PRIi8 "i" +#define PRIi16 "i" +#define PRIi32 "i" +#define PRIi64 "I64i" + +#define PRIiLEAST8 "i" +#define PRIiLEAST16 "i" +#define PRIiLEAST32 "i" +#define PRIiLEAST64 "I64i" + +#define PRIiFAST8 "i" +#define PRIiFAST16 "i" +#define PRIiFAST32 "i" +#define PRIiFAST64 "I64i" + +#define PRIiMAX "I64i" + +#define PRIo8 "o" +#define PRIo16 "o" +#define PRIo32 "o" +#define PRIo64 "I64o" + +#define PRIoLEAST8 "o" +#define PRIoLEAST16 "o" +#define PRIoLEAST32 "o" +#define PRIoLEAST64 "I64o" + +#define PRIoFAST8 "o" +#define PRIoFAST16 "o" +#define PRIoFAST32 "o" +#define PRIoFAST64 "I64o" + +#define PRIoMAX "I64o" + +/* fprintf macros for unsigned types */ +#define PRIu8 "u" +#define PRIu16 "u" +#define PRIu32 "u" +#define PRIu64 "I64u" + + +#define PRIuLEAST8 "u" +#define PRIuLEAST16 "u" +#define PRIuLEAST32 "u" +#define PRIuLEAST64 "I64u" + +#define PRIuFAST8 "u" +#define PRIuFAST16 "u" +#define PRIuFAST32 "u" +#define PRIuFAST64 "I64u" + +#define PRIuMAX "I64u" + +#define PRIx8 "x" +#define PRIx16 "x" +#define PRIx32 "x" +#define PRIx64 "I64x" + +#define PRIxLEAST8 "x" +#define PRIxLEAST16 "x" +#define PRIxLEAST32 "x" +#define PRIxLEAST64 "I64x" + +#define PRIxFAST8 "x" +#define PRIxFAST16 "x" +#define PRIxFAST32 "x" +#define PRIxFAST64 "I64x" + +#define PRIxMAX "I64x" + +#define PRIX8 "X" +#define PRIX16 "X" +#define PRIX32 "X" +#define PRIX64 "I64X" + +#define PRIXLEAST8 "X" +#define PRIXLEAST16 "X" +#define PRIXLEAST32 "X" +#define PRIXLEAST64 "I64X" + +#define PRIXFAST8 "X" +#define PRIXFAST16 "X" +#define PRIXFAST32 "X" +#define PRIXFAST64 "I64X" + +#define PRIXMAX "I64X" + +/* + * fscanf macros for signed int types + * NOTE: if 32-bit int is used for int_fast8_t and int_fast16_t + * (see stdint.h, 7.18.1.3), FAST8 and FAST16 should have + * no length identifiers + */ + +#define SCNd16 "hd" +#define SCNd32 "d" +#define SCNd64 "I64d" + +#define SCNdLEAST16 "hd" +#define SCNdLEAST32 "d" +#define SCNdLEAST64 "I64d" + +#define SCNdFAST16 "hd" +#define SCNdFAST32 "d" +#define SCNdFAST64 "I64d" + +#define SCNdMAX "I64d" + +#define SCNi16 "hi" +#define SCNi32 "i" +#define SCNi64 "I64i" + +#define SCNiLEAST16 "hi" +#define SCNiLEAST32 "i" +#define SCNiLEAST64 "I64i" + +#define SCNiFAST16 "hi" +#define SCNiFAST32 "i" +#define SCNiFAST64 "I64i" + +#define SCNiMAX "I64i" + +#define SCNo16 "ho" +#define SCNo32 "o" +#define SCNo64 "I64o" + +#define SCNoLEAST16 "ho" +#define SCNoLEAST32 "o" +#define SCNoLEAST64 "I64o" + +#define SCNoFAST16 "ho" +#define SCNoFAST32 "o" +#define SCNoFAST64 "I64o" + +#define SCNoMAX "I64o" + +#define SCNx16 "hx" +#define SCNx32 "x" +#define SCNx64 "I64x" + +#define SCNxLEAST16 "hx" +#define SCNxLEAST32 "x" +#define SCNxLEAST64 "I64x" + +#define SCNxFAST16 "hx" +#define SCNxFAST32 "x" +#define SCNxFAST64 "I64x" + +#define SCNxMAX "I64x" + +/* fscanf macros for unsigned int types */ + +#define SCNu16 "hu" +#define SCNu32 "u" +#define SCNu64 "I64u" + +#define SCNuLEAST16 "hu" +#define SCNuLEAST32 "u" +#define SCNuLEAST64 "I64u" + +#define SCNuFAST16 "hu" +#define SCNuFAST32 "u" +#define SCNuFAST64 "I64u" + +#define SCNuMAX "I64u" + +#ifdef _WIN64 +#define PRIdPTR "I64d" +#define PRIiPTR "I64i" +#define PRIoPTR "I64o" +#define PRIuPTR "I64u" +#define PRIxPTR "I64x" +#define PRIXPTR "I64X" +#define SCNdPTR "I64d" +#define SCNiPTR "I64i" +#define SCNoPTR "I64o" +#define SCNxPTR "I64x" +#define SCNuPTR "I64u" +#else +#define PRIdPTR "d" +#define PRIiPTR "i" +#define PRIoPTR "o" +#define PRIuPTR "u" +#define PRIxPTR "x" +#define PRIXPTR "X" +#define SCNdPTR "d" +#define SCNiPTR "i" +#define SCNoPTR "o" +#define SCNxPTR "x" + #define SCNuPTR "u" +#endif + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +/* + * no length modifier for char types prior to C9x + * MS runtime scanf appears to treat "hh" as "h" + */ + +/* signed char */ +#define SCNd8 "hhd" +#define SCNdLEAST8 "hhd" +#define SCNdFAST8 "hhd" + +#define SCNi8 "hhi" +#define SCNiLEAST8 "hhi" +#define SCNiFAST8 "hhi" + +#define SCNo8 "hho" +#define SCNoLEAST8 "hho" +#define SCNoFAST8 "hho" + +#define SCNx8 "hhx" +#define SCNxLEAST8 "hhx" +#define SCNxFAST8 "hhx" + +/* unsigned char */ +#define SCNu8 "hhu" +#define SCNuLEAST8 "hhu" +#define SCNuFAST8 "hhu" +#endif /* __STDC_VERSION__ >= 199901 */ + + +#ifdef __cplusplus +} +#endif + +#endif /* ndef _INTTYPES_H */ diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb.dsw b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb.dsw new file mode 100644 index 0000000..8926e67 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb.dsw @@ -0,0 +1,56 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "libusb_dll"=".\libusb_dll.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "libusb_static"=".\libusb_static.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "listdevs"=".\listdevs.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name libusb_static + End Project Dependency +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_dll.dsp b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_dll.dsp new file mode 100644 index 0000000..96a011e --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_dll.dsp @@ -0,0 +1,190 @@ +# Microsoft Developer Studio Project File - Name="libusb_dll" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=libusb_dll - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "libusb_dll.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "libusb_dll.mak" CFG="libusb_dll - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "libusb_dll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "libusb_dll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "libusb_dll - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "../Win32/Release/dll" +# PROP Intermediate_Dir "../Win32/Release/dll" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "LIBUSB_DLL_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../libusb" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /U "_MBCS" /D "_USRDLL" /FR /FD /EHsc /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Win32/Release/dll/libusb-1.0.dll" + +!ELSEIF "$(CFG)" == "libusb_dll - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "../Win32/Debug/dll" +# PROP Intermediate_Dir "../Win32/Debug/dll" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "LIBUSB_DLL_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I "../libusb" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /U "_MBCS" /D "_USRDLL" /FR /FD /EHsc /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo /n +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Win32/Debug/dll/libusb-1.0.dll" +# SUBTRACT LINK32 /pdb:none /incremental:no + +!ENDIF + +# Begin Target + +# Name "libusb_dll - Win32 Release" +# Name "libusb_dll - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\libusb\core.c +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\darwin_usb.c +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=..\libusb\descriptor.c +# End Source File +# Begin Source File + +SOURCE=..\libusb\io.c +# End Source File +# Begin Source File + +SOURCE="..\libusb\libusb-1.0.rc" +# End Source File +# Begin Source File + +SOURCE="..\libusb\libusb-1.0.def" +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\linux_usbfs.c +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\poll_windows.c +# End Source File +# Begin Source File + +SOURCE=..\libusb\sync.c +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\threads_windows.c +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\windows_usb.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\config.h +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\darwin_usb.h +# End Source File +# Begin Source File + +SOURCE=..\libusb\libusb.h +# End Source File +# Begin Source File + +SOURCE=..\libusb\libusbi.h +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\linux_usbfs.h +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\poll_posix.h +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\poll_windows.h +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\threads_posix.h +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\threads_windows.h +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\windows_usb.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_dll.vcproj b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_dll.vcproj new file mode 100644 index 0000000..242898b --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_dll.vcproj @@ -0,0 +1,421 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_dll.vcxproj b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_dll.vcxproj new file mode 100644 index 0000000..fe02056 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_dll.vcxproj @@ -0,0 +1,166 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + libusb-1.0 (dll) + {349EE8FA-7D25-4909-AAF5-FF3FADE72187} + libusbdll + + + + DynamicLibrary + Unicode + true + + + DynamicLibrary + Unicode + + + DynamicLibrary + Unicode + true + + + DynamicLibrary + Unicode + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(SolutionDir)..\$(Platform)\$(Configuration)\dll\ + $(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0\ + $(SolutionDir)..\$(Platform)\$(Configuration)\dll\ + $(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0\ + $(SolutionDir)..\$(Platform)\$(Configuration)\dll\ + $(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0\ + $(SolutionDir)..\$(Platform)\$(Configuration)\dll\ + $(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0\ + libusb-1.0 + libusb-1.0 + libusb-1.0 + libusb-1.0 + + + + Disabled + .;..\libusb;%(AdditionalIncludeDirectories) + _WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + ProgramDatabase + + + $(OutDir)libusb-1.0.dll + ..\libusb\libusb-1.0.def + libusb-1.0.rc;%(EmbedManagedResourceFile) + true + + + + + X64 + + + Disabled + .;..\libusb;%(AdditionalIncludeDirectories) + _WIN32;_WIN64;_DEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + ProgramDatabase + + + $(OutDir)libusb-1.0.dll + ..\libusb\libusb-1.0.def + libusb-1.0.rc;%(EmbedManagedResourceFile) + true + + + + + .;..\libusb;%(AdditionalIncludeDirectories) + _WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + $(OutDir)libusb-1.0.dll + ..\libusb\libusb-1.0.def + libusb-1.0.rc;%(EmbedManagedResourceFile) + + + + + X64 + + + .;..\libusb;%(AdditionalIncludeDirectories) + _WIN32;_WIN64;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + + + $(OutDir)libusb-1.0.dll + ..\libusb\libusb-1.0.def + libusb-1.0.rc;%(EmbedManagedResourceFile) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_dll.vcxproj.filters b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_dll.vcxproj.filters new file mode 100644 index 0000000..1078ae1 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_dll.vcxproj.filters @@ -0,0 +1,69 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {d81e81ca-b13e-4a15-b54b-b12b41361e6b} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Resource Files + + + + + Resource Files + + + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_sources b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_sources new file mode 100644 index 0000000..8e8e65c --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_sources @@ -0,0 +1,36 @@ +#TARGETTYPE is not defined, to allow selection between static lib or DLL with ddk_build +TARGETNAME=libusb-1.0 +DLLDEF=..\libusb-1.0.def + +!IFNDEF MSC_WARNING_LEVEL +MSC_WARNING_LEVEL=/W3 +!ENDIF + +!IFDEF STATIC_LIBC +USE_LIBCMT=1 +!ELSE +USE_MSVCRT=1 +!ENDIF + +INCLUDES=..;..\..\msvc;$(DDK_INC_PATH) +C_DEFINES= $(C_DEFINES) $(LIBUSB_DEFINES) /DDDKBUILD + +# http://jpassing.com/2009/10/21/ltcg-issues-with-the-win7amd64-environment-of-wdk-7600/ +# prevents the following error when using the 64 bit static lib with Visual Studio 2010: +# "fatal error C1001: An internal error has occurred in the compiler. +# (compiler file 'f:\dd\vctools\compiler\utc\src\p2\p2symtab.c', line 1823)" +# and the following with Visual Studio 2010: +# "fatal error C1047: The object or library file 'libusb-1.0.lib' was created with +# an older compiler than other objects; rebuild old objects and libraries" +USER_C_FLAGS=/GL- + +TARGETLIBS=$(SDK_LIB_PATH)\kernel32.lib + +SOURCES=..\core.c \ + ..\descriptor.c \ + ..\io.c \ + ..\sync.c \ + threads_windows.c \ + poll_windows.c \ + windows_usb.c \ + ..\libusb-1.0.rc diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_static.dsp b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_static.dsp new file mode 100644 index 0000000..007fcc7 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_static.dsp @@ -0,0 +1,170 @@ +# Microsoft Developer Studio Project File - Name="libusb_static" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=libusb_static - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "libusb_static.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "libusb_static.mak" CFG="libusb_static - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "libusb_static - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "libusb_static - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "libusb_static - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "../Win32/Release/lib" +# PROP Intermediate_Dir "../Win32/Release/lib" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../libusb" /D "WIN32" /D "NDEBUG" /D "_UNICODE" /D "UNICODE" /U "_MBCS" /D "_LIB" /FR /FD /EHsc /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"../Win32/Release/lib/libusb-1.0.lib" + +!ELSEIF "$(CFG)" == "libusb_static - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "../Win32/Debug/lib" +# PROP Intermediate_Dir "../Win32/Debug/lib" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I "../libusb" /D "WIN32" /D "_DEBUG" /D "_UNICODE" /D "UNICODE" /U "_MBCS" /D "_LIB" /FR /FD /GZ /EHsc /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo /n +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"../Win32/Debug/lib/libusb-1.0.lib" + +!ENDIF + +# Begin Target + +# Name "libusb_static - Win32 Release" +# Name "libusb_static - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\libusb\core.c +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\darwin_usb.c +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=..\libusb\descriptor.c +# End Source File +# Begin Source File + +SOURCE=..\libusb\io.c +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\linux_usbfs.c +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\poll_windows.c +# End Source File +# Begin Source File + +SOURCE=..\libusb\sync.c +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\threads_windows.c +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\windows_usb.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\config.h +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\darwin_usb.h +# End Source File +# Begin Source File + +SOURCE=..\libusb\libusb.h +# End Source File +# Begin Source File + +SOURCE=..\libusb\libusbi.h +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\linux_usbfs.h +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\poll_posix.h +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\poll_windows.h +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\threads_posix.h +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\threads_windows.h +# End Source File +# Begin Source File + +SOURCE=..\libusb\os\windows_usb.h +# End Source File +# End Group +# End Target +# End Project diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_static.vcproj b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_static.vcproj new file mode 100644 index 0000000..bd0ca52 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_static.vcproj @@ -0,0 +1,346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_static.vcxproj b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_static.vcxproj new file mode 100644 index 0000000..63fb20b --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_static.vcxproj @@ -0,0 +1,150 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + libusb-1.0 (static) + {349EE8F9-7D25-4909-AAF5-FF3FADE72187} + libusb + + + + StaticLibrary + Unicode + true + + + StaticLibrary + Unicode + + + StaticLibrary + Unicode + true + + + StaticLibrary + Unicode + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(SolutionDir)..\$(Platform)\$(Configuration)\lib\ + $(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\ + $(SolutionDir)..\$(Platform)\$(Configuration)\lib\ + $(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\ + $(SolutionDir)..\$(Platform)\$(Configuration)\lib\ + $(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\ + $(SolutionDir)..\$(Platform)\$(Configuration)\lib\ + $(SolutionDir)..\$(Platform)\$(Configuration)\lib\libusb-1.0\ + libusb-1.0 + libusb-1.0 + libusb-1.0 + libusb-1.0 + + + + Disabled + .;..\libusb;%(AdditionalIncludeDirectories) + _WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreadedDebug + Level3 + ProgramDatabase + + + $(OutDir)libusb-1.0.lib + + + + + X64 + + + Disabled + .;..\libusb;%(AdditionalIncludeDirectories) + _WIN32;_WIN64;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreadedDebug + Level3 + ProgramDatabase + + + $(OutDir)libusb-1.0.lib + + + + + .;..\libusb;%(AdditionalIncludeDirectories) + _WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + Level3 + + + $(OutDir)libusb-1.0.lib + + + + + X64 + + + .;..\libusb;%(AdditionalIncludeDirectories) + _WIN32;_WIN64;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + Level3 + + + $(OutDir)libusb-1.0.lib + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_static.vcxproj.filters b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_static.vcxproj.filters new file mode 100644 index 0000000..11fe1fb --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_static.vcxproj.filters @@ -0,0 +1,56 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_vs2005.sln b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_vs2005.sln new file mode 100644 index 0000000..6ebb5e6 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_vs2005.sln @@ -0,0 +1,61 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0 (static)", "libusb_static.vcproj", "{5AB6B770-1925-48D5-ABC2-930F3259C020}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0 (dll)", "libusb_dll.vcproj", "{8224C054-5968-4238-832C-167155E7ECC3}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "listdevs", "listdevs.vcproj", "{98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}" + ProjectSection(WebsiteProperties) = preProject + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.Debug = "False" + EndProjectSection + ProjectSection(ProjectDependencies) = postProject + {5AB6B770-1925-48D5-ABC2-930F3259C020} = {5AB6B770-1925-48D5-ABC2-930F3259C020} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5AB6B770-1925-48D5-ABC2-930F3259C020}.Debug|Win32.ActiveCfg = Debug|Win32 + {5AB6B770-1925-48D5-ABC2-930F3259C020}.Debug|Win32.Build.0 = Debug|Win32 + {5AB6B770-1925-48D5-ABC2-930F3259C020}.Debug|x64.ActiveCfg = Debug|x64 + {5AB6B770-1925-48D5-ABC2-930F3259C020}.Debug|x64.Build.0 = Debug|x64 + {5AB6B770-1925-48D5-ABC2-930F3259C020}.Release|Win32.ActiveCfg = Release|Win32 + {5AB6B770-1925-48D5-ABC2-930F3259C020}.Release|Win32.Build.0 = Release|Win32 + {5AB6B770-1925-48D5-ABC2-930F3259C020}.Release|x64.ActiveCfg = Release|x64 + {5AB6B770-1925-48D5-ABC2-930F3259C020}.Release|x64.Build.0 = Release|x64 + {8224C054-5968-4238-832C-167155E7ECC3}.Debug|Win32.ActiveCfg = Debug|Win32 + {8224C054-5968-4238-832C-167155E7ECC3}.Debug|Win32.Build.0 = Debug|Win32 + {8224C054-5968-4238-832C-167155E7ECC3}.Debug|x64.ActiveCfg = Debug|x64 + {8224C054-5968-4238-832C-167155E7ECC3}.Debug|x64.Build.0 = Debug|x64 + {8224C054-5968-4238-832C-167155E7ECC3}.Release|Win32.ActiveCfg = Release|Win32 + {8224C054-5968-4238-832C-167155E7ECC3}.Release|Win32.Build.0 = Release|Win32 + {8224C054-5968-4238-832C-167155E7ECC3}.Release|x64.ActiveCfg = Release|x64 + {8224C054-5968-4238-832C-167155E7ECC3}.Release|x64.Build.0 = Release|x64 + {98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}.Debug|Win32.ActiveCfg = Debug|Win32 + {98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}.Debug|Win32.Build.0 = Debug|Win32 + {98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}.Debug|x64.ActiveCfg = Debug|x64 + {98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}.Debug|x64.Build.0 = Debug|x64 + {98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}.Release|Win32.ActiveCfg = Release|Win32 + {98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}.Release|Win32.Build.0 = Release|Win32 + {98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}.Release|x64.ActiveCfg = Release|x64 + {98CFD8FA-EE20-40D5-AF13-F8C4856D6CA5}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_vs2010.sln b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_vs2010.sln new file mode 100644 index 0000000..1160f52 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/libusb_vs2010.sln @@ -0,0 +1,49 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0 (static)", "libusb_static.vcxproj", "{349EE8F9-7D25-4909-AAF5-FF3FADE72187}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0 (dll)", "libusb_dll.vcxproj", "{349EE8FA-7D25-4909-AAF5-FF3FADE72187}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "listdevs", "listdevs.vcxproj", "{F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.ActiveCfg = Debug|Win32 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.Build.0 = Debug|Win32 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.ActiveCfg = Debug|x64 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.Build.0 = Debug|x64 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.ActiveCfg = Release|Win32 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.Build.0 = Release|Win32 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.ActiveCfg = Release|x64 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.Build.0 = Release|x64 + {349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.ActiveCfg = Debug|Win32 + {349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.ActiveCfg = Debug|x64 + {349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.ActiveCfg = Release|Win32 + {349EE8FA-7D25-4909-AAF5-FF3FADE72187}.Release|x64.ActiveCfg = Release|x64 + {F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Debug|Win32.ActiveCfg = Debug|Win32 + {F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Debug|Win32.Build.0 = Debug|Win32 + {F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Debug|x64.ActiveCfg = Debug|x64 + {F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Debug|x64.Build.0 = Debug|x64 + {F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Release|Win32.ActiveCfg = Release|Win32 + {F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Release|Win32.Build.0 = Release|Win32 + {F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Release|x64.ActiveCfg = Release|x64 + {F4938DB0-3DE7-4737-9C5A-EAD1BE819F87}.Release|x64.Build.0 = Release|x64 + {3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Debug|Win32.Build.0 = Debug|Win32 + {3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Debug|x64.ActiveCfg = Debug|x64 + {3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Debug|x64.Build.0 = Debug|x64 + {3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Release|Win32.ActiveCfg = Release|Win32 + {3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Release|Win32.Build.0 = Release|Win32 + {3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Release|x64.ActiveCfg = Release|x64 + {3F3138D0-7AB7-4268-9BF3-1A3EA5503A11}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs.dsp b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs.dsp new file mode 100644 index 0000000..2ed8aec --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs.dsp @@ -0,0 +1,103 @@ +# Microsoft Developer Studio Project File - Name="listdevs" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=listdevs - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "listdevs.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "listdevs.mak" CFG="listdevs - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "listdevs - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "listdevs - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "listdevs - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "../Win32/Release/examples" +# PROP Intermediate_Dir "../Win32/Release/examples/listdevs" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /FD /c +# ADD CPP /nologo /MD /W3 /GX /O2 /I "../libusb" /I "." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /U "_MBCS" /FR /FD /EHsc /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "listdevs - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "../Win32/Debug/examples" +# PROP Intermediate_Dir "../Win32/Debug/examples/listdevs" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../libusb" /I "." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /U "_MBCS" /FR /FD /GZ /EHsc /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo /n "../Win32/Debug/dll/core.sbr" "../Win32/Debug/dll/descriptor.sbr" "../Win32/Debug/dll/io.sbr" "../Win32/Debug/dll/sync.sbr" "../Win32/Debug/dll/poll_windows.sbr" "../Win32/Debug/dll/threads_windows.sbr" "../Win32/Debug/dll/windows_usb.sbr" +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "listdevs - Win32 Release" +# Name "listdevs - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\examples\listdevs.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs.vcproj b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs.vcproj new file mode 100644 index 0000000..cff754e --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs.vcproj @@ -0,0 +1,360 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs.vcxproj b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs.vcxproj new file mode 100644 index 0000000..b0164bb --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs.vcxproj @@ -0,0 +1,165 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + listdevs + {F4938DB0-3DE7-4737-9C5A-EAD1BE819F87} + examples + Win32Proj + + + + Application + Unicode + true + + + Application + Unicode + + + Application + Unicode + true + + + Application + Unicode + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(SolutionDir)..\$(Platform)\$(Configuration)\examples\ + $(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\ + $(SolutionDir)..\$(Platform)\$(Configuration)\examples\ + $(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\ + $(SolutionDir)..\$(Platform)\$(Configuration)\examples\ + $(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\ + $(SolutionDir)..\$(Platform)\$(Configuration)\examples\ + $(SolutionDir)..\$(Platform)\$(Configuration)\examples\$(ProjectName)\ + + + + $(IntDir)$(ProjectName).htm + + + Disabled + ..\libusb;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDebug + Level3 + ProgramDatabase + + + %(AdditionalLibraryDirectories) + true + $(TargetDir)$(ProjectName).pdb + Console + MachineX86 + + + + + $(IntDir)$(ProjectName).htm + + + X64 + + + Disabled + ..\libusb;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDebug + Level3 + ProgramDatabase + + + %(AdditionalLibraryDirectories) + true + $(TargetDir)$(ProjectName).pdb + Console + MachineX64 + + + + + $(IntDir)$(ProjectName).htm + + + ..\libusb;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreaded + Level3 + + + %(AdditionalLibraryDirectories) + $(TargetDir)$(ProjectName).pdb + Console + MachineX86 + + + + + $(IntDir)$(ProjectName).htm + + + X64 + + + ..\libusb;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreaded + Level3 + + + %(AdditionalLibraryDirectories) + $(TargetDir)$(ProjectName).pdb + Console + MachineX64 + + + + + + + + {349ee8f9-7d25-4909-aaf5-ff3fade72187} + false + + + + + + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs.vcxproj.filters b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs.vcxproj.filters new file mode 100644 index 0000000..856fc1c --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs.vcxproj.filters @@ -0,0 +1,14 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs_sources b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs_sources new file mode 100644 index 0000000..97a5723 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/listdevs_sources @@ -0,0 +1,19 @@ +TARGETNAME=listdevs +TARGETTYPE=PROGRAM +386_STDCALL=0 + +_NT_TARGET_VERSION= $(_NT_TARGET_VERSION_WINXP) +!IFNDEF MSC_WARNING_LEVEL +MSC_WARNING_LEVEL=/W3 +!ENDIF + +!IFDEF STATIC_LIBC +USE_LIBCMT=1 +!ELSE +USE_MSVCRT=1 +!ENDIF + +UMTYPE=console +INCLUDES=..\..\libusb;$(DDK_INC_PATH) +UMLIBS=..\..\libusb\os\obj$(BUILD_ALT_DIR)\*\libusb-1.0.lib +SOURCES=..\listdevs.c diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/stdint.h b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/stdint.h new file mode 100644 index 0000000..00988d9 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/msvc/stdint.h @@ -0,0 +1,256 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file was originally part of the w64 mingw-runtime package. + */ + +/* ISO C9x 7.18 Integer types + * Based on ISO/IEC SC22/WG14 9899 Committee draft (SC22 N2794) + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * Contributor: Danny Smith + * Modified for libusb/MSVC: Pete Batard + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * Date: 2010-04-02 + */ + +#ifndef _MSC_VER +#error This header should only be used with Microsoft compilers +#endif + +#ifndef _STDINT_H +#define _STDINT_H + +#ifndef _INTPTR_T_DEFINED +#define _INTPTR_T_DEFINED +#ifndef __intptr_t_defined +#define __intptr_t_defined +#undef intptr_t +#ifdef _WIN64 + typedef __int64 intptr_t; +#else + typedef int intptr_t; +#endif /* _WIN64 */ +#endif /* __intptr_t_defined */ +#endif /* _INTPTR_T_DEFINED */ + +#ifndef _UINTPTR_T_DEFINED +#define _UINTPTR_T_DEFINED +#ifndef __uintptr_t_defined +#define __uintptr_t_defined +#undef uintptr_t +#ifdef _WIN64 + typedef unsigned __int64 uintptr_t; +#else + typedef unsigned int uintptr_t; +#endif /* _WIN64 */ +#endif /* __uintptr_t_defined */ +#endif /* _UINTPTR_T_DEFINED */ + +#ifndef _PTRDIFF_T_DEFINED +#define _PTRDIFF_T_DEFINED +#ifndef _PTRDIFF_T_ +#define _PTRDIFF_T_ +#undef ptrdiff_t +#ifdef _WIN64 + typedef __int64 ptrdiff_t; +#else + typedef int ptrdiff_t; +#endif /* _WIN64 */ +#endif /* _PTRDIFF_T_ */ +#endif /* _PTRDIFF_T_DEFINED */ + +#ifndef _WCHAR_T_DEFINED +#define _WCHAR_T_DEFINED +#ifndef __cplusplus + typedef unsigned short wchar_t; +#endif /* C++ */ +#endif /* _WCHAR_T_DEFINED */ + +#ifndef _WCTYPE_T_DEFINED +#define _WCTYPE_T_DEFINED +#ifndef _WINT_T +#define _WINT_T + typedef unsigned short wint_t; + typedef unsigned short wctype_t; +#endif /* _WINT_T */ +#endif /* _WCTYPE_T_DEFINED */ + +/* 7.18.1.1 Exact-width integer types */ +typedef __int8 int8_t; +typedef unsigned __int8 uint8_t; +typedef __int16 int16_t; +typedef unsigned __int16 uint16_t; +typedef __int32 int32_t; +typedef unsigned __int32 uint32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; + +/* 7.18.1.2 Minimum-width integer types */ +typedef signed char int_least8_t; +typedef unsigned char uint_least8_t; +typedef short int_least16_t; +typedef unsigned short uint_least16_t; +typedef int int_least32_t; +typedef unsigned uint_least32_t; +typedef __int64 int_least64_t; +typedef unsigned __int64 uint_least64_t; + +/* 7.18.1.3 Fastest minimum-width integer types + * Not actually guaranteed to be fastest for all purposes + * Here we use the exact-width types for 8 and 16-bit ints. + */ +typedef __int8 int_fast8_t; +typedef unsigned __int8 uint_fast8_t; +typedef __int16 int_fast16_t; +typedef unsigned __int16 uint_fast16_t; +typedef __int32 int_fast32_t; +typedef unsigned __int32 uint_fast32_t; +typedef __int64 int_fast64_t; +typedef unsigned __int64 uint_fast64_t; + +/* 7.18.1.5 Greatest-width integer types */ +typedef __int64 intmax_t; +typedef unsigned __int64 uintmax_t; + +/* 7.18.2 Limits of specified-width integer types */ + +/* 7.18.2.1 Limits of exact-width integer types */ +#define INT8_MIN (-128) +#define INT16_MIN (-32768) +#define INT32_MIN (-2147483647 - 1) +#define INT64_MIN (-9223372036854775807LL - 1) + +#define INT8_MAX 127 +#define INT16_MAX 32767 +#define INT32_MAX 2147483647 +#define INT64_MAX 9223372036854775807LL + +#define UINT8_MAX 255 +#define UINT16_MAX 65535 +#define UINT32_MAX 0xffffffffU /* 4294967295U */ +#define UINT64_MAX 0xffffffffffffffffULL /* 18446744073709551615ULL */ + +/* 7.18.2.2 Limits of minimum-width integer types */ +#define INT_LEAST8_MIN INT8_MIN +#define INT_LEAST16_MIN INT16_MIN +#define INT_LEAST32_MIN INT32_MIN +#define INT_LEAST64_MIN INT64_MIN + +#define INT_LEAST8_MAX INT8_MAX +#define INT_LEAST16_MAX INT16_MAX +#define INT_LEAST32_MAX INT32_MAX +#define INT_LEAST64_MAX INT64_MAX + +#define UINT_LEAST8_MAX UINT8_MAX +#define UINT_LEAST16_MAX UINT16_MAX +#define UINT_LEAST32_MAX UINT32_MAX +#define UINT_LEAST64_MAX UINT64_MAX + +/* 7.18.2.3 Limits of fastest minimum-width integer types */ +#define INT_FAST8_MIN INT8_MIN +#define INT_FAST16_MIN INT16_MIN +#define INT_FAST32_MIN INT32_MIN +#define INT_FAST64_MIN INT64_MIN + +#define INT_FAST8_MAX INT8_MAX +#define INT_FAST16_MAX INT16_MAX +#define INT_FAST32_MAX INT32_MAX +#define INT_FAST64_MAX INT64_MAX + +#define UINT_FAST8_MAX UINT8_MAX +#define UINT_FAST16_MAX UINT16_MAX +#define UINT_FAST32_MAX UINT32_MAX +#define UINT_FAST64_MAX UINT64_MAX + +/* 7.18.2.4 Limits of integer types capable of holding + object pointers */ +#ifdef _WIN64 +#define INTPTR_MIN INT64_MIN +#define INTPTR_MAX INT64_MAX +#define UINTPTR_MAX UINT64_MAX +#else +#define INTPTR_MIN INT32_MIN +#define INTPTR_MAX INT32_MAX +#define UINTPTR_MAX UINT32_MAX +#endif + +/* 7.18.2.5 Limits of greatest-width integer types */ +#define INTMAX_MIN INT64_MIN +#define INTMAX_MAX INT64_MAX +#define UINTMAX_MAX UINT64_MAX + +/* 7.18.3 Limits of other integer types */ +#ifdef _WIN64 +#define PTRDIFF_MIN INT64_MIN +#define PTRDIFF_MAX INT64_MAX +#else +#define PTRDIFF_MIN INT32_MIN +#define PTRDIFF_MAX INT32_MAX +#endif + +#define SIG_ATOMIC_MIN INT32_MIN +#define SIG_ATOMIC_MAX INT32_MAX + +#ifndef SIZE_MAX +#ifdef _WIN64 +#define SIZE_MAX UINT64_MAX +#else +#define SIZE_MAX UINT32_MAX +#endif +#endif + +#ifndef WCHAR_MIN /* also in wchar.h */ +#define WCHAR_MIN 0U +#define WCHAR_MAX 0xffffU +#endif + +/* + * wint_t is unsigned short for compatibility with MS runtime + */ +#define WINT_MIN 0U +#define WINT_MAX 0xffffU + + +/* 7.18.4 Macros for integer constants */ + +/* 7.18.4.1 Macros for minimum-width integer constants + + Accoding to Douglas Gwyn : + "This spec was changed in ISO/IEC 9899:1999 TC1; in ISO/IEC + 9899:1999 as initially published, the expansion was required + to be an integer constant of precisely matching type, which + is impossible to accomplish for the shorter types on most + platforms, because C99 provides no standard way to designate + an integer constant with width less than that of type int. + TC1 changed this to require just an integer constant + *expression* with *promoted* type." + + The trick used here is from Clive D W Feather. +*/ + +#define INT8_C(val) (INT_LEAST8_MAX-INT_LEAST8_MAX+(val)) +#define INT16_C(val) (INT_LEAST16_MAX-INT_LEAST16_MAX+(val)) +#define INT32_C(val) (INT_LEAST32_MAX-INT_LEAST32_MAX+(val)) +/* The 'trick' doesn't work in C89 for long long because, without + suffix, (val) will be evaluated as int, not intmax_t */ +#define INT64_C(val) val##i64 + +#define UINT8_C(val) (val) +#define UINT16_C(val) (val) +#define UINT32_C(val) (val##i32) +#define UINT64_C(val) val##ui64 + +/* 7.18.4.2 Macros for greatest-width integer constants */ +#define INTMAX_C(val) val##i64 +#define UINTMAX_C(val) val##ui64 + +#endif diff --git a/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/stamp-h1 b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/stamp-h1 new file mode 100644 index 0000000..4547fe1 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/libusb/libusb-1.0.9/libusb-1.0.9/stamp-h1 @@ -0,0 +1 @@ +timestamp for config.h diff --git a/CyUSBSerial_SDK_Linux/license/license.txt b/CyUSBSerial_SDK_Linux/license/license.txt new file mode 100644 index 0000000..5faba9d --- /dev/null +++ b/CyUSBSerial_SDK_Linux/license/license.txt @@ -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/CyUSBSerial_SDK_Linux/linux/library/90-cyusb.rules b/CyUSBSerial_SDK_Linux/linux/library/90-cyusb.rules new file mode 100644 index 0000000..21cbba2 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/linux/library/90-cyusb.rules @@ -0,0 +1,5 @@ +# Cypress USB driver for FX2 and FX3 (C) Cypress Semiconductor Corporation / ATR-LABS +# Rules written by V. Radhakrishnan ( rk@atr-labs.com ) +# Cypress USB vendor ID = 0x04b4 +KERNEL=="*", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ACTION=="add", ATTR{idVendor}=="04b4", MODE="666" +KERNEL=="*", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ACTION=="remove", TAG=="cyusb_dev" diff --git a/CyUSBSerial_SDK_Linux/linux/library/CyUSBCommon.h b/CyUSBSerial_SDK_Linux/linux/library/CyUSBCommon.h new file mode 100644 index 0000000..62a48e0 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/linux/library/CyUSBCommon.h @@ -0,0 +1,222 @@ +/* + * Common header file of Cypress USB Serial + * Copyright (C) 2013 Cypress Semiconductor + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "../../common/header/CyUSBSerial.h" +#ifdef __x86_64__ +#pragma pack(1) +#else +#endif +typedef struct CY_DEVICE { + + unsigned char inEndpoint; + unsigned char outEndpoint; + unsigned char interruptEndpoint; + unsigned char interfaceNum; + bool i2cCancelEvent; + bool spiCancelEvent; + bool uartCancelEvent; + bool rtsValue; + bool dtrValue; + unsigned short numEndpoints; + CY_FLOW_CONTROL_MODES uartFlowControlMode; + struct libusb_transfer *spiTransfer; + struct libusb_transfer *uartTransfer; + libusb_device_handle *devHandle; + pthread_t spiThreadId; + pthread_t uartThreadId; + pthread_mutex_t readLock; + pthread_mutex_t writeLock; + pthread_mutex_t notificationLock; + CY_DEVICE_TYPE deviceType; + +}CY_DEVICE,*PCY_DEVICE; +#pragma pack() + +CY_RETURN_STATUS CyResetPipe (CY_HANDLE handl, UINT8); +#define CY_DEBUG_PRINT_INFO(...) //User need to enable this +#define CY_DEBUG_PRINT_ERROR(...) //printf +#define DUMP_DATA 1 +#ifdef DUMP_DATA +#define CY_DUMP_DATA(INPUT,LEN)\ +{\ + int i = 0, len = LEN;\ + while ((len)) {\ + printf ("%x ", (INPUT)[i++]);\ + len--;\ + }\ + printf ("\n");\ +} +#else +#define CY_DUMP_DATA (INPUT, LEN) do { }while (0); +#endif +#define CY_USB_SERIAL_TIMEOUT 5000 +#define CY_EVENT_NOTIFICATION_TIMEOUT 0 //This will make the transfer infinite + +#define CY_VENDOR_REQUEST_DEVICE_TO_HOST 0xC0 +#define CY_VENDOR_REQUEST_HOST_TO_DEVICE 0x40 + +#define CY_CLASS_INTERFACE_REQUEST_DEVICE_TO_HOST 0XA1 +#define CY_CLASS_INTERFACE_REQUEST_HOST_TO_DEVICE 0x21 +//I2C related macros +#define CY_SCB_INDEX_POS 15 +#define CY_I2C_CONFIG_LENGTH 16 +#define CY_I2C_WRITE_COMMAND_POS 3 +#define CY_I2C_WRITE_COMMAND_LEN_POS 4 +#define CY_I2C_GET_STATUS_LEN 3 +#define CY_I2C_MODE_WRITE 1 +#define CY_I2C_MODE_READ 0 +#define CY_I2C_ERROR_BIT (1) +#define CY_I2C_ARBITRATION_ERROR_BIT (1 << 1) +#define CY_I2C_NAK_ERROR_BIT (1 << 2) +#define CY_I2C_BUS_ERROR_BIT (1 << 3) +#define CY_I2C_STOP_BIT_ERROR (1 << 4) +#define CY_I2C_BUS_BUSY_ERROR (1 << 5) +#define CY_I2C_ENABLE_PRECISE_TIMING 1 +#define CY_I2C_EVENT_NOTIFICATION_LEN 3 +//SPI related Macros +#define CY_SPI_CONFIG_LEN 16 +#define CY_SPI_EVENT_NOTIFICATION_LEN 2 +#define CY_SPI_READ_BIT (1) +#define CY_SPI_WRITE_BIT (1 << 1) +#define CY_SPI_SCB_INDEX_BIT (1 << 15) +#define CY_SPI_GET_STATUS_LEN 4 +#define CY_SPI_UNDERFLOW_ERROR (1) +#define CY_SPI_BUS_ERROR (1 << 1) +//Vendor UART related macros +#define CY_UART_SET_FLOW_CONTROL_CMD 0x60 +#define CY_UART_SEND_BREAK_CMD 0x23 +#define CY_UART_CONFIG_LEN 16 +#define CY_SET_LINE_CONTROL_STATE_CMD 0x22 +#define CY_UART_EVENT_NOTIFICATION_LEN 10 + +#define CY_UART_SERIAL_STATE_CARRIER_DETECT 1 +#define CY_UART_SERIAL_STATE_TRANSMISSION_CARRIER (1 << 1) +#define CY_UART_SERIAL_STATE_BREAK_DETECTION (1<< 2) +#define CY_UART_SERIAL_STATE_RING_SIGNAL_DETECTION (1 << 3) +#define CY_UART_SERIAL_STATE_FRAMING_ERROR (1 << 4) +#define CY_UART_SERIAL_STATE_PARITY_ERROR (1 << 5) +#define CY_UART_SERIAL_STATUE_OVERRUN (1 << 6) +//Bootloader related macros +#define CY_BOOT_CONFIG_SIZE 64 +#define CY_DEVICE_CONFIG_SIZE 512 +#define CY_FIRMWARE_BREAKUP_SIZE 4096 +#define CY_GET_SILICON_ID_LEN 4 +#define CY_GET_FIRMWARE_VERSION_LEN 8 +#define CY_GET_SIGNATURE_LEN 4 +//PHDC related macros +#define CY_PHDC_SET_FEATURE 0X03 +#define CY_PHDC_CLR_FEATURE 0X01 +#define CY_PHDC_GET_DATA_STATUS 0x00 + +typedef enum CY_VENDOR_CMDS +{ + CY_GET_VERSION_CMD = 0xB0, /* Get the version of the boot-loader. + value = 0, index = 0, length = 4; + data_in = 32 bit version. */ + + CY_GET_SIGNATURE_CMD = 0xBD, /*Get the signature of the firmware + It is suppose to be 'CYUS' for normal firmware + and 'CYBL' for Bootloader.*/ + CY_UART_GET_CONFIG_CMD = 0xC0, /* Retreive the 16 byte UART configuration information. + MS bit of value indicates the SCB index. + length = 16, data_in = 16 byte configuration. */ + CY_UART_SET_CONFIG_CMD, /* Update the 16 byte UART configuration information. + MS bit of value indicates the SCB index. + length = 16, data_out = 16 byte configuration information. */ + CY_SPI_GET_CONFIG_CMD, /* Retreive the 16 byte SPI configuration information. + MS bit of value indicates the SCB index. + length = 16, data_in = 16 byte configuration. */ + CY_SPI_SET_CONFIG_CMD, /* Update the 16 byte SPI configuration information. + MS bit of value indicates the SCB index. + length = 16, data_out = 16 byte configuration information. */ + CY_I2C_GET_CONFIG_CMD, /* Retreive the 16 byte I2C configuration information. + MS bit of value indicates the SCB index. + length = 16, data_in = 16 byte configuration. */ + CY_I2C_SET_CONFIG_CMD = 0xC5, /* Update the 16 byte I2C configuration information. + MS bit of value indicates the SCB index. + length = 16, data_out = 16 byte configuration information. */ + CY_I2C_WRITE_CMD, /* Perform I2C write operation. + value = bit0 - start, bit1 - stop, bit3 - start on idle, + bits[14:8] - slave address, bit15 - scbIndex. length = 0. The + data is provided over the bulk endpoints. */ + CY_I2C_READ_CMD, /* Perform I2C read operation. + value = bit0 - start, bit1 - stop, bit2 - Nak last byte, + bit3 - start on idle, bits[14:8] - slave address, bit15 - scbIndex, + length = 0. The data is provided over the bulk endpoints. */ + CY_I2C_GET_STATUS_CMD, /* Retreive the I2C bus status. + value = bit0 - 0: TX 1: RX, bit15 - scbIndex, length = 3, + data_in = byte0: bit0 - flag, bit1 - bus_state, bit2 - SDA state, + bit3 - TX underflow, bit4 - arbitration error, bit5 - NAK + bit6 - bus error, + byte[2:1] Data count remaining. */ + CY_I2C_RESET_CMD, /* The command cleans up the I2C state machine and frees the bus. + value = bit0 - 0: TX path, 1: RX path; bit15 - scbIndex, + length = 0. */ + CY_SPI_READ_WRITE_CMD = 0xCA, /* The command starts a read / write operation at SPI. + value = bit 0 - RX enable, bit 1 - TX enable, bit 15 - scbIndex; + index = length of transfer. */ + CY_SPI_RESET_CMD, /* The command resets the SPI pipes and allows it to receive new + request. + value = bit 15 - scbIndex */ + CY_SPI_GET_STATUS_CMD, /* The command returns the current transfer status. The count will match + the TX pipe status at SPI end. For completion of read, read all data + at the USB end signifies the end of transfer. + value = bit 15 - scbIndex */ + CY_JTAG_ENABLE_CMD = 0xD0, /* Enable JTAG module */ + CY_JTAG_DISABLE_CMD, /* Disable JTAG module */ + CY_JTAG_READ_CMD, /* JTAG read vendor command */ + CY_JTAG_WRITE_CMD, /* JTAG write vendor command */ + CY_GPIO_GET_CONFIG_CMD = 0xD8, /* Get the GPIO configuration: */ + CY_GPIO_SET_CONFIG_CMD, /* Set the GPIO configuration */ + CY_GPIO_GET_VALUE_CMD, /* Get GPIO value: */ + CY_GPIO_SET_VALUE_CMD, /* Set the GPIO value:*/ + CY_PROG_USER_FLASH_CMD = 0xE0, /*Program user flash area. The total space available is 512 bytes. + This can be accessed by the user from USB. The flash area + address offset is from 0x0000 to 0x00200 and can be written to + page wise (128 byte).*/ + CY_READ_USER_FLASH_CMD, /*Read user flash area. The total space available is 512 bytes. + This can be accessed by the user from USB. The flash area + address offset is from 0x0000 to 0x00200 and can be written to + page wise (128 byte).*/ + CY_DEVICE_RESET_CMD = 0xE3, /*Performs a device reset from firmware*/ + +} CY_VENDOR_CMDS; + +//JTAG related Macros +#define CY_JTAG_OUT_EP 0x04 +#define CY_JTAG_IN_EP 0x85 + +//GPIO related Macros +#define CY_GPIO_GET_LEN 2 +#define CY_GPIO_SET_LEN 1 + +//PHDC related macros +#define CY_PHDC_GET_STATUS_LEN 2 +#define CY_PHDC_CLR_FEATURE_WVALUE 0x1 +#define CY_PHDC_SET_FEATURE_WVALUE 0x0101 + diff --git a/CyUSBSerial_SDK_Linux/linux/library/Makefile b/CyUSBSerial_SDK_Linux/linux/library/Makefile new file mode 100644 index 0000000..02dd0b6 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/linux/library/Makefile @@ -0,0 +1,18 @@ +all: + gcc -fPIC -g -Wall -o libcyusb.o -c cyusb.c -I ../../common/header + gcc -fPIC -g -Wall -o libcyuart.o -c cyuart.c -I ../../common/header + gcc -fPIC -g -Wall -o libcyi2c.o -c cyi2c.c -I ../../common/header + gcc -fPIC -g -Wall -o libcyspi.o -c cyspi.c -I ../../common/header + gcc -fPIC -g -Wall -o libcyphdc.o -c cyphdc.c -I ../../common/header + gcc -fPIC -g -Wall -o libcyjtag.o -c cyjtag.c -I ../../common/header + gcc -fPIC -g -Wall -o libcymisc.o -c cymisc.c -I ../../common/header + gcc -shared -g -Wl,-soname,libcyusbserial.so -o libcyusbserial.so.1 libcyusb.o libcyuart.o libcyi2c.o libcyspi.o libcyphdc.o libcyjtag.o libcymisc.o -l usb-1.0 + cp libcyusbserial.so.1 /usr/local/lib + ln -sf /usr/local/lib/libcyusbserial.so.1 /usr/local/lib/libcyusbserial.so + ldconfig + rm -f libcyusb.o libcyuart.o libcyspi.o libcyi2c.o libcyphdc.o libcyjtag.o libcymisc.o +clean: + rm -f libcyusbserial.so libcyusbserial.so.1 +help: + @echo 'make would compile and create the library and create a link' + @echo 'make clean would remove the library and the soft link to the library (soname)' diff --git a/CyUSBSerial_SDK_Linux/linux/library/README.txt b/CyUSBSerial_SDK_Linux/linux/library/README.txt new file mode 100644 index 0000000..6ba8ceb --- /dev/null +++ b/CyUSBSerial_SDK_Linux/linux/library/README.txt @@ -0,0 +1,29 @@ +======================================================================================== + Cypress Semiconductor Corporation + CyUSB Serial library. +========================================================================================= +Pre-requisite: +1. libusb-1.0.9 is required for compilation and functioning of the APIs in the library. +2. GNU Make and the GCC tool-chain are used for the build process. + +Installation steps: + +1.cd to the main directory where library source files are extracted and type + 'sudo make' + +2.This will generate shared library libcyusbserial.so.1 and its soft link libcyusbserial.so. + Both of them will be copied/installed to /usr/local/lib. + +3.Application can link and start using the library. + +Changing USB device node permission: + +**Note: +By default the USB device node created in linux do not have read/write permission +for normal user. In order to make the USB device node accessable, copy 90-cyusb.rules +which is inside the library folder of release package to /etc/udev/rules.d folder (Default VID mentioned is Cypress VID +which is 0x4B4, if VID is changed then update it in ATTR{idVendor} section of rules file). + + + + diff --git a/CyUSBSerial_SDK_Linux/linux/library/cyi2c.c b/CyUSBSerial_SDK_Linux/linux/library/cyi2c.c new file mode 100644 index 0000000..10d52fe --- /dev/null +++ b/CyUSBSerial_SDK_Linux/linux/library/cyi2c.c @@ -0,0 +1,690 @@ +/* + * I2C routines of Cypress USB Serial + * Copyright (C) 2013 Cypress Semiconductor + * + * 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 "CyUSBCommon.h" +#pragma pack(1) +typedef struct +{ + UINT32 frequency; /* Frequency of operation. Only valid values are + 100KHz and 400KHz. */ + UINT8 sAddress; /* Slave address to be used when in slave mode. */ + BOOL isMsbFirst; /* Whether to transmit most significant bit first. */ + BOOL isMaster; /* Whether to block is to be configured as a master: + CyTrue - The block functions as I2C master; + CyFalse - The block functions as I2C slave. */ + BOOL sIgnore; /* Ignore general call in slave mode. */ + BOOL clockStretch; /* Wheteher to stretch clock in case of no FIFO availability. */ + BOOL isLoopback; /* Whether to loop back TX data to RX. Valid only + for debug purposes. */ + UCHAR reserved[6]; /*Reserved for future use*/ +} CyUsI2cConfig_t; +#pragma pack() +#ifdef CY_I2C_ENABLE_PRECISE_TIMING +struct timeval startTimeWrite, endTimeWrite, startTimeRead, endTimeRead; +//Timer helper functions for proper timing +void startI2cTick (bool isWrite) { + if (isWrite) + gettimeofday (&startTimeWrite, NULL); + else + gettimeofday (&startTimeRead, NULL); +} + +UINT32 getI2cLapsedTime (bool isWrite){ + + signed int currentTime_sec, currentTime_usec, currentTime; + if (isWrite){ + gettimeofday (&endTimeWrite, NULL); + currentTime_sec = (endTimeWrite.tv_sec - startTimeWrite.tv_sec) * 1000; + currentTime_usec = ((endTimeWrite.tv_usec - startTimeWrite.tv_usec)) / 1000; + currentTime = currentTime_sec + currentTime_usec; + return (unsigned int)currentTime; + } + else{ + gettimeofday (&endTimeRead, NULL); + currentTime_sec = (endTimeRead.tv_sec - startTimeRead.tv_sec) * 1000; + currentTime_usec = ((endTimeRead.tv_usec - startTimeRead.tv_usec)) / 1000; + currentTime = currentTime_sec + currentTime_usec; + return (unsigned int)currentTime; + } +} +#endif +CY_RETURN_STATUS handleI2cError (UINT8 i2cStatus){ + + if (i2cStatus & CY_I2C_NAK_ERROR_BIT){ + CY_DEBUG_PRINT_ERROR ("CY:Error Nacked by device ...Function is %s\n", __func__); + return CY_ERROR_I2C_NAK_ERROR; + } + if (i2cStatus & CY_I2C_BUS_ERROR_BIT){ + CY_DEBUG_PRINT_ERROR ("CY:Error bus error occured... Function is %s\n", __func__); + return CY_ERROR_I2C_BUS_ERROR; + } + if (i2cStatus & CY_I2C_ARBITRATION_ERROR_BIT){ + CY_DEBUG_PRINT_ERROR ("CY:Error Arbitration error occured.. Function is %s\n", __func__); + return CY_ERROR_I2C_ARBITRATION_ERROR; + } + if (i2cStatus & CY_I2C_STOP_BIT_ERROR){ + CY_DEBUG_PRINT_ERROR ("CY:Error Stop bit set by master..Function is %s\n", __func__); + return CY_ERROR_I2C_STOP_BIT_SET; + } + else { + //We should never hit this case!!!! + CY_DEBUG_PRINT_ERROR ("CY:Unknown error..Function is %s\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } +} +//Used internally by read and write API to check if data is received at the I2C end. +CY_RETURN_STATUS CyI2cGetStatus (CY_HANDLE handle, bool mode, UCHAR *i2cStatus); +CY_RETURN_STATUS waitForNotification (CY_HANDLE handle, UINT16 *bytesPending, UINT32 ioTimeout); +/* + This API gets the current I2C config + for the particluar interface of the device + */ +CY_RETURN_STATUS CyGetI2cConfig ( + CY_HANDLE handle, + CY_I2C_CONFIG *i2cConfig + ) +{ + UINT16 wValue, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + int rStatus; + CyUsI2cConfig_t localI2cConfig; + CY_DEVICE *device; + libusb_device_handle *devHandle; + UINT16 scbIndex = 0; + UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle.. Function is %s \n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + if (i2cConfig == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid parameter.. Function is %s \n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_I2C) { + CY_DEBUG_PRINT_ERROR ("CY:Error opened device is not i2c ..Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + scbIndex = device->interfaceNum; + if (scbIndex > 0) + scbIndex = 1; + bmRequestType = CY_VENDOR_REQUEST_DEVICE_TO_HOST; + bmRequest = CY_I2C_GET_CONFIG_CMD; + wValue = (scbIndex << CY_SCB_INDEX_POS); + wIndex = 0x00; + wLength = CY_I2C_CONFIG_LENGTH; + + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, (unsigned char*)&localI2cConfig, wLength, ioTimeout); + if (rStatus == CY_I2C_CONFIG_LENGTH){ + CY_DEBUG_PRINT_INFO ("CY: Read I2C config ...size is %d \n", rStatus); + i2cConfig->frequency = localI2cConfig.frequency; + i2cConfig->slaveAddress = localI2cConfig.sAddress; + i2cConfig->isMaster = localI2cConfig.isMaster; + i2cConfig->isClockStretch = localI2cConfig.clockStretch; + return CY_SUCCESS; + } + else if (rStatus == LIBUSB_ERROR_NO_DEVICE) { + CY_DEBUG_PRINT_ERROR ("CY: Device Disconnected ....Function is %s\n", __func__); + return CY_ERROR_DEVICE_NOT_FOUND; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Error time out ....Function is %s\n", __func__); + return CY_ERROR_IO_TIMEOUT; + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in doing I2C read ...libusb error is %d function is %s!\n", rStatus, __func__); + return CY_ERROR_REQUEST_FAILED; + } +} +/* + This API sets I2C config of the device for that + interface + */ +CY_RETURN_STATUS CySetI2cConfig ( + CY_HANDLE handle, + CY_I2C_CONFIG *i2cConfig + ) +{ + UINT16 wValue, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + CyUsI2cConfig_t localI2cConfig; + int rStatus; + CY_DEVICE *device = NULL; + libusb_device_handle *devHandle; + UINT16 scbIndex = 0; + UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle.. Function is %s \n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + if (i2cConfig == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid parameter.. Function is %s \n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + if (i2cConfig->frequency < 1000 || i2cConfig->frequency > 400000){ + CY_DEBUG_PRINT_ERROR ("CY:Error frequency trying to set in out of ..range Function is %s \n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + if ((i2cConfig->slaveAddress % 2) != 0){ + CY_DEBUG_PRINT_ERROR ("CY:Error slave address needs to even..Function is %s \n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + scbIndex = device->interfaceNum; + if (device->deviceType != CY_TYPE_I2C) { + CY_DEBUG_PRINT_ERROR ("CY:Error opened device is not i2c ..Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + if (scbIndex > 0) + scbIndex = 1; + bmRequestType = CY_VENDOR_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_I2C_SET_CONFIG_CMD; + wValue = (scbIndex << CY_SCB_INDEX_POS); + wIndex = 0x00; + wLength = CY_I2C_CONFIG_LENGTH; + //We need to pass entire 16 bytes config structure to firmware + //but we will not expose all the structure elements to user. + //so filling some of the values. + memset (&localI2cConfig, 0, CY_I2C_CONFIG_LENGTH); + localI2cConfig.frequency = i2cConfig->frequency; + localI2cConfig.sAddress = i2cConfig->slaveAddress; + localI2cConfig.isMaster = i2cConfig->isMaster; + localI2cConfig.clockStretch = i2cConfig->isClockStretch; + localI2cConfig.isMsbFirst = 1; + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, (unsigned char*)&localI2cConfig, wLength, ioTimeout); + if (rStatus == CY_I2C_CONFIG_LENGTH){ + CY_DEBUG_PRINT_INFO ("CY: Setting I2C config successful ...\n"); + return CY_SUCCESS; + } + else if (rStatus == LIBUSB_ERROR_NO_DEVICE) { + CY_DEBUG_PRINT_ERROR ("CY: Device Disconnected ....Function is %s\n", __func__); + return CY_ERROR_DEVICE_NOT_FOUND; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Error time out ....Function is %s\n", __func__); + return CY_ERROR_IO_TIMEOUT; + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in doing I2C read ...libusb error is %d function is %s!\n", rStatus, __func__); + return CY_ERROR_REQUEST_FAILED; + } +} +/* + This API reads I2C data from the specified interface of the device + interface + */ +CY_RETURN_STATUS CyI2cRead ( + CY_HANDLE handle, + CY_I2C_DATA_CONFIG *i2cDataConfig, + CY_DATA_BUFFER *readBuffer, + UINT32 ioTimeout + ) +{ + int rStatus; + CY_DEVICE *device = NULL; + libusb_device_handle *devHandle; + UINT16 wValue = 0, wIndex, wLength, bytesPending = 0; + UINT8 bmRequestType, bmRequest; + UCHAR i2cStatus[CY_I2C_GET_STATUS_LEN]; + UINT16 scbIndex = 0; + bool mode = CY_I2C_MODE_READ; + UINT32 elapsedTime; + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle.. Function is %s \n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + if ((readBuffer == NULL) || (readBuffer->buffer == NULL) || (readBuffer->length == 0)){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid parameter.. Function is %s \n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + readBuffer->transferCount = 0; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_I2C) { + CY_DEBUG_PRINT_ERROR ("CY:Error opened device is not i2c ..Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + if (pthread_mutex_trylock (&device->readLock) == 0){ + scbIndex = device->interfaceNum; + if (scbIndex > 0) + scbIndex = 1; + i2cDataConfig->slaveAddress = ((i2cDataConfig->slaveAddress & 0x7F) | (scbIndex << 7)); + bmRequestType = CY_VENDOR_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_I2C_READ_CMD; + wValue = ((i2cDataConfig->isStopBit) | (i2cDataConfig->isNakBit << 1)); + wValue |= (((i2cDataConfig->slaveAddress) << 8)); + wIndex = readBuffer->length; + wLength = 0; + rStatus = CyI2cGetStatus (handle, mode, (UCHAR *)i2cStatus); + if (rStatus == CY_SUCCESS) + { + if ((i2cStatus[0] & CY_I2C_ERROR_BIT)){ + CY_DEBUG_PRINT_ERROR ("CY:Error device busy ... function is %s \n", __func__); + pthread_mutex_unlock (&device->readLock); + return CY_ERROR_I2C_DEVICE_BUSY; + } + } + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest,wValue, wIndex, NULL, wLength, ioTimeout); + if (rStatus == LIBUSB_ERROR_NO_DEVICE){ + CY_DEBUG_PRINT_ERROR ("CY:Error device disconnected ... \n"); + pthread_mutex_unlock (&device->readLock); + return CY_ERROR_DEVICE_NOT_FOUND; + } + if (rStatus < 0){ + CY_DEBUG_PRINT_ERROR ("CY:Error in sending Read vendor command ... Libusb Error is %d .. Function is %s \n", rStatus, __func__); + pthread_mutex_unlock (&device->readLock); + return CY_ERROR_I2C_DEVICE_BUSY; + } + //Hoping that previous calls do not take much time!! +#ifdef CY_I2C_ENABLE_PRECISE_TIMING + startI2cTick(false); +#endif + rStatus = libusb_bulk_transfer (devHandle, device->inEndpoint, readBuffer->buffer, readBuffer->length, + (int*)&readBuffer->transferCount, ioTimeout); +#ifdef CY_I2C_ENABLE_PRECISE_TIMING + elapsedTime = getI2cLapsedTime(false); + //Giving an extra 10 msec to notification to findout the status + ioTimeout = (ioTimeout - elapsedTime); + if (ioTimeout == 0) + ioTimeout = 10; +#endif + if (rStatus == LIBUSB_SUCCESS){ + CY_DEBUG_PRINT_INFO ("CY: Successfully read i2c data.. %d bytes Read ...\n", readBuffer->transferCount); + bytesPending = readBuffer->length; + rStatus = waitForNotification (handle, &bytesPending, ioTimeout); + if (rStatus) + readBuffer->transferCount = (readBuffer->length - bytesPending); + else + readBuffer->transferCount = readBuffer->length; + pthread_mutex_unlock (&device->readLock); + return rStatus; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Timeout error ..Function is %s\n", __func__); + pthread_mutex_unlock (&device->readLock); + return CY_ERROR_IO_TIMEOUT; + } + else if (rStatus == LIBUSB_ERROR_PIPE){ + CY_DEBUG_PRINT_INFO ("Pipe Error \n"); + rStatus = CyResetPipe (handle, device->outEndpoint); + if (rStatus != CY_SUCCESS){ + CY_DEBUG_PRINT_ERROR ("Error in reseting the pipe \n"); + } + else + CY_DEBUG_PRINT_INFO ("Reset pipe succeded \n"); + + rStatus = CyI2cGetStatus (handle, mode, (UCHAR *)i2cStatus); + if (rStatus == CY_SUCCESS) + { + CyI2cReset (handle, mode); + rStatus = handleI2cError (i2cStatus[0]); + pthread_mutex_unlock (&device->readLock); + return rStatus; + } + else { + pthread_mutex_unlock (&device->readLock); + return CY_ERROR_I2C_DEVICE_BUSY; + } + } + else if (rStatus == LIBUSB_ERROR_NO_DEVICE) { + pthread_mutex_unlock (&device->readLock); + CY_DEBUG_PRINT_ERROR ("CY: Device Disconnected ....Function is %s\n", __func__); + return CY_ERROR_DEVICE_NOT_FOUND; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + pthread_mutex_unlock (&device->readLock); + CY_DEBUG_PRINT_ERROR ("CY:Error time out ....Function is %s\n", __func__); + return CY_ERROR_IO_TIMEOUT; + } + else { + pthread_mutex_unlock (&device->readLock); + CY_DEBUG_PRINT_ERROR ("CY: Error in doing I2C read ...libusb error is %d function is %s!\n", rStatus, __func__); + return CY_ERROR_REQUEST_FAILED; + } + } + else{ + CY_DEBUG_PRINT_ERROR ("CY: Error API busy in servicing previous request... function is %s!\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } +} +/* + This API writes I2C data into the specified interface of the device + */ +CY_RETURN_STATUS CyI2cWrite ( + CY_HANDLE handle, + CY_I2C_DATA_CONFIG *i2cDataConfig, + CY_DATA_BUFFER *writeBuffer, + UINT32 ioTimeout + ) +{ + int rStatus; + UCHAR i2cStatus[CY_I2C_GET_STATUS_LEN]; + CY_DEVICE *device; + libusb_device_handle *devHandle; + UINT16 wValue = 0, wIndex, wLength, bytesPending = 0; + UINT8 bmRequestType, bmRequest; + UINT16 scbIndex = 0; + BOOL mode = CY_I2C_MODE_WRITE; + UINT32 elapsedTime; + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle.. Function is %s \n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + if ((writeBuffer == NULL) || (writeBuffer->buffer == NULL) || (writeBuffer->length == 0)){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid parameter.. Function is %s \n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + writeBuffer->transferCount = 0; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + scbIndex = device->interfaceNum; + if (device->deviceType != CY_TYPE_I2C){ + CY_DEBUG_PRINT_ERROR ("CY:Error opened device is not i2c ..Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + if (pthread_mutex_trylock (&device->writeLock) == 0){ + if (scbIndex > 0) + scbIndex = 1; + bmRequestType = CY_VENDOR_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_I2C_WRITE_CMD; + i2cDataConfig->slaveAddress = ((i2cDataConfig->slaveAddress & 0x7F) | (scbIndex << 7)); + wValue = ((i2cDataConfig->isStopBit)); + wValue |= (((i2cDataConfig->slaveAddress) << 8)); + wIndex = (UINT16)(writeBuffer->length); + wLength = 0; + CY_DEBUG_PRINT_INFO ("wValue is %x \n", wValue); + //Send I2C write vendor command before actually sending the data over bulk ep + rStatus = CyI2cGetStatus (handle, mode, (UCHAR *)i2cStatus); + if (rStatus == CY_SUCCESS) + { + if ((i2cStatus[0] & CY_I2C_ERROR_BIT)){ + CY_DEBUG_PRINT_ERROR ("CY:Error ... Device busy ... function is %s \n", __func__); + pthread_mutex_unlock (&device->writeLock); + return CY_ERROR_I2C_DEVICE_BUSY; + } + } + else if (rStatus == LIBUSB_ERROR_NO_DEVICE){ + CY_DEBUG_PRINT_ERROR ("CY:Error device not found \n"); + pthread_mutex_unlock (&device->writeLock); + return CY_ERROR_DEVICE_NOT_FOUND; + } + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest,wValue, wIndex, NULL, wLength, ioTimeout); + if (rStatus == LIBUSB_ERROR_NO_DEVICE){ + CY_DEBUG_PRINT_ERROR ("CY:Error device not found \n"); + pthread_mutex_unlock (&device->writeLock); + return CY_ERROR_DEVICE_NOT_FOUND; + } + if (rStatus < 0){ + CY_DEBUG_PRINT_ERROR ("CY:Error in sending write vendor command ... Libusb Error is %d \n", rStatus); + pthread_mutex_unlock (&device->writeLock); + return CY_ERROR_I2C_DEVICE_BUSY; + } + //After vendor command is sent send the actual data to be sent to i2c devic +#ifdef CY_I2C_ENABLE_PRECISE_TIMING + startI2cTick(true); +#endif + rStatus = libusb_bulk_transfer (devHandle, device->outEndpoint, writeBuffer->buffer, writeBuffer->length, + (int*)&(writeBuffer->transferCount), ioTimeout); +#ifdef CY_I2C_ENABLE_PRECISE_TIMING + elapsedTime = getI2cLapsedTime(true); + ioTimeout = (ioTimeout - elapsedTime); + //Giving an extra 10 msec to notification to findout the status + if (ioTimeout == 0) + ioTimeout = 10; +#endif + //Once the data is sent to usbserial, check if it was actually written to i2c device. + if (rStatus == LIBUSB_SUCCESS){ + CY_DEBUG_PRINT_INFO ("CY: Successfully written i2c data.. %d bytes written ...\n", writeBuffer->transferCount); + bytesPending = writeBuffer->length; + rStatus = waitForNotification (handle, &bytesPending, ioTimeout); + if (rStatus) + writeBuffer->transferCount = (writeBuffer->length - bytesPending); + else + writeBuffer->transferCount = writeBuffer->length; + pthread_mutex_unlock (&device->writeLock); + return rStatus; + } + //Transaction is stallled when we hit some I2C error while the transfer + //was going on. After we hit this error clear stall and check why we hit this by + //CyGetStatus. + else if (rStatus == LIBUSB_ERROR_PIPE){ + CY_DEBUG_PRINT_INFO ("CY:Pipe Error ... Function is %s\n", __func__); + rStatus = CyResetPipe (handle, device->outEndpoint); + if (rStatus != CY_SUCCESS){ + CY_DEBUG_PRINT_ERROR ("CY:Error in reseting the pipe ..Function is %s\n", __func__); + } + else + CY_DEBUG_PRINT_INFO ("Reset pipe succeded \n"); + + rStatus = CyI2cGetStatus (handle, mode, (UCHAR *)i2cStatus); + if (rStatus == CY_SUCCESS) + { + CyI2cReset (handle, mode); + rStatus = handleI2cError (i2cStatus[0]); + pthread_mutex_unlock (&device->writeLock); + return rStatus; + } + } + else if (rStatus == LIBUSB_ERROR_NO_DEVICE) { + CY_DEBUG_PRINT_ERROR ("CY: Device Disconnected ....Function is %s\n", __func__); + pthread_mutex_unlock (&device->writeLock); + return CY_ERROR_DEVICE_NOT_FOUND; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Error time out ....Function is %s\n", __func__); + pthread_mutex_unlock (&device->writeLock); + return CY_ERROR_IO_TIMEOUT; + } + else{ + CY_DEBUG_PRINT_ERROR ("CY: Error in doing I2C read ...libusb error is %d function is %s!\n", rStatus, __func__); + pthread_mutex_unlock (&device->writeLock); + return CY_ERROR_REQUEST_FAILED; + } + } + else{ + CY_DEBUG_PRINT_ERROR ("CY:API busy with servicing previous request... function is %s!\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + return CY_ERROR_REQUEST_FAILED; +} +/* + This Api gets the current status of the I2C data transaction + */ +CY_RETURN_STATUS CyI2cGetStatus ( + CY_HANDLE handle, + bool mode, + UCHAR *i2cStatus + ) +{ + int rStatus; + CY_DEVICE *device; + libusb_device_handle *devHandle; + UINT16 wValue, wIndex, wLength, bmRequestType, bmRequest;; + UINT16 scbIndex = 0; + UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT; + + if (handle == NULL) + return CY_ERROR_INVALID_HANDLE; + if (i2cStatus == NULL) + return CY_ERROR_INVALID_PARAMETER; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_I2C) { + CY_DEBUG_PRINT_ERROR ("CY:Error opened device is not i2c .. \n"); + return CY_ERROR_REQUEST_FAILED; + } + scbIndex = device->interfaceNum; + if (scbIndex > 0) + scbIndex = 1; + bmRequestType = CY_VENDOR_REQUEST_DEVICE_TO_HOST; + bmRequest = CY_I2C_GET_STATUS_CMD; + wValue = ((scbIndex << CY_SCB_INDEX_POS) | mode); + wIndex = 0; + wLength = CY_I2C_GET_STATUS_LEN; + + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest,wValue, wIndex, (UCHAR*)i2cStatus, wLength, ioTimeout); + if (rStatus < CY_I2C_GET_STATUS_LEN){ + CY_DEBUG_PRINT_INFO ("CY:Error in sending I2C Get Status command...Libusb error is %d\n", rStatus); + return rStatus; + } + return CY_SUCCESS; +} +/* + This Api resets the I2C module + */ +CY_RETURN_STATUS CyI2cReset ( + CY_HANDLE handle, + BOOL resetMode + ) +{ + int rStatus; + CY_DEVICE *device; + libusb_device_handle *devHandle; + UINT16 wValue, wIndex, wLength, bmRequestType, bmRequest; + UINT16 scbIndex = 0; + UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT; + + if (handle == NULL) + return CY_ERROR_INVALID_HANDLE; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_I2C) { + CY_DEBUG_PRINT_ERROR ("CY:Error opened device is not i2c .. \n"); + return CY_ERROR_REQUEST_FAILED; + } + scbIndex = device->interfaceNum; + if (scbIndex > 0) + scbIndex = 1; + bmRequestType = CY_VENDOR_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_I2C_RESET_CMD; + wValue = ((scbIndex << CY_SCB_INDEX_POS) | resetMode ); + wIndex = 0; + wLength = 0; + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest,wValue, wIndex, NULL, wLength, ioTimeout); + if (rStatus < 0){ + CY_DEBUG_PRINT_ERROR ("CY:Error in sending I2C Reset command ..libusb error is %d\n", rStatus); + return CY_ERROR_REQUEST_FAILED; + } + return CY_SUCCESS; +} +static void LIBUSB_CALL i2c_notification_cb(struct libusb_transfer *transfer) +{ + UINT32 *completed = transfer->user_data; + *completed = 1; +} + +CY_RETURN_STATUS waitForNotification (CY_HANDLE handle, UINT16 *bytesPending, UINT32 ioTimeout){ + + UINT32 transferCompleted = 0, length = CY_I2C_EVENT_NOTIFICATION_LEN; + CY_DEVICE *device; + libusb_device_handle *devHandle; + struct libusb_transfer *transfer; + CY_RETURN_STATUS errorStatus, rStatus; + UCHAR i2cStatus[CY_I2C_EVENT_NOTIFICATION_LEN]; + struct timeval time; + + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + transfer = libusb_alloc_transfer(0); + if (transfer == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error in allocating trasnfer \n"); + errorStatus = CY_ERROR_ALLOCATION_FAILED; + (*bytesPending) = 0; + return errorStatus; + //callbackFn (errorStatus, 0); + } + libusb_fill_interrupt_transfer (transfer, devHandle, device->interruptEndpoint, i2cStatus, length, + i2c_notification_cb, &transferCompleted, ioTimeout); + if (libusb_submit_transfer (transfer)){ + CY_DEBUG_PRINT_ERROR ("CY:Error in submitting interrupt transfer ...\n"); + libusb_cancel_transfer (transfer); + libusb_free_transfer (transfer); + (*bytesPending) = 0; + //callbackFn (CY_ERROR_REQUEST_FAILED, 0); + return CY_ERROR_REQUEST_FAILED; + } + time.tv_sec = 0; + time.tv_usec = 50;//polling timeout. + while (transferCompleted == 0){ + libusb_handle_events_timeout (NULL, &time); + } + transferCompleted = 0; + if (transfer->status == LIBUSB_TRANSFER_COMPLETED){ + CY_DEBUG_PRINT_INFO ("CY:Info successfully recieved data on interrupt pipe length is %d \n", transfer->actual_length); + if (i2cStatus[0] & 0x80){ //Error notification is for write + if ((i2cStatus[0] & CY_I2C_ERROR_BIT)){ + CY_DEBUG_PRINT_INFO ("Bytes pending is %x %x %x", i2cStatus[0], i2cStatus[1], i2cStatus[2]); + if (i2cStatus[0] & 0x1E){ + //There was some error, so reset the i2c module and usb module + //of the device, so branch out of the loop(Check below for the errors reported). + rStatus = CyI2cReset (device, CY_I2C_MODE_WRITE); + if (rStatus != CY_SUCCESS) + CY_DEBUG_PRINT_INFO ("CY:i2c reset failed \n"); + //Report the amount of byte that were actually written + memcpy(bytesPending, &i2cStatus[1], 2); + errorStatus = handleI2cError (i2cStatus[0]); + } + } + else + errorStatus = CY_SUCCESS; + } + else //Error notification is for read + { + if ((i2cStatus[0] & CY_I2C_ERROR_BIT)){ + CY_DEBUG_PRINT_INFO ("Bytes pending is %x %x %x", i2cStatus[0], i2cStatus[1], i2cStatus[2]); + if (i2cStatus[0] & 0x1E){ + rStatus = CyI2cReset (device, CY_I2C_MODE_READ); + if (rStatus != CY_SUCCESS) + CY_DEBUG_PRINT_INFO ("CY:i2c reset failed \n"); + //Report the amount of byte that were actually written + memcpy(bytesPending, &i2cStatus[1], 2); + errorStatus = handleI2cError (i2cStatus[0]); + } + } + else + errorStatus = CY_SUCCESS; + } + libusb_free_transfer (transfer); + return errorStatus; + } + else{ + libusb_cancel_transfer (transfer); + if (transfer->status == LIBUSB_TRANSFER_TIMED_OUT){ + CY_DEBUG_PRINT_ERROR ("CY:Error Timeout in getting i2c transfer status ....\n"); + CyI2cGetStatus (handle, 1, (UCHAR *)&errorStatus); + errorStatus = CY_ERROR_IO_TIMEOUT; + } + if (transfer->status == LIBUSB_TRANSFER_OVERFLOW){ + CY_DEBUG_PRINT_ERROR ("CY:Error buffer overFlow in i2c transfer status ....\n"); + errorStatus = CY_ERROR_BUFFER_OVERFLOW; + } + if (transfer->status != LIBUSB_TRANSFER_COMPLETED || transfer->status != LIBUSB_TRANSFER_COMPLETED){ + CY_DEBUG_PRINT_ERROR ("CY:Error in i2c transfer status ... Libusb transfer error is %d \n", transfer->status); + errorStatus = CY_ERROR_REQUEST_FAILED; + } + libusb_free_transfer (transfer); + return CY_ERROR_REQUEST_FAILED; + } +} diff --git a/CyUSBSerial_SDK_Linux/linux/library/cyjtag.c b/CyUSBSerial_SDK_Linux/linux/library/cyjtag.c new file mode 100644 index 0000000..f286a70 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/linux/library/cyjtag.c @@ -0,0 +1,247 @@ +/* + * JTAG routines of Cypress USB Serial + * Copyright (C) 2013 Cypress Semiconductor + * + * 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 "CyUSBCommon.h" +/* + * This API enables the Jtag module + */ +CY_RETURN_STATUS CyJtagEnable ( + CY_HANDLE handle + ) +{ + UINT16 wValue, wIndex, wLength; + UINT16 bmRequestType, bmRequest; + int rStatus; + CY_DEVICE *device; + libusb_device_handle *devHandle; + UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle.. Function is %s \n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_JTAG) { + CY_DEBUG_PRINT_ERROR ("CY:Error device type is not jtag ... Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + bmRequestType = CY_VENDOR_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_JTAG_ENABLE_CMD; + wValue = 0x00; + wIndex = 0; + wLength = 0; + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, NULL, wLength, ioTimeout); + if (rStatus >= 0){ + CY_DEBUG_PRINT_INFO ("CY: JTAG enable successfully \n"); + return CY_SUCCESS; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Time out error ..function is %s \n", __func__); + return CY_ERROR_IO_TIMEOUT; + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in function %s ...libusb error is %d!\n", __func__, rStatus); + return CY_ERROR_REQUEST_FAILED; + } +} +/* + * This API disables the Jtag module + */ +CY_RETURN_STATUS CyJtagDisable ( + CY_HANDLE handle + ) +{ + UINT16 wValue, wIndex, wLength; + UINT16 bmRequestType, bmRequest; + int rStatus; + CY_DEVICE *device; + libusb_device_handle *devHandle; + UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle.. Function is %s \n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_JTAG) { + CY_DEBUG_PRINT_ERROR ("CY:Error device type is not jtag ... Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + bmRequestType = CY_VENDOR_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_JTAG_DISABLE_CMD; + wValue = 0x00; + wIndex = 0; + wLength = 0; + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, NULL, wLength, ioTimeout); + if (rStatus >= 0){ + CY_DEBUG_PRINT_INFO ("CY: JTAG disable successfully \n"); + return CY_SUCCESS; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Time out error while enabling JTAG ..\n"); + return CY_ERROR_IO_TIMEOUT; + } + else { + CY_DEBUG_PRINT_ERROR ("CY:Error while enabling JTAG ...libusb error is %d function is %s!\n", rStatus, __func__); + return CY_ERROR_REQUEST_FAILED; + } +} +/* + * This API is used to do jtag write + */ +CY_RETURN_STATUS CyJtagWrite ( + CY_HANDLE handle, + CY_DATA_BUFFER *writeBuffer, + UINT32 ioTimeout + ) +{ + int rStatus = 0; + CY_DEVICE *device; + libusb_device_handle *devHandle; + UINT16 wValue, wIndex, wLength; + UINT16 bmRequestType, bmRequest; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle.. Function is %s \n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + if ((writeBuffer == NULL) || (writeBuffer->buffer == NULL) || (writeBuffer->length == 0)){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid parameter.. Function is %s \n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_JTAG) { + CY_DEBUG_PRINT_ERROR ("CY:Error device type is not jtag ... Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + bmRequestType = CY_VENDOR_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_JTAG_WRITE_CMD; + wValue = writeBuffer->length; + wIndex = 0; + wLength = 0; + writeBuffer->transferCount = 0; + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, NULL, wLength, ioTimeout); + if (rStatus < 0){ + CY_DEBUG_PRINT_ERROR ("CY: JTAG Vendor command failed %d...function is %s \n", rStatus, __func__); + return CY_ERROR_REQUEST_FAILED; + } + rStatus = libusb_bulk_transfer (devHandle, CY_JTAG_OUT_EP, writeBuffer->buffer, writeBuffer->length, + (int*)&(writeBuffer->transferCount), ioTimeout); + if ((rStatus == CY_SUCCESS)) { + CY_DEBUG_PRINT_ERROR ("CY: Number of bytes written is .... %d \n", writeBuffer->transferCount); + return CY_SUCCESS; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:TimeOut error ...Function is %s %d\n", __func__, writeBuffer->transferCount); + return CY_ERROR_IO_TIMEOUT; + } + else if (rStatus == LIBUSB_ERROR_PIPE){ + CY_DEBUG_PRINT_ERROR ("CY:Pipe error Function is %s \n", __func__); + CyResetPipe (handle, CY_JTAG_OUT_EP); + return CY_ERROR_PIPE_HALTED; + } + else if (rStatus == LIBUSB_ERROR_OVERFLOW){ + CY_DEBUG_PRINT_ERROR ("CY:Error Buffer Overflow..Function is %s \n", __func__); + return CY_ERROR_BUFFER_OVERFLOW; + } + else if (rStatus == LIBUSB_ERROR_NO_DEVICE) { + CY_DEBUG_PRINT_ERROR ("CY: Device Disconnected ....Function is %s \n", __func__); + return CY_ERROR_DEVICE_NOT_FOUND; + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in Function %s...Libusb Error is %d !\n", __func__, rStatus); + return CY_ERROR_REQUEST_FAILED; + } +} +/* + This API is used to read JTAG data from device interface + */ +CY_RETURN_STATUS CyJtagRead ( + CY_HANDLE handle, + CY_DATA_BUFFER *readBuffer, + UINT32 ioTimeout + ) +{ + int rStatus; + CY_DEVICE *device; + libusb_device_handle *devHandle; + UINT16 wValue, wIndex, wLength; + UINT16 bmRequestType, bmRequest; + + bmRequestType = CY_VENDOR_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_JTAG_READ_CMD; + wValue = readBuffer->length; + wIndex = 0; + wLength = 0; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle.. Function is %s \n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + if ((readBuffer == NULL) || (readBuffer->buffer == NULL) || (readBuffer->length == 0)){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid parameter.. Function is %s \n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_JTAG) { + CY_DEBUG_PRINT_ERROR ("CY:Error device type is not jtag ... Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + readBuffer->transferCount = 0; + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, NULL, wLength, ioTimeout); + if (rStatus < 0){ + CY_DEBUG_PRINT_INFO ("CY: JTAG Vendor Command failed %d.. Function is %s \n", rStatus, __func__); + return CY_ERROR_REQUEST_FAILED; + } + rStatus = libusb_bulk_transfer (devHandle, CY_JTAG_IN_EP, readBuffer->buffer, readBuffer->length, + (int*)&(readBuffer->transferCount), ioTimeout); + if (rStatus == CY_SUCCESS){ + CY_DEBUG_PRINT_ERROR ("CY: Number of bytes read is .... %d \n", readBuffer->transferCount); + return CY_SUCCESS; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:TimeOut error ...Function is %s \n", __func__); + return CY_ERROR_IO_TIMEOUT; + } + else if (rStatus == LIBUSB_ERROR_PIPE){ + CY_DEBUG_PRINT_ERROR ("CY:Pipe error Function is %s \n", __func__); + CyResetPipe (handle, CY_JTAG_IN_EP); + return CY_ERROR_PIPE_HALTED; + } + else if (rStatus == LIBUSB_ERROR_OVERFLOW){ + CY_DEBUG_PRINT_ERROR ("CY:Error Buffer Overflow..Function is %s \n", __func__); + return CY_ERROR_BUFFER_OVERFLOW; + } + else if (rStatus == LIBUSB_ERROR_NO_DEVICE) { + CY_DEBUG_PRINT_ERROR ("CY: Device Disconnected ....Function is %s \n", __func__); + return CY_ERROR_DEVICE_NOT_FOUND; + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in function is %s ...Libusb Error is %d!\n", __func__, rStatus); + return CY_ERROR_REQUEST_FAILED; + } +} diff --git a/CyUSBSerial_SDK_Linux/linux/library/cymisc.c b/CyUSBSerial_SDK_Linux/linux/library/cymisc.c new file mode 100644 index 0000000..0321e39 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/linux/library/cymisc.c @@ -0,0 +1,584 @@ +/* + * Miscellaneous routines of Cypress USB Serial + * Copyright (C) 2013 Cypress Semiconductor + * + * 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 "CyUSBCommon.h" + +typedef struct NOTIFICATION_CB_PARAM{ + + CY_HANDLE handle; + CY_EVENT_NOTIFICATION_CB_FN notificationCbFn; + +}NOTIFICATION_CB_PARAM; +/* + This API is used to Read the Bootloder version + */ +CY_RETURN_STATUS CyGetFirmwareVersion( + CY_HANDLE handle, + CY_FIRMWARE_VERSION *firmwareVersion + ) +{ + UINT16 wValue, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + int rStatus, ioTimeout = CY_USB_SERIAL_TIMEOUT; + CY_DEVICE *device; + libusb_device_handle *devHandle; + + if (handle == NULL) + return CY_ERROR_INVALID_HANDLE; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + + bmRequestType = CY_VENDOR_REQUEST_DEVICE_TO_HOST; + bmRequest = CY_GET_VERSION_CMD; + wValue = 0x00; + wIndex = 0x00; + wLength = CY_GET_FIRMWARE_VERSION_LEN; + + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, (unsigned char*)firmwareVersion, wLength, ioTimeout); + + if (rStatus > 0){ + return CY_SUCCESS; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Time out error ..function is %s \n", __func__); + return CY_ERROR_IO_TIMEOUT; + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in function %s ...libusb error is %d!\n", __func__, rStatus); + return CY_ERROR_REQUEST_FAILED; + } +} +/* +The API resets the device +*/ +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyResetDevice ( + CY_HANDLE handle /*Valid device handle*/ + ) +{ + UINT16 wValue, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + int rStatus; + CY_DEVICE *device; + libusb_device_handle *devHandle; + UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle \n"); + return CY_ERROR_INVALID_HANDLE; + } + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + + bmRequestType = CY_VENDOR_REQUEST_DEVICE_TO_HOST; + bmRequest = CY_DEVICE_RESET_CMD; + wValue = 0xA6B6; + wIndex = 0xADBA; + wLength = 0; + + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, NULL, wLength, ioTimeout); + //return buffer will tell the status of the command + if (rStatus == LIBUSB_SUCCESS) + return CY_SUCCESS; + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Time out error ..function is %s \n", __func__); + return CY_ERROR_IO_TIMEOUT; + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in function %s ...libusb error is %d!\n", __func__, rStatus); + return CY_ERROR_REQUEST_FAILED; + } +} + +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CySetGpioValue ( + CY_HANDLE handle, /*Valid device handle*/ + UINT8 gpioNumber, /*GPIO configuration value*/ + UINT8 value /*Value that needs to be set*/ + ) +{ + UINT16 wValue, wIndex, wLength; + UINT8 bmRequestType, bmRequest, buffer[CY_GPIO_SET_LEN]; + int rStatus; + UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT; + CY_DEVICE *device; + libusb_device_handle *devHandle; + + if (handle == NULL) + return CY_ERROR_INVALID_HANDLE; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (value) + value = 1; + bmRequestType = CY_VENDOR_REQUEST_DEVICE_TO_HOST; + bmRequest = CY_GPIO_SET_VALUE_CMD; + wValue = gpioNumber; + wIndex = value; + wLength = 0; + + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, buffer, wLength, ioTimeout); + if (rStatus >= 0){ + CY_DEBUG_PRINT_INFO ("CY: Get Configuration of GPIO succedded...size is %d \n", rStatus); + return CY_SUCCESS; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Time out error ..function is %s \n", __func__); + return CY_ERROR_IO_TIMEOUT; + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in function %s ...libusb error is %d!\n", __func__, rStatus); + return CY_ERROR_REQUEST_FAILED; + } +} + +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyGetGpioValue ( + CY_HANDLE handle, /*Valid device handle*/ + UINT8 gpioNumber, /*GPIO configuration value*/ + UINT8 *value /*Value that needs to be set*/ + ) +{ + UINT16 wValue, wIndex, wLength; + UINT8 bmRequestType, bmRequest, buffer[CY_GPIO_GET_LEN]; + int rStatus; + CY_DEVICE *device; + libusb_device_handle *devHandle; + UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT; + + if (handle == NULL) + return CY_ERROR_INVALID_HANDLE; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + + bmRequestType = CY_VENDOR_REQUEST_DEVICE_TO_HOST; + bmRequest = CY_GPIO_GET_VALUE_CMD; + wValue = gpioNumber; + wIndex = 0x00; + wLength = CY_GPIO_GET_LEN; + + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, buffer, wLength, ioTimeout); + if (rStatus == CY_GPIO_GET_LEN){ + CY_DEBUG_PRINT_INFO ("CY: Get GPIO Configuration succedded...size is %d \n", rStatus); + //return buffer will tell the status of the command + if (buffer[0] == 0){ + (*value) = buffer[1]; + return CY_SUCCESS; + } + else + return CY_ERROR_REQUEST_FAILED; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Time out error ..function is %s \n", __func__); + return CY_ERROR_IO_TIMEOUT; + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in function %s ...libusb error is %d!\n", __func__, rStatus); + return CY_ERROR_REQUEST_FAILED; + } +} +static void LIBUSB_CALL uart_notification_cb(struct libusb_transfer *transfer) +{ + UINT32 *completed = transfer->user_data; + *completed = 1; +} + +void* uartSetEventNotifcation (void *inputParameters) +{ + int rStatus, transferCompleted = 0, length = CY_UART_EVENT_NOTIFICATION_LEN; + CY_DEVICE *device; + libusb_device_handle *devHandle; + struct libusb_transfer *transfer; + UINT16 errorStatus = 0; + UCHAR uartStatus[CY_UART_EVENT_NOTIFICATION_LEN]; + struct timeval time; + CY_EVENT_NOTIFICATION_CB_FN callbackFn; + NOTIFICATION_CB_PARAM *cbParameters = (NOTIFICATION_CB_PARAM*)inputParameters; + callbackFn = cbParameters->notificationCbFn; + + device = (CY_DEVICE *)cbParameters->handle; + devHandle = device->devHandle; + callbackFn = cbParameters->notificationCbFn; + device->uartTransfer = transfer = libusb_alloc_transfer(0); + if (transfer == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error in allocating trasnfer \n"); + errorStatus |= CY_ERROR_EVENT_FAILED_BIT; + callbackFn(errorStatus); + goto END; + } + while (device->uartCancelEvent == false){ + libusb_fill_interrupt_transfer (transfer, devHandle, device->interruptEndpoint, uartStatus, length, + uart_notification_cb, &transferCompleted, CY_EVENT_NOTIFICATION_TIMEOUT); + rStatus = libusb_submit_transfer (transfer); + if (rStatus){ + CY_DEBUG_PRINT_ERROR ("CY:Error submitting uart interrupt token ... Libusb error is %d\n", rStatus); + errorStatus |= CY_ERROR_EVENT_FAILED_BIT; + callbackFn(errorStatus); + break; + } + time.tv_sec = 0; + time.tv_usec = 50;//polling timeout. + while (transferCompleted == 0){ + libusb_handle_events_timeout (NULL, &time); + } + transferCompleted = 0; + if (transfer->status == LIBUSB_TRANSFER_COMPLETED){ + CY_DEBUG_PRINT_INFO ("Successfully read and recieved data %d \n", transfer->actual_length); + memcpy (&errorStatus, &uartStatus[8], 2); + printf ("%x %x ", uartStatus[8], uartStatus[9]); + callbackFn (errorStatus); + errorStatus = 0; + } + else{ + errorStatus |= CY_ERROR_EVENT_FAILED_BIT; + if (device->uartCancelEvent == false){ + CY_DEBUG_PRINT_ERROR ("CY:Error uart interrupt thread encountered error... Libusb transmission error is %d \n", transfer->status); + device->uartThreadId = 0; + callbackFn(errorStatus); + } + break; + } + } + CY_DEBUG_PRINT_INFO ("Exiting notification thread \n"); + libusb_free_transfer (transfer); +END: + free (inputParameters); + return NULL; +} + +static void LIBUSB_CALL spi_notification_cb(struct libusb_transfer *transfer) +{ + UINT32 *completed = transfer->user_data; + *completed = 1; +} + +void* spiSetEventNotifcation (void *inputParameters) +{ + int transferCompleted = 0, length = CY_SPI_EVENT_NOTIFICATION_LEN; + CY_DEVICE *device; + libusb_device_handle *devHandle; + struct libusb_transfer *transfer; + UINT8 spiStatus = 0; + UINT16 errorStatus = 0; + struct timeval time; + CY_EVENT_NOTIFICATION_CB_FN callbackFn; + NOTIFICATION_CB_PARAM *cbParameters = (NOTIFICATION_CB_PARAM*)inputParameters; + + callbackFn = cbParameters->notificationCbFn; + device = (CY_DEVICE *)cbParameters->handle; + devHandle = device->devHandle; + callbackFn = cbParameters->notificationCbFn; + device->spiTransfer = transfer = libusb_alloc_transfer(0); + if (transfer == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error in allocating trasnfer \n"); + errorStatus |= CY_ERROR_EVENT_FAILED_BIT; + callbackFn (errorStatus); + goto END; + } + libusb_fill_interrupt_transfer (transfer, devHandle, device->interruptEndpoint, &spiStatus, length, + spi_notification_cb, &transferCompleted, CY_EVENT_NOTIFICATION_TIMEOUT); + while (device->spiCancelEvent == false){ + if (libusb_submit_transfer (transfer)){ + CY_DEBUG_PRINT_ERROR ("CY:Error submitting spi interrupt token ... \n"); + errorStatus |= CY_ERROR_EVENT_FAILED_BIT; + callbackFn(errorStatus); + break; + } + time.tv_sec = 0; + time.tv_usec = 50;//polling timeout. + while (transferCompleted == 0){ + libusb_handle_events_timeout (NULL, &time); + } + transferCompleted = 0; + if (transfer->status == LIBUSB_TRANSFER_COMPLETED){ + CY_DEBUG_PRINT_INFO ("Successfully read and recieved data %d \n", transfer->actual_length); + if (spiStatus & CY_SPI_UNDERFLOW_ERROR){ + errorStatus |= (CY_SPI_TX_UNDERFLOW_BIT); + } + if (spiStatus & CY_SPI_BUS_ERROR){ + errorStatus |= (CY_SPI_BUS_ERROR_BIT); + } + callbackFn (errorStatus); + errorStatus = 0; + } + else{ + spiStatus |= CY_ERROR_EVENT_FAILED_BIT; + if (device->spiCancelEvent == false){ + device->spiThreadId = 0; + CY_DEBUG_PRINT_ERROR ("CY:Error spi interrupt thread was cancelled... Libusb transmission error is %d \n", transfer->status); + callbackFn (spiStatus); + } + break; + } + } + libusb_free_transfer (transfer); +END: + + free (inputParameters); + pthread_exit (NULL); + return NULL; +} + +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CySetEventNotification( + CY_HANDLE handle, /*Valid handle to communicate with device*/ + CY_EVENT_NOTIFICATION_CB_FN notificationCbFn /*Call back function in case on error during Uart data transfers*/ + ) +{ + CY_DEVICE *device; + NOTIFICATION_CB_PARAM *args = NULL; + int ret; + pthread_t threadID; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle.. Function is %s \n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + if (notificationCbFn == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid parameter.. Function is %s \n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + device = (CY_DEVICE*)handle; + pthread_mutex_lock (&device->notificationLock); + args = (NOTIFICATION_CB_PARAM *)malloc (sizeof (NOTIFICATION_CB_PARAM)); + args->handle = handle; + args->notificationCbFn = notificationCbFn; + if (device->deviceType == CY_TYPE_SPI){ + if (device->spiThreadId != 0) { + CY_DEBUG_PRINT_ERROR ("CY:Error already notification thread exists ... Function is %s \n", __func__); + pthread_mutex_unlock (&device->notificationLock); + return CY_ERROR_STATUS_MONITOR_EXIST; + } + ret = pthread_create (&threadID, NULL, spiSetEventNotifcation, (void *) args); + if (ret == 0){ + device->spiThreadId = threadID; + pthread_mutex_unlock (&device->notificationLock); + return CY_SUCCESS; + } + else { + device->spiThreadId = 0; + free (args); + pthread_mutex_unlock (&device->notificationLock); + CY_DEBUG_PRINT_ERROR ("CY:Error creating spi notification thread ... Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + } + else if (device->deviceType == CY_TYPE_UART){ + if (device->uartThreadId != 0) { + CY_DEBUG_PRINT_ERROR ("CY:Error already notification thread exists ... Function is %s \n", __func__); + pthread_mutex_unlock (&device->notificationLock); + return CY_ERROR_STATUS_MONITOR_EXIST; + } + ret = pthread_create (&threadID, NULL, uartSetEventNotifcation, (void *) args); + if (ret == 0){ + device->uartThreadId = threadID; + pthread_mutex_unlock (&device->notificationLock); + return CY_SUCCESS; + } + else { + device->uartThreadId = 0; + free (args); + pthread_mutex_unlock (&device->notificationLock); + CY_DEBUG_PRINT_ERROR ("CY:Error creating uart notification thread ... Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + } + else { + CY_DEBUG_PRINT_ERROR ("CY:Error unknown device type ....Function is %s \n", __func__); + pthread_mutex_unlock (&device->notificationLock); + return CY_ERROR_REQUEST_FAILED; + } +} +/*The API is used to cancel the uart Event notification*/ +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyAbortEventNotification( + CY_HANDLE handle /*Valid handle to communicate with device*/ + ) +{ + CY_DEVICE *device; + device = (CY_DEVICE*)handle; + pthread_mutex_lock (&device->notificationLock); + if (device->deviceType == CY_TYPE_UART){ + if ((device->uartThreadId == 0)){ + CY_DEBUG_PRINT_ERROR ("CY:Error uart event notification not created ....function is %s \n", __func__); + pthread_mutex_unlock (&device->notificationLock); + return CY_ERROR_REQUEST_FAILED; + } + device->uartCancelEvent = true; + libusb_cancel_transfer (device->uartTransfer); + pthread_join (device->uartThreadId, NULL); + device->uartThreadId = 0; + device->uartCancelEvent = false; + pthread_mutex_unlock (&device->notificationLock); + return CY_SUCCESS; + } + else if (device->deviceType == CY_TYPE_SPI){ + if ((device->spiThreadId == 0)){ + CY_DEBUG_PRINT_ERROR ("CY:Error spi event notification not created ....function is %s \n", __func__); + pthread_mutex_unlock (&device->notificationLock); + return CY_ERROR_REQUEST_FAILED; + } + device->spiCancelEvent = true; + libusb_cancel_transfer (device->spiTransfer); + pthread_join (device->spiThreadId, NULL); + device->spiThreadId = 0; + device->spiCancelEvent = false; + pthread_mutex_unlock (&device->notificationLock); + return CY_SUCCESS; + } + else { + CY_DEBUG_PRINT_ERROR ("CY:Error.. unknown device type ....function is %s \n", __func__); + pthread_mutex_unlock (&device->notificationLock); + return CY_ERROR_REQUEST_FAILED; + } +} +/* +The API is used to programme user flash area +*/ +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyProgUserFlash ( + CY_HANDLE handle, /*Valid device handle*/ + CY_DATA_BUFFER *progBuffer, /*data buffer containing buffer address, length to write*/ + UINT32 flashAddress, /*Address to the data is written*/ + UINT32 ioTimeout /*Timeout value of the API*/ + ) +{ + UINT16 wValue, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + int rStatus; + CY_DEVICE *device; + libusb_device_handle *devHandle; + + if (handle == NULL) + return CY_ERROR_INVALID_HANDLE; + if ((progBuffer == NULL) || (progBuffer->buffer == NULL)) + return CY_ERROR_INVALID_PARAMETER; + + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + + bmRequestType = CY_VENDOR_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_PROG_USER_FLASH_CMD; + wValue = 0; + wIndex = flashAddress; + wLength = progBuffer->length; + + CY_DEBUG_PRINT_INFO ("CY:The Length is %d , Value is %d and index is %d\n", wLength, wValue, wIndex); + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, progBuffer->buffer, wLength, ioTimeout); + if (rStatus > 0){ + (progBuffer->transferCount) = rStatus; + return CY_SUCCESS; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Time out error ..function is %s \n", __func__); + (progBuffer->transferCount) = 0; + return CY_ERROR_IO_TIMEOUT; + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in function %s ...libusb error is %d!\n", __func__, rStatus); + (progBuffer->transferCount) = 0; + return CY_ERROR_REQUEST_FAILED; + } +} +/* +The API is used to programme user flash area +*/ +CYWINEXPORT CY_RETURN_STATUS WINCALLCONVEN CyReadUserFlash ( + CY_HANDLE handle, /*Valid device handle*/ + CY_DATA_BUFFER *readBuffer, /*data buffer containing buffer address, length to write*/ + UINT32 flashAddress, /*Address to the data is written*/ + UINT32 ioTimeout /*Timeout value of the API*/ + ) +{ + UINT16 wValue, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + int rStatus; + CY_DEVICE *device; + libusb_device_handle *devHandle; + + if (handle == NULL) + return CY_ERROR_INVALID_HANDLE; + if ((readBuffer == NULL) || (readBuffer == NULL)) + return CY_ERROR_INVALID_PARAMETER; + + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + + bmRequestType = CY_VENDOR_REQUEST_DEVICE_TO_HOST; + bmRequest = CY_READ_USER_FLASH_CMD; + wValue = 0; + wIndex = flashAddress; + wLength = readBuffer->length; + + CY_DEBUG_PRINT_INFO ("CY:The Length is %d , Value is %d and index is %d\n", wLength, wValue, wIndex); + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, readBuffer->buffer, wLength, ioTimeout); + if (rStatus > 0){ + (readBuffer->transferCount) = rStatus; + return CY_SUCCESS; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Time out error ..function is %s \n", __func__); + (readBuffer->transferCount) = 0; + return CY_ERROR_IO_TIMEOUT; + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in function %s ...libusb error is %d!\n", __func__, rStatus); + (readBuffer->transferCount) = 0; + return CY_ERROR_REQUEST_FAILED; + } +} +/* + This Api is used to get the signature of the device. It would be CYUS when we are in actual device mode + and CYBL when we are bootloader modeñ + */ +CY_RETURN_STATUS CyGetSignature ( + CY_HANDLE handle, + UCHAR *signature + ) +{ + UINT16 wValue, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + int rStatus, ioTimeout = CY_USB_SERIAL_TIMEOUT; + CY_DEVICE *device; + libusb_device_handle *devHandle; + + if (handle == NULL) + return CY_ERROR_INVALID_HANDLE; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + + bmRequestType = CY_VENDOR_REQUEST_DEVICE_TO_HOST; + bmRequest = CY_GET_SIGNATURE_CMD; + wValue = 0x00; + wIndex = 0x00; + wLength = CY_GET_SIGNATURE_LEN; + + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, (unsigned char*)signature, wLength, ioTimeout); + if (rStatus > 0){ + return CY_SUCCESS; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Time out error ..function is %s \n", __func__); + return CY_ERROR_IO_TIMEOUT; + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in function %s ...libusb error is %d!\n", __func__, rStatus); + return CY_ERROR_REQUEST_FAILED; + } +} diff --git a/CyUSBSerial_SDK_Linux/linux/library/cyphdc.c b/CyUSBSerial_SDK_Linux/linux/library/cyphdc.c new file mode 100644 index 0000000..9dd44b9 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/linux/library/cyphdc.c @@ -0,0 +1,130 @@ +/* + * PHDC routines of Cypress USB Serial + * Copyright (C) 2013 Cypress Semiconductor + * + * 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 "CyUSBCommon.h" +/* + PHDC clear feature +*/ +CY_RETURN_STATUS CyPhdcClrFeature (CY_HANDLE handle) +{ + + UINT16 wValue, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + int rStatus; + UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT; + CY_DEVICE *device; + libusb_device_handle *devHandle; + + if (handle == NULL) + return CY_ERROR_INVALID_HANDLE; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + + bmRequestType = CY_CLASS_INTERFACE_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_PHDC_CLR_FEATURE; + wValue = CY_PHDC_CLR_FEATURE_WVALUE; + wIndex = device->interfaceNum; + wLength = 0; + + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, NULL, wLength, ioTimeout); + if (rStatus == 0) + return CY_SUCCESS; + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Time out error ..function is %s \n", __func__); + return CY_ERROR_IO_TIMEOUT; + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in function %s ...libusb error is %d!\n", __func__, rStatus); + return CY_ERROR_REQUEST_FAILED; + } + return CY_SUCCESS; +} +/* + PHDC set feature +*/ +CY_RETURN_STATUS CyPhdcSetFeature (CY_HANDLE handle) +{ + + UINT16 wValue, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + int rStatus, ioTimeout = CY_USB_SERIAL_TIMEOUT ; + CY_DEVICE *device; + libusb_device_handle *devHandle; + + if (handle == NULL) + return CY_ERROR_INVALID_HANDLE; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + + bmRequestType = CY_CLASS_INTERFACE_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_PHDC_SET_FEATURE; + wValue = CY_PHDC_SET_FEATURE_WVALUE; + wIndex = device->interfaceNum; + wLength = 0; + + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, NULL, wLength, ioTimeout); + if (rStatus == 0) + return CY_SUCCESS; + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Time out error ..function is %s \n", __func__); + return CY_ERROR_IO_TIMEOUT; + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in function %s ...libusb error is %d!\n", __func__, rStatus); + return CY_ERROR_REQUEST_FAILED; + } +} +/* + PHDC clear feature +*/ +CY_RETURN_STATUS CyPhdcGetStatus (CY_HANDLE handle, UINT16 *dataStatus) +{ + + UINT16 wValue, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + int rStatus; + UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT ; + CY_DEVICE *device; + libusb_device_handle *devHandle; + + if (handle == NULL) + return CY_ERROR_INVALID_HANDLE; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + + bmRequestType = CY_CLASS_INTERFACE_REQUEST_DEVICE_TO_HOST; + bmRequest = CY_PHDC_GET_DATA_STATUS; + wValue = 0x00; + wIndex = device->interfaceNum; + wLength = CY_PHDC_GET_STATUS_LEN; + + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, (unsigned char*)dataStatus, wLength, ioTimeout); + if (rStatus > 0) + return CY_SUCCESS; + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Time out error ..function is %s \n", __func__); + return CY_ERROR_IO_TIMEOUT; + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in function %s ...libusb error is %d!\n", __func__, rStatus); + return CY_ERROR_REQUEST_FAILED; + } +} diff --git a/CyUSBSerial_SDK_Linux/linux/library/cyspi.c b/CyUSBSerial_SDK_Linux/linux/library/cyspi.c new file mode 100644 index 0000000..56beee5 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/linux/library/cyspi.c @@ -0,0 +1,644 @@ +/* + * SPI routines of Cypress USB Serial + * Copyright (C) 2013 Cypress Semiconductor + * + * 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 "CyUSBCommon.h" +#include +#include +#pragma pack (1) +typedef struct args { + CY_HANDLE handle; + UCHAR *readBuffer; + UINT32 length; + UINT32 ioTimeout; + CY_RETURN_STATUS rStatus; + UINT32 transferCount; +}args; + +typedef struct +{ + UINT32 frequency; + UINT8 dataWidth; + UCHAR mode; + UCHAR xferMode; + BOOL isMsbFirst; + BOOL isMaster; + BOOL isContinuous; + BOOL isSelectPrecede; + BOOL cpha; + BOOL cpol; + BOOL isLoopback; + UCHAR reserver[2]; +} CyUsSpiConfig_t; +#pragma pack() + +struct timeval startSpiTimeWrite, endSpiTimeWrite, startSpiTimeRead, endSpiTimeRead; +//Timer helper functions for proper timing +void startSpiTick (bool isWrite) { + if (isWrite) + gettimeofday (&startSpiTimeWrite, NULL); + else + gettimeofday (&startSpiTimeRead, NULL); +} + +UINT32 getSpiLapsedTime (bool isWrite){ + + signed int currentTime_sec, currentTime_usec, currentTime; + if (isWrite){ + gettimeofday (&endSpiTimeWrite, NULL); + currentTime_sec = (endSpiTimeWrite.tv_sec - startSpiTimeWrite.tv_sec) * 1000; + currentTime_usec = ((endSpiTimeWrite.tv_usec - startSpiTimeWrite.tv_usec)) / 1000; + currentTime = currentTime_sec + currentTime_usec; + return (unsigned int)currentTime; + } + else{ + gettimeofday (&endSpiTimeRead, NULL); + currentTime_sec = (endSpiTimeRead.tv_sec - startSpiTimeRead.tv_sec) * 1000; + currentTime_usec = ((endSpiTimeRead.tv_usec - startSpiTimeRead.tv_usec)) / 1000; + currentTime = currentTime_sec + currentTime_usec; + return (unsigned int)currentTime; + } +} +/* + This API gets the current SPI config + for the particluar interface of the device + */ +CY_RETURN_STATUS CyGetSpiConfig ( + CY_HANDLE handle, + CY_SPI_CONFIG *spiConfig + ) +{ + UINT16 wValue, wIndex, wLength; + UINT16 bmRequestType, bmRequest; + CyUsSpiConfig_t localSpiConfig; + int rStatus; + CY_DEVICE *device; + libusb_device_handle *devHandle; + UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT; + UINT8 scbIndex = 0; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle.. Function is %s \n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + if (spiConfig == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid parameter.. Function is %s \n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_SPI) { + CY_DEBUG_PRINT_ERROR ("CY:Error opened device is not spi ..Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + if (device->interfaceNum > 0) + scbIndex = 1; + + bmRequestType = CY_VENDOR_REQUEST_DEVICE_TO_HOST; + bmRequest = CY_SPI_GET_CONFIG_CMD; + wValue = (scbIndex << CY_SCB_INDEX_POS); + wIndex = 0; + wLength = CY_SPI_CONFIG_LEN; + + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, (unsigned char*)&localSpiConfig, wLength, ioTimeout); + if (rStatus == CY_SPI_CONFIG_LEN){ + //CY_DUMP_DATA ((unsigned char*)&localSpiConfig, wLength); + CY_DEBUG_PRINT_INFO ("CY: Read SPI config successfully %d\n", rStatus); + spiConfig->frequency = localSpiConfig.frequency; + spiConfig->dataWidth = localSpiConfig.dataWidth; + spiConfig->protocol = localSpiConfig.mode; + spiConfig->isMsbFirst = localSpiConfig.isMsbFirst; + spiConfig->isMaster = localSpiConfig.isMaster; + spiConfig->isContinuousMode = localSpiConfig.isContinuous; + spiConfig->isSelectPrecede = localSpiConfig.isSelectPrecede; + spiConfig->isCpha = localSpiConfig.cpha; + spiConfig->isCpol = localSpiConfig.cpol; + return CY_SUCCESS; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Time out error ... Function is %s\n", __func__); + return CY_ERROR_IO_TIMEOUT; + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in function %s...libusb error is %d !\n", __func__, rStatus); + return CY_ERROR_REQUEST_FAILED; + } +} +/* + This API sets SPI config of the device for that + interface + */ +CY_RETURN_STATUS CySetSpiConfig ( + CY_HANDLE handle, + CY_SPI_CONFIG *spiConfig + ) +{ + UINT16 wValue, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + CyUsSpiConfig_t localSpiConfig; + int rStatus; + CY_DEVICE *device; + libusb_device_handle *devHandle; + UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT; + UINT8 scbIndex = 0; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle.. Function is %s \n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + if (spiConfig == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid parameter.. Function is %s \n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_SPI) { + CY_DEBUG_PRINT_ERROR ("CY:Error device type is not spi ... Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + if (spiConfig->frequency < 1000 || spiConfig->frequency > 3000000){ + CY_DEBUG_PRINT_ERROR ("CY:Error frequency trying to set in out of range ... Function is %s\n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + if (spiConfig->protocol == CY_SPI_TI){ + if (!(spiConfig->isCpol == false && spiConfig->isCpha == true && spiConfig->isContinuousMode == false)){ + CY_DEBUG_PRINT_ERROR ("CY:Error ... Wrong configuration for SPI TI mode \n"); + return CY_ERROR_REQUEST_FAILED; + } + } + if (spiConfig->protocol == CY_SPI_NS){ + if (!(spiConfig->isCpol == false && spiConfig->isCpha == false && spiConfig->isSelectPrecede == false)){ + CY_DEBUG_PRINT_ERROR ("CY:Error ... Wrong configuration for SPI ti mode \n"); + return CY_ERROR_REQUEST_FAILED; + } + } + else{ + if (spiConfig->isSelectPrecede != false){ + CY_DEBUG_PRINT_ERROR ("CY:Error ... Wrong configuration for SPI motorola mode \n"); + return CY_ERROR_REQUEST_FAILED; + } + } + if (device->interfaceNum > 0) + scbIndex = 1; + bmRequestType = CY_VENDOR_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_SPI_SET_CONFIG_CMD; + wValue = (scbIndex << CY_SCB_INDEX_POS); + wIndex = 0; + wLength = CY_SPI_CONFIG_LEN; + //We will not expose all the spi config structure elements to user. + //Fill in rest of the values. + + memset (&localSpiConfig, 0, CY_SPI_CONFIG_LEN); + localSpiConfig.frequency = spiConfig->frequency; + localSpiConfig.dataWidth = spiConfig->dataWidth; + localSpiConfig.mode = spiConfig->protocol; + localSpiConfig.isMsbFirst = spiConfig->isMsbFirst; + localSpiConfig.isMaster = spiConfig->isMaster; + localSpiConfig.isContinuous = spiConfig->isContinuousMode; + localSpiConfig.isSelectPrecede = spiConfig->isSelectPrecede; + localSpiConfig.cpha = spiConfig->isCpha; + localSpiConfig.cpol = spiConfig->isCpol; + //CY_DUMP_DATA ((unsigned char*)&localSpiConfig, wLength); + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, (unsigned char*)&localSpiConfig, wLength, ioTimeout); + if (rStatus == CY_SPI_CONFIG_LEN){ + CY_DEBUG_PRINT_INFO ("CY: Setting SPI config success ...\n"); + return CY_SUCCESS; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Time out error ..Function is %s\n", __func__); + return CY_ERROR_IO_TIMEOUT; + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in function %s ... !libusb error is %d\n", __func__, rStatus); + return CY_ERROR_REQUEST_FAILED; + } +} +/*Api will reset the spi module*/ +CY_RETURN_STATUS CySpiReset (CY_HANDLE handle) +{ + int rStatus; + CY_DEVICE *device; + libusb_device_handle *devHandle; + UINT16 wValue, wIndex, wLength, bmRequestType, bmRequest;; + UINT16 scbIndex = 0; + UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT; + + if (handle == NULL) + return CY_ERROR_INVALID_HANDLE; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_SPI) { + CY_DEBUG_PRINT_ERROR ("CY:Error device type is not spi ... Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + scbIndex = device->interfaceNum; + if (scbIndex > 0) + scbIndex = 1; + bmRequestType = CY_VENDOR_REQUEST_DEVICE_TO_HOST; + bmRequest = CY_SPI_RESET_CMD; + wValue = ((scbIndex << CY_SCB_INDEX_POS)); + wIndex = 0; + wLength = 0; + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest,wValue, wIndex, NULL, wLength, ioTimeout); + if (rStatus < 0){ + CY_DEBUG_PRINT_ERROR ("CY:Error in sending spi reset command...Libusb error is %d\n", rStatus); + return rStatus; + } + return CY_SUCCESS; +} +/* + This API reads SPI data from the specified interface of the device + interface + */ + +static void LIBUSB_CALL spi_read_cb(struct libusb_transfer *transfer) +{ + UINT32 *completed = transfer->user_data; + *completed = 1; +} +//We adopted for async method here because there are 2 thread polling same fd +// i.e both read and write are polling same fd when one event triggers and other one is +//not completed then another thread will wait for more than 60sec. +CY_RETURN_STATUS CySpiRead ( + CY_HANDLE handle, + CY_DATA_BUFFER *readBuffer, + UINT32 ioTimeout + ) +{ + struct libusb_transfer *readTransfer; + CY_DEVICE *device; + libusb_device_handle *devHandle; + int readCompleted = 0; + struct timeval time; + int r; + if (handle == NULL) + return CY_ERROR_INVALID_HANDLE; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + readBuffer->transferCount = 0; + readTransfer = libusb_alloc_transfer(0); + if (readTransfer == NULL){ + CY_DEBUG_PRINT_ERROR("CY:Error in allocating transfers \n"); + return CY_ERROR_ALLOCATION_FAILED; + } + libusb_fill_bulk_transfer(readTransfer, devHandle, device->inEndpoint, readBuffer->buffer, readBuffer->length, + spi_read_cb, &readCompleted, ioTimeout); + libusb_submit_transfer (readTransfer); + time.tv_sec = (ioTimeout / 1000); + time.tv_usec = ((ioTimeout % 1000) * 1000);//polling timeout. + while (readCompleted == 0){ + r = libusb_handle_events_timeout_completed(NULL, &time, &readCompleted); + if (r < 0) { + if (r == LIBUSB_ERROR_INTERRUPTED) + continue; + libusb_cancel_transfer(readTransfer); + while (!readCompleted) + if (libusb_handle_events_completed(NULL, &readCompleted) < 0) + break; + readBuffer->transferCount = readTransfer->actual_length; + libusb_free_transfer(readTransfer); + return r; + } + } + if ((readTransfer->status == LIBUSB_TRANSFER_COMPLETED)){ + readBuffer->transferCount = readTransfer->actual_length; + libusb_free_transfer (readTransfer); + return CY_SUCCESS; + } + else{ + if (readTransfer->status == LIBUSB_TRANSFER_TIMED_OUT){ + //We should not be hitting this case.. As the time out is infinite!! + CY_DEBUG_PRINT_ERROR ("CY:Timeout error in doing SPI read/write .... %d Libusb errors %d\n", + readTransfer->actual_length,readTransfer->status); + readBuffer->transferCount = readTransfer->actual_length; + CySpiReset (handle); + libusb_free_transfer (readTransfer); + return CY_ERROR_IO_TIMEOUT; + } + if (readTransfer->status == LIBUSB_TRANSFER_OVERFLOW){ + //Need to handle this properly! + CY_DEBUG_PRINT_ERROR ("CY:OverFlow error in doing SPI read/write .... Libusb errors %d %d \n", + readTransfer->status, readTransfer->actual_length); + readBuffer->transferCount = readTransfer->actual_length; + CySpiReset (handle); + libusb_free_transfer (readTransfer); + return CY_ERROR_BUFFER_OVERFLOW; + } + if (readTransfer->status != LIBUSB_TRANSFER_COMPLETED){ + CY_DEBUG_PRINT_ERROR ("CY:Error in doing SPI read/write .... Libusb errors are %d %d\n", + readTransfer->status, readTransfer->actual_length); + readBuffer->transferCount = readTransfer->actual_length; + CySpiReset (handle); + libusb_free_transfer (readTransfer); + //If timer is not completed then it implies we have timeout error + return CY_ERROR_REQUEST_FAILED; + } + } + return CY_ERROR_REQUEST_FAILED; +} +/*Internal SPI get status API for Write operation*/ +CY_RETURN_STATUS CyGetSpiStatus (CY_HANDLE handle, + int *spiStatus + ) +{ + int rStatus; + CY_DEVICE *device; + libusb_device_handle *devHandle; + UINT16 wValue, wIndex, wLength, bmRequestType, bmRequest;; + UINT16 scbIndex = 0; + UINT32 ioTimeout = 0; + + if (handle == NULL) + return CY_ERROR_INVALID_HANDLE; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_SPI) { + CY_DEBUG_PRINT_ERROR ("CY:Error device type is not spi ... Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + scbIndex = device->interfaceNum; + if (scbIndex > 0) + scbIndex = 1; + bmRequestType = CY_VENDOR_REQUEST_DEVICE_TO_HOST; + bmRequest = CY_SPI_GET_STATUS_CMD; + wValue = ((scbIndex << CY_SCB_INDEX_POS)); + wIndex = 0; + wLength = CY_SPI_GET_STATUS_LEN; + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest,wValue, wIndex, (UCHAR*)spiStatus, wLength, ioTimeout); + if (rStatus < CY_SPI_GET_STATUS_LEN){ + CY_DEBUG_PRINT_INFO ("CY:Error in sending spi Get Status command...Libusb error is %d\n", rStatus); + return rStatus; + } + return CY_SUCCESS; +} +/* Function to write on to SPI alone*/ +CY_RETURN_STATUS CySpiWrite ( + CY_HANDLE handle, + CY_DATA_BUFFER *writeBuffer, + UINT32 ioTimeout + ) +{ + int rStatus; + CY_DEVICE *device; + libusb_device_handle *devHandle; + int spiStatus = 1; + UINT32 newIoTimeout = ioTimeout, elapsedTime = 0, loopCount = 1; + if (handle == NULL) + return CY_ERROR_INVALID_HANDLE; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_SPI) { + CY_DEBUG_PRINT_ERROR ("CY:Error device type is not spi ... Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + startSpiTick (true); + rStatus = libusb_bulk_transfer (devHandle, device->outEndpoint, writeBuffer->buffer, writeBuffer->length, + (int*)&(writeBuffer->transferCount), newIoTimeout); + elapsedTime = getSpiLapsedTime(true); + newIoTimeout = ioTimeout - elapsedTime; + //because we have a sleep of 1 msec after every getstatus + if (newIoTimeout) + loopCount = (newIoTimeout); + if ((rStatus == LIBUSB_SUCCESS)){ + CY_DEBUG_PRINT_INFO ("CY: Successfully written SPI data.. %d bytes Read ...\n", writeBuffer->transferCount); + while (loopCount){ + usleep (1000); + rStatus = CyGetSpiStatus (handle, &spiStatus); + if (rStatus == CY_SUCCESS){ + if (spiStatus == 0){ + return CY_SUCCESS; + } + } + else { + //Should never hit this case + CY_DEBUG_PRINT_ERROR ("CY:Error in getting spi status \n"); + return CY_ERROR_REQUEST_FAILED; + } + if (ioTimeout) + loopCount--; + } + if (loopCount == 0 && spiStatus > 0){ + writeBuffer->length = 0; + CySpiReset (handle); + return CY_ERROR_IO_TIMEOUT; + } + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:Error TimeOut ...function is %s\n", __func__); + CySpiReset (handle); + return CY_ERROR_IO_TIMEOUT; + } + else if (rStatus == LIBUSB_ERROR_PIPE){ + CY_DEBUG_PRINT_ERROR ("CY:Error Pipe error..function is %s\n", __func__); + CySpiReset (handle); + CyResetPipe (handle, device->outEndpoint); + return CY_ERROR_PIPE_HALTED; + } + else if (rStatus == LIBUSB_ERROR_OVERFLOW){ + CY_DEBUG_PRINT_ERROR ("CY:Error Buffer Overflow...function is %s\n", __func__); + return CY_ERROR_BUFFER_OVERFLOW; + } + else if (rStatus == LIBUSB_ERROR_NO_DEVICE) { + CY_DEBUG_PRINT_ERROR ("CY:Error Device Disconnected ...function is %s\n", __func__); + return CY_ERROR_DEVICE_NOT_FOUND; + } + else { + CY_DEBUG_PRINT_ERROR ("CY:Error in writing SPI data ...Libusb Error is %d and bytes read is %d!\n", rStatus, writeBuffer->transferCount); + return CY_ERROR_REQUEST_FAILED; + } + return CY_ERROR_REQUEST_FAILED; +}/* + API to wrap up the data + */ +void spiCollectData (void *inputParameters) { + + UINT32 readLength = 0, length; + CY_DATA_BUFFER readBuffer; + args *inputData = (args *) inputParameters; + UCHAR *buffer; + CY_RETURN_STATUS rStatus = CY_SUCCESS; + buffer = readBuffer.buffer = inputData->readBuffer; + length = readBuffer.length = inputData->length; + CY_HANDLE handle = inputData->handle; + int newTimeout = inputData->ioTimeout, elapsedTime; + while (readLength != length && newTimeout >= 0 && rStatus == CY_SUCCESS){ + //Get current time + //Buffer is pointing to next address where we are suppose to fill the data + readBuffer.buffer = &buffer[readLength]; + //Updated length which total length minus the total length of data read + readBuffer.length = length - readLength; + //Libusb fix for mac os!! + //ISSUE:when api times out in MAC it comes back and say read length = 0!! +#ifdef __APPLE__ + if (readBuffer.length > 64) + readBuffer.length = 64; +#endif + startSpiTick (false); + rStatus = CySpiRead (handle, &readBuffer, newTimeout); + elapsedTime = getSpiLapsedTime (false); + //Do this only when newTimeout is non zero + if (newTimeout){ + newTimeout = newTimeout - elapsedTime; + //If timeout is 0 then libusb considers that as infinite + //So forcefully make the loop to comeout + if (newTimeout <= 0) + rStatus = CY_ERROR_IO_TIMEOUT; + } + if (rStatus != CY_SUCCESS){ + readLength += readBuffer.transferCount; + break; + } + readLength += readBuffer.transferCount; + } + if (readLength != length && rStatus == CY_ERROR_IO_TIMEOUT){ + CySpiReset (handle); + } + inputData->transferCount = readLength; + inputData->rStatus = rStatus; +} +/* + * Api used to do read as well as write on spi + */ +CY_RETURN_STATUS CySpiReadWrite (CY_HANDLE handle, + CY_DATA_BUFFER *readBuffer, + CY_DATA_BUFFER *writeBuffer, + UINT32 ioTimeout) +{ + struct args threadParameter; + UINT32 ret; + pthread_t readThreadID = (pthread_t)0; + CY_DEVICE *device; + libusb_device_handle *devHandle; + CY_RETURN_STATUS rStatus; + unsigned short spiTransferMode = 0, scbIndex = 0; + UINT16 wValue, wIndex = 0, wLength; + UINT16 bmRequestType, bmRequest; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle.. Function is %s \n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + if (readBuffer == NULL && writeBuffer == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid parameter.. Function is %s \n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_SPI) { + CY_DEBUG_PRINT_ERROR ("CY:Error opened device is not spi .. \n"); + return CY_ERROR_REQUEST_FAILED; + } + //Set both the bits and change it accordingly based on parameters parameters + spiTransferMode |= ((CY_SPI_READ_BIT) | (CY_SPI_WRITE_BIT)); + if ((readBuffer == NULL || readBuffer->length == 0 || readBuffer->buffer == NULL)) + spiTransferMode &= ~(CY_SPI_READ_BIT); + if ((writeBuffer == NULL || writeBuffer->length == 0 || writeBuffer->buffer == NULL)) + spiTransferMode &= ~(CY_SPI_WRITE_BIT); + //if none of the bit is set it implies parameters sent is wrong + if (spiTransferMode == 0){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid parameter.. Function is %s \n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + if (device->interfaceNum > 0) + scbIndex = 1; + //In read only case we take length to be equal to readBuffer length. + //But in write or in write/read case we take length = writeBuffer length. + if (spiTransferMode == 0x1) + wIndex = readBuffer->length; + else + wIndex = writeBuffer->length; + spiTransferMode |= (scbIndex << 15); + bmRequestType = CY_VENDOR_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_SPI_READ_WRITE_CMD; + wValue = (spiTransferMode); + wLength = 0; + if (pthread_mutex_trylock (&device->writeLock) == 0){ + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, NULL, wLength, 5000); + if (rStatus){ + CY_DEBUG_PRINT_ERROR ("CY:Error Sending spi read write vendor command failed ... Libusb error is %d\n", rStatus); + pthread_mutex_unlock (&device->writeLock); + return CY_ERROR_REQUEST_FAILED; + } + //Read Bit is not set then write Only + if (!(spiTransferMode & CY_SPI_READ_BIT)) { + writeBuffer->transferCount = 0; + if (readBuffer) + readBuffer->transferCount = 0; + rStatus = CySpiWrite (handle, writeBuffer, ioTimeout); + pthread_mutex_unlock (&device->writeLock); + return rStatus; + } + //Write Bit is not set then read only + if (!(spiTransferMode & CY_SPI_WRITE_BIT)) { + // We are starting a thread so that we can collect all the data + // FIX for short length packet issue on SPI. + readBuffer->transferCount = 0; + if (writeBuffer) + writeBuffer->transferCount = 0; + threadParameter.handle = handle; + threadParameter.readBuffer = readBuffer->buffer; + threadParameter.length = readBuffer->length; + threadParameter.ioTimeout = ioTimeout; + ret = pthread_create (&readThreadID, NULL, (void *)spiCollectData, (void *)&threadParameter); + if (ret){ + CY_DEBUG_PRINT_ERROR ("CY:Error in creating read thread ... Reading failed \n"); + pthread_mutex_unlock (&device->writeLock); + readBuffer->transferCount = 0; + return CY_ERROR_REQUEST_FAILED; + } + pthread_join (readThreadID, NULL); + readBuffer->transferCount = threadParameter.transferCount; + pthread_mutex_unlock (&device->writeLock); + return threadParameter.rStatus; + } + writeBuffer->transferCount = 0; + readBuffer->transferCount = 0; + threadParameter.handle = handle; + threadParameter.readBuffer = readBuffer->buffer; + threadParameter.length = readBuffer->length; + threadParameter.ioTimeout = ioTimeout; + ret = pthread_create (&readThreadID, NULL, (void *)spiCollectData, (void *)&threadParameter); + if (ret){ + CY_DEBUG_PRINT_ERROR ("CY:Error in creating read thread ... Reading failed \n"); + readBuffer->transferCount = 0; + pthread_mutex_unlock (&device->writeLock); + return CY_ERROR_REQUEST_FAILED; + } + rStatus = CySpiWrite (handle, writeBuffer, ioTimeout); + if (rStatus == CY_SUCCESS) { + pthread_join (readThreadID, NULL); + rStatus = threadParameter.rStatus; + readBuffer->transferCount = threadParameter.transferCount; + } + else { + pthread_join (readThreadID, NULL); + readBuffer->transferCount = threadParameter.transferCount; + } + pthread_mutex_unlock (&device->writeLock); + return rStatus; + } + else{ + CY_DEBUG_PRINT_ERROR ("CY:Error API busy in service previous request ... Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + return rStatus; +} diff --git a/CyUSBSerial_SDK_Linux/linux/library/cyuart.c b/CyUSBSerial_SDK_Linux/linux/library/cyuart.c new file mode 100644 index 0000000..6a6cbaf --- /dev/null +++ b/CyUSBSerial_SDK_Linux/linux/library/cyuart.c @@ -0,0 +1,755 @@ +/* + * UART routines of Cypress USB Serial + * Copyright (C) 2013 Cypress Semiconductor + * + * 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 "CyUSBCommon.h" +#pragma pack(1) +typedef struct { + CY_UART_BAUD_RATE baudRate; + UINT8 pinType; + UINT8 dataWidth; + UINT8 stopBits; + UINT8 mode; + UINT8 parity; + UINT8 isMsbFirst; + UINT8 txRetry;; + UINT8 rxInvertPolarity; + UINT8 rxIgnoreError; + UINT8 isFlowControl; + UINT8 isLoopBack; + UINT8 flags; +}CyUsUartConfig_t; +#pragma pack() +#define MAX_DEVICE_EP_SIZE 64 +/* +There is no way in the current library architecture +Data Queue size can exceed 4 Max EP size Pages. +*/ +#define NO_DATA_QUEUE_PAGES 4 +#define NUM_MAX_UART_SCB 2 + +typedef struct dtQueue{ + + UINT8 cyDataQueue[NO_DATA_QUEUE_PAGES * MAX_DEVICE_EP_SIZE]; + UINT8 pHeadPosition; + UINT8 pTailPosition; + UINT16 nTotalAvailableData; + +}CyDataQueue; + +CyDataQueue gSimpleDataQueue[NUM_MAX_UART_SCB]; + +//Timer helper functions for proper timing +UINT32 getUartLapsedTime (struct timeval startTime){ + + signed int currentTime_sec, currentTime_usec, currentTime; + struct timeval endTime; + gettimeofday (&endTime, NULL); + currentTime_sec = (endTime.tv_sec - startTime.tv_sec) * 1000; + currentTime_usec = ((endTime.tv_usec - startTime.tv_usec)) / 1000; + currentTime = currentTime_sec + currentTime_usec; + return (unsigned int)currentTime; +} + +// Queue Helper Functions.... + +void GetDataFromTheQueue( + UINT8 scbIndex, + PCY_DATA_BUFFER cyDataBuffer + ) +{ + UINT16 headPos = gSimpleDataQueue[scbIndex].pHeadPosition; + UINT16 nCheckForWrapAround = 0; + UINT8* buffer = &gSimpleDataQueue[scbIndex].cyDataQueue[headPos]; + UINT16 nMaxBufferSize = (NO_DATA_QUEUE_PAGES * MAX_DEVICE_EP_SIZE); + + // Parameter Validation. + if (gSimpleDataQueue[scbIndex].nTotalAvailableData == 0 ) return; // No data in the queue to return. + // Is there any Memory space in the queue to add more. + if (gSimpleDataQueue[scbIndex].pHeadPosition == gSimpleDataQueue[scbIndex].pTailPosition ) return; + // Is this Invalid Parameters? + if (scbIndex > 1 || cyDataBuffer == NULL || cyDataBuffer->length == 0) return; + + // Now make the transfer from the queue. + if (cyDataBuffer->length >= gSimpleDataQueue[scbIndex].nTotalAvailableData ) { + + + + nCheckForWrapAround = (gSimpleDataQueue[scbIndex].pHeadPosition + + gSimpleDataQueue[scbIndex].nTotalAvailableData); + + // Copy the data. + if (nCheckForWrapAround <= nMaxBufferSize ) + { + memcpy(cyDataBuffer->buffer, buffer, gSimpleDataQueue[scbIndex].nTotalAvailableData); + cyDataBuffer->transferCount = gSimpleDataQueue[scbIndex].nTotalAvailableData; + } + else { + // Queue Wrap around occurred. + UINT16 bufferLen1 = nMaxBufferSize - (gSimpleDataQueue[scbIndex].pHeadPosition); + UINT16 bufferLen2 = gSimpleDataQueue[scbIndex].pTailPosition; + memcpy(cyDataBuffer->buffer, buffer, bufferLen1); + buffer = &gSimpleDataQueue[scbIndex].cyDataQueue[0]; + memcpy(cyDataBuffer->buffer+bufferLen1, buffer, bufferLen2); + cyDataBuffer->transferCount = (bufferLen1 + bufferLen2); + } + + + // Reset the queue. + gSimpleDataQueue[scbIndex].pHeadPosition = 0; + gSimpleDataQueue[scbIndex].pTailPosition = 0; + gSimpleDataQueue[scbIndex].nTotalAvailableData = 0; + return; + } + + // Here the available data buffer length is more than the requested + // transfer size. + nCheckForWrapAround = (gSimpleDataQueue[scbIndex].pHeadPosition + + cyDataBuffer->length); + // Copy the data. + if (nCheckForWrapAround <= nMaxBufferSize ) + { + memcpy(cyDataBuffer->buffer, buffer, cyDataBuffer->length); + cyDataBuffer->transferCount = cyDataBuffer->length; + gSimpleDataQueue[scbIndex].pHeadPosition += cyDataBuffer->length; + } + else { + + // Queue Wrap around occurred. + UINT16 bufferLen1 = nMaxBufferSize - (gSimpleDataQueue[scbIndex].pHeadPosition); + UINT16 bufferLen2 = cyDataBuffer->length - bufferLen1; + memcpy(cyDataBuffer->buffer, buffer, bufferLen1); + buffer = &gSimpleDataQueue[scbIndex].cyDataQueue[0]; + memcpy(cyDataBuffer->buffer+bufferLen1, buffer, bufferLen2); + cyDataBuffer->transferCount = (bufferLen1 + bufferLen2); + gSimpleDataQueue[scbIndex].pHeadPosition = (UINT8)bufferLen2; + } + + gSimpleDataQueue[scbIndex].nTotalAvailableData -= cyDataBuffer->length; + +} + +void AddDataToQueue( + UINT8 scbIndex, + UINT8* buffer, + UINT8 length + ) +{ + + UINT16 tailPos = gSimpleDataQueue[scbIndex].pTailPosition; + UINT8* bufQueue = &gSimpleDataQueue[scbIndex].cyDataQueue[tailPos]; + UINT16 nMaxBufferSize = (NO_DATA_QUEUE_PAGES * MAX_DEVICE_EP_SIZE); + + // Parameter Validation. + if (gSimpleDataQueue[scbIndex].nTotalAvailableData >= nMaxBufferSize ) return; // No space in the queue. + // Is this Invalid Parameters? + if (scbIndex > 1 || buffer == NULL || length == 0) return; + // Can this new data addition happens? + if ( (gSimpleDataQueue[scbIndex].nTotalAvailableData + length) > nMaxBufferSize ) return; + + if ((tailPos + length) <= nMaxBufferSize ) + { + // Queue doesn't need wrap around for this new data addition. + memcpy(bufQueue, buffer, length); + gSimpleDataQueue[scbIndex].nTotalAvailableData += length; + gSimpleDataQueue[scbIndex].pTailPosition += length; + return; + } + else { + // Queue Wrap around occurred. + UINT16 bufferLen1 = nMaxBufferSize - (gSimpleDataQueue[scbIndex].pTailPosition); + UINT16 bufferLen2 = length - bufferLen1; + memcpy(bufQueue, buffer, bufferLen1); + bufQueue = &gSimpleDataQueue[scbIndex].cyDataQueue[0]; + memcpy(bufQueue, buffer+bufferLen1, bufferLen2); + gSimpleDataQueue[scbIndex].pTailPosition = (UINT8)bufferLen2; + gSimpleDataQueue[scbIndex].nTotalAvailableData += length; + } + +} + +/* + This API gets the current UART configuration of the + device.Such as GPIO's assigned, flowcontrol, BaudRate + etc. + */ +CY_RETURN_STATUS CyGetUartConfig ( + CY_HANDLE handle, + PCY_UART_CONFIG uartConfig + ) +{ + UINT16 wValue, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + int rStatus; + CY_DEVICE *device; + CyUsUartConfig_t localUartConfig; + libusb_device_handle *devHandle; + UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT; + UINT8 scbIndex = 0; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle..Function is %s\n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + if (uartConfig == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid input parameter..Function is %s\n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_UART){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid device type needs to be uart..Function is %s\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + if (device->interfaceNum > 0) + scbIndex = 1; + bmRequestType = CY_VENDOR_REQUEST_DEVICE_TO_HOST; + bmRequest = CY_UART_GET_CONFIG_CMD; + wValue = (scbIndex << CY_SCB_INDEX_POS); + wIndex = 0; + wLength = CY_UART_CONFIG_LEN; + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, (unsigned char*)&localUartConfig, wLength, ioTimeout); + //Since we are not exposing all the configuration elements + //parse and fill only relevant elements. + if (rStatus == CY_UART_CONFIG_LEN){ + uartConfig->dataWidth = localUartConfig.dataWidth; + uartConfig->baudRate = localUartConfig.baudRate; + uartConfig->stopBits = localUartConfig.stopBits; + uartConfig->parityMode = (CY_UART_PARITY_MODE)localUartConfig.parity;; + uartConfig->isDropOnRxErrors = localUartConfig.rxIgnoreError; + //We are currently ignoring rest of the bits + CY_DEBUG_PRINT_INFO ("CY:Successfully read UART Config\n"); + return CY_SUCCESS; + } + else{ + CY_DEBUG_PRINT_ERROR ("CY:Error in reading UART config ... Libusb Error is %d \n", rStatus); + return CY_ERROR_REQUEST_FAILED; + } +} +/* + This API sets the current UART configuration of the + device.Such as GPIO's assigned, flowcontrol, BaudRate + etc. + */ +CY_RETURN_STATUS CySetUartConfig ( + CY_HANDLE handle, + CY_UART_CONFIG *uartConfig + ) +{ + UINT16 wValue, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + int rStatus; + CyUsUartConfig_t localUartConfig; + CY_DEVICE *device; + libusb_device_handle *devHandle; + UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT; + UINT8 scbIndex = 0; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle..Function is %s\n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + if (uartConfig == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid input parameter..Function is %s\n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + if (uartConfig->dataWidth < 7 || uartConfig->dataWidth > 8){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid input parameter..Function is %s\n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + if (uartConfig->stopBits < 1 || uartConfig->stopBits > 2){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid input parameter..Function is %s\n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->interfaceNum > 0) + scbIndex = 1; + if (device->deviceType != CY_TYPE_UART){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid device type needs to be uart..Function is %s\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + bmRequestType = CY_VENDOR_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_UART_SET_CONFIG_CMD; + wValue = (scbIndex << CY_SCB_INDEX_POS); + wIndex = 0; + wLength = CY_UART_CONFIG_LEN; + + memset(&gSimpleDataQueue[scbIndex], 0, sizeof(CyDataQueue)); + + memset (&localUartConfig, 0, CY_UART_CONFIG_LEN); + //Fill in rest of the UART config structure elements + //that are not exposed in API with default values + localUartConfig.baudRate = uartConfig->baudRate; + localUartConfig.dataWidth = uartConfig->dataWidth; + localUartConfig.stopBits = uartConfig->stopBits; + localUartConfig.parity = (UCHAR) uartConfig->parityMode; + localUartConfig.rxIgnoreError = uartConfig->isDropOnRxErrors; + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, (unsigned char*)&localUartConfig, wLength, ioTimeout); + if (rStatus == CY_UART_CONFIG_LEN){ + CY_DEBUG_PRINT_INFO ("CY:Successfully Set UART Config \n"); + return CY_SUCCESS; + } + else{ + CY_DEBUG_PRINT_ERROR ("CY:Error in Setting UART config ... Libusb Error is %d \n", rStatus); + return CY_ERROR_REQUEST_FAILED; + } +} +/* + This Api writes the Data to UART block of the + device. + */ +CY_RETURN_STATUS CyUartWrite ( + CY_HANDLE handle, + CY_DATA_BUFFER* writeBuffer, + unsigned int ioTimeOut + ) + +{ + int rStatus; + CY_DEVICE *device; + libusb_device_handle *devHandle; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle..Function is %s\n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + if ((writeBuffer == NULL) || (writeBuffer->buffer == NULL) || (writeBuffer->length == 0)){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid input parameters..Function is %s\n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + writeBuffer->transferCount = 0; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_UART){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid device type needs to be uart..Function is %s\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + rStatus = libusb_bulk_transfer (devHandle, device->outEndpoint, writeBuffer->buffer, writeBuffer->length, + (int *)&((writeBuffer->transferCount)), ioTimeOut); + if ((rStatus == CY_SUCCESS)) { + CY_DEBUG_PRINT_INFO ("CY: SuccessFull in Wrting Data,%d bytes were transfered \n", (writeBuffer->transferCount)); + return CY_SUCCESS; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + CY_DEBUG_PRINT_ERROR ("CY:TimeOut error ...Function is %s\n", __func__); + return CY_ERROR_IO_TIMEOUT; + } + else if (rStatus == LIBUSB_ERROR_PIPE){ + CY_DEBUG_PRINT_ERROR ("CY:Pipe error endpoint Halted ...Function is %s\n", __func__); + CyResetPipe (handle, device->outEndpoint); + return CY_ERROR_PIPE_HALTED; + } + else if (rStatus == LIBUSB_ERROR_OVERFLOW){ + CY_DEBUG_PRINT_ERROR ("CY:Error Buffer Overflow occured ...Function is %s\n", __func__); + return CY_ERROR_BUFFER_OVERFLOW; + } + else if (rStatus == LIBUSB_ERROR_NO_DEVICE) { + CY_DEBUG_PRINT_ERROR ("CY: Device Disconnected .... Function is %s\n", __func__); + return CY_ERROR_DEVICE_NOT_FOUND; + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Unknown error ....Libusb error is %d Function is %s\n", rStatus, __func__); + return CY_ERROR_REQUEST_FAILED; + } +} +/* + This Api Reads the Data from UART block of the + device. + */ +CY_RETURN_STATUS CyUartRead ( + CY_HANDLE handle, + CY_DATA_BUFFER* readBuffer, + unsigned int ioTimeOut + ) + +{ + int rStatus; + CY_DEVICE *device; + libusb_device_handle *devHandle; + UINT32 length, totalRead = 0, newIoTimeout = ioTimeOut, elapsedTime; + int transferCount; + UCHAR *buffer; + struct timeval startTime; + UINT8 scbIndex = 0; + UINT8 cyTempBuffer[64]; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle..Function is %s\n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + if ((readBuffer == NULL) || (readBuffer->buffer == NULL) || (readBuffer->length == 0)){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid input parameters..Function is %s\n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + length = readBuffer->length; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + readBuffer->transferCount = 0; + if (device->deviceType != CY_TYPE_UART){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid device type needs to be uart..Function is %s\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + + if (device->interfaceNum > 0) + scbIndex = 1; + + if (gSimpleDataQueue[scbIndex].nTotalAvailableData > 0 ) + { + // We already have the data read from the device. + // Provide this data to the API. + GetDataFromTheQueue(scbIndex, readBuffer); + if (readBuffer->length == readBuffer->transferCount) return CY_SUCCESS; + totalRead = readBuffer->transferCount; + length = (length - totalRead); + } + + + //Collect all the data in low baud rate for uart. As we get data in short packet + do { + // buffer will be pointing to new pointer + buffer = &(readBuffer->buffer[totalRead]); + //Start the tick + gettimeofday(&startTime, NULL); + rStatus = libusb_bulk_transfer (devHandle, device->inEndpoint, cyTempBuffer, MAX_DEVICE_EP_SIZE, + &transferCount, newIoTimeout); + elapsedTime = getUartLapsedTime(startTime); + //Get the new timeout. + newIoTimeout = newIoTimeout - elapsedTime; + + if (transferCount <= length ) { + //Initialise totalRead to initially read + bytes returned now + totalRead += transferCount; + //length will initial length - transferCount + length = (length - transferCount); + memcpy(buffer, cyTempBuffer, transferCount); + } + else { + totalRead += length; + memcpy(buffer, cyTempBuffer, length); + AddDataToQueue(scbIndex, cyTempBuffer+length, (transferCount - length)); + length = 0; + } + + }while ((rStatus == CY_SUCCESS) && (totalRead != readBuffer->length) && (newIoTimeout > 0)); + if (newIoTimeout <= 0 && totalRead != readBuffer->length) + rStatus = LIBUSB_ERROR_TIMEOUT; + if (rStatus == CY_SUCCESS){ + //CY_DUMP_DATA (readBuffer->buffer, readBuffer->transferCount); + readBuffer->transferCount = totalRead; + CY_DEBUG_PRINT_INFO ("CY: SuccessFull in Reading Data,%d bytes were transfered \n", (readBuffer->transferCount)); + return CY_SUCCESS; + } + else if (rStatus == LIBUSB_ERROR_TIMEOUT){ + readBuffer->transferCount = totalRead; + CY_DEBUG_PRINT_ERROR ("CY:TimeOut error... Function is %s\n", __func__); + return CY_ERROR_IO_TIMEOUT; + } + else if (rStatus == LIBUSB_ERROR_PIPE){ + readBuffer->transferCount = totalRead; + CY_DEBUG_PRINT_ERROR ("CY:Pipe error endpoint Halted ...Function is %s\n", __func__); + CyResetPipe (handle, device->inEndpoint); + return CY_ERROR_PIPE_HALTED; + } + else if (rStatus == LIBUSB_ERROR_OVERFLOW){ + readBuffer->transferCount = totalRead; + CY_DEBUG_PRINT_ERROR ("CY:Error Buffer Overflow occured ...Function is %s\n", __func__); + return CY_ERROR_BUFFER_OVERFLOW; + } + else if (rStatus == LIBUSB_ERROR_NO_DEVICE) { + readBuffer->transferCount = totalRead; + CY_DEBUG_PRINT_ERROR ("CY: Device Disconnected ....Function is %s\n", __func__); + return CY_ERROR_DEVICE_NOT_FOUND; + } + else { + readBuffer->transferCount = totalRead; + CY_DEBUG_PRINT_ERROR ("CY: Unknown error ....Libusb error is %d Function is %s\n", rStatus, __func__); + return CY_ERROR_REQUEST_FAILED; + } +} +/* + This Api sets the hardware flow control + */ +CY_RETURN_STATUS CyUartSetHwFlowControl ( + CY_HANDLE handle, + CY_FLOW_CONTROL_MODES mode + ) + +{ + UINT16 wValue = 0, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + int rStatus, ioTimeout = CY_USB_SERIAL_TIMEOUT ; + CY_DEVICE *device; + libusb_device_handle *devHandle; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle..Function is %s\n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + if (mode < 0 || mode > 3){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid parameter..Function is %s\n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_UART){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid device type needs to be uart..Function is %s\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + bmRequestType = CY_CLASS_INTERFACE_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_UART_SET_FLOW_CONTROL_CMD; + wValue |= mode; + wIndex = device->interfaceNum; + wLength = 0; + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, NULL, wLength, ioTimeout); + if (rStatus < 0){ + CY_DEBUG_PRINT_ERROR ("CY:Error in setting uart flow control ... Libusb Error is %d \n", rStatus); + return CY_ERROR_REQUEST_FAILED; + } + device->uartFlowControlMode = mode; + return CY_SUCCESS; +} +/* +Api gets the current flow control mode +*/ +CY_RETURN_STATUS CyUartGetHwFlowControl ( + CY_HANDLE handle, + CY_FLOW_CONTROL_MODES *mode + ) +{ + CY_DEVICE *device; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle..Function is %s\n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + if (mode == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid input parameters..Function is %s\n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + device = (CY_DEVICE *)handle; + if (device->deviceType != CY_TYPE_UART){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid device type needs to be uart..Function is %s\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + (*mode) = device->uartFlowControlMode; + return CY_SUCCESS; +} +/* The API is used to break +*/ +CYWINEXPORT CY_RETURN_STATUS CyUartSetBreak( + CY_HANDLE handle, /*Valid handle to communicate with device*/ + UINT16 timeout /*Break timeout value in milliseconds */ + ) +{ + UINT16 wValue = 0, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + int rStatus, ioTimeout = CY_USB_SERIAL_TIMEOUT ; + CY_DEVICE *device; + libusb_device_handle *devHandle; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle..Function is %s\n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_UART){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid device type needs to be uart..Function is %s\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + bmRequestType = CY_CLASS_INTERFACE_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_UART_SEND_BREAK_CMD; + wValue = timeout; + wIndex = device->interfaceNum; + wLength = 0; + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, NULL, wLength, ioTimeout); + if (rStatus != LIBUSB_SUCCESS){ + CY_DEBUG_PRINT_ERROR ("CY:Error in setting break ... Libusb Error is %d \n", rStatus); + return CY_ERROR_REQUEST_FAILED; + } + return CY_SUCCESS; +} +/* + This Api sets the RTS UART pins High + */ +CY_RETURN_STATUS CyUartSetRts ( + CY_HANDLE handle + ) +{ + UINT16 wValue = 0, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + int rStatus; + UINT32 ioTimeout = CY_USB_SERIAL_TIMEOUT; + CY_DEVICE *device; + libusb_device_handle *devHandle; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle..Function is %s\n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_UART){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid device type needs to be uart..Function is %s\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + bmRequestType = CY_CLASS_INTERFACE_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_SET_LINE_CONTROL_STATE_CMD; + wValue |= (1 << 1) | (device->dtrValue); + wIndex = device->interfaceNum; + wLength = 0; + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, NULL, wLength, ioTimeout); + if (rStatus == CY_SUCCESS){ + device->rtsValue = 1; + return CY_SUCCESS; + } + else { + CY_DEBUG_PRINT_ERROR ("CY:Error in setting RTS of UART ... Libusb Error is %d \n", rStatus); + return CY_ERROR_REQUEST_FAILED; + } +} +/* + This Api clears the RTS UART pin and makes it low + */ +CY_RETURN_STATUS CyUartClearRts ( + CY_HANDLE handle + ) +{ + UINT16 wValue = 0, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + int rStatus, ioTimeout = CY_USB_SERIAL_TIMEOUT ; + CY_DEVICE *device; + libusb_device_handle *devHandle; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle..Function is %s\n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_UART){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid device type needs to be uart..Function is %s\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + bmRequestType = CY_CLASS_INTERFACE_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_SET_LINE_CONTROL_STATE_CMD; + wValue = (device->dtrValue); + wIndex = device->interfaceNum; + wLength = 0; + + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, NULL, wLength, ioTimeout); + if (rStatus == CY_SUCCESS){ + device->rtsValue = 0; + return CY_SUCCESS; + } + else { + CY_DEBUG_PRINT_ERROR ("CY:Error in clearing RTS of UART ... Libusb Error is %d \n", rStatus); + return CY_ERROR_REQUEST_FAILED; + } +} +/* + This Api sets the DTR UART pin High + */ +CY_RETURN_STATUS CyUartSetDtr ( + CY_HANDLE handle + ) + +{ + UINT16 wValue = 0, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + int rStatus, ioTimeout = CY_USB_SERIAL_TIMEOUT ; + CY_DEVICE *device; + libusb_device_handle *devHandle; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle..Function is %s\n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType != CY_TYPE_UART){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid device type needs to be uart..Function is %s\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + bmRequestType = CY_CLASS_INTERFACE_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_SET_LINE_CONTROL_STATE_CMD; + wValue = ((device->rtsValue) << 1) | 1; + wIndex = device->interfaceNum; + wLength = 0; + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, NULL, wLength, ioTimeout); + if (rStatus == CY_SUCCESS){ + device->dtrValue = 1; + return CY_SUCCESS; + } + else { + CY_DEBUG_PRINT_ERROR ("CY:Error in setting DTR of UART ... Libusb Error is %d \n", rStatus); + return CY_ERROR_REQUEST_FAILED; + } +} + +/* + This Api clears the DTR UART pin and makes it low + */ + +CY_RETURN_STATUS CyUartClearDtr ( + CY_HANDLE handle + ) +{ + UINT16 wValue = 0, wIndex, wLength; + UINT8 bmRequestType, bmRequest; + int rStatus, ioTimeout = CY_USB_SERIAL_TIMEOUT ; + CY_DEVICE *device; + libusb_device_handle *devHandle; + + if (handle == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid handle..Function is %s\n", __func__); + return CY_ERROR_INVALID_HANDLE; + } + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + + if (device->deviceType != CY_TYPE_UART){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid device type needs to be uart..Function is %s\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + + bmRequestType = CY_CLASS_INTERFACE_REQUEST_HOST_TO_DEVICE; + bmRequest = CY_SET_LINE_CONTROL_STATE_CMD; + wValue = ((device->rtsValue) << 1); + wIndex = device->interfaceNum; + wLength = 0; + + rStatus = libusb_control_transfer (devHandle, bmRequestType, bmRequest, + wValue, wIndex, NULL, wLength, ioTimeout); + if (rStatus == CY_SUCCESS){ + device->dtrValue = 0; + return CY_SUCCESS; + } + else{ + CY_DEBUG_PRINT_ERROR ("CY:Error in function %s... Libusb Error is %d \n",__func__, rStatus); + return CY_ERROR_REQUEST_FAILED; + } +} diff --git a/CyUSBSerial_SDK_Linux/linux/library/cyusb.c b/CyUSBSerial_SDK_Linux/linux/library/cyusb.c new file mode 100644 index 0000000..204b235 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/linux/library/cyusb.c @@ -0,0 +1,630 @@ +/* + * USB routines of Cypress USB Serial + * Copyright (C) 2013 Cypress Semiconductor + * + * 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 "CyUSBCommon.h" + +static bool glDriverInit = false; +static libusb_device **glDeviceList; +static UINT32 glNumDevices; +/*The API initializes the Libusb library +*/ +pthread_mutex_t criticalSection; +CY_RETURN_STATUS CyLibraryInit () +{ + UINT32 rStatus; + rStatus = libusb_init (NULL); + + if (glDriverInit != true){ + if (rStatus != LIBUSB_SUCCESS){ + CY_DEBUG_PRINT_ERROR ("CY:Driver Init Failed ...\n"); + return CY_ERROR_DRIVER_INIT_FAILED; + } + glNumDevices = libusb_get_device_list (NULL, &glDeviceList); + if (glNumDevices < 0){ + CY_DEBUG_PRINT_ERROR ("CY:Building device list Failed ...\n"); + glNumDevices = -1; + return CY_ERROR_DRIVER_INIT_FAILED; + } + pthread_mutex_init (&criticalSection, NULL); + glDriverInit = true; + return CY_SUCCESS; + } + else{ + CY_DEBUG_PRINT_ERROR ("CY:Error ... library already initialized \n"); + return CY_ERROR_DRIVER_INIT_FAILED; + } +} +/* + This API needs to be called after Calling CyGetListofDevices. + */ +CY_RETURN_STATUS CyLibraryExit () +{ + if (glDriverInit == true){ + if (glNumDevices >= 0) + libusb_free_device_list (glDeviceList, 1); + //This is to avoid loss of device handle issue with respect to libusb context. + //libusb_exit (NULL); + glDriverInit = false; + pthread_mutex_destroy (&criticalSection); + return CY_SUCCESS; + } + CY_DEBUG_PRINT_ERROR ("CY:Error ... Library not initialized \n"); + return CY_ERROR_REQUEST_FAILED; +} +/* + * This function Gets the number of all the devices currently + * Connected to the host (It includes Cypress Device as well as + * no Cypress Devices connected) + */ +CY_RETURN_STATUS CyGetListofDevices ( + UINT8 *numDevices + ) +{ + // Use this variable to call libusb_close and exit of the application + if (numDevices == NULL) + return CY_ERROR_INVALID_PARAMETER; + if (!glDriverInit){ + CY_DEBUG_PRINT_ERROR ("CY:Error Library not initialised ...function is %s\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + pthread_mutex_lock (&criticalSection); + libusb_free_device_list (glDeviceList, 1); + glNumDevices = (*numDevices) = libusb_get_device_list (NULL, &glDeviceList); + pthread_mutex_unlock (&criticalSection); + if (glNumDevices < 0){ + CY_DEBUG_PRINT_ERROR ("CY:Building device list Failed ...function is %s\n", __func__); + glNumDevices = -1; + (*numDevices) = -1; + return CY_ERROR_REQUEST_FAILED; + } + return CY_SUCCESS; +} +/* This function gets all the neccessary info such as VID,PID, + String Descriptors and if is a cypress serial device you will + get the info on class and device type + */ +CY_RETURN_STATUS CyGetDeviceInfo ( + UINT8 deviceNumber, + CY_DEVICE_INFO *deviceInfo + ) +{ + struct libusb_device_descriptor deviceDesc; + UINT32 rStatus, numInterfaces; + UINT8 iManufacturer, iProduct, iSerial; + libusb_device *usbDevice;; + struct libusb_config_descriptor *configDesc; + libusb_device_handle *devHandle; + + // Get the list of descriptor info for the device + if (glDriverInit == false){ + CY_DEBUG_PRINT_ERROR ("CY:Error Library not initialised ...function is %s\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + if (deviceInfo == NULL) + return CY_ERROR_INVALID_PARAMETER; + pthread_mutex_lock (&criticalSection); + if (deviceNumber >= glNumDevices){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid device number... \n"); + pthread_mutex_unlock (&criticalSection); + return CY_ERROR_INVALID_PARAMETER; + } + usbDevice = glDeviceList[deviceNumber]; + rStatus = libusb_get_device_descriptor (usbDevice, &deviceDesc); + if (rStatus != LIBUSB_SUCCESS){ + CY_DEBUG_PRINT_ERROR ("CY:Error ... unable to retrieve device descriptor \n"); + pthread_mutex_unlock (&criticalSection); + return CY_ERROR_DEVICE_INFO_FETCH_FAILED; + } + + deviceInfo->vidPid.vid = deviceDesc.idVendor; + deviceInfo->vidPid.pid = deviceDesc.idProduct; + // Get the all the index of the String descriptors so that it can be used + // to retrieve the string descriptor info. + iManufacturer = deviceDesc.iManufacturer; + iProduct = deviceDesc.iProduct; + iSerial = deviceDesc.iSerialNumber; + //Get the Device handle so that we can communicate with the device retreiving + // descriptor info + deviceInfo->manufacturerName[0] = '\0'; + deviceInfo->productName[0] = '\0'; + deviceInfo->serialNum[0] = '\0'; + rStatus = libusb_open (usbDevice, &devHandle); + if (rStatus == LIBUSB_ERROR_ACCESS){ + CY_DEBUG_PRINT_ERROR ("CY:Error ...Insufficient permission... Libusb error is %d \n", rStatus); + pthread_mutex_unlock (&criticalSection); + return CY_ERROR_ACCESS_DENIED; + } + else if (rStatus != CY_SUCCESS){ + CY_DEBUG_PRINT_ERROR ("CY:Error in opening the device... Libusb error is %d \n", rStatus); + pthread_mutex_unlock (&criticalSection); + return CY_ERROR_DEVICE_INFO_FETCH_FAILED; + } + if (iManufacturer > 0){ + rStatus = libusb_get_string_descriptor_ascii (devHandle, iManufacturer, deviceInfo->manufacturerName, 256); + if (rStatus <= LIBUSB_SUCCESS){ + CY_DEBUG_PRINT_ERROR ("CY:Error in Getting Manufacturer name Error is <%x> \n", rStatus); + } + } + if (iProduct > 0){ + rStatus = libusb_get_string_descriptor_ascii (devHandle, iProduct, deviceInfo->productName, 256); + if (rStatus <= LIBUSB_SUCCESS){ + CY_DEBUG_PRINT_ERROR ("CY:Error in Getting product name Error is <%d> \n", rStatus); + } + } + if (iSerial > 0){ + rStatus = libusb_get_string_descriptor_ascii (devHandle, iSerial, deviceInfo->serialNum, 256); + if (rStatus <= LIBUSB_SUCCESS){ + CY_DEBUG_PRINT_ERROR ("CY:Error in Getting Serial name <%d>\n", rStatus); + } + } + rStatus = libusb_get_config_descriptor (usbDevice, 0, &configDesc); + if (rStatus == LIBUSB_SUCCESS){ + UINT32 index_i = 0; + const struct libusb_interface *interface; + numInterfaces = configDesc->bNumInterfaces; + deviceInfo->numInterfaces = numInterfaces; + interface = configDesc->interface; + while ((numInterfaces) && (index_i < CY_MAX_DEVICE_INTERFACE)){ + deviceInfo->deviceClass[index_i] = (CY_DEVICE_CLASS)interface->altsetting->bInterfaceClass; + if (deviceInfo->deviceClass[index_i] == CY_CLASS_VENDOR){ + deviceInfo->deviceType[index_i] = (CY_DEVICE_CLASS)interface->altsetting->bInterfaceSubClass; + } + else + deviceInfo->deviceType[index_i] = CY_TYPE_DISABLED; + index_i++; + numInterfaces--; + interface++; + } + libusb_free_config_descriptor(configDesc); + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in Getting config descriptor ...Libusb error is %d \n", rStatus); + if (devHandle) + libusb_close (devHandle); + pthread_mutex_unlock (&criticalSection); + return CY_ERROR_DEVICE_INFO_FETCH_FAILED; + } + if (devHandle) + libusb_close (devHandle); + pthread_mutex_unlock (&criticalSection); + return CY_SUCCESS; +} +/* This function gets all the neccessary info such as VID,PID, + String Descriptors and if is a cypress serial device you will + get the info on class and device type + */ +CY_RETURN_STATUS CyGetDeviceInfoVidPid ( + CY_VID_PID vidPid, + UINT8 *deviceNumber, + PCY_DEVICE_INFO deviceInfoList, + UINT8 *deviceCount, + UINT8 infoListLength + ) +{ + struct libusb_device_descriptor deviceDesc; + UINT32 rStatus = CY_ERROR_DRIVER_INIT_FAILED, numInterfaces, index = 0, devNum; + uint8_t iManufacturer, iProduct, iSerial; + libusb_device *usbDevice; + struct libusb_config_descriptor *configDesc; + libusb_device_handle *devHandle = NULL; + PCY_DEVICE_INFO deviceInfo; + + if (glDriverInit == false){ + CY_DEBUG_PRINT_ERROR ("CY:Error Library not initialised ...function is %s\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + if ((infoListLength) < 1){ + CY_DEBUG_PRINT_ERROR ("CY:Error invalid device info list length specified should be > 0 .. function is %s\n", __func__); + return CY_ERROR_INVALID_PARAMETER; + } + if (deviceNumber == NULL || deviceInfoList == NULL || deviceCount == NULL) + return CY_ERROR_INVALID_PARAMETER; + // Get the list of descriptor info for the device + (*deviceCount) = 0; + pthread_mutex_lock (&criticalSection); + for (devNum = 0; devNum < glNumDevices; devNum++) { + //We are making sure that we do not overrun + //the list. + deviceInfo = &(deviceInfoList [index]); + usbDevice = glDeviceList[devNum]; + rStatus = libusb_get_device_descriptor (usbDevice, &deviceDesc); + if (rStatus != LIBUSB_SUCCESS){ + CY_DEBUG_PRINT_ERROR ("CY:Error in getting device descriptor for device-%d... Libusb Error is %d \n", devNum, rStatus); + pthread_mutex_unlock (&criticalSection); + return CY_ERROR_DEVICE_INFO_FETCH_FAILED; + } + if ((deviceDesc.idVendor != vidPid.vid) || (deviceDesc.idProduct != vidPid.pid)){ + continue; + } + (*deviceCount)++; + if (index > infoListLength){ + continue; + } + rStatus = libusb_open (usbDevice, &devHandle); + if (rStatus == LIBUSB_ERROR_ACCESS){ + CY_DEBUG_PRINT_ERROR ("CY:Insufficient permission ... Libusb error is %d \n", rStatus); + pthread_mutex_unlock (&criticalSection); + return CY_ERROR_ACCESS_DENIED; + } + else if (rStatus != LIBUSB_SUCCESS){ + CY_DEBUG_PRINT_ERROR ("CY:Error in Opening the Device ...Error is %d \n", rStatus); + pthread_mutex_unlock (&criticalSection); + return CY_ERROR_DEVICE_INFO_FETCH_FAILED; + } + deviceNumber[index] = devNum; + index++; + deviceInfo->vidPid.vid = deviceDesc.idVendor; + deviceInfo->vidPid.pid = deviceDesc.idProduct; + // Get all the index of the String descriptors so that it can be used + // to retrieve the string descriptor info. + iManufacturer = deviceDesc.iManufacturer; + iProduct = deviceDesc.iProduct; + iSerial = deviceDesc.iSerialNumber; + //Get the Device handle so that we can communicate with the device retreiving + // descriptor info + //Initialise manufacturer, product and serial names + deviceInfo->manufacturerName[0] = '\0'; + deviceInfo->productName[0] = '\0'; + deviceInfo->serialNum[0] = '\0'; + if (iManufacturer > 0) { + rStatus = libusb_get_string_descriptor_ascii (devHandle, iManufacturer, deviceInfo->manufacturerName, 256); + if (rStatus <= LIBUSB_SUCCESS){ + CY_DEBUG_PRINT_INFO ("CY:Error in Getting Manufacturer name Error is <%d> \n",rStatus); + } + } + if (iProduct > 0){ + rStatus = libusb_get_string_descriptor_ascii (devHandle, iProduct, deviceInfo->productName, 256); + if (rStatus <= LIBUSB_SUCCESS){ + CY_DEBUG_PRINT_INFO ("CY:Error in Getting product name Error is <%d> \n", rStatus); + } + } + if (iSerial > 0){ + rStatus = libusb_get_string_descriptor_ascii (devHandle, iSerial, deviceInfo->serialNum, 256); + if (rStatus <= LIBUSB_SUCCESS){ + CY_DEBUG_PRINT_INFO ("CY:Error in Getting Serial name <%d>\n", rStatus); + } + } + CY_DEBUG_PRINT_INFO ("Manufacturer name <%s> \nProduct Name <%s> \nserial number <%s> \n", + deviceInfo->manufacturerName,deviceInfo->productName,deviceInfo->serialNum); + rStatus = libusb_get_config_descriptor (usbDevice, 0, &configDesc); + if (rStatus == LIBUSB_SUCCESS){ + int index_i = 0; + const struct libusb_interface *interfaceDesc; + numInterfaces = configDesc->bNumInterfaces; + deviceInfo->numInterfaces = numInterfaces; + interfaceDesc = configDesc->interface; + while ((numInterfaces) && (index_i < CY_MAX_DEVICE_INTERFACE)){ + deviceInfo->deviceClass[index_i] = (CY_DEVICE_CLASS)interfaceDesc->altsetting->bInterfaceClass; + if (deviceInfo->deviceClass[index_i] == CY_CLASS_VENDOR) + deviceInfo->deviceType[index_i] = (CY_DEVICE_CLASS)interfaceDesc->altsetting->bInterfaceSubClass; + else + deviceInfo->deviceType[index_i] = CY_TYPE_DISABLED; + + index_i++; + numInterfaces--; + interfaceDesc++; + } + } + else { + CY_DEBUG_PRINT_ERROR ("CY: Error in Getting config descriptor ... Libusb Error is %d\n", rStatus); + pthread_mutex_unlock (&criticalSection); + return CY_ERROR_DEVICE_INFO_FETCH_FAILED; + } + libusb_free_config_descriptor (configDesc); + libusb_close (devHandle); + } + if ((*deviceCount) == 0) + rStatus = CY_ERROR_DEVICE_NOT_FOUND; + pthread_mutex_unlock (&criticalSection); + return rStatus; +} +/* + This API will claim the interface in the device + To make sure only claimed application speaks to device. + */ +CY_RETURN_STATUS CySelectInterface ( + CY_HANDLE handle, + UINT8 interfaceNum + ) +{ + UINT32 rStatus, numEP; + CY_DEVICE *device; + libusb_device_handle *devHandle; + libusb_device *usbDev; + struct libusb_config_descriptor *configDesc; + const struct libusb_interface *interfaceDesc; + const struct libusb_endpoint_descriptor *epDesc; + + if (handle == NULL) + return CY_ERROR_INVALID_HANDLE; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + + usbDev = libusb_get_device (devHandle); + if (usbDev == NULL){ + CY_DEBUG_PRINT_ERROR ("CY:Error Invalide handle ..function is %s\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + //Get the config descriptor and parse it to get the + //interface and endpoint descriptor + rStatus = libusb_get_config_descriptor (usbDev, 0, &configDesc); + if (rStatus != LIBUSB_SUCCESS){ + CY_DEBUG_PRINT_ERROR ("CY:Error in Getting Config Desc ...function is %s\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + interfaceDesc = configDesc->interface; + //Interface Number should be a valid one and should not exceed + // total number of interfaces + if (interfaceNum >= configDesc->bNumInterfaces){ + CY_DEBUG_PRINT_ERROR ("CY:Interface Number not valid... \n"); + libusb_free_config_descriptor (configDesc); + return CY_ERROR_REQUEST_FAILED; + } + if (libusb_kernel_driver_active (devHandle, interfaceNum)){ + CY_DEBUG_PRINT_ERROR ("CY:Kernel driver active on the interface number %d \n", interfaceNum);; + //User can uncomment this section if needed. +#ifdef CY_DETACH_KERNEL_DRIVER + if (!libusb_detach_kernel_driver (devHandle, interfaceNum)){ + CY_DEBUG_PRINT_ERROR ("CY:Kernel driver detach failed %d\n", interfaceNum); + return CY_ERROR_REQUEST_FAILED; + } +#else + return CY_ERROR_REQUEST_FAILED; +#endif + } + rStatus = libusb_claim_interface (devHandle, interfaceNum); + if (rStatus != LIBUSB_SUCCESS){ + CY_DEBUG_PRINT_ERROR ("CY:Error in claiming interface -interface num %d... Libusb error is %d \n", interfaceNum, rStatus); + return CY_ERROR_REQUEST_FAILED; + } + device->interfaceNum = interfaceNum; + while (interfaceNum--) + interfaceDesc++; + + epDesc = interfaceDesc->altsetting->endpoint; + numEP = interfaceDesc->altsetting->bNumEndpoints; + device->numEndpoints = numEP; + // Check the total number of endpoints interface has + // and get all the endpoint add + CY_DEBUG_PRINT_INFO ("CY:Info The total number of endpoints are %d \n", numEP); + while (numEP){ + if (epDesc->bmAttributes == 0x2){ //Bulk EP checking + if (epDesc->bEndpointAddress & 0x80) + device->inEndpoint = epDesc->bEndpointAddress; + else + device->outEndpoint = epDesc->bEndpointAddress; + } + else if (epDesc->bmAttributes == 0x3) //Interrupt EP checking (We have only one interrupt EP) + device->interruptEndpoint = epDesc->bEndpointAddress; + epDesc++; + numEP--; + } + CY_DEBUG_PRINT_INFO ("CY:Info The Endpoints are in %d and out %d and interrup %d\n", + device->inEndpoint, device->outEndpoint, device->interruptEndpoint); + libusb_free_config_descriptor (configDesc); + return CY_SUCCESS; +} +/* + * This API selects the type of the device + */ +void CySelectDeviceType (CY_DEVICE *device, libusb_device *libUsbdev, unsigned char interfaceNum) +{ + int rStatus, numInterfaces; + struct libusb_config_descriptor *configDesc; + int index = 0; + const struct libusb_interface *interfaceDesc; + device->deviceType = CY_TYPE_DISABLED; + + rStatus = libusb_get_config_descriptor (libUsbdev, 0, &configDesc); + if (0 == rStatus){ + interfaceDesc = configDesc->interface; + numInterfaces = configDesc->bNumInterfaces; + if (interfaceNum >= numInterfaces) + return; + while (index != interfaceNum) { + index++; + interfaceDesc++; + } + if (interfaceDesc->altsetting->bInterfaceClass == CY_CLASS_VENDOR) + device->deviceType = (CY_DEVICE_CLASS)interfaceDesc->altsetting->bInterfaceSubClass; + libusb_free_config_descriptor (configDesc); + } + CY_DEBUG_PRINT_INFO ("CY:Info The device type is %d \n", device->deviceType); +} +/* + The Api Gets the handle for the specified device number + (refer to usage guide and example for usage) + and this handle should be called for further communication + with the device + */ +CY_RETURN_STATUS CyOpen ( + unsigned char deviceNumber, + unsigned char interfaceNum, + CY_HANDLE *handle + ) +{ + libusb_device_handle *devHandle; + libusb_device *dev; + CY_DEVICE *device; + UINT32 rStatus; + + if (glDriverInit == false){ + CY_DEBUG_PRINT_ERROR ("CY:Error Library not initialised ...function is %s\n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + pthread_mutex_lock (&criticalSection); + if (glDriverInit == true){ + if (deviceNumber >= glNumDevices){ + CY_DEBUG_PRINT_ERROR ("CY:Error ... Invalid device number ... \n"); + pthread_mutex_unlock (&criticalSection); + return CY_ERROR_INVALID_PARAMETER; + } + dev = glDeviceList [deviceNumber]; + rStatus = libusb_open (dev, &devHandle); + if (rStatus == LIBUSB_ERROR_ACCESS){ + CY_DEBUG_PRINT_ERROR ("CY:Error in opening the device ..Access denied \n"); + handle = NULL; + pthread_mutex_unlock (&criticalSection); + return CY_ERROR_ACCESS_DENIED; + } + if (rStatus != LIBUSB_SUCCESS){ + CY_DEBUG_PRINT_ERROR ("CY:Error in Opening the Device ...Error is %d \n", rStatus); + handle = NULL; + pthread_mutex_unlock (&criticalSection); + return CY_ERROR_DRIVER_OPEN_FAILED; + } + device = (CY_DEVICE *)malloc(sizeof (CY_DEVICE)); + if (device == NULL){ + pthread_mutex_unlock (&criticalSection); + return CY_ERROR_ALLOCATION_FAILED; + } + device->devHandle = devHandle; + (*handle) = device; + rStatus = CySelectInterface (device, interfaceNum); + if (rStatus != CY_SUCCESS){ + libusb_close (devHandle); + free (device); + pthread_mutex_unlock (&criticalSection); + return CY_ERROR_DRIVER_OPEN_FAILED; + } + CySelectDeviceType (device, dev, interfaceNum); + if (device->deviceType == CY_TYPE_UART) { + CyUartSetRts (*handle); + CyUartSetDtr (*handle); + if (!CyUartSetHwFlowControl (*handle, CY_UART_FLOW_CONTROL_DISABLE)) + device->uartFlowControlMode = CY_UART_FLOW_CONTROL_DISABLE; + } + //initialising structure elements + device->spiThreadId = (pthread_t)0; + device->uartThreadId = (pthread_t)0; + device->spiCancelEvent = false; + device->uartCancelEvent = false; + device->spiTransfer = NULL; + device->uartTransfer = NULL; + if (pthread_mutex_init (&device->readLock, NULL)){ + CY_DEBUG_PRINT_ERROR ("CY:Error initializing the read mutex .. Function is %s \n", __func__); + libusb_close (devHandle); + free (device); + pthread_mutex_unlock (&criticalSection); + return CY_ERROR_DRIVER_OPEN_FAILED; + } + if (pthread_mutex_init (&device->writeLock, NULL)){ + CY_DEBUG_PRINT_ERROR ("CY:Error initializing the write mutex .. Function is %s \n", __func__); + libusb_close (devHandle); + free (device); + pthread_mutex_unlock (&criticalSection); + return CY_ERROR_DRIVER_OPEN_FAILED; + } + if (pthread_mutex_init (&device->notificationLock, NULL)){ + CY_DEBUG_PRINT_ERROR ("CY:Error initializing the write mutex .. Function is %s \n", __func__); + libusb_close (devHandle); + free (device); + pthread_mutex_unlock (&criticalSection); + return CY_ERROR_DRIVER_OPEN_FAILED; + } + pthread_mutex_unlock (&criticalSection); + return CY_SUCCESS; + } + else{ + CY_DEBUG_PRINT_ERROR ("CY:Error iniitalise library by calling CyLibraryInit()....function is %s\n", __func__); + return CY_ERROR_DRIVER_OPEN_FAILED; + } +} +/* + The Api Closes the handle and needs to be called only if CyGetNumDevices + or CyOpen is called + */ +CY_RETURN_STATUS CyClose ( + CY_HANDLE handle + ) +{ + CY_DEVICE *device; + libusb_device_handle *devHandle; + + if (handle == NULL) + return CY_ERROR_INVALID_HANDLE; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + if (device->deviceType == CY_TYPE_UART) { + CyUartClearRts (handle); + CyUartClearDtr (handle); + CyUartSetHwFlowControl (handle, CY_UART_FLOW_CONTROL_DISABLE); + } + if (glDriverInit == true){ + if (device->deviceType == CY_TYPE_SPI || device->deviceType == CY_TYPE_UART){ + if (device->spiThreadId != 0 || device->uartThreadId != 0){ + CyAbortEventNotification(handle); + } + } + if (pthread_mutex_destroy (&device->readLock)){ + CY_DEBUG_PRINT_ERROR ("CY:Error de initializing the read mutex .. Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + if (pthread_mutex_destroy (&device->writeLock)){ + CY_DEBUG_PRINT_ERROR ("CY:Error de initializing the write mutex .. Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + if (pthread_mutex_destroy (&device->notificationLock)){ + CY_DEBUG_PRINT_ERROR ("CY:Error de initializing the write mutex .. Function is %s \n", __func__); + return CY_ERROR_REQUEST_FAILED; + } + libusb_close ((libusb_device_handle*)devHandle); + free (device); + } + return CY_SUCCESS; +} +/* + This Api will reset the pipe and clears the endpoint + */ +CY_RETURN_STATUS CyResetPipe ( + CY_HANDLE handle, + UINT8 endPointAddress + ) +{ + UINT32 rStatus; + CY_DEVICE *device; + libusb_device_handle *devHandle; + + if (handle == NULL) + return CY_ERROR_INVALID_HANDLE; + device = (CY_DEVICE *)handle; + devHandle = device->devHandle; + + rStatus = libusb_clear_halt ((libusb_device_handle *)devHandle, endPointAddress); + if (rStatus != LIBUSB_SUCCESS){ + CY_DEBUG_PRINT_ERROR ("CY:Error in resetting the pipe ... \n"); + return CY_ERROR_REQUEST_FAILED; + } + return CY_SUCCESS; +} +/* + This Api will get the library version,patch + and build number + */ +CY_RETURN_STATUS CyGetLibraryVersion ( + CY_HANDLE handle, + PCY_LIBRARY_VERSION version + ) +{ + version->majorVersion = CY_US_VERSION_MAJOR; + version->minorVersion = CY_US_VERSION_MINOR; + version->patch = CY_US_VERSION_PATCH; + version->buildNumber = CY_US_VERSION_BUILD; + return CY_SUCCESS; +} diff --git a/CyUSBSerial_SDK_Linux/linux/library/libcyusbserial.so b/CyUSBSerial_SDK_Linux/linux/library/libcyusbserial.so new file mode 100644 index 0000000..09240c7 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/linux/library/libcyusbserial.so @@ -0,0 +1 @@ +libcyusbserial.so.1 \ No newline at end of file diff --git a/CyUSBSerial_SDK_Linux/linux/library/libcyusbserial.so.1 b/CyUSBSerial_SDK_Linux/linux/library/libcyusbserial.so.1 new file mode 100755 index 0000000000000000000000000000000000000000..1356196efb53734b1c2f7c0c9833a6d0c6d928b2 GIT binary patch literal 98840 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 YJn8X+%tN{Mjg%^XJ^X>r%iI3{2Ud9~V*mgE literal 0 HcmV?d00001 diff --git a/CyUSBSerial_SDK_Linux/linux/testUtility/90-cyusb.rules b/CyUSBSerial_SDK_Linux/linux/testUtility/90-cyusb.rules new file mode 100644 index 0000000..4494809 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/linux/testUtility/90-cyusb.rules @@ -0,0 +1,5 @@ +# Cypress USB driver for FX2 and FX3 (C) Cypress Semiconductor Corporation / ATR-LABS +# Rules written by V. Radhakrishnan ( rk@atr-labs.com ) +# Cypress USB vendor ID = 0x04b4 +KERNEL=="*", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ACTION=="add", ATTR{idVendor}=="04b4", MODE="666", TAG="cyusb_dev", RUN+="/usr/bin/CyUSBSerial.sh A" +KERNEL=="*", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ACTION=="remove", TAG=="cyusb_dev", RUN+="/usr/bin/CyUSBSerial.sh R" diff --git a/CyUSBSerial_SDK_Linux/linux/testUtility/CyUSBSerial.sh b/CyUSBSerial_SDK_Linux/linux/testUtility/CyUSBSerial.sh new file mode 100644 index 0000000..b2a4265 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/linux/testUtility/CyUSBSerial.sh @@ -0,0 +1,7 @@ +#!/bin/bash +pid=`pidof CyUSBSerialTestUtility` + +if [ "$pid" ]; then + kill -s SIGUSR1 $pid +fi + diff --git a/CyUSBSerial_SDK_Linux/linux/testUtility/CyUSBSerialTestUtility b/CyUSBSerial_SDK_Linux/linux/testUtility/CyUSBSerialTestUtility new file mode 100755 index 0000000000000000000000000000000000000000..c6c7ef4bf24f608ba49bca9581d547a7ccd929be GIT binary patch literal 27904 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 Source file of the command line test utility +2. 90-cyusb.rules ==> udev rules for changing the mode of usb device node. +3. CyUSBSerial.sh ==> Script file for implementing hotplug feature in linux. +4. Makefile ==> make file for compiling and installing the application. +================================================================================ + + +Pre-requisites: +================================================================================ +1. libusb-1.0.9 is required for compilation and functioning of the APIs in the + USB Serial library. +2. The CyUSBSerial library (libcyusbserial.so) should be compiled and installed + on the test machine. +3. GNU Make and the GCC tool-chain are used for the build process. +================================================================================ + +Installation steps: +================================================================================ +1. Change to the folder where the utility source files are extracted. +2. Invoke 'make' to build compile the utility, and to install the configuration + files at the appropriate locations. This should be done from a super-user + (sudo) shell, because the configuration files need to be copied into system + folders (/usr/local/bin). +3. Use the CyUSBSerial command to start the test utility. + +Note: +The udev daemon needs to be restarted to reflect the udev rule changes that +are installed as part of the make command. +================================================================================ + +Using the test utility: +================================================================================ +1. On starting the utility, the Cypress USB Serial devices that are connected + are listed along with their device numbers, interface numbers and + functionalities (SPI or I2C). + + $ CyUSBSerial + ---------------------------------------------------------------------- + Device Number | VID | PID | INTERFACE NUMBER | FUNCTIONALITY + ---------------------------------------------------------------------- + 0 |4b4 |a | 0 | VENDOR_I2C + 0 |4b4 |a | 1 | VENDOR_SPI + 0 |4b4 |a | 2 | NA + ---------------------------------------------------------------------- + +2. A menu providing the various operations is also printed: + ---------------------------------------------------------------------- + 1: Print list of devices + 2: Select device...No device selected !! + 3: Enter I2C/SPI Flash page address and length to write/read. + 4: Verify data + 5: Exit + ---------------------------------------------------------------------- + +3. On selecting option 2, the utility prompts for the device and interface + number to be selected for testing. + + ----------------------------------- + Enter Device number to select: + 0 + Enter interface number: + 1 + ----------------------------------- + + Once the selections are made, the menu will be updated with the details. + ---------------------------------------------------------------------- + 1: Print list of devices + 2: Change device selection--selected device: [Device number 0] : [Interface No 1] : SPI + 3: Enter I2C/SPI Flash page address and length to write/read. + 4: Verify data + 5: Exit + ---------------------------------------------------------------------- + +4. Option 3 can be selected now to do data read/write to the I2C/SPI flash + device. The utility prompts for the page address to be written as well as + the length of data to be written. + + ------------------------------------------------ + Enter Page address ... (less than 65536) + 1234 + Enter length to read/write ... (less than 256) + 32 + ------------------------------------------------ + + Length needs to be less than or equal to 256 bytes in the case of SPI access, + and less than or equal to 64 bytes in the case of I2C access. Page address + needs to be less than 65536 in case of SPI and 256 in case of I2C. + + Once the values are selected, the menu is updated with the details as below: + ------------------------------------------------------------------- + 1: Print list of devices + 2: Change device selection--selected device: [Device number 0] : [Interface No 1] : SPI + 3: Change Flash page address and length ...Entered is page address 1234 and length 123 + 4: Verify data + 5: Exit + ------------------------------------------------------------------- + +5. Selecting option 4 causes the utility to write a randomly generated data + sequence to the flash device, read it back, and verify the data read back. + + The data pattern written and read back will be displayed as shown below: + -------------------------------------------------------------------- + 67 c6 69 73 51 ff 4a ec 29 cd ba ab f2 fb e3 46 7c c2 54 f8 1b e8 e7 8d 76 5a 2e 63 33 9f c9 9a + -------------------------------------------------------------------- + Data Read back is: + --------------------------------------------------------------------- + 67 c6 69 73 51 ff 4a ec 29 cd ba ab f2 fb e3 46 7c c2 54 f8 1b e8 e7 8d 76 5a 2e 63 33 9f c9 9a + --------------------------------------------------------------------- + Data verified successfully + ------------------------------------------------------------------- + +6. The utility runs through these menu options until the user selects the + exit option (5). + +7. If a new Cypress USB Serial device is attached or an existing device is + removed while the utility is running, a notification is printed on the + console. + + --------------------------------------- + Device of interest Removed/Added + --------------------------------------- +================================================================================ + +EOF diff --git a/CyUSBSerial_SDK_Linux/linux/testUtility/Test_Utility.c b/CyUSBSerial_SDK_Linux/linux/testUtility/Test_Utility.c new file mode 100644 index 0000000..ae29923 --- /dev/null +++ b/CyUSBSerial_SDK_Linux/linux/testUtility/Test_Utility.c @@ -0,0 +1,605 @@ +/* + * Test utility + * Copyright (C) 2013 Cypress Semiconductor + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "../../common/header/CyUSBSerial.h" +#define CY_MAX_DEVICES 30 +#define CY_MAX_INTERFACES 4 + +typedef struct _CY_DEVICE_STRUCT { + int deviceNumber; + int interfaceFunctionality[CY_MAX_INTERFACES]; + bool isI2c; + bool isSpi; + int numInterface; +}CY_DEVICE_STRUCT; + +CY_DEVICE_STRUCT *glDevice; +int i2cDeviceIndex[CY_MAX_DEVICES][CY_MAX_INTERFACES]; +unsigned char *deviceNumber = NULL; +int cyDevices, i2cDevices = 0, numDevices = 0; +int selectedDeviceNum = -1, selectedInterfaceNum = -1; +bool exitApp = false; +unsigned short pageAddress = -1; +short readWriteLength = -1; +bool deviceAddedRemoved = false; +int getUserInput() +{ + char userInput[6], x; + int output,i = 0; + bool isDigit = true; + x = getchar(); + while (x != '\n'){ + if (i < 5){ + userInput[i] = x; + i++; + } + if (!isdigit(x)) + isDigit = false; + + x = getchar(); + } + userInput[i] = '\0'; + if (isDigit == false) + return -1; + output = atoi(userInput); + return output; +} +void deviceHotPlug () { + + CY_RETURN_STATUS rStatus; + deviceAddedRemoved = true; + selectedDeviceNum = -1; + selectedInterfaceNum = -1; + printf ("Device of interest Removed/Added \n"); + rStatus = CyGetListofDevices (&numDevices); + if (rStatus != CY_SUCCESS) { + printf ("CY:Error in Getting List of Devices: Error NO:<%d> \n", rStatus); + return rStatus; + } + printListOfDevices (false); +} + +int main (int argc, char **agrv) +{ + int index = 0, i, j, userInput; + int tempSelectedDeviceNum, tempSelectedInterfaceNum, tempPageAddress, tempLength; + CY_RETURN_STATUS rStatus; + signal (SIGUSR1, deviceHotPlug); + glDevice = (CY_DEVICE_STRUCT *)malloc (CY_MAX_DEVICES *sizeof (CY_DEVICE_STRUCT)); + if (glDevice == NULL){ + printf ("Memory allocation failed ...!! \n"); + return -1; + } + rStatus = CyLibraryInit (); + if (rStatus != CY_SUCCESS) { + printf ("CY:Error in Doing library init Error NO:<%d> \n", rStatus); + return rStatus; + } + rStatus = CyGetListofDevices (&numDevices); + if (rStatus != CY_SUCCESS) { + printf ("CY:Error in Getting List of Devices: Error NO:<%d> \n", rStatus); + return rStatus; + } + printListOfDevices(true); + do { + + printf ("-------------------------------------------------------------------\n"); + printf ("1: Print list of devices \n"); + if (selectedDeviceNum != -1 && selectedInterfaceNum != -1){ + printf ("2: Change device selection--selected device: [Device number %d] : [Interface No %d]",\ + selectedDeviceNum, selectedInterfaceNum); + if (glDevice[selectedDeviceNum].interfaceFunctionality[selectedInterfaceNum] == CY_TYPE_I2C) + printf (" : I2C\n"); + else if (glDevice[selectedDeviceNum].interfaceFunctionality[selectedInterfaceNum] == CY_TYPE_SPI) + printf (" : SPI\n"); + else + printf (" : NA\n"); + + } + else + printf ("2: Select device...No device selected !!\n"); + + if (readWriteLength != -1 && pageAddress != -1){ + printf ("3: Change Flash page address and length ...Entered is page address %d and length %d\n", pageAddress, readWriteLength); + printf ("4: Verify data\n5: Exit\n"); + } + else + printf ("3: Enter I2C/SPI Flash page address and length to write/read.\n4: Verify data\n5: Exit\n"); + printf ("-------------------------------------------------------------------\n"); + + userInput = getUserInput(); + if (userInput < 1 || userInput > 5){ + printf ("Wrong selection code ... Enter again \n"); + continue; + } + + switch (userInput){ + + case 1: + printListOfDevices(true); + break; + case 2: + if (cyDevices == 0) { + printf ("No device of interest connected ...!!\n"); + continue; + } + printf ("Enter Device number to be selected.. \n"); + tempSelectedDeviceNum = getUserInput(); + //printf ("Selected device number is %d \n",tempSelectedDeviceNum); + if (tempSelectedDeviceNum >= cyDevices || tempSelectedDeviceNum == -1){ + printf ("Wrong device selection \n"); + continue; + } + printf ("Enter interface number..\n"); + tempSelectedInterfaceNum = getUserInput(); + //printf ("Selected device number is %d %d\n",tempSelectedInterfaceNum, glDevice[tempSelectedDeviceNum].numInterface); + + if (tempSelectedInterfaceNum >= glDevice[tempSelectedDeviceNum].numInterface || + tempSelectedInterfaceNum == -1) { + printf ("Wrong interface Selection selection \n"); + continue; + } + if ((glDevice[tempSelectedDeviceNum].interfaceFunctionality[tempSelectedInterfaceNum] == -1)){ + printf ("Selected device does not have I2C or SPI !!! \n"); + continue; + } + if (deviceAddedRemoved == true) { + printf ("Device of interest was added/removed .... Print and select from new list\n"); + continue; + } + selectedDeviceNum = tempSelectedDeviceNum; + selectedInterfaceNum = tempSelectedInterfaceNum; + //pageAddress = -1; + //readWriteLength = -1; + break; + case 3: + if (selectedDeviceNum == -1) { + printf ("Select proper device!!! \n"); + continue; + } + if (selectedDeviceNum >= cyDevices){ + printf ("Select proper device!!! \n"); + continue; + } + if (glDevice[selectedDeviceNum].interfaceFunctionality[selectedInterfaceNum] == CY_TYPE_I2C){ + printf ("Enter Page address... (less than 256)\n"); + tempPageAddress = getUserInput(); + printf ("Enter length to read/write...(less than 64)\n"); + tempLength = getUserInput(); + if (deviceAddedRemoved == true) { + printf ("Device of interest was added/removed .... Print and select from new list\n"); + continue; + } + if (tempPageAddress > 256){ + printf ("Invalid page address ..Enter page address less than 256 (1 bytes len)\n"); + continue; + } + if (tempLength < 0 || tempLength > 64){ + printf ("Invalid Length ..Enter length less than 64 bytes\n"); + continue; + } + pageAddress = tempPageAddress; + readWriteLength = tempLength; + break; + } + if (glDevice[selectedDeviceNum].interfaceFunctionality[selectedInterfaceNum] == CY_TYPE_SPI){ + printf ("Enter Page address... (less than 65536)\n"); + tempPageAddress = getUserInput(); + printf ("Enter length to read/write...(less than 256)\n"); + tempLength = getUserInput(); + if (deviceAddedRemoved == true) { + printf ("Device of interest was added/removed .... Print and select from new list\n"); + continue; + } + if (tempPageAddress > 65536){ + printf ("Invalid page address ..Enter page address less than 65536 (1 bytes len)\n"); + continue; + } + if (tempLength < 0 || tempLength > 256){ + printf ("Invalid Length ..Enter length less than 256 bytes\n"); + continue; + } + pageAddress = tempPageAddress; + readWriteLength = tempLength; + break; + } + case 4: + if (selectedDeviceNum == -1) { + printf ("Select proper device!!! \n"); + continue; + } + if (glDevice[selectedDeviceNum].interfaceFunctionality[selectedInterfaceNum] == -1){ + printf ("Selected device does not have I2C or SPI !!! \n"); + continue; + } + if ((pageAddress == -1) || (readWriteLength == -1)){ + printf ("Select proper page address and length !!! \n"); + continue; + } + if (glDevice[selectedDeviceNum].interfaceFunctionality[selectedInterfaceNum] == CY_TYPE_I2C){ + if (pageAddress > 256){ + printf ("Invalid Page address for I2C .. need to be less than 256\n"); + continue; + } + if (readWriteLength > 64){ + printf ("Invalid read write length for I2C .. need to be less than 64\n"); + continue; + } + printf ("Calling I2C \n"); + i2cVerifyData(glDevice[selectedDeviceNum].deviceNumber, selectedInterfaceNum); + } + if (glDevice[selectedDeviceNum].interfaceFunctionality[selectedInterfaceNum] == CY_TYPE_SPI){ + spiVerifyData(glDevice[selectedDeviceNum].deviceNumber, selectedInterfaceNum); + } + break; + + case 5: + exitApp = true; + CyLibraryExit (); + break; + } + }while (exitApp == false); + free (glDevice); +} +int spiWriteEnable (CY_HANDLE handle) +{ + unsigned char wr_data,rd_data; + CY_RETURN_STATUS status = CY_SUCCESS; + CY_DATA_BUFFER writeBuf; + CY_DATA_BUFFER readBuf; + + writeBuf.buffer = &wr_data; + writeBuf.length = 1; + + readBuf.buffer = &rd_data; + readBuf.length = 1; + + wr_data = 0x06; /* Write enable */ + status = CySpiReadWrite (handle, &readBuf, &writeBuf, 5000); + if (status != CY_SUCCESS) + { + return status; + } + return status; +} +//Helper functions for doing data transfer to/from SPI flash +int spiWaitForIdle (CY_HANDLE handle) +{ + char rd_data[2], wr_data[2]; + CY_DATA_BUFFER writeBuf, readBuf; + writeBuf.length = 2; + writeBuf.buffer = (unsigned char *)wr_data; + int timeout = 0xFFFF; + CY_RETURN_STATUS status; + + readBuf.length = 2; + readBuf.buffer = (unsigned char *)rd_data; + do + { + wr_data[0] = 0x05; /* Status */ + status = CySpiReadWrite (handle, &readBuf, &writeBuf, 5000); + if (status != CY_SUCCESS) + { + break; + } + timeout--; + if (timeout == 0) + { + status = CY_ERROR_IO_TIMEOUT; + return status; + } + } while (rd_data[1] & 0x01); + return status; +} + +int spiVerifyData (int deviceNumber, int interfaceNum) +{ + CY_DATA_BUFFER dataBufferWrite,dataBufferRead; + CY_HANDLE handle; + bool isVerify = true; + unsigned char wbuffer[256 + 4], rbuffer[256 + 4]; + int rStatus, length; + + memset (rbuffer, 0x00, 256); + memset (wbuffer, 0x00, 256); + + rStatus = CyOpen (deviceNumber, interfaceNum, &handle); + if (rStatus != CY_SUCCESS){ + printf ("CY_SPI: Open failed \n"); + return rStatus; + } + dataBufferWrite.buffer = wbuffer; + dataBufferRead.buffer = rbuffer; + + rStatus = spiWaitForIdle (handle); + if (rStatus){ + printf("Error in Waiting for EEPOM active state %d \n", rStatus); + CyClose (handle); + + return CY_ERROR_REQUEST_FAILED; + } + printf ("Calling spi write enable \n"); + rStatus = spiWriteEnable (handle); + if (rStatus){ + printf("Error in setting Write Enable %d \n", rStatus); + CyClose (handle); + return CY_ERROR_REQUEST_FAILED; + } + //Write SPI write command + wbuffer[0] = 0x02; + //SPI flash address + wbuffer[1] = (pageAddress >> 8); + wbuffer[2] = (pageAddress) & 0x00FF; + wbuffer[3] = 0; + + printf ("The Data written is ...\n"); + printf ("\n--------------------------------------------------------------------\n"); + for (rStatus = 4; rStatus < (readWriteLength + 4); rStatus++){ + wbuffer[rStatus] = rand() % 256; + printf ("%x ",wbuffer[rStatus]); + } + printf ("\n--------------------------------------------------------------------\n"); + + dataBufferRead.length = (4 + readWriteLength); + dataBufferWrite.length = (4 + readWriteLength); + + rStatus = CySpiReadWrite (handle , &dataBufferRead, &dataBufferWrite, 5000); + if (rStatus != CY_SUCCESS){ + CyClose (handle); + printf ("Error in doing SPI data write data Write is %d data read is %d\n" , dataBufferWrite.transferCount,dataBufferRead.transferCount); + return CY_ERROR_REQUEST_FAILED; + } + + spiWaitForIdle (handle); + //Write SPI read command + wbuffer[0] = 0x03; + dataBufferRead.length = (4 + readWriteLength); + dataBufferWrite.length = (4 + readWriteLength); + + rStatus = CySpiReadWrite (handle, &dataBufferRead, &dataBufferWrite, 5000); + if (rStatus != CY_SUCCESS){ + CyClose (handle); + printf ("The Error is %d \n", rStatus); + printf ("Error in doing SPI data write data Write is %d data read is %d\n" , dataBufferWrite.transferCount,dataBufferRead.transferCount); + return CY_ERROR_REQUEST_FAILED; + } + printf ("Data Read back is \n"); + printf ("\n---------------------------------------------------------------------\n"); + for (rStatus = 4; rStatus < (readWriteLength + 4); rStatus++){ + printf ("%x ",rbuffer[rStatus]); + if (rbuffer[rStatus] != wbuffer[rStatus]){ + isVerify = false; + } + } + printf ("\n---------------------------------------------------------------------\n"); + if (isVerify) + printf ("Data verified successfully \n"); + else + printf ("Data corruption occured!!\n"); + + CyClose (handle); + return CY_SUCCESS; +} + +int i2cVerifyData (int deviceNumber, int interfaceNum) +{ + CY_DATA_BUFFER dataBufferWrite, dataBufferRead; + CY_HANDLE handle; + int length = 0; + bool isVerify = true; + int loopCount = 100, i; + CY_RETURN_STATUS rStatus; + unsigned char bytesPending = 0, address[2], wbuffer[66], rbuffer[66]; + CY_I2C_DATA_CONFIG i2cDataConfig; + + memset (wbuffer, 0, 66); + memset (rbuffer, 0, 66); + + i2cDataConfig.isStopBit = true; + i2cDataConfig.slaveAddress = 0x51; + + rStatus = CyOpen (deviceNumber, interfaceNum, &handle); + if (rStatus != CY_SUCCESS){ + printf("CY_I2C: Open failed \n"); + return rStatus; + } + loopCount = 100; + length = readWriteLength; + wbuffer[0]= pageAddress; + wbuffer[1] = 0; + dataBufferWrite.buffer = wbuffer; + i2cDataConfig.isStopBit = true; + dataBufferWrite.length = (length + 2); + printf ("\n Data that is written on to i2c ...\n"); + printf ("\n-----------------------------------------------------------------\n"); + for (i = 2; i < (length +2); i++){ + wbuffer[i] = rand() % 256; + printf ("%x ", wbuffer[i]); + } + printf ("\n-----------------------------------------------------------------\n"); + rStatus = CyI2cWrite (handle, &i2cDataConfig, &dataBufferWrite, 5000); + if (rStatus != CY_SUCCESS){ + printf ("Error in doing i2c write \n"); + CyClose (handle); + return -1; + } + //We encountered a error in I2C read repeat the procedure again + //Loop here untill Read vendor command passes + i2cDataConfig.isStopBit = false; + dataBufferWrite.length = 2; + + do { + rStatus = CyI2cWrite (handle, &i2cDataConfig, &dataBufferWrite, 5000); + loopCount--; + }while (rStatus != CY_SUCCESS && loopCount != 0); + + if (loopCount == 0 && rStatus != CY_SUCCESS){ + printf ("Error in sending read command \n"); + CyClose (handle); + return -1; + } + + dataBufferRead.buffer = rbuffer; + rbuffer[0]= address[0]; + rbuffer[1] = 0; + i2cDataConfig.isStopBit = true; + i2cDataConfig.isNakBit = true; + dataBufferRead.length = length; + dataBufferRead.buffer = rbuffer; + + memset (rbuffer, 0, 64); + + rStatus = CyI2cRead (handle, &i2cDataConfig, &dataBufferRead, 5000); + if (rStatus != CY_SUCCESS){ + printf ("Error in doing i2c read ... Error is %d \n", rStatus); + CyClose (handle); + return -1; + } + + printf ("\n Data that is read from i2c ...\n"); + printf ("\n-----------------------------------------------------------------\n"); + for (rStatus = 0; rStatus < length; rStatus++){ + printf ("%x ", rbuffer[rStatus]); + if (rbuffer[rStatus] != wbuffer[rStatus + 2]){ + isVerify = false; + } + } + printf ("\n-----------------------------------------------------------------\n"); + if (!isVerify) + printf ("Data corruption occured ..!!!\n"); + else + printf ("Data verified successfully \n"); + + CyClose (handle); +} +bool isCypressDevice (int deviceNum) { + CY_HANDLE handle; + unsigned char interfaceNum = 0; + unsigned char sig[6]; + CY_RETURN_STATUS rStatus; + rStatus = CyOpen (deviceNum, interfaceNum, &handle); + if (rStatus == CY_SUCCESS){ + rStatus = CyGetSignature (handle, sig); + if (rStatus == CY_SUCCESS){ + CyClose (handle); + return true; + } + else { + CyClose (handle); + return false; + } + } + else + return false; +} +void printListOfDevices (bool isPrint) +{ + int index_i = 0, index_j = 0, i, j, countOfDevice = 0, devNum; + int length, index = 0, numInterfaces, interfaceNum; + bool set1 = false; + + unsigned char deviceID[CY_MAX_DEVICES]; + unsigned char functionality[64]; + CY_DEVICE_INFO deviceInfo; + CY_DEVICE_CLASS deviceClass[CY_MAX_INTERFACES]; + CY_DEVICE_TYPE deviceType[CY_MAX_INTERFACES]; + CY_RETURN_STATUS rStatus; + + deviceAddedRemoved = false; + CyGetListofDevices (&numDevices); + //printf ("The number of devices is %d \n", numDevices); + for (i = 0; i < numDevices; i++){ + for (j = 0; j< CY_MAX_INTERFACES; j++) + glDevice[i].interfaceFunctionality[j] = -1; + } + if (isPrint){ + printf ("\n\n---------------------------------------------------------------------------------\n"); + printf ("Device Number | VID | PID | INTERFACE NUMBER | FUNCTIONALITY \n"); + printf ("---------------------------------------------------------------------------------\n"); + } + cyDevices = 0; + for (devNum = 0; devNum < numDevices; devNum++){ + rStatus = CyGetDeviceInfo (devNum, &deviceInfo); + interfaceNum = 0; + if (!rStatus) + { + if (!isCypressDevice (devNum)){ + continue; + } + strcpy (functionality, "NA"); + numInterfaces = deviceInfo.numInterfaces; + glDevice[index].numInterface = numInterfaces; + cyDevices++; + + while (numInterfaces){ + if (deviceInfo.deviceClass[interfaceNum] == CY_CLASS_VENDOR) + { + glDevice[index].deviceNumber = devNum; + switch (deviceInfo.deviceType[interfaceNum]){ + case CY_TYPE_I2C: + glDevice[index].interfaceFunctionality[interfaceNum] = CY_TYPE_I2C; + strcpy (functionality, "VENDOR_I2C"); + glDevice[index].isI2c = true; + break; + case CY_TYPE_SPI: + glDevice[index].interfaceFunctionality[interfaceNum] = CY_TYPE_SPI; + strcpy (functionality, "VENDOR_SPI"); + glDevice[index].isSpi = true; + break; + default: + strcpy (functionality, "NA"); + break; + } + } + else if (deviceInfo.deviceClass[interfaceNum] == CY_CLASS_CDC){ + strcpy (functionality, "NA"); + } + if (isPrint) { + printf ("%d |%x |%x | %d | %s\n", \ + index, \ + deviceInfo.vidPid.vid, \ + deviceInfo.vidPid.pid, \ + interfaceNum, \ + functionality \ + ); + } + interfaceNum++; + numInterfaces--; + } + index++; + } + } + if (isPrint){ + printf ("---------------------------------------------------------------------------------\n\n"); + } +} + diff --git a/libcyusbserial-master.zip b/libcyusbserial-master.zip new file mode 100644 index 0000000000000000000000000000000000000000..c844340f3597be7be9ed8a790b25aa79fd40f6be GIT binary patch literal 94584 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

^9K|xGB1f4lJ+Aoa;gJeAUo%8D{I1 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%0ASYm~u&6 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 literal 0 HcmV?d00001 diff --git a/libcyusbserial-master/.gitignore b/libcyusbserial-master/.gitignore new file mode 100644 index 0000000..e1e749d --- /dev/null +++ b/libcyusbserial-master/.gitignore @@ -0,0 +1,32 @@ +# Object files +*.o +*.ko +*.obj +*.elf + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# CMake build directory +build diff --git a/libcyusbserial-master/.travis.yml b/libcyusbserial-master/.travis.yml new file mode 100644 index 0000000..517b313 --- /dev/null +++ b/libcyusbserial-master/.travis.yml @@ -0,0 +1,72 @@ +sudo: false + +language: c + +matrix: + include: + - compiler: gcc + env: ARCH=x86_64 + addons: + apt: + packages: + - libusb-1.0-0-dev + coverity_scan: + project: + name: "cyrozap/libcyusbserial" + notification_email: cyrozap@users.noreply.github.com + build_command_prepend: "cmake ../" + build_command: make + branch_pattern: coverity_scan + - compiler: gcc + env: ARCH=i386 CFLAGS="-m32" + addons: + apt: + packages: + - gcc-multilib + - libusb-1.0-0-dev:i386 + - pkg-config:i386 + - compiler: clang + env: ARCH=x86_64 + addons: + apt: + packages: + - libusb-1.0-0-dev + - compiler: clang + env: ARCH=i386 CFLAGS="-m32" + addons: + apt: + packages: + - gcc-multilib + - libusb-1.0-0-dev:i386 + - pkg-config:i386 + +before_script: + - mkdir build && cd build + +script: + - cmake ../ && make + +before_deploy: + - export RELEASE_NAME=libcyusbserial-$TRAVIS_TAG-$TRAVIS_OS_NAME-$ARCH + - cd - + - mkdir -p $RELEASE_NAME/{include,lib,tools} + - cp ./COPYING.LESSER.txt ./README.md $RELEASE_NAME/ + - cp ./include/*.h $RELEASE_NAME/include/ + - cp ./build/lib/*.so{,.*} $RELEASE_NAME/lib/ + - cp ./build/tools/cyusbserialtest ./tools/README.txt $RELEASE_NAME/tools/ + - tar -czf $RELEASE_NAME.tar.gz $RELEASE_NAME + +deploy: + provider: releases + api_key: + secure: eYzcv257okDxTohG7njLqRMIjad9ytsxsE0ORqvYBaQRYlOUuG8LXlj7JCmABMXvdWXVmaNbJ4k5o0qN8hiINwIarf14TzkXzfaXnZ6oTkQh4+6QWJudbNo1vGUIHV9ax4gUw4cV/UTKnviceNq82LnCHKa4i9Ts4HrQeKjXdEw= + file: $RELEASE_NAME.tar.gz + on: + repo: cyrozap/libcyusbserial + tags: true + all_branches: true + condition: "$CC = gcc" + +env: + global: + - secure: "kS2HsEf1Jwv2mT+QtX+vTNmXiGiR1Bq1iFw7ZTW6o9y/I0xYfQeeZKZSpGLO/WCFyQu4qZvCszTV8A+6JcKx7c0YWvzFoSPCmLxz326N/K+Ml0aTqeUdnWqiShByIdYbnvLfwNhB8GUJQc95dga8KmuWGjT2fl4onMkdONjwHyc=" diff --git a/libcyusbserial-master/CMakeCache.txt b/libcyusbserial-master/CMakeCache.txt new file mode 100644 index 0000000..79223d8 --- /dev/null +++ b/libcyusbserial-master/CMakeCache.txt @@ -0,0 +1,405 @@ +# This is the CMakeCache file. +# For build in directory: /root/projekti/CyUSB/libcyusbserial-master +# It was generated by CMake: /usr/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Path to a program. +CMAKE_AR:FILEPATH=/usr/bin/ar + +//Choose the type of build, options are: None(CMAKE_CXX_FLAGS or +// CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel. +CMAKE_BUILD_TYPE:STRING= + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//C compiler +CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc + +//Flags used by the compiler during all build types. +CMAKE_C_FLAGS:STRING= + +//Flags used by the compiler during debug builds. +CMAKE_C_FLAGS_DEBUG:STRING=-g + +//Flags used by the compiler during release builds for minimum +// size. +CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the compiler during release builds. +CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the compiler during release builds with debug info. +CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Flags used by the linker. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF + +//user executables (bin) +CMAKE_INSTALL_BINDIR:PATH=bin + +//read-only architecture-independent data (DATAROOTDIR) +CMAKE_INSTALL_DATADIR:PATH= + +//read-only architecture-independent data root (share) +CMAKE_INSTALL_DATAROOTDIR:PATH=share + +//documentation root (DATAROOTDIR/doc/PROJECT_NAME) +CMAKE_INSTALL_DOCDIR:PATH= + +//C header files (include) +CMAKE_INSTALL_INCLUDEDIR:PATH=include + +//info documentation (DATAROOTDIR/info) +CMAKE_INSTALL_INFODIR:PATH= + +//object code libraries (lib) +CMAKE_INSTALL_LIBDIR:PATH=lib + +//program executables (libexec) +CMAKE_INSTALL_LIBEXECDIR:PATH=libexec + +//locale-dependent data (DATAROOTDIR/locale) +CMAKE_INSTALL_LOCALEDIR:PATH= + +//modifiable single-machine data (var) +CMAKE_INSTALL_LOCALSTATEDIR:PATH=var + +//man documentation (DATAROOTDIR/man) +CMAKE_INSTALL_MANDIR:PATH= + +//C header files for non-gcc (/usr/include) +CMAKE_INSTALL_OLDINCLUDEDIR:PATH=/usr/include + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//system admin executables (sbin) +CMAKE_INSTALL_SBINDIR:PATH=sbin + +//modifiable architecture-independent data (com) +CMAKE_INSTALL_SHAREDSTATEDIR:PATH=com + +//read-only single-machine data (etc) +CMAKE_INSTALL_SYSCONFDIR:PATH=etc + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make + +//Flags used by the linker during the creation of modules. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=libcyusbserial + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib + +//Flags used by the linker during the creation of dll's. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during debug builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during release minsize builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during release builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during Release with Debug Info builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//pkg-config executable +PKG_CONFIG_EXECUTABLE:FILEPATH=/usr/bin/pkg-config + +//Dependencies for the target +cyusbserial_LIB_DEPENDS:STATIC=general;/usr/local/lib/libusb-1.0.so; + +//Value Computed by CMake +libcyusbserial_BINARY_DIR:STATIC=/root/projekti/CyUSB/libcyusbserial-master + +//Value Computed by CMake +libcyusbserial_SOURCE_DIR:STATIC=/root/projekti/CyUSB/libcyusbserial-master + +//Path to a library. +usb_LIBRARY:FILEPATH=/usr/local/lib/libusb-1.0.so + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/root/projekti/CyUSB/libcyusbserial-master +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=7 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=0 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest +//ADVANCED property for variable: CMAKE_C_COMPILER +CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS +CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG +CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL +CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE +CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO +CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Unix Makefiles +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/root/projekti/CyUSB/libcyusbserial-master +//ADVANCED property for variable: CMAKE_INSTALL_BINDIR +CMAKE_INSTALL_BINDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DATADIR +CMAKE_INSTALL_DATADIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DATAROOTDIR +CMAKE_INSTALL_DATAROOTDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DOCDIR +CMAKE_INSTALL_DOCDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_INCLUDEDIR +CMAKE_INSTALL_INCLUDEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_INFODIR +CMAKE_INSTALL_INFODIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LIBDIR +CMAKE_INSTALL_LIBDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LIBEXECDIR +CMAKE_INSTALL_LIBEXECDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LOCALEDIR +CMAKE_INSTALL_LOCALEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LOCALSTATEDIR +CMAKE_INSTALL_LOCALSTATEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_MANDIR +CMAKE_INSTALL_MANDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_OLDINCLUDEDIR +CMAKE_INSTALL_OLDINCLUDEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SBINDIR +CMAKE_INSTALL_SBINDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SHAREDSTATEDIR +CMAKE_INSTALL_SHAREDSTATEDIR-ADVANCED:INTERNAL=1 +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SYSCONFDIR +CMAKE_INSTALL_SYSCONFDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=4 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/share/cmake-3.7 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 +//Details about finding PkgConfig +FIND_PACKAGE_MESSAGE_DETAILS_PkgConfig:INTERNAL=[/usr/bin/pkg-config][v0.29()] +//Result of TRY_COMPILE +LIBUSB_VERCHECK_COMPILED:INTERNAL=TRUE +//Result of TRY_RUN +LIBUSB_VERCHECK_RUN_RESULT:INTERNAL=0 +PKGCONFIG_LIBUSB_CFLAGS:INTERNAL=-I/usr/local/include/libusb-1.0 +PKGCONFIG_LIBUSB_CFLAGS_I:INTERNAL= +PKGCONFIG_LIBUSB_CFLAGS_OTHER:INTERNAL= +PKGCONFIG_LIBUSB_FOUND:INTERNAL=1 +PKGCONFIG_LIBUSB_INCLUDEDIR:INTERNAL=/usr/local/include +PKGCONFIG_LIBUSB_INCLUDE_DIRS:INTERNAL=/usr/local/include/libusb-1.0 +PKGCONFIG_LIBUSB_LDFLAGS:INTERNAL=-L/usr/local/lib;-lusb-1.0 +PKGCONFIG_LIBUSB_LDFLAGS_OTHER:INTERNAL= +PKGCONFIG_LIBUSB_LIBDIR:INTERNAL=/usr/local/lib +PKGCONFIG_LIBUSB_LIBRARIES:INTERNAL=usb-1.0 +PKGCONFIG_LIBUSB_LIBRARY_DIRS:INTERNAL=/usr/local/lib +PKGCONFIG_LIBUSB_LIBS:INTERNAL= +PKGCONFIG_LIBUSB_LIBS_L:INTERNAL= +PKGCONFIG_LIBUSB_LIBS_OTHER:INTERNAL= +PKGCONFIG_LIBUSB_LIBS_PATHS:INTERNAL= +PKGCONFIG_LIBUSB_PREFIX:INTERNAL=/usr/local +PKGCONFIG_LIBUSB_STATIC_CFLAGS:INTERNAL=-I/usr/local/include/libusb-1.0 +PKGCONFIG_LIBUSB_STATIC_CFLAGS_I:INTERNAL= +PKGCONFIG_LIBUSB_STATIC_CFLAGS_OTHER:INTERNAL= +PKGCONFIG_LIBUSB_STATIC_INCLUDE_DIRS:INTERNAL=/usr/local/include/libusb-1.0 +PKGCONFIG_LIBUSB_STATIC_LDFLAGS:INTERNAL=-L/usr/local/lib;-lusb-1.0;-lrt;-pthread +PKGCONFIG_LIBUSB_STATIC_LDFLAGS_OTHER:INTERNAL=-pthread +PKGCONFIG_LIBUSB_STATIC_LIBDIR:INTERNAL= +PKGCONFIG_LIBUSB_STATIC_LIBRARIES:INTERNAL=usb-1.0;rt +PKGCONFIG_LIBUSB_STATIC_LIBRARY_DIRS:INTERNAL=/usr/local/lib +PKGCONFIG_LIBUSB_STATIC_LIBS:INTERNAL= +PKGCONFIG_LIBUSB_STATIC_LIBS_L:INTERNAL= +PKGCONFIG_LIBUSB_STATIC_LIBS_OTHER:INTERNAL= +PKGCONFIG_LIBUSB_STATIC_LIBS_PATHS:INTERNAL= +PKGCONFIG_LIBUSB_VERSION:INTERNAL=1.0.9 +PKGCONFIG_LIBUSB_libusb-1.0_INCLUDEDIR:INTERNAL= +PKGCONFIG_LIBUSB_libusb-1.0_LIBDIR:INTERNAL= +PKGCONFIG_LIBUSB_libusb-1.0_PREFIX:INTERNAL= +PKGCONFIG_LIBUSB_libusb-1.0_VERSION:INTERNAL= +//ADVANCED property for variable: PKG_CONFIG_EXECUTABLE +PKG_CONFIG_EXECUTABLE-ADVANCED:INTERNAL=1 +//CMAKE_INSTALL_PREFIX during last run +_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX:INTERNAL=/usr/local +__pkg_config_checked_PKGCONFIG_LIBUSB:INTERNAL=1 +prefix_result:INTERNAL=/usr/local/lib +//ADVANCED property for variable: usb_LIBRARY +usb_LIBRARY-ADVANCED:INTERNAL=1 + diff --git a/libcyusbserial-master/CMakeFiles/3.7.0/CMakeCCompiler.cmake b/libcyusbserial-master/CMakeFiles/3.7.0/CMakeCCompiler.cmake new file mode 100644 index 0000000..bd324cf --- /dev/null +++ b/libcyusbserial-master/CMakeFiles/3.7.0/CMakeCCompiler.cmake @@ -0,0 +1,68 @@ +set(CMAKE_C_COMPILER "/usr/bin/cc") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "GNU") +set(CMAKE_C_COMPILER_VERSION "6.1.1") +set(CMAKE_C_COMPILER_WRAPPER "") +set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "11") +set(CMAKE_C_COMPILE_FEATURES "c_function_prototypes;c_restrict;c_variadic_macros;c_static_assert") +set(CMAKE_C90_COMPILE_FEATURES "c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_static_assert") + +set(CMAKE_C_PLATFORM_ID "Linux") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_SIMULATE_VERSION "") + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_COMPILER_IS_GNUCC 1) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "8") +set(CMAKE_C_COMPILER_ABI "ELF") +set(CMAKE_C_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "c") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/6;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/libcyusbserial-master/CMakeFiles/3.7.0/CMakeDetermineCompilerABI_C.bin b/libcyusbserial-master/CMakeFiles/3.7.0/CMakeDetermineCompilerABI_C.bin new file mode 100755 index 0000000000000000000000000000000000000000..1fba8e54b570c07db172194a6db1fc0ef7a17ae4 GIT binary patch literal 7432 zcmcIpeQXrh5r22*&)A#~LI@bQTw9=kq;A^Z{` zJBoEc^$!$xOPsl1#j%RxQFbJf-I%f)Q+CYHl4B5ao*&JPt_tO^!mU9fStBMIYsnR z^juBPh3jv8YgfhICw~0ci-&J`OBcTV+~nf?$*X^V&kHk0ss!qH=qUlVzyXf|^E=?b zz5{;h4)`~K`@|A)sH7XMEQQb{eAI^jMB?S*s15H0?sw3C9Qb@%EwwNB`9A}Ef$)m4 zLJch;BJwUoKRDr9fhLhP3jaB{Pn74xxfnR<*D61ol>QGTULvORHHDb$a}xK88Ktkb zyJ!JUar#u8{QCH^)Grgal)mW&ckIJn+IF?VFsN-LQ=vr47z#yWjPxc)jJ{|rDvXwn zZALhfi1bI3sYs$@Tf<;H7U>A}3`RsW))zOD(F2iqpAjBTC4>B%5#DXY5deHw=c7$w<$X=sr=Knhnbra>#pA@?0+i|Xqw6R+>l zC*Ib_|2@;*(Q;;rc7lH96m3NP%o*B8(|?5Bt-i8ljY3QwL4cilC7lm_{6nukae3d; zN%BTv&F?x%9qEfueo_w6b(*5+3$Xk$^>^yu`LA?vYSse>`oxTWYI?KodR2dYHg!+N zTM2tBTPC_ro8ymt<-2))Ea&`A7*59!Sl6rh-v;EmDMvavT1I=LctrPFI zPJGY^59x((>Eowe`i83`@9N{P6z%Q`elyq=+!HiTAI%PW6VF@vg9bf%*PLAWS_~zCeI$sb>@Y2Ib>=>8wS&)s{|a2kO1%a?3GSoK z45Hr)BG-W(!Zqr1EiEl9I_fI)5nh4o1bnR_1x3#KLM%r=>9<4QPr6=Tvv={D3GO>5RJ|02PpgKa0;5R-hD1--t5?uK~<`!KNT3xkiMKLRf5y}l#vdhgK={ zr4HqpGQCfTrra9tLfj?qLcF6m{eBYB?*tLQ*G(z=F4|SnEg@bD*5~I*??#qwpVFbW_&ESoX;_(kF6$UUe_5V537DP-2a_%erO+PrS181|CWY^js8`Q zk)CKM=C2J@2dXQpt5=&Xe@#_&ZB<=W4J+S)duSKAwVYlL&Ul3*?hy|-;(3|6cF{xw&BKJs?W3dyzy8P%{OemCloZU_B^ne%Jy^x(A7&y$@zViD>SC;Z+_ zo?x}{;PmkMoQvn?r_}Fp$P-PR-#%F{bnf!RjdT_nYa zIxg&o?qZG9GjtX$r}ZHPr*YqsmUrjulk3vY5;3OUzfujik0hSEPdsv=a_759;<@{I zHE@?heY0NTx%=ut;8ai8>x13E{T!TypOAR&K716oQ$2AAxKq8=34DRbJ-$8`D`*YRBUx7Q-VQ&I=s>7z?gX%4No%egCZ?Dg;0C%d--dFne`s^d%PH}qi z1MGxfl71ZCpS_7xGBwiI7wARFv$bJ|(b}@J!!Sg)+%i%_MlTgyD0+-=+~^;S_k;$G za4Mci8ljO<(HkEc9*m?S;Xv(%`!_f%$wJNuB@&_iD6dk9{h}`s8j2Xo)MpIiO!Zzo??Kz&PrVA(I#y}_* zM&W2Qe!VTYt)&5|MNL+rfbf08XwsEyy>SO1l$|`tme%d{!B%5?bMwxo4x=Mj-`Ye& z%R2TmR;{*LSktWKa=6^4Z?~u4-w%*$^Z4Cv4G7g4l8J7U$$F8RoYyN@w4p(@ z1=~-#HAqy4NG4vR#Q{-$LQS^ky5J#T9$akC`6#|IN_xj+nY(hAk@uiQwFBF8-a1SL zE@-96GV!w>^GDE6wFt|c-yT!;er0cuU%`U%5ek*A|=FI;|WnZrxay@m{ z!Jd5C*Y83fBll{M*>D)g4{{YrqnC$=n literal 0 HcmV?d00001 diff --git a/libcyusbserial-master/CMakeFiles/3.7.0/CMakeSystem.cmake b/libcyusbserial-master/CMakeFiles/3.7.0/CMakeSystem.cmake new file mode 100644 index 0000000..35c1b89 --- /dev/null +++ b/libcyusbserial-master/CMakeFiles/3.7.0/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-4.6.0-kali1-amd64") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "4.6.0-kali1-amd64") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + + + +set(CMAKE_SYSTEM "Linux-4.6.0-kali1-amd64") +set(CMAKE_SYSTEM_NAME "Linux") +set(CMAKE_SYSTEM_VERSION "4.6.0-kali1-amd64") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/libcyusbserial-master/CMakeFiles/3.7.0/CompilerIdC/CMakeCCompilerId.c b/libcyusbserial-master/CMakeFiles/3.7.0/CompilerIdC/CMakeCCompilerId.c new file mode 100644 index 0000000..512e360 --- /dev/null +++ b/libcyusbserial-master/CMakeFiles/3.7.0/CompilerIdC/CMakeCCompilerId.c @@ -0,0 +1,561 @@ +#ifdef __cplusplus +# error "A C++ compiler has been selected for C." +#endif + +#if defined(__18CXX) +# define ID_VOID_MAIN +#endif +#if defined(__CLASSIC_C__) +/* cv-qualifiers did not exist in K&R C */ +# define const +# define volatile +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__BCC__) +# define COMPILER_ID "Bruce" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" + +#elif defined(__ARMCC_VERSION) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(SDCC) +# define COMPILER_ID "SDCC" + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) + +#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) +# define COMPILER_ID "MIPSpro" +# if defined(_SGI_COMPILER_VERSION) + /* _SGI_COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) +# else + /* _COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__sgi) +# define COMPILER_ID "MIPSpro" + +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXE) || defined(__CRAYXC) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) +# define PLATFORM_ID "IRIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +#if !defined(__STDC__) +# if defined(_MSC_VER) && !defined(__clang__) +# define C_DIALECT "90" +# else +# define C_DIALECT +# endif +#elif __STDC_VERSION__ >= 201000L +# define C_DIALECT "11" +#elif __STDC_VERSION__ >= 199901L +# define C_DIALECT "99" +#else +# define C_DIALECT "90" +#endif +const char* info_language_dialect_default = + "INFO" ":" "dialect_default[" C_DIALECT "]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +# if defined(__CLASSIC_C__) +int main(argc, argv) int argc; char *argv[]; +# else +int main(int argc, char* argv[]) +# endif +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXE) || defined(__CRAYXC) + require += info_cray[argc]; +#endif + require += info_language_dialect_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/libcyusbserial-master/CMakeFiles/CMakeDirectoryInformation.cmake b/libcyusbserial-master/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..4b7ebe6 --- /dev/null +++ b/libcyusbserial-master/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.7 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/root/projekti/CyUSB/libcyusbserial-master") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/root/projekti/CyUSB/libcyusbserial-master") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/libcyusbserial-master/CMakeFiles/CMakeOutput.log b/libcyusbserial-master/CMakeFiles/CMakeOutput.log new file mode 100644 index 0000000..9579227 --- /dev/null +++ b/libcyusbserial-master/CMakeFiles/CMakeOutput.log @@ -0,0 +1,198 @@ +The system is: Linux - 4.6.0-kali1-amd64 - x86_64 +Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. +Compiler: /usr/bin/cc +Build flags: +Id flags: + +The output was: +0 + + +Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" + +The C compiler identification is GNU, found in "/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/3.7.0/CompilerIdC/a.out" + +Determining if the C compiler works passed with the following output: +Change Dir: /root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_1b2c5/fast" +/usr/bin/make -f CMakeFiles/cmTC_1b2c5.dir/build.make CMakeFiles/cmTC_1b2c5.dir/build +make[1]: Entering directory '/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_1b2c5.dir/testCCompiler.c.o +/usr/bin/cc -o CMakeFiles/cmTC_1b2c5.dir/testCCompiler.c.o -c /root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/CMakeTmp/testCCompiler.c +Linking C executable cmTC_1b2c5 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_1b2c5.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_1b2c5.dir/testCCompiler.c.o -o cmTC_1b2c5 -rdynamic +make[1]: Leaving directory '/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/CMakeTmp' + + +Detecting C compiler ABI info compiled with the following output: +Change Dir: /root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_2efa5/fast" +/usr/bin/make -f CMakeFiles/cmTC_2efa5.dir/build.make CMakeFiles/cmTC_2efa5.dir/build +make[1]: Entering directory '/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_2efa5.dir/CMakeCCompilerABI.c.o +/usr/bin/cc -o CMakeFiles/cmTC_2efa5.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.7/Modules/CMakeCCompilerABI.c +Linking C executable cmTC_2efa5 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_2efa5.dir/link.txt --verbose=1 +/usr/bin/cc -v CMakeFiles/cmTC_2efa5.dir/CMakeCCompilerABI.c.o -o cmTC_2efa5 -rdynamic +Using built-in specs. +COLLECT_GCC=/usr/bin/cc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/6/lto-wrapper +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Debian 6.1.1-11' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-6 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 6.1.1 20160802 (Debian 6.1.1-11) +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/6/:/usr/lib/gcc/x86_64-linux-gnu/6/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/6/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/6/:/usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/6/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/6/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_2efa5' '-rdynamic' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/6/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/6/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/6/lto-wrapper -plugin-opt=-fresolution=/tmp/ccILchqh.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_2efa5 /usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/6/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/6 -L/usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/6/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/6/../../.. CMakeFiles/cmTC_2efa5.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-linux-gnu/6/crtend.o /usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/crtn.o +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_2efa5' '-rdynamic' '-mtune=generic' '-march=x86-64' +make[1]: Leaving directory '/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/CMakeTmp' + + +Parsed C implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command:"/usr/bin/make" "cmTC_2efa5/fast"] + ignore line: [/usr/bin/make -f CMakeFiles/cmTC_2efa5.dir/build.make CMakeFiles/cmTC_2efa5.dir/build] + ignore line: [make[1]: Entering directory '/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/CMakeTmp'] + ignore line: [Building C object CMakeFiles/cmTC_2efa5.dir/CMakeCCompilerABI.c.o] + ignore line: [/usr/bin/cc -o CMakeFiles/cmTC_2efa5.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.7/Modules/CMakeCCompilerABI.c] + ignore line: [Linking C executable cmTC_2efa5] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_2efa5.dir/link.txt --verbose=1] + ignore line: [/usr/bin/cc -v CMakeFiles/cmTC_2efa5.dir/CMakeCCompilerABI.c.o -o cmTC_2efa5 -rdynamic ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/6/lto-wrapper] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Debian 6.1.1-11' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-6 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 6.1.1 20160802 (Debian 6.1.1-11) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/6/:/usr/lib/gcc/x86_64-linux-gnu/6/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/6/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/6/:/usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/6/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/6/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_2efa5' '-rdynamic' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/6/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/6/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/6/lto-wrapper -plugin-opt=-fresolution=/tmp/ccILchqh.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_2efa5 /usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/6/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/6 -L/usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/6/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/6/../../.. CMakeFiles/cmTC_2efa5.dir/CMakeCCompilerABI.c.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-linux-gnu/6/crtend.o /usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/6/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/6/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/6/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccILchqh.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [--sysroot=/] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-o] ==> ignore + arg [cmTC_2efa5] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/crt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/6/crtbegin.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-linux-gnu/6] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/6] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/6/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/6/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/6/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/6/../../..] + arg [CMakeFiles/cmTC_2efa5.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--no-as-needed] ==> ignore + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--no-as-needed] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/6/crtend.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/crtn.o] ==> ignore + remove lib [gcc] + remove lib [gcc_s] + remove lib [gcc] + remove lib [gcc_s] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/6] ==> [/usr/lib/gcc/x86_64-linux-gnu/6] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/6/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/6/../../..] ==> [/usr/lib] + implicit libs: [c] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/6;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + + + +Detecting C [-std=c11] compiler features compiled with the following output: +Change Dir: /root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_b46d3/fast" +/usr/bin/make -f CMakeFiles/cmTC_b46d3.dir/build.make CMakeFiles/cmTC_b46d3.dir/build +make[1]: Entering directory '/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_b46d3.dir/feature_tests.c.o +/usr/bin/cc -std=c11 -o CMakeFiles/cmTC_b46d3.dir/feature_tests.c.o -c /root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/feature_tests.c +Linking C executable cmTC_b46d3 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_b46d3.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_b46d3.dir/feature_tests.c.o -o cmTC_b46d3 -rdynamic +make[1]: Leaving directory '/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:1c_restrict + Feature record: C_FEATURE:1c_static_assert + Feature record: C_FEATURE:1c_variadic_macros + + +Detecting C [-std=c99] compiler features compiled with the following output: +Change Dir: /root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_9070a/fast" +/usr/bin/make -f CMakeFiles/cmTC_9070a.dir/build.make CMakeFiles/cmTC_9070a.dir/build +make[1]: Entering directory '/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_9070a.dir/feature_tests.c.o +/usr/bin/cc -std=c99 -o CMakeFiles/cmTC_9070a.dir/feature_tests.c.o -c /root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/feature_tests.c +Linking C executable cmTC_9070a +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_9070a.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_9070a.dir/feature_tests.c.o -o cmTC_9070a -rdynamic +make[1]: Leaving directory '/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:1c_restrict + Feature record: C_FEATURE:0c_static_assert + Feature record: C_FEATURE:1c_variadic_macros + + +Detecting C [-std=c90] compiler features compiled with the following output: +Change Dir: /root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_41719/fast" +/usr/bin/make -f CMakeFiles/cmTC_41719.dir/build.make CMakeFiles/cmTC_41719.dir/build +make[1]: Entering directory '/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_41719.dir/feature_tests.c.o +/usr/bin/cc -std=c90 -o CMakeFiles/cmTC_41719.dir/feature_tests.c.o -c /root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/feature_tests.c +Linking C executable cmTC_41719 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_41719.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_41719.dir/feature_tests.c.o -o cmTC_41719 -rdynamic +make[1]: Leaving directory '/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:0c_restrict + Feature record: C_FEATURE:0c_static_assert + Feature record: C_FEATURE:0c_variadic_macros diff --git a/libcyusbserial-master/CMakeFiles/Makefile.cmake b/libcyusbserial-master/CMakeFiles/Makefile.cmake new file mode 100644 index 0000000..650acd3 --- /dev/null +++ b/libcyusbserial-master/CMakeFiles/Makefile.cmake @@ -0,0 +1,109 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.7 + +# The generator used is: +set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") + +# The top level Makefile was generated from the following files: +set(CMAKE_MAKEFILE_DEPENDS + "CMakeCache.txt" + "CMakeFiles/3.7.0/CMakeCCompiler.cmake" + "CMakeFiles/3.7.0/CMakeSystem.cmake" + "CMakeFiles/feature_tests.c" + "CMakeLists.txt" + "cmake/helpers/libusb_version.c" + "cmake/modules/FindLibUSB.cmake" + "include/CMakeLists.txt" + "lib/CMakeLists.txt" + "tools/CMakeLists.txt" + "/usr/share/cmake-3.7/Modules/CMakeCCompiler.cmake.in" + "/usr/share/cmake-3.7/Modules/CMakeCCompilerABI.c" + "/usr/share/cmake-3.7/Modules/CMakeCInformation.cmake" + "/usr/share/cmake-3.7/Modules/CMakeCommonLanguageInclude.cmake" + "/usr/share/cmake-3.7/Modules/CMakeCompilerIdDetection.cmake" + "/usr/share/cmake-3.7/Modules/CMakeDetermineCCompiler.cmake" + "/usr/share/cmake-3.7/Modules/CMakeDetermineCompileFeatures.cmake" + "/usr/share/cmake-3.7/Modules/CMakeDetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/CMakeDetermineCompilerABI.cmake" + "/usr/share/cmake-3.7/Modules/CMakeDetermineCompilerId.cmake" + "/usr/share/cmake-3.7/Modules/CMakeDetermineSystem.cmake" + "/usr/share/cmake-3.7/Modules/CMakeFindBinUtils.cmake" + "/usr/share/cmake-3.7/Modules/CMakeGenericSystem.cmake" + "/usr/share/cmake-3.7/Modules/CMakeLanguageInformation.cmake" + "/usr/share/cmake-3.7/Modules/CMakeParseArguments.cmake" + "/usr/share/cmake-3.7/Modules/CMakeParseImplicitLinkInfo.cmake" + "/usr/share/cmake-3.7/Modules/CMakeSystem.cmake.in" + "/usr/share/cmake-3.7/Modules/CMakeSystemSpecificInformation.cmake" + "/usr/share/cmake-3.7/Modules/CMakeSystemSpecificInitialize.cmake" + "/usr/share/cmake-3.7/Modules/CMakeTestCCompiler.cmake" + "/usr/share/cmake-3.7/Modules/CMakeTestCompilerCommon.cmake" + "/usr/share/cmake-3.7/Modules/CMakeUnixFindMake.cmake" + "/usr/share/cmake-3.7/Modules/CheckIncludeFile.cmake" + "/usr/share/cmake-3.7/Modules/CheckLibraryExists.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/ADSP-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/ARMCC-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/AppleClang-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/Borland-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/Bruce-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/Clang-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/Clang-DetermineCompilerInternal.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/Compaq-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/Cray-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/Embarcadero-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/Fujitsu-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/GHS-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/GNU-C-FeatureTests.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/GNU-C.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/GNU-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/GNU.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/HP-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/IAR-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/Intel-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/MIPSpro-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/MSVC-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/PGI-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/PathScale-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/SCO-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/SDCC-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/SunPro-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/TI-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/Watcom-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/XL-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/Compiler/zOS-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.7/Modules/FindPackageHandleStandardArgs.cmake" + "/usr/share/cmake-3.7/Modules/FindPackageMessage.cmake" + "/usr/share/cmake-3.7/Modules/FindPkgConfig.cmake" + "/usr/share/cmake-3.7/Modules/GNUInstallDirs.cmake" + "/usr/share/cmake-3.7/Modules/Internal/FeatureTesting.cmake" + "/usr/share/cmake-3.7/Modules/Platform/Linux-GNU-C.cmake" + "/usr/share/cmake-3.7/Modules/Platform/Linux-GNU.cmake" + "/usr/share/cmake-3.7/Modules/Platform/Linux.cmake" + "/usr/share/cmake-3.7/Modules/Platform/UnixPaths.cmake" + ) + +# The corresponding makefile is: +set(CMAKE_MAKEFILE_OUTPUTS + "Makefile" + "CMakeFiles/cmake.check_cache" + ) + +# Byproducts of CMake generate step: +set(CMAKE_MAKEFILE_PRODUCTS + "CMakeFiles/3.7.0/CMakeSystem.cmake" + "CMakeFiles/3.7.0/CMakeCCompiler.cmake" + "CMakeFiles/3.7.0/CMakeCCompiler.cmake" + "CMakeFiles/CMakeDirectoryInformation.cmake" + "include/CMakeFiles/CMakeDirectoryInformation.cmake" + "lib/CMakeFiles/CMakeDirectoryInformation.cmake" + "tools/CMakeFiles/CMakeDirectoryInformation.cmake" + ) + +# Dependency information for all targets: +set(CMAKE_DEPEND_INFO_FILES + "lib/CMakeFiles/cyusbserial.dir/DependInfo.cmake" + "tools/CMakeFiles/cyusbserialtest.dir/DependInfo.cmake" + ) diff --git a/libcyusbserial-master/CMakeFiles/Makefile2 b/libcyusbserial-master/CMakeFiles/Makefile2 new file mode 100644 index 0000000..3d94676 --- /dev/null +++ b/libcyusbserial-master/CMakeFiles/Makefile2 @@ -0,0 +1,199 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.7 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# The main recursive all target +all: + +.PHONY : all + +# The main recursive preinstall target +preinstall: + +.PHONY : preinstall + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /root/projekti/CyUSB/libcyusbserial-master + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /root/projekti/CyUSB/libcyusbserial-master + +#============================================================================= +# Directory level rules for directory include + +# Convenience name for "all" pass in the directory. +include/all: + +.PHONY : include/all + +# Convenience name for "clean" pass in the directory. +include/clean: + +.PHONY : include/clean + +# Convenience name for "preinstall" pass in the directory. +include/preinstall: + +.PHONY : include/preinstall + +#============================================================================= +# Directory level rules for directory lib + +# Convenience name for "all" pass in the directory. +lib/all: lib/CMakeFiles/cyusbserial.dir/all + +.PHONY : lib/all + +# Convenience name for "clean" pass in the directory. +lib/clean: lib/CMakeFiles/cyusbserial.dir/clean + +.PHONY : lib/clean + +# Convenience name for "preinstall" pass in the directory. +lib/preinstall: + +.PHONY : lib/preinstall + +#============================================================================= +# Target rules for target lib/CMakeFiles/cyusbserial.dir + +# All Build rule for target. +lib/CMakeFiles/cyusbserial.dir/all: + $(MAKE) -f lib/CMakeFiles/cyusbserial.dir/build.make lib/CMakeFiles/cyusbserial.dir/depend + $(MAKE) -f lib/CMakeFiles/cyusbserial.dir/build.make lib/CMakeFiles/cyusbserial.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles --progress-num=1,2,3,4,5,6,7,8 "Built target cyusbserial" +.PHONY : lib/CMakeFiles/cyusbserial.dir/all + +# Include target in all. +all: lib/CMakeFiles/cyusbserial.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +lib/CMakeFiles/cyusbserial.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /root/projekti/CyUSB/libcyusbserial-master/CMakeFiles 8 + $(MAKE) -f CMakeFiles/Makefile2 lib/CMakeFiles/cyusbserial.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /root/projekti/CyUSB/libcyusbserial-master/CMakeFiles 0 +.PHONY : lib/CMakeFiles/cyusbserial.dir/rule + +# Convenience name for target. +cyusbserial: lib/CMakeFiles/cyusbserial.dir/rule + +.PHONY : cyusbserial + +# clean rule for target. +lib/CMakeFiles/cyusbserial.dir/clean: + $(MAKE) -f lib/CMakeFiles/cyusbserial.dir/build.make lib/CMakeFiles/cyusbserial.dir/clean +.PHONY : lib/CMakeFiles/cyusbserial.dir/clean + +# clean rule for target. +clean: lib/CMakeFiles/cyusbserial.dir/clean + +.PHONY : clean + +#============================================================================= +# Directory level rules for directory tools + +# Convenience name for "all" pass in the directory. +tools/all: tools/CMakeFiles/cyusbserialtest.dir/all + +.PHONY : tools/all + +# Convenience name for "clean" pass in the directory. +tools/clean: tools/CMakeFiles/cyusbserialtest.dir/clean + +.PHONY : tools/clean + +# Convenience name for "preinstall" pass in the directory. +tools/preinstall: + +.PHONY : tools/preinstall + +#============================================================================= +# Target rules for target tools/CMakeFiles/cyusbserialtest.dir + +# All Build rule for target. +tools/CMakeFiles/cyusbserialtest.dir/all: lib/CMakeFiles/cyusbserial.dir/all + $(MAKE) -f tools/CMakeFiles/cyusbserialtest.dir/build.make tools/CMakeFiles/cyusbserialtest.dir/depend + $(MAKE) -f tools/CMakeFiles/cyusbserialtest.dir/build.make tools/CMakeFiles/cyusbserialtest.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles --progress-num=9,10 "Built target cyusbserialtest" +.PHONY : tools/CMakeFiles/cyusbserialtest.dir/all + +# Include target in all. +all: tools/CMakeFiles/cyusbserialtest.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +tools/CMakeFiles/cyusbserialtest.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /root/projekti/CyUSB/libcyusbserial-master/CMakeFiles 10 + $(MAKE) -f CMakeFiles/Makefile2 tools/CMakeFiles/cyusbserialtest.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /root/projekti/CyUSB/libcyusbserial-master/CMakeFiles 0 +.PHONY : tools/CMakeFiles/cyusbserialtest.dir/rule + +# Convenience name for target. +cyusbserialtest: tools/CMakeFiles/cyusbserialtest.dir/rule + +.PHONY : cyusbserialtest + +# clean rule for target. +tools/CMakeFiles/cyusbserialtest.dir/clean: + $(MAKE) -f tools/CMakeFiles/cyusbserialtest.dir/build.make tools/CMakeFiles/cyusbserialtest.dir/clean +.PHONY : tools/CMakeFiles/cyusbserialtest.dir/clean + +# clean rule for target. +clean: tools/CMakeFiles/cyusbserialtest.dir/clean + +.PHONY : clean + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/libcyusbserial-master/CMakeFiles/TargetDirectories.txt b/libcyusbserial-master/CMakeFiles/TargetDirectories.txt new file mode 100644 index 0000000..b22b291 --- /dev/null +++ b/libcyusbserial-master/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,26 @@ +/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/install/strip.dir +/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/install/local.dir +/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/edit_cache.dir +/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/rebuild_cache.dir +/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/list_install_components.dir +/root/projekti/CyUSB/libcyusbserial-master/CMakeFiles/install.dir +/root/projekti/CyUSB/libcyusbserial-master/include/CMakeFiles/install/strip.dir +/root/projekti/CyUSB/libcyusbserial-master/include/CMakeFiles/install/local.dir +/root/projekti/CyUSB/libcyusbserial-master/include/CMakeFiles/edit_cache.dir +/root/projekti/CyUSB/libcyusbserial-master/include/CMakeFiles/rebuild_cache.dir +/root/projekti/CyUSB/libcyusbserial-master/include/CMakeFiles/list_install_components.dir +/root/projekti/CyUSB/libcyusbserial-master/include/CMakeFiles/install.dir +/root/projekti/CyUSB/libcyusbserial-master/lib/CMakeFiles/install/strip.dir +/root/projekti/CyUSB/libcyusbserial-master/lib/CMakeFiles/install/local.dir +/root/projekti/CyUSB/libcyusbserial-master/lib/CMakeFiles/cyusbserial.dir +/root/projekti/CyUSB/libcyusbserial-master/lib/CMakeFiles/rebuild_cache.dir +/root/projekti/CyUSB/libcyusbserial-master/lib/CMakeFiles/edit_cache.dir +/root/projekti/CyUSB/libcyusbserial-master/lib/CMakeFiles/install.dir +/root/projekti/CyUSB/libcyusbserial-master/lib/CMakeFiles/list_install_components.dir +/root/projekti/CyUSB/libcyusbserial-master/tools/CMakeFiles/install/strip.dir +/root/projekti/CyUSB/libcyusbserial-master/tools/CMakeFiles/install/local.dir +/root/projekti/CyUSB/libcyusbserial-master/tools/CMakeFiles/install.dir +/root/projekti/CyUSB/libcyusbserial-master/tools/CMakeFiles/list_install_components.dir +/root/projekti/CyUSB/libcyusbserial-master/tools/CMakeFiles/cyusbserialtest.dir +/root/projekti/CyUSB/libcyusbserial-master/tools/CMakeFiles/edit_cache.dir +/root/projekti/CyUSB/libcyusbserial-master/tools/CMakeFiles/rebuild_cache.dir diff --git a/libcyusbserial-master/CMakeFiles/cmake.check_cache b/libcyusbserial-master/CMakeFiles/cmake.check_cache new file mode 100644 index 0000000..3dccd73 --- /dev/null +++ b/libcyusbserial-master/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/libcyusbserial-master/CMakeFiles/feature_tests.bin b/libcyusbserial-master/CMakeFiles/feature_tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..073a8cc50c6a807562b8ee1e38ab59e93a5f2a0f GIT binary patch literal 7440 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 at>W?Xdy$rjSO1ObpFT5rW2)fp{{I7Nt*oE` literal 0 HcmV?d00001 diff --git a/libcyusbserial-master/CMakeFiles/feature_tests.c b/libcyusbserial-master/CMakeFiles/feature_tests.c new file mode 100644 index 0000000..6590dde --- /dev/null +++ b/libcyusbserial-master/CMakeFiles/feature_tests.c @@ -0,0 +1,34 @@ + + const char features[] = {"\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 +"1" +#else +"0" +#endif +"c_function_prototypes\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +"1" +#else +"0" +#endif +"c_restrict\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201000L +"1" +#else +"0" +#endif +"c_static_assert\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +"1" +#else +"0" +#endif +"c_variadic_macros\n" + +}; + +int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/libcyusbserial-master/CMakeFiles/progress.marks b/libcyusbserial-master/CMakeFiles/progress.marks new file mode 100644 index 0000000..f599e28 --- /dev/null +++ b/libcyusbserial-master/CMakeFiles/progress.marks @@ -0,0 +1 @@ +10 diff --git a/libcyusbserial-master/CMakeLists.txt b/libcyusbserial-master/CMakeLists.txt new file mode 100644 index 0000000..09a749b --- /dev/null +++ b/libcyusbserial-master/CMakeLists.txt @@ -0,0 +1,59 @@ +cmake_minimum_required(VERSION 2.8) + +project(libcyusbserial C) + +set(CMAKE_HELPERS_BINARY_DIR ${PROJECT_SOURCE_DIR}/cmake/helpers) +set(CMAKE_HELPERS_SOURCE_DIR ${PROJECT_SOURCE_DIR}/cmake/helpers) +list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/modules) + +include(FindLibUSB) +if(WIN32) + include(FindLibPThreadsWin32) +endif() + +################################################################################ +# System configuration +################################################################################ + +# OSX +if(APPLE) + set(CMAKE_MACOSX_RPATH ON) + set(CMAKE_SKIP_BUILD_RPATH FALSE) + set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") + set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir) + if(${isSystemDir} STREQUAL "-1") + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") + endif() +endif() + +################################################################################ +# GCC and Clang +################################################################################ +if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR + CMAKE_C_COMPILER_ID STREQUAL "Clang") + + add_definitions(-Wall) + add_definitions(-Wextra) + add_definitions(-Wno-unused-parameter) + + if(TREAT_WARNINGS_AS_ERRORS) + add_definitions(-Werror) + endif() + + if(CMAKE_BUILD_TYPE STREQUAL "Debug") + add_definitions(-DDEBUG=1) + add_definitions(-O0) + endif(CMAKE_BUILD_TYPE STREQUAL "Debug") + +endif(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR + CMAKE_C_COMPILER_ID STREQUAL "Clang") + +################################################################################ +# Process subdirectories +################################################################################ +include_directories(${PROJECT_SOURCE_DIR}/include) +add_subdirectory(include) +add_subdirectory(lib) +add_subdirectory(tools) diff --git a/libcyusbserial-master/COPYING.LESSER.txt b/libcyusbserial-master/COPYING.LESSER.txt new file mode 100644 index 0000000..4362b49 --- /dev/null +++ b/libcyusbserial-master/COPYING.LESSER.txt @@ -0,0 +1,502 @@ + 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/libcyusbserial-master/Doxyfile b/libcyusbserial-master/Doxyfile new file mode 100644 index 0000000..0bd67d5 --- /dev/null +++ b/libcyusbserial-master/Doxyfile @@ -0,0 +1,2437 @@ +# Doxyfile 1.8.10 + +# 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 = libcyusbserial + +# 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 = 1.0.0 + +# 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 library to enable userspace control of Cypress USB-Serial bridge devices" + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# 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 = doc + +# 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 = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# 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 = YES + +# 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 = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# 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 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 + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# 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 = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If 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 = NO + +# 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 = YES + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# 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 = NO + +# 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. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = . \ + include \ + lib + +# 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. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# 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 = *.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 \ + *.js + +# 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 = + +# 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 therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# 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 YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = NO + +# 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 = NO + +# 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 style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# 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 pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/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 +# , /