#
# $Id: Makefile,v 1.15 2003/12/30 15:31:33 evertonm Exp $
#

LIB_DIR=lib
BUILD_DIR=build
OBJ_DIR=obj
DIST_DIR=dist
DIST_BIN_DIR=$(DIST_DIR)/bin
DIST_LIB_DIR=$(DIST_DIR)/lib
GCJ=gcj -g -Wextraneous-semicolon -Wunused
GCJ_PIC=$(GCJ) -fPIC
GCJ_LINK_SO=gcj -shared -o

#######################
# Start of User Config

#
# Choose your JAVA vm
#
JAVA=java

#
# Choose the destination install dir
#
INSTALL_DIR=install

#
# Choose your JAVAC compiler
#
#JAVAC=kjc
#JAVAC=jikes
#JAVAC=javac
JAVAC=$(GCJ) -C

#
# You should specify GCJ_WARN_ALL below if JAVAC refers to gcj
#
#GCJ_WARN_ALL=
GCJ_WARN_ALL=-Wall

#
# Specify run-time (boot) classpath if JAVAC refers to Jikes
#
#JIKES_RT_PATH=/usr/local/kaffe/jre/lib/rt.jar

#
# URLs for various libraries.
# The make process will try to download these if you
# don't have them under the 'lib' subdirectory.
#

SERVLET_URL=http://vbstefi60.fapse.ulg.ac.be/~arnaud/gnu/servletapi-2.3-alpha1.tar.gz
#SERVLET_URL=http://apache.usp.br/jakarta/tomcat-5/v5.0.12-beta/src/jakarta-tomcat-5.0.12-src.tar.gz
XMLRPC_URL=http://ftp.pucpr.br/apache/ws/xmlrpc/v1.2-b1/xmlrpc-1.2-b1-src.tar.gz
LOG4J_URL=http://apache.usp.br/jakarta/log4j/binaries/jakarta-log4j-1.2.8.tar.gz
JLINE_URL=http://unc.dl.sourceforge.net/sourceforge/jline/jline-src-0_6_2.jar
REGEXP_URL=http://apache.usp.br/jakarta/regexp/binaries/jakarta-regexp-1.3.tar.gz
JUNIT_URL=http://heanet.dl.sourceforge.net/sourceforge/freenet/freenet-0.5.2.1.src.tar.bz2

# End of User Config
#######################


#
# Config for GNU Classpathx ServletAPI
#

SERVLET_SRC=servletapi-2.3-alpha1
SERVLET_SRC_PATH=$(LIB_DIR)/$(SERVLET_SRC)/source

# 
# Config for Apache Jakarta Tomcat ServletAPI
#

#SERVLET_SRC=jakarta-tomcat-5.0.12-src
#SERVLET_SRC_PATH=$(LIB_DIR)/$(SERVLET_SRC)/src/jakarta-servletapi-5/jsr154/src/share

#
# Config for Apache XML-RPC
#

XMLRPC_SRC=xmlrpc-1.2-b1
XMLRPC_SRC_PATH=$(LIB_DIR)/$(XMLRPC_SRC)/src/java
XMLRPC_SRC_ERASE=$(XMLRPC_SRC_PATH)/org/apache/xmlrpc/fesi $(XMLRPC_SRC_PATH)/org/apache/xmlrpc/secure

#
# Config for Apache Jakarta Log4j
#

LOG4J_SRC=jakarta-log4j-1.2.8
LOG4J_SRC_PATH=$(LIB_DIR)/$(LOG4J_SRC)/src/java
#LOG4J_JAR_DIST=$(LIB_DIR)/$(LOG4J_SRC)/dist/lib/log4j-1.2.8.jar
LOG4J_ROOT_CLASS=\
	$(LOG4J_SRC_PATH)/org/apache/log4j/BasicConfigurator.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/Logger.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/spi/AppenderAttachable.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/spi/LoggerRepository.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/LogManager.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/spi/RendererSupport.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/spi/RepositorySelector.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/spi/RootCategory.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/or/RendererMap.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/spi/DefaultRepositorySelector.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/helpers/OptionConverter.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/spi/OptionHandler.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/helpers/PatternConverter.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/helpers/PatternParser.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/spi/ErrorHandler.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/spi/ErrorCode.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/helpers/OnlyOnceErrorHandler.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/helpers/QuietWriter.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/helpers/AppenderAttachableImpl.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/spi/Filter.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/helpers/NullEnumeration.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/helpers/ThreadLocalMap.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/helpers/FileWatchdog.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/PropertyConfigurator.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/config/PropertySetter.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/helpers/DateLayout.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/helpers/CountingQuietWriter.java \
	$(LOG4J_SRC_PATH)/org/apache/log4j/helpers/BoundedFIFO.java

