Skip to content
Snippets Groups Projects
Commit ff401370 authored by Brian Carrier's avatar Brian Carrier
Browse files

Merge pull request #261 from jawallace/new_lib_loading

New lib loading
parents 966d2ae8 5598479a
No related branches found
No related tags found
No related merge requests found
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)
......
......@@ -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" />
......
......@@ -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>
......@@ -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}"/>
......
......@@ -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;
}
}
......@@ -118,7 +118,6 @@ public class SleuthkitJNI {
//Linked library loading
static {
LibraryUtils.loadAuxilliaryLibs();
LibraryUtils.loadSleuthkitJNI();
}
......
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment