diff --git a/bindings/java/Makefile.am b/bindings/java/Makefile.am index 1007a3e60430584cb1990915c7484ebf23da90e7..0d5bb7777a3039ef75eb18688a436e090b899575 100644 --- a/bindings/java/Makefile.am +++ b/bindings/java/Makefile.am @@ -1,25 +1,14 @@ -Z_PATH=@Z_PATH@ -EWF_PATH=@EWF_PATH@ -ANT_PROPS= - # Compile the sub directories SUBDIRS = jni -if X_ZLIB - ANT_PROPS+=-Dlib.z.path=$(Z_PATH) -endif - -if X_LIBEWF - ANT_PROPS+=-Dlib.ewf.path=$(EWF_PATH) -endif - tsk_jar = $(top_builddir)/bindings/java/dist/Tsk_DataModel.jar jardir = $(prefix)/share/java jar_DATA = $(tsk_jar) +$(tsk_jar): -$(tsk_jar): - ant dist $(ANT_PROPS) +all-local: + ant dist CLEANFILES = $(tsk_jar) diff --git a/bindings/java/build-unix.xml b/bindings/java/build-unix.xml index 81edd272efaf026818a45c2597e07c798e7624e0..d35e7404d4bc0b90717afabcf760e37a0cc01f2f 100644 --- a/bindings/java/build-unix.xml +++ b/bindings/java/build-unix.xml @@ -23,6 +23,17 @@ </java> </target> + <target name="check-native-build" depends="check-native-build-mac,check-native-build-unix"/> + + <target name="check-native-build-mac" depends="testTSKLibs" if="tsk_dylib.present"> + <uptodate property="native-up-to-date" srcfile="./jni/.libs/libtsk_jni.dylib" + targetfile="${amd64}/mac/libtsk_jni.jnilib" /> + </target> + + <target name="check-native-build-unix" depends="testTSKLibs" if="tsk_so.present"> + <uptodate property="native-up-to-date" srcfile="./jni/.libs/libtsk_jni.so" + targetfile="${amd64}/linux/libtsk_jni.so"/> + </target> <target name="testTSKLibs"> <property environment="env"/> @@ -30,68 +41,45 @@ <available file="./jni/.libs/libtsk_jni.so" property="tsk_so.present"/> <available file="./jni/.libs/libtsk_jni.a" property="present"/> <fail unless="present" message="Run make install on The Sleuthkit."/> - <!-- Default location to find zlib and libewf. Overwritten by properties in makefile --> - <property name="lib.z.path" value="/usr/lib"/> - <property name="lib.ewf.path" value="/usr/local/lib"/> </target> <!-- OS X --> <target name="copyTskLibs_dylib" depends="testTSKLibs" if="tsk_dylib.present"> <property environment="env"/> - <copy file="./jni/.libs/libtsk_jni.dylib" tofile="./libtsk_jni.jnilib"/> + <copy file="./jni/.libs/libtsk_jni.dylib" tofile="./libtsk_jni.jnilib" overwrite="true"/> </target> <target name="copyMacLibs" depends="testTSKLibs" if="tsk_dylib.present"> <property environment="env"/> <property name="jni.dylib" location="${basedir}/jni/.libs/libtsk_jni.dylib" /> <property name="jni.jnilib" value="libtsk_jni.jnilib" /> - <property name="zlib.jni" location="${lib.z.path}/libz.dylib"/> - <property name="libewf.jni" location="${lib.ewf.path}/libewf.dylib"/> <!-- x86_64 --> - <copy file="${jni.dylib}" tofile="${x86_64}/mac/${jni.jnilib}"/> - <copy file="${zlib.jni}" tofile="${x86_64}/mac/zlib.dylib"/> - <copy file="${libewf.jni}" tofile="${x86_64}/mac/libewf.dylib"/> + <copy file="${jni.dylib}" tofile="${x86_64}/mac/${jni.jnilib}" overwrite="true"/> <!-- amd64 --> - <copy file="${jni.dylib}" tofile="${amd64}/mac/${jni.jnilib}"/> - <copy file="${zlib.jni}" tofile="${amd64}/mac/zlib.dylib"/> - <copy file="${libewf.jni}" tofile="${amd64}/mac/libewf.dylib"/> + <copy file="${jni.dylib}" tofile="${amd64}/mac/${jni.jnilib}" overwrite="true"/> </target> <!-- Non-OS X --> <target name="copyTskLibs_so" depends="testTSKLibs" if="tsk_so.present"> <property environment="env"/> - <copy file="./jni/.libs/libtsk_jni.so" tofile="./libtsk_jni.so"/> + <copy file="./jni/.libs/libtsk_jni.so" tofile="./libtsk_jni.so" overwrite="true"/> </target> <target name="copyLinuxLibs" depends="testTSKLibs" if="tsk_so.present"> <property environment="env"/> <property name="jni.so" location="${basedir}/jni/.libs/libtsk_jni.so" /> - <property name="zlib.so" location="${lib.z.path}/libz.so"/> - <property name="libewf.so" location="${lib.ewf.path}/libewf.so"/> <!-- x86_64 --> - <copy file="${jni.so}" tofile="${x86_64}/linux/libtsk_jni.so"/> - <copy file="${zlib.so}" tofile="${x86_64}/linux/libz.so"/> - <copy file="${libewf.so}" tofile="${x86_64}/linux/libewf.so"/> + <copy file="${jni.so}" tofile="${x86_64}/linux/libtsk_jni.so" overwrite="true"/> <!-- amd64 --> - <copy file="${jni.so}" tofile="${amd64}/linux/libtsk_jni.so"/> - <copy file="${zlib.so}" tofile="${amd64}/linux/libz.so"/> - <copy file="${libewf.so}" tofile="${amd64}/linux/libewf.so"/> + <copy file="${jni.so}" tofile="${amd64}/linux/libtsk_jni.so" overwrite="true"/> <!-- x86 --> - <copy file="${jni.so}" tofile="${x86}/linux/libtsk_jni.so"/> - <copy file="${zlib.so}" tofile="${x86}/linux/libz.so"/> - <copy file="${libewf.so}" tofile="${x86}/linux/libewf.so"/> + <copy file="${jni.so}" tofile="${x86}/linux/libtsk_jni.so" overwrite="true"/> <!-- i386 --> - <copy file="${jni.so}" tofile="${i386}/linux/libtsk_jni.so"/> - <copy file="${zlib.so}" tofile="${i386}/linux/libz.so"/> - <copy file="${libewf.so}" tofile="${i386}/linux/libewf.so"/> + <copy file="${jni.so}" tofile="${i386}/linux/libtsk_jni.so" overwrite="true"/> <!-- i586 --> - <copy file="${jni.so}" tofile="${i586}/linux/libtsk_jni.so"/> - <copy file="${zlib.so}" tofile="${i586}/linux/libz.so"/> - <copy file="${libewf.so}" tofile="${i586}/linux/libewf.so"/> + <copy file="${jni.so}" tofile="${i586}/linux/libtsk_jni.so" overwrite="true"/> <!-- i686 --> - <copy file="${jni.so}" tofile="${i686}/linux/libtsk_jni.so"/> - <copy file="${zlib.so}" tofile="${i686}/linux/libz.so"/> - <copy file="${libewf.so}" tofile="${i686}/linux/libewf.so"/> + <copy file="${jni.so}" tofile="${i686}/linux/libtsk_jni.so" overwrite="true"/> </target> <target name="copyLibs" depends="copyLinuxLibs,copyMacLibs" /> diff --git a/bindings/java/build-windows.xml b/bindings/java/build-windows.xml index 821ae120fb659a6ad14e1e2d3426057d441ad567..40c6a38396aba76c49ee6f5fa7d7f41ce0818e51 100644 --- a/bindings/java/build-windows.xml +++ b/bindings/java/build-windows.xml @@ -33,7 +33,20 @@ <sysproperty key="types" value="${test-types}"/> </java> </target> - + + <target name="check-native-build" depends="check-build-32,check-build-64"/> + + <target name="check-build-32" if="win32.exists"> + <uptodate property="native-up-to-date" srcfile="${basedir}/../../win32/Release/libtsk_jni.dll" + targetfile="${x86}/win/libtsk_jni.dll"/> + </target> + + + <target name="check-build-64" if="win32.exists"> + <uptodate property="native-up-to-date" srcfile="${basedir}/../../win32/x64/Release/libtsk_jni.dll" + targetfile="${amd64}/win/libtsk_jni.dll"/> + </target> + <target name="copyLibs" depends="copyWinLibs" description="Copy native libs to the correct folder"> <property name="tsk.config" value="Release"/> <antcall target="copyWinLibs" /> @@ -52,65 +65,18 @@ </target> <target name="copyWinLibs64" depends="checkLibDirs" if="win64.exists"> - <property name="win64dir" location="${basedir}/../../win32/x64/${tsk.config}" /> - - <fileset dir="${win64dir}" id="win64dlls"> - <include name="*.dll" /> - </fileset> - <fileset dir="${crt}/win64" id="crt64dlls"> - <include name="*.dll" /> - </fileset> - - <copy todir="${amd64}/win" overwrite="true"> - <fileset refid="win64dlls" /> - </copy> - <copy todir="${amd64}/win" overwrite="true"> - <fileset refid="crt64dlls" /> - </copy> + <property name="tsk.jni.64" location="${basedir}/../../win32/x64/${tsk.config}/libtsk_jni.dll" /> - <copy todir="${x86_64}/win" overwrite="true"> - <fileset refid="win64dlls" /> - </copy> - <copy todir="${x86_64}/win" overwrite="true"> - <fileset refid="crt64dlls" /> - </copy> + <copy file="${tsk.jni.64}" todir="${amd64}/win" overwrite="true"/> + <copy file="${tsk.jni.64}" todir="${x86_64}/win" overwrite="true"/> </target> <target name="copyWinLibs32" depends="checkLibDirs" if="win32.exists"> - <property name="win32dir" location="${basedir}/../../win32/${tsk.config}" /> - <fileset dir="${win32dir}" id="win32dlls"> - <include name="*.dll" /> - </fileset> - <fileset dir="${crt}/win32" id="crt32dlls"> - <include name="*.dll" /> - </fileset> - - <copy todir="${i386}/win" overwrite="true"> - <fileset refid="win32dlls" /> - </copy> - <copy todir="${i386}/win" overwrite="true"> - <fileset refid="crt32dlls" /> - </copy> - - <copy todir="${x86}/win" overwrite="true"> - <fileset refid="win32dlls" /> - </copy> - <copy todir="${x86}/win" overwrite="true"> - <fileset refid="crt32dlls" /> - </copy> - - <copy todir="${i586}/win" overwrite="true"> - <fileset refid="win32dlls" /> - </copy> - <copy todir="${i586}/win" overwrite="true"> - <fileset refid="crt32dlls" /> - </copy> + <property name="tsk.jni.32" location="${basedir}/../../win32/${tsk.config}/libtsk_jni.dll" /> - <copy todir="${i686}/win" overwrite="true"> - <fileset refid="win32dlls" /> - </copy> - <copy todir="${i686}/win" overwrite="true"> - <fileset refid="crt32dlls" /> - </copy> + <copy file="${tsk.jni.32}" todir="${i386}/win" overwrite="true"/> + <copy file="${tsk.jni.32}" todir="${x86}/win" overwrite="true"/> + <copy file="${tsk.jni.32}" todir="${i586}/win" overwrite="true"/> + <copy file="${tsk.jni.32}" todir="${i686}/win" overwrite="true"/> </target> </project> diff --git a/bindings/java/build.xml b/bindings/java/build.xml index dcd3a31ba7b96eb9ee714c92b41eb16ed7317cd6..5f3725ce4db4e6ed00b88d37d22e2956b5699c98 100755 --- a/bindings/java/build.xml +++ b/bindings/java/build.xml @@ -27,7 +27,6 @@ <property name="i386" location="build/NATIVELIBS/i386" /> <property name="i586" location="build/NATIVELIBS/i586" /> <property name="i686" location="build/NATIVELIBS/i686"/> - <property name="crt" location="${basedir}/crt" /> <path id="libraries"> <fileset dir="${lib}"> @@ -116,7 +115,23 @@ pattern="lib/[artifact]-[revision](-[classifier]).[ext]" /> </javac> </target> - <target name="dist" depends="init-ivy, compile, copyLibs" + <target name="dist" depends="check-build" unless="up-to-date"> + <antcall target="dist-do"/> + </target> + + <target name="check-build" depends="check-native-build"> + <uptodate property="java-up-to-date" targetfile="${dist}/Tsk_DataModel.jar" > + <srcfiles dir="${src}" includes="**/*.java"/> + </uptodate> + <condition property="up-to-date"> + <and> + <isset property="java-up-to-date"/> + <isset property="native-up-to-date"/> + </and> + </condition> + </target> + + <target name="dist-do" depends="init-ivy, compile, copyLibs" description="generate the distribution" > <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file --> <jar jarfile="${dist}/Tsk_DataModel.jar" basedir="${build}"/> diff --git a/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java b/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java index d56ae1b52309e6d3ebd60d6c1baddf6627de180b..be8685ff9cb1831fb90c32d6118d74a53f5f5d35 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java +++ b/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java @@ -34,10 +34,6 @@ public class LibraryUtils { public static final String[] EXTS = new String[] { ".so", ".dylib", ".dll", ".jnilib" }; - - public static final Lib[] CRT_LIBS = new Lib[] { Lib.MSVCP, Lib.MSVCR }; - - public static final Lib[] OTHER_LIBS = new Lib[] { Lib.ZLIB, Lib.LIBEWF }; /** * The libraries the TSK Datamodel needs. @@ -66,51 +62,6 @@ public String getUnixName() { } } - /** - * Load all libraries needed for the current platform except the TSK JNI. - * - * @return - */ - public static boolean loadAuxilliaryLibs() { - System.out.println("Java lib path: " + System.getProperty("java.library.path")); - boolean loaded = true; - if (LibraryUtils.isWindows()) { - loaded = LibraryUtils.loadCRTLibs(); - } - - // Always try to load from jar first. - for(Lib lib : LibraryUtils.getLibs()) { - // Always try to load from jar first. - loaded = LibraryUtils.loadLibFromJar(lib); - if (!loaded) { - // if that fails, try to load from system - loaded = loadLibFromSystem(lib); - } - if (!loaded) { - System.out.println("SleuthkitJNI: failed to load " + lib.getLibName()); - } else { - System.out.println("SleuthkitJNI: loaded " + lib.getLibName()); - } - } - return loaded; - } - - /** - * Try to load the given Library from the System path. - * - * @param lib - * @return - */ - private static boolean loadLibFromSystem(Lib lib) { - String libName = (isWindows() ? lib.getLibName() : lib.getUnixName()); - try { - System.loadLibrary(libName); - } catch (UnsatisfiedLinkError e) { - return false; - } - return true; - } - /** * Load the Sleuthkit JNI. * @@ -125,42 +76,6 @@ public static boolean loadSleuthkitJNI() { } return loaded; } - - /** Load the CRT Libraries. - * - * @return - */ - private static boolean loadCRTLibs() { - boolean loaded = true; - try { - // on windows force loading ms crt dependencies first - // in case linker can't find them on some systems - // Note: if shipping with a different CRT version, this will only print a warning - // and try to use linker mechanism to find the correct versions of libs. - // We should update this if we officially switch to a new version of CRT/compiler - for(LibraryUtils.Lib crt : LibraryUtils.getCRTLibs()) { - loaded = LibraryUtils.loadLibFromJar(crt); - if(!loaded) { - System.out.println("SleuthkitJNI: failed to load " + crt.getLibName()); - } else { - System.out.println("SleuthkitJNI: loaded " + crt.getLibName()); - } - } - } catch (UnsatisfiedLinkError e1) { - System.out.println(e1.toString()); - try { - //Try to load from system path. - System.out.println("Can't find CRT libraries, attempting to load from System.loadLibrary"); - System.loadLibrary("msvcr100"); - System.loadLibrary("msvcp100"); - loaded = true; - } catch (UnsatisfiedLinkError e2) { - System.out.println("SleuthkitJNI: error loading CRT libraries, " + e2.toString()); - loaded = false; - } - } - return loaded; - } /** * Get the name of the current platform. @@ -265,12 +180,4 @@ private static boolean loadLibFromJar(Lib library) { } return true; } - - private static Lib[] getCRTLibs() { - return CRT_LIBS; - } - - private static Lib[] getLibs() { - return OTHER_LIBS; - } } diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java index 2d75ca64b1d27b8f81a40fdd461f3854154e284f..8653c39c83a017ced0f66543acb5ac76af79e051 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java +++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java @@ -118,7 +118,6 @@ public class SleuthkitJNI { //Linked library loading static { - LibraryUtils.loadAuxilliaryLibs(); LibraryUtils.loadSleuthkitJNI(); } diff --git a/configure.ac b/configure.ac index 6faa2706d57717023773b171ef4423980cc71e16..74b6ae6827ca6428f5f1188361423f4c388914fc 100644 --- a/configure.ac +++ b/configure.ac @@ -180,13 +180,6 @@ AS_IF( ) AS_IF([test "x$ac_cv_lib_z_inflate" = "xyes"], [ax_zlib=yes], [ax_zlib=no]) -AM_CONDITIONAL([X_ZLIB],[test "x$with_zlib" != "xno" && test "x$with_zlib" != "xyes"]) -AS_IF([test "x$with_zlib" != "xno"], - [Z_PATH="${with_zlib}/lib"], - [AC_MSG_NOTICE([failed to make Z_PATH])] -) -AC_SUBST(Z_PATH, $Z_PATH) - dnl needed for sqllite AC_CHECK_LIB(dl, dlopen) @@ -217,12 +210,6 @@ AS_IF([test "x$with_libewf" != "xno"], ) AS_IF([test "x$ac_cv_lib_ewf_libewf_get_version" = "xyes"], [ax_libewf=yes], [ax_libewf=no]) -AM_CONDITIONAL([X_LIBEWF],[test "x$with_libewf" != "xno" && test "x$with_libewf" != "xyes"]) -AS_IF([test "x$with_libewf" != "xno"], - [EWF_PATH="${with_libewf}/lib"], -) -AC_SUBST(EWF_PATH, $EWF_PATH) - dnl sqlite requires pthread libraries - this was copied from its configure.ac dnl AC_SEARCH_LIBS(pthread_create, pthread) AC_SEARCH_LIBS(dlopen, dl)