# $Id: Makefile,v 1.36 2002/04/09 23:45:12 sanity Exp $

SHELL ?= /bin/sh
RELEASE_NAME ?= `date +%Y%m%d`
JAR ?= jar

#
# define build targets
#

GATEWAY:=freenet/client/http/gateway.html

CLIENT:=freenet/client/*.java \
        freenet/client/cli/*.java

FPROXY:=freenet/client/http/*.java \
        freenet/client/http/filter/*.java \
        freenet/support/StripedBucketArray.java

TOOLS:=freenet/interfaces/TerminalService.java \
       freenet/interfaces/servlet/TestHttpServlet.java \
       freenet/node/NodeConsole.java \
       freenet/fs/dir/FSConsole.java \
       freenet/node/ds/DSConsole.java \
       freenet/node/rt/RTConsole.java \
       freenet/node/FSTool.java

NODE:=freenet/node/Main.java \
      freenet/interfaces/servlet/SingleHttpServletContainer.java \
      freenet/interfaces/servlet/MultipleHttpServletContainer.java \
      freenet/node/http/DiagnosticsServlet.java \
      freenet/node/http/DistributionServlet.java \
      freenet/node/http/NodeInfoServlet.java

TESTS:=freenet/crypt/CryptTest.java \
       freenet/diagnostics/DiagnosticsTest.java \
       freenet/support/sort/SortTest.java \
       freenet/support/test/FieldsTest.java \
       freenet/support/test/HeapTest.java \
       freenet/support/test/KeyListTest.java \
       freenet/support/test/RedBlackTreeTest.java \
       freenet/support/test/BoyerMooreTest.java \
       freenet/support/test/URLDecoderTest.java \
       freenet/node/http/DistributionTest.java

#
# detect java compiler
#

JAVAC_OPTS:=-sourcepath src -d build $(JAVAC_OPTS)

ifndef JAVAC
    JAVAC:=$(shell if which jikes >/dev/null; \
                       then echo jikes; \
                       else if which kaffe >/dev/null; \
                           then echo kaffe at/dms/kjc/Main; \
                           else echo javac; \
                       fi \
                   fi)
endif

ifeq ($(shell test -f lib/freenet-ext.jar && echo yes), yes)
    ifeq ($(JAVAC), jikes)
        JAVAC_OPTS:=-bootclasspath lib/freenet-ext.jar $(JAVAC_OPTS)
    else
        JAVAC_OPTS:=-classpath lib/freenet-ext.jar $(JAVAC_OPTS)
    endif
endif


# set JAVA to java2 to compile without 1.1 compatability
ifneq ($(JAVA), java2)
ifeq ($(JAVAC), javac)
	JAVAC_OPTS:=$(shell java -version 2>&1 | grep '1\.1' >/dev/null \
                      || echo -target 1.1) \
                      $(JAVAC_OPTS)
endif		
else
#  JAVAC_OPTS:=-deprecation $(JAVAC_OPTS)
endif

#
# targets
#

all: client fproxy tools node

clean:
	rm -rf lib/freenet.jar build/freenet binfred *.o

realclean: clean
	rm -rf lib build tgz node_* store_* seednodes.ref freenet.log java gnu

check: tests
	scripts/test.sh

lib:
	mkdir lib

build:
	mkdir build

build/$(GATEWAY): src/$(GATEWAY)
	mkdir -p $(dir $@)
	cp $< $@

#
# download targets
#

getlibs: lib
	rm -f lib/freenet-ext.jar
	cd lib; wget http://freenetproject.org/snapshots/freenet-ext.jar

getseeds:
	rm -f seednodes.ref
	wget http://hawk.freenetproject.org/~freenet4/seednodes.ref

#
# dist targets
#

jar: all lib
	cd build; \
	$(JAR) -cmf ../src/node.manifest ../lib/freenet.jar freenet

tgz: jar
	mkdir -p tgz/freenet-$(RELEASE_NAME)
	cp -R lib tgz/freenet-$(RELEASE_NAME)
	cp start-freenet*.sh stop-freenet.sh scripts/preconfig.sh tgz/README tgz/*.sh tgz/freenet-$(RELEASE_NAME)
	if test -f seednodes.ref; then cp seednodes.ref tgz/freenet-$(RELEASE_NAME); fi
	cd tgz ;\
	tar c freenet-$(RELEASE_NAME) | gzip > ../freenet-$(RELEASE_NAME).tgz
	rm -rf tgz/freenet-$(RELEASE_NAME)

#rpm: jar
#	mkdir -p rpm/BUILD rpm/RPMS
#	java -cp lib/freenet.jar freenet.config.Setup --silent fred.conf.in
#	sed 's/^storePath=.*$/storePath=\/var\/spool\/fred/;\
#             s/^logFile=.*$/logFile=\/var\/log\/fred/'\
#             fred.conf.in > rpm/fred.conf
#	rm fred.conf.in
#	echo "%_topdir rpm" > rpm/.rpmmacros
#	HOME=rpm rpm -bb --target=noarch rpm/fred.spec
#	mv rpm/RPMS/noarch/fred*.noarch.rpm .
#	rm -rf rpm/BUILD rpm/RPMS rpm/.rpmmacros

# TARGET gcj 
# compiles a binary fred (named binfred) from bytecode freenet.jar

gcj: binfred

binfred: jar java/math/BigInteger.o gnu/java/math/MPN.o
	CLASSPATH=lib/freenet-ext.jar \
	gcj --main=freenet.node.Main \
		-o binfred \
		lib/freenet.jar \
		java/math/BigInteger.o gnu/java/math/MPN.o \
		lib/freenet-ext.jar

java/math/BigInteger.o: java/math/BigInteger.java gnu/java/math/MPN.o
	gcj -c java/math/BigInteger.java -o java/math/BigInteger.o

gnu/java/math/MPN.o: gnu/java/math/MPN.java
	gcj -c gnu/java/math/MPN.java -o gnu/java/math/MPN.o

# these are needed from gcc CVS, get the latest versions from MAIN branch
# http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libjava/
# the versions i libgcj2 3.0.3 is buggy

java/math/BigInteger.java:
	if [ ! -d java/math ]; then mkdir -p java/math; fi
	wget 'http://gcc.gnu.org/cgi-bin/cvsweb.cgi/~checkout~/gcc/libjava/java/math/BigInteger.java?rev=1.16&content-type=text/plain' -O java/math/BigInteger.java

gnu/java/math/MPN.java:
	if [ ! -d gnu/java/math ]; then mkdir -p gnu/java/math; fi
	wget 'http://gcc.gnu.org/cgi-bin/cvsweb.cgi/~checkout~/gcc/libjava/gnu/java/math/MPN.java?rev=1.1.4.1&content-type=text/plain' -O gnu/java/math/MPN.java

#
# compilation targets
#

client fproxy tools node tests:: build

fproxy:: build/$(GATEWAY)


client:: $(CLIENT)
	$(JAVAC) $(JAVAC_OPTS) $(addprefix src/,$^)

fproxy:: $(FPROXY)
	$(JAVAC) $(JAVAC_OPTS) $(addprefix src/,$^)
	cp src/freenet/client/http/gateway.html build/freenet/client/http/

tools:: $(TOOLS)
	$(JAVAC) $(JAVAC_OPTS) $(addprefix src/,$^)

node:: $(NODE)
	$(JAVAC) $(JAVAC_OPTS) $(addprefix src/,$^)

tests:: $(TESTS)
	$(JAVAC) $(JAVAC_OPTS) $(addprefix src/,$^)


%.java:
	


.PHONY: all clean check getlibs getseeds jar tgz \
        client fproxy tools node tests %.java



