boinc/dcapi/java/Makefile.am

182 lines
5.1 KiB
Makefile

AM_CPPFLAGS = $(JAVA_INC)
# We need the following build order:
# 1. Java classes
# 2. dc-client.jar
# 3. jni_proto.h
# 4. libdcapi-java-client.la
#######################################################################
# Rules for building the Java part
# Directory prefix of the classes
CLASSDIR = hu/sztaki/lpds/dc
# Generate debugging information by default
AM_JAVACFLAGS = -g
COMMON_SRCS = \
$(CLASSDIR)/DCException.java \
$(CLASSDIR)/FileMode.java \
$(CLASSDIR)/FileType.java \
$(CLASSDIR)/RuntimeDCException.java
CLIENT_SRCS = \
$(CLASSDIR)/client/Event.java \
$(CLASSDIR)/client/DCClient.java \
$(CLASSDIR)/client/Version.java
DOCFILES = \
$(CLASSDIR)/overview.html \
$(CLASSDIR)/package.html
noinst_JAVA = $(COMMON_SRCS) $(CLIENT_SRCS)
COMMON_CLASSES = $(COMMON_SRCS:.java=.class)
COMMON_CLASSNAMES = $(subst /,.,$(COMMON_CLASSES:.class=))
CLIENT_CLASSES = $(CLIENT_SRCS:.java=.class)
CLIENT_CLASSNAMES = $(subst /,.,$(CLIENT_CLASSES:.class=))
COMMON_JAR = dc-common-$(PACKAGE_VERSION).jar
CLIENT_JAR = dc-client-$(PACKAGE_VERSION).jar
JARFILES = $(COMMON_JAR) $(CLIENT_JAR)
javadir = $(datadir)/dc-api
java_DATA = $(JARFILES)
install-data-hook:
cd $(DESTDIR)$(javadir) && \
rm -f dc-common.jar && \
rm -f dc-client.jar && \
$(LN_S) $(COMMON_JAR) dc-common.jar && \
$(LN_S) $(CLIENT_JAR) dc-client.jar
# Override automake defaults
CLASSPATH_ENV =
JAVAROOT = $(top_builddir)/java
# Depending on $(CLASSFILES) does not work. This solution is not documented
# in the automake manual but works with automake-1.7
$(CLIENT_JAR): classnoinst.stamp
$(JAR) -cf $@ $(CLIENT_CLASSES)
$(COMMON_JAR): classnoinst.stamp
$(JAR) -cf $@ $(COMMON_CLASSES)
$(CLASSDIR)/client/Version.java: $(CLASSDIR)/client/Version.java.in $(top_builddir)/configure.ac
cd $(top_builddir) && $(SHELL) ./config.status java/$(CLASSDIR)/client/Version.java
#######################################################################
# Rules for building the JNI part
lib_LTLIBRARIES = \
libdcapi-java-client.la
noinst_HEADERS = util.h
BUILT_SOURCES = jni_proto.h jni_export.sym
libdcapi_java_client_la_SOURCES = \
client.c \
util.c
libdcapi_java_client_la_LDFLAGS = \
-avoid-version \
-release $(PACKAGE_VERSION) \
-export-symbols=jni_export.sym
libdcapi_java_client_la_LIBADD = \
$(top_builddir)/boinc/libdcapi-client-boinc.la
libdcapi_java_client_la_DEPENDENCIES = jni_export.sym
# jni_proto.h contains both the consumer and producer-side JNI prototypes
jni_proto.h: $(JARFILES)
$(JAVAH) -classpath $(COMMON_JAR):$(CLIENT_JAR) -o $@ -jni $(COMMON_CLASSNAMES) $(CLIENT_CLASSNAMES)
-touch $@
# Generate the list of to-be-exported symbols from jni_proto.h
# This is a little fragile but works
jni_export.sym: jni_proto.h
grep '^JNIEXPORT.*JNICALL ' $< | \
sed -e 's/JNIEXPORT.*JNICALL //' > $@
echo "JNI_OnLoad" >> $@
echo "JNI_OnUnload" >> $@
# On Darwin, the JVM wants a .jnilib extension instead of the native .dylib
install-exec-hook:
case $(host_os) in \
darwin*) \
$(LN_S) -f $(DESTDIR)$(libdir)/libdcapi-java-client-$(PACKAGE_VERSION).dylib $(DESTDIR)$(libdir)/libdcapi-java-client-$(PACKAGE_VERSION).jnilib; \
esac
#######################################################################
# Misc. rules
EXTRA_DIST = \
$(noinst_JAVA) \
$(DOCFILES)
MOSTLYCLEANFILES = \
$(COMMON_CLASSES) \
$(CLIENT_CLASSES) \
$(JARFILES) \
javacore.txt \
core.*
CLEANFILES = \
doc.stamp \
jni_export.sym \
jni_proto.h
#######################################################################
# Build and install the API documentation
TARGET_DIR = $(docdir)/java
doc.stamp: classnoinst.stamp $(DOCFILES)
-mkdir $(top_builddir)/java/doc 2>/dev/null
$(JAVADOC) -quiet -d $(top_builddir)/java/doc \
-sourcepath $(srcdir) \
-classpath $(COMMON_JAR):$(CLIENT_JAR) \
-overview $(srcdir)/$(CLASSDIR)/overview.html \
hu.sztaki.lpds.dc
-touch $@
all-local: doc.stamp
clean-local:
-rm -rf doc
install-data-local:
$(mkinstalldirs) $(DESTDIR)$(TARGET_DIR)/$(CLASSDIR)
$(mkinstalldirs) $(DESTDIR)$(TARGET_DIR)/$(CLASSDIR)/producer
(installfiles=`echo $(srcdir)/doc/*.html $(srcdir)/doc/*.css`; \
if test "$$installfiles" = '$(srcdir)/doc/*.html $(srcdir)/doc/*.css'; \
then echo '-- Nothing to install' ; \
else \
for i in $$installfiles; do \
echo '-- Installing '$$i ; \
$(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
done; \
echo '-- Installing $(srcdir)/doc/package-list' ; \
$(INSTALL_DATA) $(srcdir)/doc/package-list $(DESTDIR)$(TARGET_DIR); \
fi)
(installfiles=`echo $(srcdir)/doc/$(CLASSDIR)/*.html`; \
if test "$$installfiles" = '$(srcdir)/doc/$(CLASSDIR)/*.html'; \
then echo '-- Nothing to install' ; \
else \
for i in $$installfiles; do \
echo '-- Installing '$$i ; \
$(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR)/$(CLASSDIR); \
done; \
fi)
(installfiles=`echo $(srcdir)/doc/$(CLASSDIR)/producer/*.html`; \
if test "$$installfiles" = '$(srcdir)/doc/$(CLASSDIR)/producer/*.html'; \
then echo '-- Nothing to install' ; \
else \
for i in $$installfiles; do \
echo '-- Installing '$$i ; \
$(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR)/$(CLASSDIR)/producer; \
done; \
fi)