#
# Config for JLine
#

JLINE_SRC=jline-0_6_2
JLINE_SRC_PATH=$(LIB_DIR)/$(JLINE_SRC)/src

#
# Config for Jakarta Regexp
# (gcj 3.3.2 does not include java.util.regex)
#

REGEXP_SRC=jakarta-regexp-1.3
REGEXP_SRC_PATH=$(LIB_DIR)/$(REGEXP_SRC)/src/java

#
# Config for Freenet JUnit
#

JUNIT_SRC=freenet-0.5.2.1
JUNIT_SRC_PATH_ORIG=$(LIB_DIR)/$(JUNIT_SRC)/Contrib/junit
JUNIT_SRC_PATH=$(LIB_DIR)/$(JUNIT_SRC)/Contrib/bera-junit


############################
# Start of Automatic Config
#

BUILD_PREFIX_PATH=$(JIKES_RT_PATH)

# Automatic config for ServletAPI
#
# Both from Apache Jakarta Tomcat
#  and from GNU Classpathx

SERVLET_TGZ=$(shell basename $(SERVLET_URL))
SERVLET_BUILD_DIR=$(BUILD_DIR)/servlet
SERVLET_OBJ_DIR=$(OBJ_DIR)/servlet
SERVLET_TGZ_PATH=$(LIB_DIR)/$(SERVLET_TGZ)
SERVLET_JAR_PATH=$(DIST_LIB_DIR)/servlet.jar
SERVLET_SO_PATH=$(DIST_LIB_DIR)/libservlet.so
SERVLET_AR_PATH=$(DIST_LIB_DIR)/libservlet.a

#
# Automatic config for Apache XML-RPC
#

XMLRPC_TGZ=$(shell basename $(XMLRPC_URL))
XMLRPC_BUILD_DIR=$(BUILD_DIR)/xmlrpc
XMLRPC_OBJ_DIR=$(OBJ_DIR)/xmlrpc
XMLRPC_TGZ_PATH=$(LIB_DIR)/$(XMLRPC_TGZ)
XMLRPC_JAR_PATH=$(DIST_LIB_DIR)/xmlrpc.jar
XMLRPC_SO_PATH=$(DIST_LIB_DIR)/libxmlrpc.so
XMLRPC_AR_PATH=$(DIST_LIB_DIR)/libxmlrpc.a

#
# Automatic config for Apache Jakarta Log4j
#

LOG4J_TGZ=$(shell basename $(LOG4J_URL))
LOG4J_BUILD_DIR=$(BUILD_DIR)/log4j
LOG4J_OBJ_DIR=$(OBJ_DIR)/log4j
LOG4J_TGZ_PATH=$(LIB_DIR)/$(LOG4J_TGZ)
LOG4J_JAR_PATH=$(DIST_LIB_DIR)/log4j.jar
LOG4J_SO_PATH=$(DIST_LIB_DIR)/liblog4j.so
LOG4J_AR_PATH=$(DIST_LIB_DIR)/liblog4j.a
LOG4J_DEP_FILE=$(LIB_DIR)/log4j.dep

#
# Automatic config for JLine
#

JLINE_TGZ=$(shell basename $(JLINE_URL))
JLINE_BUILD_DIR=$(BUILD_DIR)/jline
JLINE_OBJ_DIR=$(OBJ_DIR)/jline
JLINE_TGZ_PATH=$(LIB_DIR)/$(JLINE_TGZ)
JLINE_JAR_PATH=$(DIST_LIB_DIR)/jline.jar
JLINE_SO_PATH=$(DIST_LIB_DIR)/libjline.so
JLINE_AR_PATH=$(DIST_LIB_DIR)/libjline.a

#
# Automatic config for Jakarta Regexp
#

REGEXP_TGZ=$(shell basename $(REGEXP_URL))
REGEXP_BUILD_DIR=$(BUILD_DIR)/regexp
REGEXP_OBJ_DIR=$(OBJ_DIR)/regexp
REGEXP_TGZ_PATH=$(LIB_DIR)/$(REGEXP_TGZ)
REGEXP_JAR_PATH=$(DIST_LIB_DIR)/jregexp.jar
REGEXP_SO_PATH=$(DIST_LIB_DIR)/libjregexp.so
REGEXP_AR_PATH=$(DIST_LIB_DIR)/libjregexp.a

#
# Automatic config for Bera
#

