diff options
| author | Rod Whitby <rod@whitby.id.au> | 2005-07-09 13:34:15 +0000 |
|---|---|---|
| committer | OpenEmbedded Project <openembedded-devel@lists.openembedded.org> | 2005-07-09 13:34:15 +0000 |
| commit | cb3a0cd64987084fa719eebca83b38c879ecd224 (patch) | |
| tree | f029dccbad8bb07f09a2b37a063a9c355c653db5 | |
| parent | 41e77f2c7cd9d275311ff5f7d54aff3d50d8830b (diff) | |
| parent | f16b7c8f5bfe23e1341158bbb14f74235c36a45c (diff) | |
merge of 20102c595555b6f10738ef4a8f639e4f90345415
and 841f6095e2634754c040515b151d9b5e84e3dcb8
35 files changed, 1268 insertions, 240 deletions
diff --git a/packages/base-passwd/base-passwd-3.5.9/mysql.patch b/packages/base-passwd/base-passwd-3.5.9/mysql.patch new file mode 100644 index 0000000000..b641f41238 --- /dev/null +++ b/packages/base-passwd/base-passwd-3.5.9/mysql.patch @@ -0,0 +1,8 @@ +--- base-passwd/group.master.orig 2005-07-08 06:36:07.717990112 +0200 ++++ base-passwd/group.master 2005-07-08 06:36:32.000000000 +0200 +@@ -36,4 +36,5 @@ + staff:*:50: + games:*:60: + users:*:100: ++mysql:*:64001: + nogroup:*:65534: diff --git a/packages/base-passwd/base-passwd-3.5.9/openslug/root-home.patch b/packages/base-passwd/base-passwd-3.5.9/openslug/root-home.patch index 33e2f8b4f6..346f144193 100644 --- a/packages/base-passwd/base-passwd-3.5.9/openslug/root-home.patch +++ b/packages/base-passwd/base-passwd-3.5.9/openslug/root-home.patch @@ -1,14 +1,15 @@ ---- base-passwd/passwd.master.orig 2005-03-21 10:16:56.000000000 +0100 -+++ base-passwd/passwd.master 2005-03-21 10:17:04.000000000 +0100 +--- base-passwd/passwd.master.orig 2005-07-08 06:26:22.000000000 +0200 ++++ base-passwd/passwd.master 2005-07-08 06:31:58.000000000 +0200 @@ -1,4 +1,4 @@ -root::0:0:root:/root:/bin/sh +root:Xm./49bYkrkuo:0:0:root:/home/root:/bin/sh daemon:*:1:1:daemon:/usr/sbin:/bin/sh bin:*:2:2:bin:/bin:/bin/sh sys:*:3:3:sys:/dev:/bin/sh -@@ -15,4 +15,5 @@ +@@ -15,4 +15,6 @@ list:*:38:38:Mailing List Manager:/var/list:/bin/sh irc:*:39:39:ircd:/var/run/ircd:/bin/sh gnats:*:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh +ntpd:*:47:65534:OpenNTPd daemon:/var/shared/empty:/dev/null ++mysql:*:64001:64001:MySQL daemon:/var/mysql:/dev/null nobody:*:65534:65534:nobody:/nonexistent:/bin/sh diff --git a/packages/base-passwd/base-passwd-3.5.9/root-home.patch b/packages/base-passwd/base-passwd-3.5.9/root-home.patch index d223d49193..dd439efb18 100644 --- a/packages/base-passwd/base-passwd-3.5.9/root-home.patch +++ b/packages/base-passwd/base-passwd-3.5.9/root-home.patch @@ -1,14 +1,15 @@ ---- base-passwd/passwd.master.orig 2005-03-21 10:16:56.000000000 +0100 -+++ base-passwd/passwd.master 2005-03-21 10:17:04.000000000 +0100 +--- base-passwd/passwd.master.orig 2005-07-08 06:26:22.000000000 +0200 ++++ base-passwd/passwd.master 2005-07-08 06:31:58.000000000 +0200 @@ -1,4 +1,4 @@ -root::0:0:root:/root:/bin/sh +root::0:0:root:/home/root:/bin/sh daemon:*:1:1:daemon:/usr/sbin:/bin/sh bin:*:2:2:bin:/bin:/bin/sh sys:*:3:3:sys:/dev:/bin/sh -@@ -15,4 +15,5 @@ +@@ -15,4 +15,6 @@ list:*:38:38:Mailing List Manager:/var/list:/bin/sh irc:*:39:39:ircd:/var/run/ircd:/bin/sh gnats:*:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh +ntpd:*:47:65534:OpenNTPd daemon:/var/shared/empty:/dev/null ++mysql:*:64001:64001:MySQL daemon:/var/mysql:/dev/null nobody:*:65534:65534:nobody:/nonexistent:/bin/sh diff --git a/packages/base-passwd/base-passwd_3.5.9.bb b/packages/base-passwd/base-passwd_3.5.9.bb index 4ebb5749dd..72caba0223 100644 --- a/packages/base-passwd/base-passwd_3.5.9.bb +++ b/packages/base-passwd/base-passwd_3.5.9.bb @@ -6,7 +6,8 @@ LICENSE = "GPL" SRC_URI = "${DEBIAN_MIRROR}/main/b/base-passwd/base-passwd_${PV}.tar.gz \ file://configure.patch;patch=1 \ file://nobash.patch;patch=1 \ - file://root-home.patch;patch=1" + file://root-home.patch;patch=1 \ + file://mysql.patch;patch=1" S = "${WORKDIR}/base-passwd" diff --git a/packages/boost/.mtn2git_empty b/packages/boost/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/boost/.mtn2git_empty diff --git a/packages/boost/boost-jam-native_3.1.9.bb b/packages/boost/boost-jam-native_3.1.9.bb new file mode 100644 index 0000000000..e13d160a37 --- /dev/null +++ b/packages/boost/boost-jam-native_3.1.9.bb @@ -0,0 +1,35 @@ +# The Boost web site provides free peer-reviewed portable +# C++ source libraries. The emphasis is on libraries which +# work well with the C++ Standard Library. The libraries are +# intended to be widely useful, and are in regular use by +# thousands of programmers across a broad spectrum of applications. +DESCRIPTION = "Make system for boost (native)" +HOMEPAGE = "http://www.boost.org/" +MAINTAINER = "John Bowler <jbowler@acm.org>" +SECTION = "devel" +PRIORITY = "optional" +LICENSE = "Boost Software License" + +SRC_URI = "http://download.sourceforge.net/boost/boost-jam-${PV}.tgz" + +inherit native + +S = "${WORKDIR}/boost-jam-${PV}" + +do_compile() { + set -ex + rm -rf bin.* + ./build.sh gcc +} + +# This is too terrible - the build script doesn't give any good +# way I can see to find out where the binaries are placed, so +# rely on only one bin.foo directory being created. +do_stage() { + set -ex + install -c -m 755 bin.*/jam ${bindir} + install -c -m 755 bin.*/mkjambase ${bindir} + install -c -m 755 bin.*/yyacc ${bindir} + rm -f ${bindir}/bjam + ln ${bindir}/jam ${bindir}/bjam +} diff --git a/packages/boost/boost_1.32.0.bb b/packages/boost/boost_1.32.0.bb new file mode 100644 index 0000000000..2dd2a0da28 --- /dev/null +++ b/packages/boost/boost_1.32.0.bb @@ -0,0 +1,139 @@ +# The Boost web site provides free peer-reviewed portable +# C++ source libraries. The emphasis is on libraries which +# work well with the C++ Standard Library. The libraries are +# intended to be widely useful, and are in regular use by +# thousands of programmers across a broad spectrum of applications. +DESCRIPTION = "Free peer-reviewed portable C++ source libraries" +HOMEPAGE = "http://www.boost.org/" +MAINTAINER = "John Bowler <jbowler@acm.org>" +SECTION = "devel" +PRIORITY = "optional" +LICENSE = "Boost Software License" +PR = "r1" + +# need debian package naming for the libs +inherit debian + +DEPENDS += "boost-jam-native" + +BOOST_VER = "${@"_".join(bb.data.getVar("PV",d,1).split("."))}" +BOOST_MAJ = "${@"_".join(bb.data.getVar("PV",d,1).split(".")[0:2])}" +BOOST_P = "boost_${BOOST_VER}" +SRC_URI = "http://download.sourceforge.net/boost/${BOOST_P}.tar.bz2 \ + file://unit_test_log10f.patch;patch=1 \ + file://linux-uclibc.patch;patch=1 \ + " + +S = "${WORKDIR}/${BOOST_P}" + +# Make a package for each library, plus -dev and -python +PACKAGES = + +PACKAGES += boost-date-time +FILES_boost-date-time = "${libdir}/libboost_date_time.so.${PV}" + +PACKAGES += boost-filesystem +FILES_boost-filesystem = "${libdir}/libboost_filesystem.so.${PV}" + +PACKAGES += boost-prg-exec-monitor +FILES_boost-prg-exec-monitor = "${libdir}/libboost_prg_exec_monitor.so.${PV}" + +PACKAGES += boost-program-options +FILES_boost-program-options = "${libdir}/libboost_program_options.so.${PV}" + +PACKAGES += boost-regex +FILES_boost-regex = "${libdir}/libboost_regex.so.${PV}" + +PACKAGES += boost-signals +FILES_boost-signals = "${libdir}/libboost_signals.so.${PV}" + +PACKAGES += boost-test-exec-monitor +FILES_boost-test-exec-monitor = "${libdir}/libboost_test_exec_monitor.so.${PV}" + +PACKAGES += boost-thread-mt +FILES_boost-thread-mt = "${libdir}/libboost_thread-mt.so.${PV}" + +PACKAGES += boost-unit-test-framework +FILES_boost-unit-test-framework = "${libdir}/libboost_unit_test_framework.so.${PV}" + +# Python - remove this and set: +#PYTHON_ROOT = "/dev/null" +# to remove the python build +DEPENDS += "python" +PYTHON_ROOT = "${STAGING_DIR}/${HOST_SYS}" +PYTHON_VERSION = "2.4" + +PACKAGES += boost-python +FILES_boost-python = "${libdir}/libboost_python.so.${PV}" + +# -dev last to pick up the remaining stuff +PACKAGES += "${PN}-dev" +FILES_${PN}-dev = "${includedir} ${libdir}/libboost_*.so ${libdir}/libboost_*.a" + +# Oh yippee, a new build system, it's sooo cooool I could eat my own +# foot. inlining=on lets the compiler choose, I think. At least this +# stuff is documented... +# NOTE: if you leave <debug-symbols>on then in a debug build the build sys +# objcopy will be invoked, and that won't work. Building debug apparently +# requires hacking gcc-tools.jam +# +# Sometimes I wake up screaming. Famous figures are gathered in the nightmare, +# Steve Bourne, Larry Wall, the whole of the ANSI C committee. They're just +# standing there, waiting, but the truely terrifying thing is what they carry +# in their hands. At first sight each seems to bear the same thing, but it is +# not so for the forms in their grasp are ever so slightly different one from +# the other. Each is twisted in some grotesque way from the other to make each +# an unspeakable perversion impossible to perceive without the onset of madness. +# True insanity awaits anyone who perceives all of these horrors together. +# +# Quotation marks, there might be an easier way to do this, but I can't find +# it. The problem is that the user.hpp configuration file must receive a +# pre-processor macro defined as the appropriate string - complete with "'s +# around it. (<> is a possibility here but the danger to that is that the +# failure case interprets the < and > as shell redirections, creating +# random files in the source tree.) +# +#bjam: '-DBOOST_PLATFORM_CONFIG=\"config\"' +#do_compile: '-sGCC=... '"'-DBOOST_PLATFORM_CONFIG=\"config\"'" +SQD = '"' +EQD = '\"' +#boost.bb: "... '-sGCC=... '${SQD}'-DBOOST_PLATFORM_CONFIG=${EQD}config${EQD}'${SQD} ..." +BJAM_CONF = "${SQD}'-DBOOST_PLATFORM_CONFIG=${EQD}boost/config/platform/${TARGET_OS}.hpp${EQD}'${SQD}" + +BJAM_TOOLS = "-sTOOLS=gcc \ + '-sGCC=${CC} '${BJAM_CONF} \ + '-sGXX=${CXX} '${BJAM_CONF} \ + -sBUILD='release <optimization>space <inlining>on <debug-symbols>off' \ + '-sPYTHON_VERSION=${PYTHON_VERSION}' \ + --layout=system \ + " + +BJAM_OPTS = '${BJAM_TOOLS} \ + --builddir=${S}/${TARGET_SYS} \ + --with-python-root=${PYTHON_ROOT} \ + ${BJAM_EXTRA}' + + +do_compile() { + set -ex + bjam ${BJAM_OPTS} --prefix=${prefix} \ + --exec-prefix=${exec_prefix} \ + --libdir=${libdir} \ + --includedir=${includedir} +} + +do_stage() { + set -ex + bjam ${BJAM_OPTS} \ + --libdir=${STAGING_LIBDIR} \ + --includedir=${STAGING_INCDIR} \ + install +} + +do_install() { + set -ex + bjam ${BJAM_OPTS} \ + --libdir=${D}${libdir} \ + --includedir=${D}${includedir} \ + install +} diff --git a/packages/boost/files/.mtn2git_empty b/packages/boost/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/boost/files/.mtn2git_empty diff --git a/packages/boost/files/linux-uclibc.patch b/packages/boost/files/linux-uclibc.patch new file mode 100644 index 0000000000..79f14dea88 --- /dev/null +++ b/packages/boost/files/linux-uclibc.patch @@ -0,0 +1,10 @@ +--- /dev/null 1969-12-31 16:00:00.000000000 -0800 ++++ boost_1_32_0/boost/config/platform/linux-uclibc.hpp 2005-07-05 14:51:56.237294460 -0700 +@@ -0,0 +1,7 @@ ++// Modifications required to support uClibC libc implementation. ++// Default to Linux... ++#include "linux.hpp" ++ ++// Override anything uClibC doesn't support. ++// At present (0.9.27) the nl_types.h header exists but is not implemented ++#undef BOOST_HAS_NL_TYPES_H diff --git a/packages/boost/files/unit_test_log10f.patch b/packages/boost/files/unit_test_log10f.patch new file mode 100644 index 0000000000..b235e12446 --- /dev/null +++ b/packages/boost/files/unit_test_log10f.patch @@ -0,0 +1,20 @@ +--- boost_1_32_0/libs/test/src/unit_test_result.cpp.orig 2005-07-05 11:00:53.887594850 -0700 ++++ boost_1_32_0/libs/test/src/unit_test_result.cpp 2005-07-05 11:01:20.683533034 -0700 +@@ -144,7 +144,7 @@ + unit_test_counter num_passed, unit_test_counter num_failed ) + { + unit_test_counter total_test_cases = num_passed + num_failed; +- std::size_t width = static_cast<std::size_t>( std::log10( (float)(std::max)( num_passed, num_failed ) ) ) + 1; ++ std::size_t width = static_cast<std::size_t>( std::log10( (double)(std::max)( num_passed, num_failed ) ) ) + 1; + + where_to << std::setw( indent ) << "" << std::setw( width ) << num_passed + << " test " << ps_name( num_passed != 1, "case" ) << " out of " << total_test_cases << " passed\n" +@@ -158,7 +158,7 @@ + { + unit_test_counter total_assertions = num_passed + num_failed; + std::size_t width = total_assertions > 0 +- ? static_cast<std::size_t>( std::log10( (float)(std::max)( num_passed, num_failed ) ) ) + 1 ++ ? static_cast<std::size_t>( std::log10( (double)(std::max)( num_passed, num_failed ) ) ) + 1 + : 1; + + where_to << std::setw( indent ) << "" << std::setw( width ) << num_passed diff --git a/packages/cyrus-imapd/cyrus-imapd_2.2.12.bb b/packages/cyrus-imapd/cyrus-imapd_2.2.12.bb index 2d385ec154..b1e6b8a257 100644 --- a/packages/cyrus-imapd/cyrus-imapd_2.2.12.bb +++ b/packages/cyrus-imapd/cyrus-imapd_2.2.12.bb @@ -1,5 +1,5 @@ SECTION = "console/network" -DEPENDS = "cyrus-sasl" +DEPENDS = "cyrus-sasl db3" PR = "r0" LICENSE = "BSD" @@ -10,7 +10,8 @@ SRC_URI = "ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-imapd-${PV}.tar.gz \ inherit autotools EXTRA_OECONF = "--with-auth=unix \ - --without-perl" + --without-perl \ + --without-snmp" FILES_${PN} += "${prefix}/cyrus/bin" diff --git a/packages/devio/devio-native_r2.bb b/packages/devio/devio-native_r2.bb new file mode 100644 index 0000000000..6f4e9b7f7e --- /dev/null +++ b/packages/devio/devio-native_r2.bb @@ -0,0 +1,7 @@ +# This package builds the devio program for the build architecture +include devio_${PV}.bb + +# Set the installation dir back to the default +sbindir = "${exec_prefix}/sbin" + +inherit native diff --git a/packages/devio/devio_r2.bb b/packages/devio/devio_r2.bb new file mode 100644 index 0000000000..4dc70b2311 --- /dev/null +++ b/packages/devio/devio_r2.bb @@ -0,0 +1,25 @@ +# This package builds the devio program +PR = "r0" +DESCRIPTION = "devio - block devio io" +HOMEPAGE = "http://devio.sourceforge.net/" +MAINTAINER = "John Bowler <jbowler@acm.org>" +SECTION = "base" +LICENSE = "MIT" + +SRC_URI = "cvs://anonymous@cvs.sourceforge.net/cvsroot/devio;method=pserver;module=devio;tag=${PV}" +# This accesses the head version, anonymous pserver access is +# only updated once per day (and it is necessary to change +# 'jbowler' to the name of a developer with ssh access.) +#SRC_URI = "cvs://jbowler@cvs.sourceforge.net/cvsroot/devio;method=ext;rsh=ssh;tag=HEAD;module=devio" + +# The source will end up in the subdirectory 'devio' - no release name +S = "${WORKDIR}/devio" + +# Just the one package at present +PACKAGES = "${PN}" + +# Set the install dir to /sbin, not /usr/sbin, because devio is used +# during bootstrap (we want it to be posible to mount /usr separately) +sbindir = "/sbin" + +inherit autotools diff --git a/packages/gphoto2/gphoto2_2.1.6.bb b/packages/gphoto2/gphoto2_2.1.6.bb new file mode 100644 index 0000000000..51dacccd0f --- /dev/null +++ b/packages/gphoto2/gphoto2_2.1.6.bb @@ -0,0 +1,8 @@ +LICENSE = GPL +SECTION = "console/utils" +DEPENDS = "libgphoto2 popt" +DESCRIPTION = "gphoto2 is a command-line utility to fetch pictures from digital cameras" + +SRC_URI = "${SOURCEFORGE_MIRROR}/gphoto/gphoto2-${PV}.tar.gz" + +inherit autotools diff --git a/packages/libgphoto2/libgphoto2_2.1.6.bb b/packages/libgphoto2/libgphoto2_2.1.6.bb new file mode 100644 index 0000000000..67efc38785 --- /dev/null +++ b/packages/libgphoto2/libgphoto2_2.1.6.bb @@ -0,0 +1,32 @@ +SECTION = "libs" +DEPENDS = "jpeg libusb libexif" +RPEDENDS = "libusb" +DESCRIPTION = "libgphoto2 allows you to access digital cameras" +PR = "r3" + +SRC_URI = "${SOURCEFORGE_MIRROR}/gphoto/libgphoto2-${PV}.tar.gz" + +EXTRA_OECONF = " --with-drivers=all" +EXTRA_OECONF_mnci = "--with-drivers=canon --without-serial" +LICENSE = "GPL" +inherit autotools pkgconfig + +do_stage() { + install -d ${STAGING_LIBDIR} + mv libgphoto2/.libs/libgphoto2.so.2.0.3T libgphoto2/.libs/libgphoto2.so.2.0.3 || true + oe_libinstall -so -C libgphoto2 libgphoto2 ${STAGING_LIBDIR} + oe_libinstall -so -C libgphoto2_port/libgphoto2_port libgphoto2_port ${STAGING_LIBDIR} + + install -d ${STAGING_LIBDIR}/gphoto2/2.0 + oe_libinstall -so -C camlibs/canon libgphoto2_canon.so ${STAGING_LIBDIR}/gphoto2/2.0 + + install -d ${STAGING_INCDIR}/gphoto2 + for X in gphoto2-abilities-list.h gphoto2-camera.h gphoto2-context.h gphoto2-file.h gphoto2-filesys.h gphoto2.h gphoto2-library.h gphoto2-list.h gphoto2-result.h gphoto2-setting.h gphoto2-version.h gphoto2-widget.h + do + install -m 0644 ${S}/libgphoto2/$X ${STAGING_INCDIR}/gphoto2/$X + done + for X in gphoto2-port.h gphoto2-port-info-list.h gphoto2-port-log.h gphoto2-port-version.h gphoto2-port-portability.h gphoto2-port-result.h + do + install -m 0644 ${S}/libgphoto2_port/libgphoto2_port/$X ${STAGING_INCDIR}/gphoto2/$X + done +} diff --git a/packages/libusb/libusb-0.1.10a/.mtn2git_empty b/packages/libusb/libusb-0.1.10a/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/libusb/libusb-0.1.10a/.mtn2git_empty diff --git a/packages/libusb/libusb-0.1.10a/debian-changes.patch b/packages/libusb/libusb-0.1.10a/debian-changes.patch new file mode 100644 index 0000000000..6f79bc7950 --- /dev/null +++ b/packages/libusb/libusb-0.1.10a/debian-changes.patch @@ -0,0 +1,407 @@ +diff -urN libusb_0.1.10a.orig/bsd.c libusb-0.1.10a/bsd.c +--- libusb_0.1.10a.orig/bsd.c 2004-02-18 08:34:52.000000000 +0100 ++++ libusb-0.1.10a/bsd.c 2005-06-30 19:40:00.000000000 +0200 +@@ -25,6 +25,10 @@ + * for both read and write. + */ + ++#if defined(__FreeBSD__) && !defined(__FreeBSD_kernel__) ++#define __FreeBSD_kernel__ __FreeBSD__ ++#endif ++ + #include <stdlib.h> + #include <unistd.h> + #include <string.h> +@@ -142,7 +146,7 @@ + USB_ERROR(-ENOMEM); + dev->impl_info = info; + +-#if __FreeBSD__ ++#ifdef __FreeBSD_kernel__ + snprintf(ctlpath, PATH_MAX, "%s", dev->device->filename); + #else + snprintf(ctlpath, PATH_MAX, "%s.00", dev->device->filename); +@@ -255,7 +259,7 @@ + ep = UE_GET_ADDR(ep); + + if (info->ep_fd[ep] < 0) { +-#if __FreeBSD__ ++#ifdef __FreeBSD_kernel__ + snprintf(buf, sizeof(buf) - 1, "%s.%d", dev->device->filename, ep); + #else + snprintf(buf, sizeof(buf) - 1, "%s.%02d", dev->device->filename, ep); +@@ -286,7 +290,7 @@ + fd = ensure_ep_open(dev, ep, O_WRONLY); + if (fd < 0) { + if (usb_debug >= 2) { +-#if __FreeBSD__ ++#ifdef __FreeBSD_kernel__ + fprintf (stderr, "usb_bulk_write: got negative open file descriptor for endpoint %d\n", UE_GET_ADDR(ep)); + #else + fprintf (stderr, "usb_bulk_write: got negative open file descriptor for endpoint %02d\n", UE_GET_ADDR(ep)); +@@ -302,7 +306,7 @@ + + ret = write(fd, bytes, size); + if (ret < 0) +-#if __FreeBSD__ ++#ifdef __FreeBSD_kernel__ + USB_ERROR_STR(-errno, "error writing to bulk endpoint %s.%d: %s", + dev->device->filename, UE_GET_ADDR(ep), strerror(errno)); + #else +@@ -324,7 +328,7 @@ + fd = ensure_ep_open(dev, ep, O_RDONLY); + if (fd < 0) { + if (usb_debug >= 2) { +-#if __FreeBSD__ ++#ifdef __FreeBSD_kernel__ + fprintf (stderr, "usb_bulk_read: got negative open file descriptor for endpoint %d\n", UE_GET_ADDR(ep)); + #else + fprintf (stderr, "usb_bulk_read: got negative open file descriptor for endpoint %02d\n", UE_GET_ADDR(ep)); +@@ -343,7 +347,7 @@ + + ret = read(fd, bytes, size); + if (ret < 0) +-#if __FreeBSD__ ++#ifdef __FreeBSD_kernel__ + USB_ERROR_STR(-errno, "error reading from bulk endpoint %s.%d: %s", + dev->device->filename, UE_GET_ADDR(ep), strerror(errno)); + #else +@@ -365,7 +369,7 @@ + fd = ensure_ep_open(dev, ep, O_WRONLY); + if (fd < 0) { + if (usb_debug >= 2) { +-#if __FreeBSD__ ++#ifdef __FreeBSD_kernel__ + fprintf (stderr, "usb_interrupt_write: got negative open file descriptor for endpoint %d\n", UE_GET_ADDR(ep)); + #else + fprintf (stderr, "usb_interrupt_write: got negative open file descriptor for endpoint %02d\n", UE_GET_ADDR(ep)); +@@ -382,7 +386,7 @@ + do { + ret = write(fd, bytes+sent, size-sent); + if (ret < 0) +-#if __FreeBSD__ ++#ifdef __FreeBSD_kernel__ + USB_ERROR_STR(-errno, "error writing to interrupt endpoint %s.%d: %s", + dev->device->filename, UE_GET_ADDR(ep), strerror(errno)); + #else +@@ -407,7 +411,7 @@ + fd = ensure_ep_open(dev, ep, O_RDONLY); + if (fd < 0) { + if (usb_debug >= 2) { +-#if __FreeBSD__ ++#ifdef __FreeBSD_kernel__ + fprintf (stderr, "usb_interrupt_read: got negative open file descriptor for endpoint %d\n", UE_GET_ADDR(ep)); + #else + fprintf (stderr, "usb_interrupt_read: got negative open file descriptor for endpoint %02d\n", UE_GET_ADDR(ep)); +@@ -427,7 +431,7 @@ + do { + ret = read(fd, bytes+retrieved, size-retrieved); + if (ret < 0) +-#if __FreeBSD__ ++#ifdef __FreeBSD_kernel__ + USB_ERROR_STR(-errno, "error reading from interrupt endpoint %s.%d: %s", + dev->device->filename, UE_GET_ADDR(ep), strerror(errno)); + #else +@@ -543,7 +547,7 @@ + /* best not to play with things we don't understand */ + continue; + +-#if __FreeBSD__ ++#ifdef __FreeBSD_kernel__ + snprintf(buf, sizeof(buf) - 1, "/dev/%s", di.udi_devnames[0]); + #else + snprintf(buf, sizeof(buf) - 1, "/dev/%s.00", di.udi_devnames[0]); +diff -urN libusb_0.1.10a.orig/linux.c libusb-0.1.10a/linux.c +--- libusb_0.1.10a.orig/linux.c 2005-02-11 03:16:10.000000000 +0100 ++++ libusb-0.1.10a/linux.c 2005-06-30 19:40:00.000000000 +0200 +@@ -156,6 +156,8 @@ + return ret; + } + ++#define URB_USERCONTEXT_COOKIE ((void *)0x1) ++ + /* Reading and writing are the same except for the endpoint */ + static int usb_urb_transfer(usb_dev_handle *dev, int ep, int urbtype, + char *bytes, int size, int timeout) +@@ -163,14 +165,16 @@ + struct usb_urb urb; + unsigned int bytesdone = 0, requested; + struct timeval tv, tv_ref, tv_now; +- void *context; ++ struct usb_urb *context; + int ret, waiting; + + /* +- * FIXME: The use of the URB interface is incorrect here if there are +- * multiple callers at the same time. We assume we're the only caller +- * and if we get completions from another caller, this code will fail +- * in interesting ways. ++ * HACK: The use of urb.usercontext is a hack to get threaded applications ++ * sort of working again. Threaded support is still not recommended, but ++ * this should allow applications to work in the common cases. Basically, ++ * if we get the completion for an URB we're not waiting for, then we update ++ * the usercontext pointer to 1 for the other threads URB and it will see ++ * the change after it wakes up from the the timeout. Ugly, but it works. + */ + + /* +@@ -198,10 +202,10 @@ + urb.flags = 0; + urb.buffer = bytes + bytesdone; + urb.buffer_length = requested; +- urb.usercontext = (void *)ep; + urb.signr = 0; + urb.actual_length = 0; + urb.number_of_packets = 0; /* don't do isochronous yet */ ++ urb.usercontext = NULL; + + ret = ioctl(dev->fd, IOCTL_USB_SUBMITURB, &urb); + if (ret < 0) { +@@ -212,18 +216,28 @@ + FD_ZERO(&writefds); + FD_SET(dev->fd, &writefds); + ++restart: + waiting = 1; +- while (((ret = ioctl(dev->fd, IOCTL_USB_REAPURBNDELAY, &context)) == -1) && waiting) { ++ context = NULL; ++ while (!urb.usercontext && ((ret = ioctl(dev->fd, IOCTL_USB_REAPURBNDELAY, &context)) == -1) && waiting) { + tv.tv_sec = 0; + tv.tv_usec = 1000; // 1 msec + select(dev->fd + 1, NULL, &writefds, NULL, &tv); //sub second wait + +- /* compare with actual time, as the select timeout is not that precise */ +- gettimeofday(&tv_now, NULL); ++ if (timeout) { ++ /* compare with actual time, as the select timeout is not that precise */ ++ gettimeofday(&tv_now, NULL); ++ ++ if ((tv_now.tv_sec > tv_ref.tv_sec) || ++ ((tv_now.tv_sec == tv_ref.tv_sec) && (tv_now.tv_usec >= tv_ref.tv_usec))) ++ waiting = 0; ++ } ++ } + +- if ((tv_now.tv_sec > tv_ref.tv_sec) || +- ((tv_now.tv_sec == tv_ref.tv_sec) && (tv_now.tv_usec >= tv_ref.tv_usec))) +- waiting = 0; ++ if (context && context != &urb) { ++ context->usercontext = URB_USERCONTEXT_COOKIE; ++ /* We need to restart since we got a successful URB, but not ours */ ++ goto restart; + } + + /* +@@ -231,14 +245,14 @@ + * something happened during the reaping and we should return that + * error now + */ +- if (ret < 0 && errno != EAGAIN) ++ if (ret < 0 && !urb.usercontext && errno != EAGAIN) + USB_ERROR_STR(-errno, "error reaping URB: %s", strerror(errno)); + + bytesdone += urb.actual_length; +- } while (ret == 0 && bytesdone < size && urb.actual_length == requested); ++ } while ((ret == 0 || urb.usercontext) && bytesdone < size && urb.actual_length == requested); + + /* If the URB didn't complete in success or error, then let's unlink it */ +- if (ret < 0) { ++ if (ret < 0 && !urb.usercontext) { + int rc; + + if (!waiting) +diff -urN libusb_0.1.10a.orig/usb.h.in libusb-0.1.10a/usb.h.in +--- libusb_0.1.10a.orig/usb.h.in 2004-08-03 20:20:38.000000000 +0200 ++++ libusb-0.1.10a/usb.h.in 2005-06-30 19:40:00.000000000 +0200 +@@ -13,8 +13,9 @@ + + #include <unistd.h> + #include <stdlib.h> ++#include <stdint.h> + #include <limits.h> +- ++#include <sys/param.h> + #include <dirent.h> + + /* +@@ -63,40 +64,40 @@ + + /* All standard descriptors have these 2 fields in common */ + struct usb_descriptor_header { +- u_int8_t bLength; +- u_int8_t bDescriptorType; +-}; ++ uint8_t bLength; ++ uint8_t bDescriptorType; ++} __attribute__ ((packed)); + + /* String descriptor */ + struct usb_string_descriptor { +- u_int8_t bLength; +- u_int8_t bDescriptorType; +- u_int16_t wData[1]; +-}; ++ uint8_t bLength; ++ uint8_t bDescriptorType; ++ uint16_t wData[1]; ++} __attribute__ ((packed)); + + /* HID descriptor */ + struct usb_hid_descriptor { +- u_int8_t bLength; +- u_int8_t bDescriptorType; +- u_int16_t bcdHID; +- u_int8_t |
