For example, on Ubuntu/Debian the following installs the components:
apt-get install sun-java6-jdk maven2 libyaz3-dev swig
-The compilation is a two-step process. The environment variable JAVA_HOME
-should point to the Java JDK of your preference. For example,
- export JAVA_HOME=/usr/lib/jvm/java-6-sun
+The compilation for native code (JNI) is performed by good old make.
+Adjust libyaz4j/Makefile as necessary. Tune JAVA_HOME and perhaps path to
+yaz-config in the Makefile.
-Build the shared libary (.so) with:
- cd libyaz4j
- ./build.sh
-
-Rest is built by maven which reads pom.xml:
- cd ..
+The Maven pom.xml will automatically invoke libyaz4j/Makefile , so
+this is what it takes:
mvn compile
If you network-connected you should be able to run tests with:
--- /dev/null
+JNI_DIR=/usr/lib/jvm/java-6-sun/include
+YAZ_CONFIG=yaz-config
+YAZ_PREFIX=`${YAZ_CONFIG} --prefix`
+YAZ_CFLAGS=`${YAZ_CONFIG} --cflags`
+YAZ_LIBS=`${YAZ_CONFIG} --libs`
+
+all: lib/libyaz4j.so
+
+src/libyaz4j.cpp: libyaz4j.i
+ swig -I"include" -I"$(YAZ_PREFIX)/include" -outdir ../src/main/java/org/yaz4j/jni -package org.yaz4j.jni -o src/libyaz4j.cpp -c++ -java libyaz4j.i
+
+obj/libyaz4j.o: src/libyaz4j.cpp
+ g++ -fPIC -I"include" -I"$(JNI_DIR)" -I"$(JNI_DIR)/linux" $(YAZ_CFLAGS) -c -Wall -o obj/libyaz4j.o src/libyaz4j.cpp
+
+obj/zoom-extra.o: src/zoom-extra.cpp
+ g++ -fPIC -I"include" -I"$(JNI_DIR)" -I"$(JNI_DIR)/linux" $(YAZ_CFLAGS) -c -Wall -o obj/zoom-extra.o src/zoom-extra.cpp
+
+lib/libyaz4j.so: obj/zoom-extra.o obj/libyaz4j.o
+ g++ -shared obj/libyaz4j.o obj/zoom-extra.o -o lib/libyaz4j.so $(YAZ_LIBS)
+
+clean:
+ rm -f obj/*.o lib/libyaz4j.* src/libyaz4j.cpp ../src/main/java/org/jni/*.java
+++ /dev/null
-#!/bin/bash
-
-echo Swigging the Zoom Headers
-swig -I"include" -I"../dependencies/yaz-2.1.28/include/yaz" -I"../dependencies/yaz-2.1.28/include" -outdir ../src/org/yaz4j/jni -package org.yaz4j.jni -o src/libyaz4j.cpp -c++ -java libyaz4j.i
-
-echo Compiling...
-g++ -I"include" -I"/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Headers" -I"../dependencies/yaz-2.1.28/include/yaz" -I"../dependencies/yaz-2.1.28/include" -Wall -c -o obj/libyaz4j.o src/libyaz4j.cpp
-
-g++ -I"include" -I"/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Headers" -I"../dependencies/yaz-2.1.28/include/yaz" -I"../dependencies/yaz-2.1.28/include" -Wall -c -o obj/zoom-extra.o src/zoom-extra.c
-
-echo Linking...
-g++ -L"../dependencies/yaz-2.1.28/lib" obj/zoom-extra.o obj/libyaz4j.o -lyaz -bundle -o lib/libyaz4j.so
-
+++ /dev/null
-#!/bin/bash
-JNI_DIR=${JAVA_HOME:-/usr/lib/jvm/java-6-sun}/include
-set -x
-YAZ_CONFIG=yaz-config
-YAZ_PREFIX=`${YAZ_CONFIG} --prefix`
-YAZ_CFLAGS=`${YAZ_CONFIG} --cflags`
-YAZ_LIBS=`${YAZ_CONFIG} --libs`
-
-swig -I"include" -I"${YAZ_PREFIX}/include" -outdir ../src/main/java/org/yaz4j/jni -package org.yaz4j.jni -o src/libyaz4j.cpp -c++ -java libyaz4j.i
-
-g++ -fPIC -I"include" -I"$JNI_DIR" -I"$JNI_DIR/linux" ${YAZ_CFLAGS} -c -Wall -o obj/libyaz4j.o src/libyaz4j.cpp
-
-g++ -fPIC -I"include" -I"$JNI_DIR" -I"$JNI_DIR/linux" ${YAZ_CFLAGS} -c -Wall -o obj/zoom-extra.o src/zoom-extra.cpp
-
-g++ -shared obj/libyaz4j.o obj/zoom-extra.o -o lib/libyaz4j.so ${YAZ_LIBS}
-
-
<argLine>-Djava.library.path=${basedir}/libyaz4j/lib</argLine>
</configuration>
</plugin>
+
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>build-native</id>
+ <phase>compile</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <tasks>
+ <exec dir="libyaz4j" executable="make" failonerror="true">
+ <arg value="all"/>
+ </exec>
+ </tasks>
+ </configuration>
+ </execution>
+
+ <execution>
+ <id>clean-native</id>
+ <phase>clean</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <tasks>
+ <exec dir="libyaz4j" executable="make" failonerror="true">
+ <arg value="clean"/>
+ </exec>
+ </tasks>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+
</plugins>
</build>