BERA_CFLAGS=$(GCJ_WARN_ALL)
BERA_JAVAC=$(JAVAC) $(BERA_CFLAGS)
BERA_BUILD_DIR=$(BUILD_DIR)/bera
BERA_OBJ_DIR=$(OBJ_DIR)/bera
BERA_SRC_PATH=src/bera
BERA_JAR_PATH=$(DIST_LIB_DIR)/bera.jar
BERA_SO_PATH=$(DIST_LIB_DIR)/libbera.so
BERA_AR_PATH=$(DIST_LIB_DIR)/libbera.a
BERA_BASE_CLASSPATH=$(LOG4J_JAR_PATH):$(XMLRPC_JAR_PATH):$(SERVLET_JAR_PATH):$(JLINE_JAR_PATH):$(REGEXP_JAR_PATH)
BERA_BUILD_CLASSPATH=$(BUILD_PREFIX_PATH):$(BERA_BASE_CLASSPATH)
BERA_RUN_CLASSPATH=$(BERA_BASE_CLASSPATH):$(BERA_JAR_PATH)

BERA_FEA_PATH=$(DIST_BIN_DIR)/fea
BERA_RIP_PATH=$(DIST_BIN_DIR)/rip
BERA_RIP_QUERY_PATH=$(DIST_BIN_DIR)/rip-query
BERA_RIB_PATH=$(DIST_BIN_DIR)/rib
BERA_MANAGER_PATH=$(DIST_BIN_DIR)/manager

#
# Automatic config for Freenet JUnit
#

JUNIT_TGZ=$(shell basename $(JUNIT_URL))
JUNIT_BUILD_DIR=$(BUILD_DIR)/junit
JUNIT_OBJ_DIR=$(OBJ_DIR)/junit
JUNIT_TGZ_PATH=$(LIB_DIR)/$(JUNIT_TGZ)
JUNIT_JAR_PATH=$(DIST_LIB_DIR)/junit.jar
JUNIT_SO_PATH=$(DIST_LIB_DIR)/libjunit.so
JUNIT_AR_PATH=$(DIST_LIB_DIR)/libjunit.a

#
# Automatic config for Test
#

TEST_BUILD_DIR=$(BUILD_DIR)/test
TEST_OBJ_DIR=$(OBJ_DIR)/test
TEST_SRC_PATH=src/test
TEST_JAR_PATH=$(DIST_LIB_DIR)/beratest.jar
TEST_SO_PATH=$(DIST_LIB_DIR)/libberatest.so
TEST_AR_PATH=$(DIST_LIB_DIR)/libberatest.a
TEST_BASE_CLASSPATH=$(LOG4J_JAR_PATH):$(XMLRPC_JAR_PATH):$(SERVLET_JAR_PATH):$(JLINE_JAR_PATH):$(REGEXP_JAR_PATH):$(JUNIT_JAR_PATH):$(BERA_JAR_PATH)
TEST_BUILD_CLASSPATH=$(BUILD_PREFIX_PATH):$(TEST_BASE_CLASSPATH)
TEST_RUN_CLASSPATH=$(TEST_BASE_CLASSPATH):$(TEST_JAR_PATH)

TEST_PATH=$(DIST_BIN_DIR)/beratest

#
# End of Automatic Config
##########################


.PHONY: default
.PHONY: clean
.PHONY: distclean
.PHONY: build
.PHONY: servlet-jar
.PHONY: servlet-so
.PHONY: xmlrpc-jar
.PHONY: xmlrpc-so
.PHONY: log4j-jar
.PHONY: log4j-so
.PHONY: jline-jar
.PHONY: jline-so
.PHONY: regexp-jar
.PHONY: regexp-so
.PHONY: bera-jar
.PHONY: bera-so
.PHONY: junit-jar
.PHONY: junit-so
.PHONY: test-jar
.PHONY: test-so
.PHONY:	run-fea-jar
.PHONY: run-rip-jar
.PHONY: run-rip-query-jar
.PHONY: run-rib-jar
.PHONY: run-manager-jar
.PHONY: run-test-jar
.PHONY: fea
.PHONY: rip
.PHONY: rip-query
.PHONY: rib
.PHONY: manager
.PHONY: test
.PHONY: kickstart
.PHONY: kickstop
.PHONY: install

default: bera-jar

clean:
	rm -rf $(BUILD_DIR) $(OBJ_DIR)

