diff --git a/src/main/c/.gitignore b/src/main/c/.gitignore new file mode 100644 index 0000000..ddb0e92 --- /dev/null +++ b/src/main/c/.gitignore @@ -0,0 +1 @@ +/downloads diff --git a/src/main/c/build/linux-x86.sh b/src/main/c/build/linux-x86.sh index 050e45b..889864d 100755 --- a/src/main/c/build/linux-x86.sh +++ b/src/main/c/build/linux-x86.sh @@ -12,27 +12,49 @@ # library. set -e -cd $(dirname $0)/.. +cd "$(dirname $0)/.." -OS=linux -ARCH=x86 -TMPDIR=$(pwd)/tmp -DISTDIR=$(pwd)/../resources/de/ailis/usb4java/jni/${OS}-${ARCH} +OS="linux" +ARCH="x86" +LIBUSBX_VERSION="1.0.14" +LIBUSBX_ARCHIVE="libusbx-$LIBUSBX_VERSION.tar.bz2" +TMPDIR="$(pwd)/tmp" +DOWNLOADS="$(pwd)/downloads" +DISTDIR="$(pwd)/../resources/de/ailis/usb4java/libusb/${OS}-${ARCH}" # Clean up -rm -rf $TMPDIR -rm -rf $DISTDIR +rm -rf "$TMPDIR" +rm -rf "$DISTDIR" -# Build autoconf stuff if needed +# Download libusbx if necessary +mkdir -p "$DOWNLOADS" +if [ ! -e "$DOWNLOADS/$LIBUSBX_ARCHIVE" ] +then + wget -O "$DOWNLOADS/$LIBUSBX_ARCHIVE" "http://downloads.sourceforge.net/project/libusbx/releases/$LIBUSBX_VERSION/source/$LIBUSBX_ARCHIVE" +fi + +# Unpack and compile libusbx +mkdir -p "$TMPDIR" +cd "$TMPDIR" +tar xfj "$DOWNLOADS/$LIBUSBX_ARCHIVE" +cd "libusbx-$LIBUSBX_VERSION" +CFLAGS="-m32" ./configure "--prefix=$TMPDIR" --disable-shared --with-pic +make +make install + +# Build autoconf stuff of usb4java if needed +cd "$TMPDIR/.." if [ ! -e configure ] then make -f Makefile.scm fi # Build libusb4java -./configure --prefix=/ CFLAGS="-m32" -make clean install-strip DESTDIR=$TMPDIR -mkdir -p $DISTDIR -cp -faL $TMPDIR/lib/libusb4java.so $DISTDIR/ -chmod -x $DISTDIR/libusb4java.so +PKG_CONFIG_PATH="$TMPDIR/lib/pkgconfig" CFLAGS="-m32" ./configure --prefix=/ +make clean install-strip DESTDIR="$TMPDIR" +mkdir -p "$DISTDIR" +cp -faL "$TMPDIR/lib/libusb4java.so" "$DISTDIR/" +chmod -x "$DISTDIR/libusb4java.so" + +# Cleanup rm -rf $TMPDIR diff --git a/src/main/c/build/linux-x86_64.sh b/src/main/c/build/linux-x86_64.sh index 723da20..1bcd925 100755 --- a/src/main/c/build/linux-x86_64.sh +++ b/src/main/c/build/linux-x86_64.sh @@ -1,31 +1,60 @@ #!/bin/sh # -# Builds libusb4java for 64 bit linux. -# Must be executed on 64 bit linux machine and must have libusb-1.0-0-dev -# installed. +# Builds libusb4java for 32 bit linux. +# +# If running on 32 bit linux you just need libusb-1.0-0-dev. +# +# If running on 64 bit linux you need ia32-libs-dev and libc6-dev-i386 +# or gcc-multilib and libusb-1.0-0:i386 or something like that on newer +# systems. Depending on your multilib installation it may be required to +# create a manual symlink libusb.so in /lib/i386-linux-gnu or otherwise +# compilation will fail because the compiler can't find the 32 bit +# library. set -e -cd $(dirname $0)/.. +cd "$(dirname $0)/.." -OS=linux -ARCH=x86_64 -TMPDIR=$(pwd)/tmp -DISTDIR=$(pwd)/../resources/de/ailis/usb4java/libusb/${OS}-${ARCH} +OS="linux" +ARCH="x86_64" +LIBUSBX_VERSION="1.0.14" +LIBUSBX_ARCHIVE="libusbx-$LIBUSBX_VERSION.tar.bz2" +TMPDIR="$(pwd)/tmp" +DOWNLOADS="$(pwd)/downloads" +DISTDIR="$(pwd)/../resources/de/ailis/usb4java/libusb/${OS}-${ARCH}" # Clean up -rm -rf $TMPDIR -rm -rf $DISTDIR/libusb4java.so +rm -rf "$TMPDIR" +rm -rf "$DISTDIR" -# Build autoconf stuff if needed +# Download libusbx if necessary +mkdir -p "$DOWNLOADS" +if [ ! -e "$DOWNLOADS/$LIBUSBX_ARCHIVE" ] +then + wget -O "$DOWNLOADS/$LIBUSBX_ARCHIVE" "http://downloads.sourceforge.net/project/libusbx/releases/$LIBUSBX_VERSION/source/$LIBUSBX_ARCHIVE" +fi + +# Unpack and compile libusbx +mkdir -p "$TMPDIR" +cd "$TMPDIR" +tar xfj "$DOWNLOADS/$LIBUSBX_ARCHIVE" +cd "libusbx-$LIBUSBX_VERSION" +./configure "--prefix=$TMPDIR" --disable-shared --with-pic +make +make install + +# Build autoconf stuff of usb4java if needed +cd "$TMPDIR/.." if [ ! -e configure ] then make -f Makefile.scm fi # Build libusb4java -./configure --prefix=/ CFLAGS="-m64" -make clean install-strip DESTDIR=$TMPDIR -mkdir -p $DISTDIR -cp -faL $TMPDIR/lib/libusb4java.so $DISTDIR/ -chmod -x $DISTDIR/libusb4java.so +PKG_CONFIG_PATH="$TMPDIR/lib/pkgconfig" ./configure --prefix=/ +make clean install-strip DESTDIR="$TMPDIR" +mkdir -p "$DISTDIR" +cp -faL "$TMPDIR/lib/libusb4java.so" "$DISTDIR/" +chmod -x "$DISTDIR/libusb4java.so" + +# Cleanup rm -rf $TMPDIR diff --git a/src/main/c/src/Makefile.am b/src/main/c/src/Makefile.am index 1ae9bf9..d9a725b 100644 --- a/src/main/c/src/Makefile.am +++ b/src/main/c/src/Makefile.am @@ -1,6 +1,6 @@ lib_LTLIBRARIES = libusb4java.la libusb4java_la_CFLAGS = -Wall -Werror $(LIBUSB_CFLAGS) -libusb4java_la_LIBADD = $(LIBUSB_LIBS) +libusb4java_la_LIBADD = $(LIBUSB_LIBS) -lrt libusb4java_la_LDFLAGS = -version-info 1:0:0 -no-undefined EXTRA_DIST = *.h libusb4java_la_SOURCES = \ diff --git a/src/main/java/de/ailis/usb4java/libusb/Loader.java b/src/main/java/de/ailis/usb4java/libusb/Loader.java index f467ecd..0f8817d 100644 --- a/src/main/java/de/ailis/usb4java/libusb/Loader.java +++ b/src/main/java/de/ailis/usb4java/libusb/Loader.java @@ -191,7 +191,7 @@ public final class Loader private static String getExtraLibName() { final String os = getOS(); - if (os.equals(OS_LINUX)) return "libusb-1.0." + EXT_SO; + if (os.equals(OS_LINUX)) return null; if (os.equals(OS_WINDOWS)) return "libusb0." + EXT_DLL; if (os.equals(OS_MACOSX)) return "libusb." + EXT_DYLIB; return null; diff --git a/src/main/resources/de/ailis/usb4java/libusb/linux-x86/libusb4java.so b/src/main/resources/de/ailis/usb4java/libusb/linux-x86/libusb4java.so new file mode 100644 index 0000000..c052d30 Binary files /dev/null and b/src/main/resources/de/ailis/usb4java/libusb/linux-x86/libusb4java.so differ diff --git a/src/main/resources/de/ailis/usb4java/libusb/linux-x86_64/libusb-1.0.so b/src/main/resources/de/ailis/usb4java/libusb/linux-x86_64/libusb-1.0.so deleted file mode 100755 index 6303531..0000000 Binary files a/src/main/resources/de/ailis/usb4java/libusb/linux-x86_64/libusb-1.0.so and /dev/null differ diff --git a/src/main/resources/de/ailis/usb4java/libusb/linux-x86_64/libusb4java.so b/src/main/resources/de/ailis/usb4java/libusb/linux-x86_64/libusb4java.so index 1a23f56..835bbf7 100644 Binary files a/src/main/resources/de/ailis/usb4java/libusb/linux-x86_64/libusb4java.so and b/src/main/resources/de/ailis/usb4java/libusb/linux-x86_64/libusb4java.so differ