distclean: clean
	rm -f `find . -name "*~" -o -name "*.dep" -o -name "*.dep" -o -name "*.so"`
	rm -rf $(DIST_DIR) \
		$(LIB_DIR)/$(SERVLET_SRC) \
		$(LIB_DIR)/$(XMLRPC_SRC) \
		$(LIB_DIR)/$(LOG4J_SRC) \
		$(LIB_DIR)/$(JLINE_SRC) \
		$(LIB_DIR)/$(REGEXP_SRC) \
		$(LIB_DIR)/$(JUNIT_SRC)

build: clean default


# ServletAPI
#
# Both from Apache Jakarta Tomcat
#  and from GNU Classpathx

$(SERVLET_TGZ_PATH):
	mkdir -p $(shell dirname $(SERVLET_TGZ_PATH))
	wget $(SERVLET_URL) -O $@

$(SERVLET_SRC_PATH)/.dep: $(SERVLET_TGZ_PATH)
	gunzip -c $(SERVLET_TGZ_PATH) | (cd $(LIB_DIR) && tar xf -)
	touch $@

# .jar

$(SERVLET_BUILD_DIR)/.dep: $(SERVLET_SRC_PATH)/.dep
	mkdir -p $(SERVLET_BUILD_DIR)
	$(JAVAC) -d $(SERVLET_BUILD_DIR) -classpath $(BUILD_PREFIX_PATH):$(SERVLET_SRC_PATH) `find $(SERVLET_SRC_PATH) -name "*.java"`
	touch $@

$(SERVLET_JAR_PATH): $(SERVLET_BUILD_DIR)/.dep
	mkdir -p $(shell dirname $(SERVLET_JAR_PATH))
	jar cf $@ -C $(SERVLET_BUILD_DIR) .

servlet-jar: $(SERVLET_JAR_PATH)

# .so

$(SERVLET_OBJ_DIR)/.dep: $(SERVLET_SRC_PATH)/.dep
	mkdir -p $(SERVLET_OBJ_DIR)
	./bin/java2obj.sh "$(GCJ_PIC) --classpath=$(SERVLET_SRC_PATH)" $(SERVLET_SRC_PATH) $(SERVLET_OBJ_DIR)
	touch $@

$(SERVLET_SO_PATH): $(SERVLET_OBJ_DIR)/.dep
	mkdir -p $(shell dirname $(SERVLET_SO_PATH))
	$(GCJ_LINK_SO) $@ $(SERVLET_OBJ_DIR)/*.o
	ar rc $(SERVLET_AR_PATH) $(SERVLET_OBJ_DIR)/*.o

servlet-so: $(SERVLET_SO_PATH)

#
# Apache XML-RPC
#

$(XMLRPC_TGZ_PATH):
	mkdir -p $(shell dirname $(XMLRPC_TGZ_PATH))
	wget $(XMLRPC_URL) -O $@

$(XMLRPC_SRC_PATH)/.dep: $(XMLRPC_TGZ_PATH)
	gunzip -c $(XMLRPC_TGZ_PATH) | (cd $(LIB_DIR) && tar xf -)
	rm -r $(XMLRPC_SRC_ERASE)
	touch $@

# .jar

$(XMLRPC_BUILD_DIR)/.dep: $(XMLRPC_SRC_PATH)/.dep $(SERVLET_JAR_PATH)
	mkdir -p $(XMLRPC_BUILD_DIR)
	$(JAVAC) -d $(XMLRPC_BUILD_DIR) -classpath $(BUILD_PREFIX_PATH):$(XMLRPC_SRC_PATH):$(SERVLET_JAR_PATH) `find $(XMLRPC_SRC_PATH) -name "*.java"`
	touch $@

$(XMLRPC_JAR_PATH): $(XMLRPC_BUILD_DIR)/.dep
	mkdir -p $(shell dirname $(XMLRPC_JAR_PATH))
	jar cf $@ -C $(XMLRPC_BUILD_DIR) .

xmlrpc-jar: $(XMLRPC_JAR_PATH)

# .so

$(XMLRPC_OBJ_DIR)/.dep: $(XMLRPC_SRC_PATH)/.dep $(SERVLET_JAR_PATH)
	mkdir -p $(XMLRPC_OBJ_DIR)
	./bin/java2obj.sh "$(GCJ_PIC) --classpath=$(XMLRPC_SRC_PATH):$(SERVLET_JAR_PATH)" $(XMLRPC_SRC_PATH) $(XMLRPC_OBJ_DIR)
	touch $@

$(XMLRPC_SO_PATH): $(XMLRPC_OBJ_DIR)/.dep
	mkdir -p $(shell dirname $(XMLRPC_SO_PATH))
	$(GCJ_LINK_SO) $@ $(XMLRPC_OBJ_DIR)/*.o
	ar rc $(XMLRPC_AR_PATH) $(XMLRPC_OBJ_DIR)/*.o

xmlrpc-so: $(XMLRPC_SO_PATH)

#
# Apache Jakarta Log4j
#

$(LOG4J_TGZ_PATH):
	mkdir -p $(shell dirname $(LOG4J_TGZ_PATH))
	wget $(LOG4J_URL) -O $@

$(LOG4J_SRC_PATH)/.dep: $(LOG4J_TGZ_PATH)
	gunzip -c $(LOG4J_TGZ_PATH) | (cd $(LIB_DIR) && tar xf -)
	touch $@

# .jar

$(LOG4J_BUILD_DIR)/.dep: $(LOG4J_SRC_PATH)/.dep
	mkdir -p $(LOG4J_BUILD_DIR)
	./bin/class-depend.pl classpath=$(LOG4J_SRC_PATH) $(LOG4J_ROOT_CLASS) > $(LOG4J_DEP_FILE)
	$(JAVAC) -d $(LOG4J_BUILD_DIR) -classpath $(BUILD_PREFIX_PATH):$(LOG4J_SRC_PATH) `cat $(LOG4J_DEP_FILE)`
	touch $@

$(LOG4J_JAR_PATH): $(LOG4J_BUILD_DIR)/.dep
	mkdir -p $(shell dirname $(LOG4J_JAR_PATH))
	jar cf $@ -C $(LOG4J_BUILD_DIR) .

log4j-jar: $(LOG4J_JAR_PATH)

# .so

$(LOG4J_OBJ_DIR)/.dep: $(LOG4J_SRC_PATH)/.dep
	mkdir -p $(LOG4J_OBJ_DIR)
	bin/class-depend.pl classpath=$(LOG4J_SRC_PATH) $(LOG4J_ROOT_CLASS) > $(LOG4J_DEP_FILE)
	cat $(LOG4J_DEP_FILE) | ./bin/java2obj.sh "$(GCJ_PIC) --classpath=$(LOG4J_SRC_PATH)" - $(LOG4J_OBJ_DIR)
	touch $@

$(LOG4J_SO_PATH): $(LOG4J_OBJ_DIR)/.dep
	mkdir -p $(shell dirname $(LOG4J_SO_PATH))
	$(GCJ_LINK_SO) $@ $(LOG4J_OBJ_DIR)/*.o
	ar rc $(LOG4J_AR_PATH) $(LOG4J_OBJ_DIR)/*.o

log4j-so: $(LOG4J_SO_PATH)

#
# JLine
#

$(JLINE_TGZ_PATH):
	mkdir -p $(shell dirname $(JLINE_TGZ_PATH))
	wget $(JLINE_URL) -O $@

$(JLINE_SRC_PATH)/.dep: $(JLINE_TGZ_PATH)
	(cd $(LIB_DIR) && jar xf $(JLINE_TGZ))
	patch -p0 < $(LIB_DIR)/Terminal.java.patch
	touch $@

# .jar

$(JLINE_BUILD_DIR)/.dep: $(JLINE_SRC_PATH)/.dep
	mkdir -p $(JLINE_BUILD_DIR)
	$(JAVAC) -d $(JLINE_BUILD_DIR) -classpath $(BUILD_PREFIX_PATH):$(JLINE_SRC_PATH) `find $(JLINE_SRC_PATH) -name "*.java"`
	touch $@

$(JLINE_JAR_PATH): $(JLINE_BUILD_DIR)/.dep
	mkdir -p $(shell dirname $(JLINE_JAR_PATH))
	jar cf $@ -C $(JLINE_BUILD_DIR) .

jline-jar: $(JLINE_JAR_PATH)

# .so

$(JLINE_OBJ_DIR)/.dep: $(JLINE_SRC_PATH)/.dep
	mkdir -p $(JLINE_OBJ_DIR)
	./bin/java2obj.sh "$(GCJ_PIC) --classpath=$(JLINE_SRC_PATH)" $(JLINE_SRC_PATH) $(JLINE_OBJ_DIR)
	touch $@

$(JLINE_SO_PATH): $(JLINE_OBJ_DIR)/.dep
	mkdir -p $(shell dirname $(JLINE_SO_PATH))
	$(GCJ_LINK_SO) $@ $(JLINE_OBJ_DIR)/*.o
	ar rc $(JLINE_AR_PATH) $(JLINE_OBJ_DIR)/*.o

jline-so: $(JLINE_SO_PATH)

#
# Jakarta Regexp
#

$(REGEXP_TGZ_PATH):
	mkdir -p $(shell dirname $(REGEXP_TGZ_PATH))
	wget $(REGEXP_URL) -O $@

$(REGEXP_SRC_PATH)/.dep: $(REGEXP_TGZ_PATH)
	gunzip -c $(REGEXP_TGZ_PATH) | (cd $(LIB_DIR) && tar xf -)
	touch $@

# .jar

$(REGEXP_BUILD_DIR)/.dep: $(REGEXP_SRC_PATH)/.dep
	mkdir -p $(REGEXP_BUILD_DIR)
	$(JAVAC) -d $(REGEXP_BUILD_DIR) -classpath $(BUILD_PREFIX_PATH):$(REGEXP_SRC_PATH) `find $(REGEXP_SRC_PATH) -name "*.java"`
	touch $@

$(REGEXP_JAR_PATH): $(REGEXP_BUILD_DIR)/.dep
	mkdir -p $(shell dirname $(REGEXP_JAR_PATH))
	jar cf $@ -C $(REGEXP_BUILD_DIR) .

regexp-jar: $(REGEXP_JAR_PATH)

# .so

$(REGEXP_OBJ_DIR)/.dep: $(REGEXP_SRC_PATH)/.dep
	mkdir -p $(REGEXP_OBJ_DIR)
	./bin/java2obj.sh "$(GCJ_PIC) --classpath=$(REGEXP_SRC_PATH)" $(REGEXP_SRC_PATH) $(REGEXP_OBJ_DIR)
	touch $@

$(REGEXP_SO_PATH): $(REGEXP_OBJ_DIR)/.dep
	mkdir -p $(shell dirname $(REGEXP_SO_PATH))
	$(GCJ_LINK_SO) $@ $(REGEXP_OBJ_DIR)/*.o
	ar rc $(REGEXP_AR_PATH) $(REGEXP_OBJ_DIR)/*.o

regexp-so: $(REGEXP_SO_PATH)

#
# Bera
#

# .jar

$(BERA_BUILD_DIR)/.dep: $(shell find $(BERA_SRC_PATH) -name "*.java") $(XMLRPC_JAR_PATH) $(LOG4J_JAR_PATH) $(JLINE_JAR_PATH) $(REGEXP_JAR_PATH)
	mkdir -p $(BERA_BUILD_DIR)
	$(BERA_JAVAC) -d $(BERA_BUILD_DIR) -classpath $(BERA_SRC_PATH):$(BERA_BUILD_CLASSPATH) `find $(BERA_SRC_PATH) -name "*.java"`
	touch $@

$(BERA_JAR_PATH): $(BERA_BUILD_DIR)/.dep
	mkdir -p $(shell dirname $(BERA_JAR_PATH))
	jar cf $@ -C $(BERA_BUILD_DIR) .

bera-jar: $(BERA_JAR_PATH)

# .so

$(BERA_OBJ_DIR)/.dep: $(shell find $(BERA_SRC_PATH) -name "*.java") $(XMLRPC_JAR_PATH) $(LOG4J_JAR_PATH) $(JLINE_JAR_PATH) $(REGEXP_JAR_PATH)
	mkdir -p $(BERA_OBJ_DIR)
	./bin/java2obj.sh "$(GCJ_PIC) $(BERA_CFLAGS) --classpath=$(BERA_SRC_PATH):$(BERA_BUILD_CLASSPATH)" $(BERA_SRC_PATH) $(BERA_OBJ_DIR)
	touch $@

$(BERA_SO_PATH): $(BERA_OBJ_DIR)/.dep
	mkdir -p $(shell dirname $(BERA_SO_PATH))
	$(GCJ_LINK_SO) $@ $(BERA_OBJ_DIR)/*.o
	ar rc $(BERA_AR_PATH) $(BERA_OBJ_DIR)/*.o

bera-so: $(BERA_SO_PATH)

# fea

$(BERA_FEA_PATH): $(BERA_SO_PATH) $(SERVLET_SO_PATH) $(XMLRPC_SO_PATH) $(LOG4J_SO_PATH) $(REGEXP_SO_PATH)
	mkdir -p $(shell dirname $(BERA_FEA_PATH))
	gcj --main=bera.fea.Main -o $(BERA_FEA_PATH) -L$(DIST_LIB_DIR) -lbera -lservlet -lxmlrpc -llog4j -ljregexp

fea: $(BERA_FEA_PATH)

# rip

$(BERA_RIP_PATH): $(BERA_SO_PATH) $(SERVLET_SO_PATH) $(XMLRPC_SO_PATH) $(LOG4J_SO_PATH) $(REGEXP_SO_PATH)
	mkdir -p $(shell dirname $(BERA_RIP_PATH))
	gcj --main=bera.rip.Main -o $(BERA_RIP_PATH) -L$(DIST_LIB_DIR) -lbera -lservlet -lxmlrpc -llog4j -ljregexp

rip: $(BERA_RIP_PATH)

# rip-query

$(BERA_RIP_QUERY_PATH): $(BERA_SO_PATH) $(SERVLET_SO_PATH) $(XMLRPC_SO_PATH) $(LOG4J_SO_PATH) $(REGEXP_SO_PATH)
	mkdir -p $(shell dirname $(BERA_RIP_QUERY_PATH))
	gcj --main=bera.rip.RipQuery -o $(BERA_RIP_QUERY_PATH) -L$(DIST_LIB_DIR) -lbera -lservlet -lxmlrpc -llog4j -ljregexp

rip-query: $(BERA_RIP_QUERY_PATH)

# rib

$(BERA_RIB_PATH): $(BERA_SO_PATH) $(SERVLET_SO_PATH) $(XMLRPC_SO_PATH) $(LOG4J_SO_PATH) $(REGEXP_SO_PATH)
	mkdir -p $(shell dirname $(BERA_RIB_PATH))
	gcj --main=bera.rib.Main -o $(BERA_RIB_PATH) -L$(DIST_LIB_DIR) -lbera -lservlet -lxmlrpc -llog4j -ljregexp

rib: $(BERA_RIB_PATH)

# manager

$(BERA_MANAGER_PATH): $(BERA_SO_PATH) $(SERVLET_SO_PATH) $(XMLRPC_SO_PATH) $(LOG4J_SO_PATH) $(JLINE_SO_PATH) $(REGEXP_SO_PATH)
	mkdir -p $(shell dirname $(BERA_MANAGER_PATH))
	gcj --main=bera.manager.Main -o $(BERA_MANAGER_PATH) -L$(DIST_LIB_DIR) -lbera -lservlet -lxmlrpc -llog4j -ljline -ljregexp

manager: $(BERA_MANAGER_PATH)

#
# Freenet JUnit
#

$(JUNIT_TGZ_PATH):
	mkdir -p $(shell dirname $(JUNIT_TGZ_PATH))
	wget $(JUNIT_URL) -O $@

$(JUNIT_SRC_PATH)/.dep: $(JUNIT_TGZ_PATH)
	bunzip2 -c $(JUNIT_TGZ_PATH) | (cd $(LIB_DIR) && tar xf -)
	mkdir -p $(JUNIT_SRC_PATH)
	[ -d $(JUNIT_SRC_PATH_ORIG) ] && mv $(JUNIT_SRC_PATH_ORIG) $(JUNIT_SRC_PATH)
	cat $(LIB_DIR)/TestResult.java.patch | (cd $(JUNIT_SRC_PATH)/junit/framework && patch)
	touch $@

# .jar

$(JUNIT_BUILD_DIR)/.dep: $(JUNIT_SRC_PATH)/.dep
	mkdir -p $(JUNIT_BUILD_DIR)
	$(JAVAC) -d $(JUNIT_BUILD_DIR) -classpath $(BUILD_PREFIX_PATH):$(JUNIT_SRC_PATH) `find $(JUNIT_SRC_PATH) -name "*.java"`
	touch $@

$(JUNIT_JAR_PATH): $(JUNIT_BUILD_DIR)/.dep
	mkdir -p $(shell dirname $(JUNIT_JAR_PATH))
	jar cf $@ -C $(JUNIT_BUILD_DIR) .

junit-jar: $(JUNIT_JAR_PATH)

# .so

$(JUNIT_OBJ_DIR)/.dep: $(JUNIT_SRC_PATH)/.dep
	mkdir -p $(JUNIT_OBJ_DIR)
	./bin/java2obj.sh "$(GCJ_PIC) --classpath=$(JUNIT_SRC_PATH)" $(JUNIT_SRC_PATH) $(JUNIT_OBJ_DIR)
	touch $@

$(JUNIT_SO_PATH): $(JUNIT_OBJ_DIR)/.dep
	mkdir -p $(shell dirname $(JUNIT_SO_PATH))
	$(GCJ_LINK_SO) $@ $(JUNIT_OBJ_DIR)/*.o
	ar rc $(JUNIT_AR_PATH) $(JUNIT_OBJ_DIR)/*.o

junit-so: $(JUNIT_SO_PATH)

#
# Tests
#

$(TEST_BUILD_DIR)/.dep: $(shell find $(TEST_SRC_PATH) -name "*.java") $(SERVLET_JAR_PATH) $(XMLRPC_JAR_PATH) $(LOG4J_JAR_PATH) $(JUNIT_JAR_PATH) $(BERA_JAR_PATH)
	mkdir -p $(TEST_BUILD_DIR)
	$(JAVAC) -d $(TEST_BUILD_DIR) -classpath $(TEST_SRC_PATH):$(TEST_BUILD_CLASSPATH) `find $(TEST_SRC_PATH) -name "*.java"`
	touch $@

# .jar

$(TEST_JAR_PATH): $(TEST_BUILD_DIR)/.dep
	mkdir -p $(shell dirname $(TEST_JAR_PATH))
	jar cf $@ -C $(TEST_BUILD_DIR) .

test-jar: $(TEST_JAR_PATH)

# .so

$(TEST_OBJ_DIR)/.dep: $(shell find $(TEST_SRC_PATH) -name "*.java") $(SERVLET_JAR_PATH) $(XMLRPC_JAR_PATH) $(LOG4J_JAR_PATH) $(JUNIT_JAR_PATH) $(BERA_JAR_PATH)
	mkdir -p $(TEST_OBJ_DIR)
	./bin/java2obj.sh "$(GCJ_PIC) $(TEST_CFLAGS) --classpath=$(TEST_SRC_PATH):$(TEST_BUILD_CLASSPATH)" $(TEST_SRC_PATH) $(TEST_OBJ_DIR)
	touch $@

$(TEST_SO_PATH): $(TEST_OBJ_DIR)/.dep
	mkdir -p $(shell dirname $(TEST_SO_PATH))
	$(GCJ_LINK_SO) $@ $(TEST_OBJ_DIR)/*.o
	ar rc $(TEST_AR_PATH) $(TEST_OBJ_DIR)/*.o

test-so: $(TEST_SO_PATH)

# test

$(TEST_PATH): $(SERVLET_SO_PATH) $(XMLRPC_SO_PATH) $(LOG4J_SO_PATH) $(REGEXP_SO_PATH) $(BERA_SO_PATH) $(JUNIT_SO_PATH) $(TEST_SO_PATH) 
	mkdir -p $(shell dirname $(TEST_PATH))
	gcj --main=junit.xrunners.SimpleTestRunner -o $(TEST_PATH) -L$(DIST_LIB_DIR) -lberatest -lbera -lservlet -lxmlrpc -llog4j -ljregexp -ljunit

test: $(TEST_PATH)

#
# Run commands
#

run-fea-jar: bera-jar
	$(JAVA) -classpath $(BERA_RUN_CLASSPATH) bera.fea.Main

run-rip-jar: bera-jar
	$(JAVA) -classpath $(BERA_RUN_CLASSPATH) bera.rip.Main

run-rip-query-jar: bera-jar
	$(JAVA) -classpath $(BERA_RUN_CLASSPATH) bera.rip.RipQuery

run-rib-jar: bera-jar
	$(JAVA) -classpath $(BERA_RUN_CLASSPATH) bera.rib.Main

run-manager-jar: bera-jar
	$(JAVA) -classpath $(BERA_RUN_CLASSPATH) bera.manager.Main

run-test-jar: test-jar bera-jar
	#$(JAVA) -classpath $(TEST_RUN_CLASSPATH) junit.textui.TestRunner bera.fea.FeaRpcTest
	$(JAVA) -classpath $(TEST_RUN_CLASSPATH) junit.xrunners.SimpleTestRunner bera.fea.FeaRpcTest

#
# Misc
#

kickstart: fea rib rip manager
	[ -d eraseme ] || mkdir eraseme
	./bin/kickstart.sh $(DIST_BIN_DIR) $(DIST_LIB_DIR) eraseme eraseme

kickstop:
	./bin/kickstop.sh

install: bera-jar fea rip rib manager rip-query
	[ -d $(INSTALL_DIR) ] || mkdir $(INSTALL_DIR)
	cp -i -r $(DIST_BIN_DIR) $(INSTALL_DIR)
	cp -i -r $(DIST_LIB_DIR) $(INSTALL_DIR)
	[ -d $(INSTALL_DIR)/bin ] || mkdir $(INSTALL_DIR)/bin
	cp -i -r bin/kickstart.sh $(INSTALL_DIR)/bin
	cp -i -r bin/kickstop.sh $(INSTALL_DIR)/bin

#
# eof
#