#######################################################################
#
# Universal Replication toolkit
# (Copyright information?)
#
#######################################################################

#JAVACFLAGS = "-source 1.4 -deprecation"
#JAVACFLAGS = -Xlint
JAVACFLAGS =
#JELIB = ./je-1.7.1/lib/je.jar
JELIB = ./je-4.0.92/lib/je-4.0.92.jar
NETTYLIB = ./jars/netty-3.1.4.GA.jar
ifeq "$(OSTYPE)" "jrockit" #cs machines
  os = "linux"
  shellParam = tcsh
  RMIC_PATH = ~/jrmc-4.0.0-1.6.0/bin/rmic
  JAVAC_PATH = ~/jrmc-4.0.0-1.6.0/bin/javac
  JAVA_PATH = ~/jrmc-4.0.0-1.6.0/bin/java
  JAVAH_PATH = ~/jrmc-4.0.0-1.6.0/bin/javah
endif

ifeq "$(OSTYPE)" "linux" #cs machines
  os = "linux"
  shellParam = tcsh
  RMIC_PATH = rmic
  JAVAC_PATH = javac
  JAVA_PATH = java
  JAVAH_PATH = javah
endif

ifeq "$(OSTYPE)" "linux-gnu" #cs machines
  os = "linux"
  shellParam = bash
  RMIC_PATH = rmic
  JAVAC_PATH = javac
  JAVA_PATH = java
  JAVAH_PATH = javah
endif

ifeq "$(OSTYPE)" "linux-p2" #cs machines
  os = "linux-p2"
  shellParam = bash
  RMIC_PATH = rmic
  JAVAC_PATH = javac
  JAVA_PATH = java
  JAVAH_PATH = javah
endif

ifeq "$(OSTYPE)" "mac" #darwin without p2
  os = "mac"
  shellParam = bash
  RMIC_PATH = /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/bin/rmic
  JAVAC_PATH = /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/bin/javac	
  JAVA_PATH = /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/bin/java 
  JAVAH_PATH = /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/bin/javah
endif

ifeq "$(OSTYPE)" "mac-p2" #darwin with p2
  os = "mac-p2"
  shellParam = bash
  RMIC_PATH = /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/bin/rmic
  JAVAC_PATH = /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/bin/javac	
  JAVA_PATH = /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/bin/java 
  JAVAH_PATH = /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/bin/javah
endif


ifeq "$(OSTYPE)" "fc" #fedora core 5 with NO p2 support
  os = "fc"
  shellParam = tcsh
  RMIC_PATH = /usr/java/jdk1.5.0_07/bin/rmic
  JAVAC_PATH = /usr/java/jdk1.5.0_07/bin/javac
  JAVA_PATH = /usr/java/jdk1.5.0_07/bin/java
  JAVAH_PATH = /usr/java/jdk1.5.0_07/bin/javah
endif

ifeq "$(OSTYPE)" "fc-p2" #fedora core 5 with p2 support
  os = "fc-p2"
  shellParam = tcsh
  RMIC_PATH = /usr/java/jdk1.5.0_07/bin/rmic
  JAVAC_PATH = /usr/java/jdk1.5.0_07/bin/javac
  JAVA_PATH = /usr/java/jdk1.5.0_07/bin/java
  JAVAH_PATH = /usr/java/jdk1.5.0_07/bin/javah
endif


#
# Cygwin
#
ifndef os
  os = cygwin
  RMIC_PATH = /cygdrive/c/Program\ Files/Java/jdk1.5.0_07/bin/rmic
  PYTHON_INCLUDE= /
  JAVAC_PATH = /cygdrive/c/Program\ Files/Java/jdk1.5.0_07/bin/javac
  JAVA_PATH = /cygdrive/c/Program\ Files/Java/jdk1.5.0_07/bin/java
  JAVAH_PATH = /cygdrive/c/Program\ Files/Java/jdk1.5.0_07/bin/javah
endif



# cygwin
ifeq ($(os), cygwin)
  # Note: for codebase, space character is a separator, so need to use %20
  # to form a valid URL
  # Note: for codebase, don't forget the trailing /
  #
  RMICODEBASE = -Djava.rmi.server.codebase="file:///C:/Documents%20and%20Settings/$(USER)/My%20Documents/research/universalReplication/code/classes/ file:///C:/Documents%20and%20Settings/$(USER)/My%20Documents/research/universalReplication/code/experiments/expt1/classes/ file:///C:/Documents%20and%20Settings/$(USER)/My%20Documents/research/universalReplication/code/experiments/expt2/classes/ file:///C:/Documents%20and%20Settings/$(USER)/My%20Documents/research/universalReplication/code/experiments/expt3/classes/ file:///C:/Documents%20and%20Settings/$(USER)/My%20Documents/research/universalReplication/code/experiments/sosp/classes/" -Djava.security.policy="file://C:\Documents%20and%20Settings$(USER)\My%20Documents\research\universalReplication\code\java.security.SecurityPermission"
else
  RMICODEBASE = -Djava.rmi.server.codebase="file://$(PWD)/classes/ file://$(PWD)/experiments/expt1/classes/ file://$(PWD)/experiments/expt2/classes/  file://$(PWD)/experiments/expt3/classes/  file://$(PWD)/experiments/sosp/classes" -Djava.security.policy=$(PWD)/java.security.SecurityPermission
endif





#
# Cygwin
#
ifeq ($(os), cygwin)
  CLASSPATH = classes/\;.\;experiments/expt1/classes\;experiments/sosp/classes\;experiments/expt2/classes\;experiments/expt3/classes\;experiments/sosp/PlanetLabExp/classes\;sdims.jar\;$(JELIB)\;$(PASTRY)\;./jars/junit.jar\;./P2Runtime\;./PicShare:./jars/CoDec-build17-jdk13.jar:./jars/FlexiCoreProvider-1.6p3.signed.jar
  CONFIG_FILE = ./ufs.config
  JAVA_POLICY_FILE = ./java.security.SecurityPermission
#
# Note: we use JAVA_ROOT/include/linux *not* /JAVA_ROOT/include/win32
# (jint64 is long long in linux v. __long in win32). You will need
# JAVA_ROOT/include/linux from a linux machine and copy it
# to your windows machine if you are using cygwin
#
  LDFLAGS = -I . -I /cygdrive/c/Program\ Files/Java/jdk1.5.0_07/include \
            -I /cygdrive/c/Program\ Files/Java/jdk1.5.0_07/include/linux \
            -I /cygdrive/c/cygwin/usr/include
#
# See  http://www.cs.utexas.edu/users/asmith/howto/mingw32-dll.html
#
  SHLIB_GCC_OPTIONS = -D__CYGWIN__ -Wl,--kill-at -mno-cygwin -shared 
  SHLIB_GCC_PREFIX = 
  SHLIB_GCC_SUFFIX = .dll
  SHLIB_JNI_SUFFIX = .dll
endif

ifeq ($(os), "mac")
#
# mac
#
    CLASSPATH = $(PWD)/classes:$(PWD):./experiments/expt1/classes:./experiments/sosp/classes:./experiments/expt2/classes:./experiments/expt3/classes:./experiments/sosp/PlanetLabExp/classes:sdims.jar:$(JELIB):$(NETTYLIB):$(PASTRY):./jars/junit.jar:./P2Runtime:./PicShare:./jars/CoDec-build17-jdk13.jar:./jars/FlexiCoreProvider-1.6p3.signed.jar
  export CLASSPATH
    CONFIG_FILE = $(PWD)/ufs.config
    JAVA_POLICY_FILE = $(PWD)/java.security.SecurityPermission
    LDFLAGS = -I . -I/Library/Java/Home/include -I/System/Library/Frameworks/JavaVM.framework/Headers
 
    SHLIB_GCC_OPTIONS = -dynamiclib  -D__CYGWIN__
    SHLIB_GCC_PREFIX = lib
    SHLIB_GCC_SUFFIX = .dylib
    SHLIB_JNI_SUFFIX = .jnilib
endif 

ifeq ($(os), "mac-p2")
#
# mac
#
    CLASSPATH = $(PWD)/classes:$(PWD):./experiments/expt1/classes:./experiments/sosp/classes:./experiments/expt2/classes:./experiments/expt3/classes:./experiments/sosp/PlanetLabExp/classes:sdims.jar:$(JELIB):$(NETTYLIB):$(PASTRY):./jars/junit.jar:./P2Runtime:./PicShare:./jars/CoDec-build17-jdk13.jar:./jars/FlexiCoreProvider-1.6p3.signed.jar
  export CLASSPATH
    CONFIG_FILE = $(PWD)/ufs.config
    JAVA_POLICY_FILE = $(PWD)/java.security.SecurityPermission
    LDFLAGS = -I . -I/Library/Java/Home/include -I/System/Library/Frameworks/JavaVM.framework/Headers
 
    SHLIB_GCC_OPTIONS = -dynamiclib  -D__CYGWIN__
    SHLIB_GCC_PREFIX = lib
    SHLIB_GCC_SUFFIX = .dylib
    SHLIB_JNI_SUFFIX = .jnilib
endif 



ifeq "$(OSTYPE)" "fc" #fedora core 5 with NO p2 support
  os = "fc"
  shellParam = tcsh
  RMIC_PATH = /usr/java/jdk1.5.0_07/bin/rmic
  JAVAC_PATH = /usr/java/jdk1.5.0_07/bin/javac
  JAVA_PATH = /usr/java/jdk1.5.0_07/bin/java
  JAVAH_PATH = /usr/java/jdk1.5.0_07/bin/javah
endif

ifeq "$(OSTYPE)" "fc-p2" #fedora core 5 with p2 support
  os = "fc-p2"
  shellParam = tcsh
  RMIC_PATH = /usr/java/jdk1.5.0_07/bin/rmic
  JAVAC_PATH = /usr/java/jdk1.5.0_07/bin/javac
  JAVA_PATH = /usr/java/jdk1.5.0_07/bin/java
  JAVAH_PATH = /usr/java/jdk1.5.0_07/bin/javah
endif


#
# Cygwin
#
ifndef os
  os = cygwin
  RMIC_PATH = /cygdrive/c/Program\ Files/Java/jdk1.5.0_07/bin/rmic
  PYTHON_INCLUDE= /
  JAVAC_PATH = /cygdrive/c/Program\ Files/Java/jdk1.5.0_07/bin/javac
  JAVA_PATH = /cygdrive/c/Program\ Files/Java/jdk1.5.0_07/bin/java
  JAVAH_PATH = /cygdrive/c/Program\ Files/Java/jdk1.5.0_07/bin/javah
endif


JFLAGS = -g -target 1.5
JAVAC = $(JAVAC_PATH) $(JFLAGS)
JAVA = $(JAVA_PATH) -ea $(RMICODEBASE)
JAVAH = $(JAVAH_PATH)
export LD_LIBRARY_PATH=${PWD}
CLASSDIR = classes
PASTRY = FreePastry-1.4.01.jar



ifeq ($(os), "linux")
#
# Non-cygwin  & Non-mac
#
    CLASSPATH = $(PWD)/classes:$(PWD):./experiments/expt1/classes:./experiments/sosp/classes:./experiments/expt2/classes:./experiments/expt3/classes:./experiments/sosp/PlanetLabExp/classes:sdims.jar:$(JELIB):$(NETTYLIB):$(PASTRY):./jars/junit.jar:./P2Runtime:./PicShare:./jars/CoDec-build17-jdk13.jar:./jars/FlexiCoreProvider-1.6p3.signed.jar
  export CLASSPATH
    CONFIG_FILE = $(PWD)/ufs.config
    JAVA_POLICY_FILE = $(PWD)/java.security.SecurityPermission
    LDFLAGS = -I . -I /lusr/java2/include -I /lusr/java2/include/linux \
              -I /usr/include -I /usr/java/j2sdk1.4.2_07/include \
              -I /usr/java/j2sdk1.4.2_07/include/linux \
	      -I /usr/lib/j2se/1.4/include \
	      -I /usr/lib/j2se/1.4/include/linux
		

    SHLIB_GCC_OPTIONS = -shared
    SHLIB_GCC_PREFIX = lib
    SHLIB_GCC_SUFFIX = .so
    SHLIB_JNI_SUFFIX = .so
endif

ifeq ($(os), "linux-p2")
#
# Non-cygwin  & Non-mac
#
    CLASSPATH = $(PWD)/classes:$(PWD):./experiments/expt1/classes:./experiments/sosp/classes:./experiments/expt2/classes:./experiments/expt3/classes:./experiments/sosp/PlanetLabExp/classes:sdims.jar:$(JELIB):$(NETTYLIB):$(PASTRY):./jars/junit.jar:./P2Runtime:./PicShare:./jars/CoDec-build17-jdk13.jar:./jars/FlexiCoreProvider-1.6p3.signed.jar
  export CLASSPATH
    CONFIG_FILE = $(PWD)/ufs.config
    JAVA_POLICY_FILE = $(PWD)/java.security.SecurityPermission
    LDFLAGS = -I . -I /lusr/java2/include -I /lusr/java2/include/linux \
              -I /usr/include -I /usr/java/j2sdk1.4.2_07/include \
              -I /usr/java/j2sdk1.4.2_07/include/linux

    SHLIB_GCC_OPTIONS = -shared
    SHLIB_GCC_PREFIX = lib
    SHLIB_GCC_SUFFIX = .so
    SHLIB_JNI_SUFFIX = .so
endif

ifeq ($(os), "fc")
#
# Fedora Core 5 installation
#
    CLASSPATH = $(PWD)/classes:$(PWD):./experiments/expt1/classes:./experiments/sosp/classes:./experiments/expt2/classes:./experiments/expt3/classes:./experiments/sosp/PlanetLabExp/classes:sdims.jar:$(JELIB):$(NETTYLIB):$(PASTRY):./jars/junit.jar:./P2Runtime:./PicShare:./jars/CoDec-build17-jdk13.jar:./jars/FlexiCoreProvider-1.6p3.signed.jar
  export CLASSPATH
    CONFIG_FILE = $(PWD)/ufs.config
    JAVA_POLICY_FILE = $(PWD)/java.security.SecurityPermission
    LDFLAGS = -I . \
              -I /usr/include -I /usr/java/jdk1.5.0_07/include \
              -I /usr/java/jdk1.5.0_07/include/linux

    SHLIB_GCC_OPTIONS = -shared
    SHLIB_GCC_PREFIX = lib
    SHLIB_GCC_SUFFIX = .so
    SHLIB_JNI_SUFFIX = .so
endif


ifeq ($(os), "fc-p2")
#
# Fedora Core 5 installation
#
    CLASSPATH = $(PWD)/classes:$(PWD):./experiments/expt1/classes:./experiments/sosp/classes:./experiments/expt2/classes:./experiments/expt3/classes:./experiments/sosp/PlanetLabExp/classes:sdims.jar:$(JELIB):$(NETTYLIB):$(PASTRY):./jars/junit.jar:./P2Runtime:./PicShare:./jars/CoDec-build17-jdk13.jar:./jars/FlexiCoreProvider-1.6p3.signed.jar
  export CLASSPATH
    CONFIG_FILE = $(PWD)/ufs.config
    JAVA_POLICY_FILE = $(PWD)/java.security.SecurityPermission
    LDFLAGS = -I . \
              -I /usr/include -I /usr/java/jdk1.5.0_07/include \
              -I /usr/java/jdk1.5.0_07/include/linux

    SHLIB_GCC_OPTIONS = -shared
    SHLIB_GCC_PREFIX = lib
    SHLIB_GCC_SUFFIX = .so
    SHLIB_JNI_SUFFIX = .so
endif


#
# P2 Related Parameters
#

ifeq "$(OSTYPE)" "cygwin"
	NOP2 = true #only defined if there is no p2 support
	P2DIR = 
	P2GCC = g++
	P2GCCFLAGS = -Wl,--kill-at -mno-cygwin -D__NOP2__
	SHARED = -shared

	INCLUDE = -I.  -I /cygdrive/c/cygwin/usr/include
	JAVAINC = -I /cygdrive/c/Program\ Files/Java/jdk1.5.0_07/include

	PYTHONINC = 
	PYTHONLIB = 

	BOOSTINC = 
	BOOSTLIB = 
endif

ifeq "$(OSTYPE)" "mac"
	NOP2 = true #only defined if there is no p2 support
	P2DIR = 
	P2GCC = g++
	P2GCCFLAGS = -D__NOP2__
	SHARED = -dynamiclib	

	INCLUDE = -I.
	JAVAINC = -I/Library/Java/Home/include -I/System/Library/Frameworks/JavaVM.framework/Headers

	PYTHONINC = 
	PYTHONLIB = 

	BOOSTINC = 
	BOOSTLIB = 
endif

ifeq "$(OSTYPE)" "mac-p2"
#	NOP2 = false #only defined if there is no p2 support
	P2DIR = /Users/nalini/Data/Research/software/p2-related/p2-Oct-2007/
	P2GCC = g++
	P2GCCFLAGS = -DBOOST_DATE_TIME_POSIX_TIME_STD_CONFIG -g -Wall -DTRACE_OFF
	SHARED = -dynamiclib
	OTHERFLAGS = 	

	INCLUDE = -I. -I/usr/include
	JAVAINC = -I/Library/Java/Home/include -I/System/Library/Frameworks/JavaVM.framework/Headers

#	PYTHONINC = -I/Library/Frameworks/Python.framework/Versions/2.4/include/python2.4
	PYTHONINC =  -I/opt/local/Library/Frameworks/Python.framework/Versions/2.4/include/python2.4
#	PYTHONLIB = -L/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4
	PYTHONLIB = -L/opt/local/lib -F/opt/local/Library/Frameworks -u __dummy -u _PyMac_Error -framework System -framework Python -framework CoreServices -framework Foundation
	BOOSTINC = -I/opt/local/include/boost-1_33_1
	BOOSTLIB = -L/opt/local/lib 
endif


ifeq "$(OSTYPE)" "fc"
	NOP2 = true # only defined if there is no p2 support
	P2DIR = /home/nalini/p2-0.8.2
	P2GCC = g++
	P2GCCFLAGS = -D__NOP2__
	SHARED = -shared
	OTHERFLAGS = 

	INCLUDE = -I. -I/usr/include
	JAVAINC = -I/usr/lib/jvm/java/include -I/usr/lib/jvm/java/include/linux

	PYTHONINC = -I/usr/include/python2.4
	PYTHONLIB= -L/usr/lib/python2.4/config

	BOOSTINC = -I/usr/include
	BOOSTLIB = -L/usr/lib
endif		

ifeq "$(OSTYPE)" "fc-p2"
	P2DIR = /home/nalini/p2-0.8.2
	P2GCC = g++
	P2GCCFLAGS = -DBOOST_DATE_TIME_POSIX_TIME_STD_CONFIG -g -Wall -DTRACE_OFF 
	SHARED = -shared
	OTHERFLAGS = -Wl,--rpath

	INCLUDE = -I. -I/usr/include
	JAVAINC = -I/usr/lib/jvm/java/include -I/usr/lib/jvm/java/include/linux

	PYTHONINC = -I/usr/include/python2.4
	PYTHONLIB= -L/usr/lib/python2.4/config

	BOOSTINC = -I/usr/include
	BOOSTLIB = -L/usr/lib
endif		

ifeq "$(OSTYPE)" "linux"
	NOP2 = true #only defined if there is no p2 support
	P2DIR = /projects/lasr/space2/nalini/p2-0.7.2
	P2GCC = /lusr/opt/gcc-4.0.2/bin/g++
	P2GCCFLAGS = -D__NOP2__
	SHARED = -shared
	OTHERFLAGS = 

	INCLUDE = -I. -I/usr/include -I/lusr/include
	JAVAINC = -I/lusr/java5/include -I/lusr/java5/include/linux

	PYTHONINC = -I/lusr/python/include/python2.4
	PYTHONLIB = -L/lusr/python/lib/python2.4/config	

	BOOSTINC = -I/p/graft/boost-1_33_1-gcc4/include/boost-1_33_1
	BOOSTLIB = 

	SSLINC = -I/lusr/openssl/include
	SSLLIB = 

	OTHERLIB = 
endif


ifeq "$(OSTYPE)" "linux-p2"
	P2DIR = /projects/lasr/space2/nalini/p2-0.8.2
	P2GCC = /lusr/opt/gcc-4.0.2/bin/g++
	P2GCCFLAGS = -DBOOST_DATE_TIME_POSIX_TIME_STD_CONFIG -g -Wall -DTRACE_OFF 	
	SHARED = -shared	
	OTHERFLAGS = -Wl,--rpath -Wl,/usr/local/lib -Wl,--rpath -Wl,/lusr/opt/gcc-4.0.2/lib


	INCLUDE = -I. -I/usr/include -I/lusr/include
	JAVAINC = -I/lusr/java5/include -I/lusr/java5/include/linux

	PYTHONINC = 
	PYTHONLIB = -L/lusr/python/lib/python2.4/config	

	BOOSTINC = -I/p/graft/boost-1_33_1-gcc4/include/boost-1_33_1
	BOOSTLIB = -L/p/graft/boost-1_33_1-gcc4/lib 


	SSLINC = 
	SSLLIB = -L/lusr/openssl/lib


	OTHERLIB = -L/lusr/opt/gcc-4.0.2/lib -L/lusr/ssl/lib \
		   -L/lusr/lib -L/lusr/gnu/lib -L/lusr/BerkeleyDB4.2/lib \
		   -L/lusr/X11/lib -L/lusr/tex/lib \
		   -L/lusr/python/lib/python2.4/config \
		   -L/var/local/build/u/obj/gcc-4.0.2/i686-pc-linux-gnu/libstdc++-v3/src \
		   -L/var/local/build/u/obj/gcc-4.0.2/i686-pc-linux-gnu/libstdc++-v3/src/.libs \
		   -L/var/local/build/u/obj/gcc-4.0.2/gcc 


endif

P2LIBS = $(BOOSTLIB) $(PYTHONLIB) $(SSLLIB) $(OTHERLIB)

ifdef NOP2
	P2INC =	$(INCLUDE) \
		$(JAVAINC) \
		$(BOOSTINC) \
		$(PYTHONINC) \
		$(SSLINC)

	P2LADD =
 else

	P2INC =	$(INCLUDE) \
		$(JAVAINC) \
		$(BOOSTINC) \
		$(PYTHONINC) \
		$(SSLINC)\
		-I$(P2DIR) \
		-I$(P2DIR)/p2core -I$(P2DIR)/aggregates -I$(P2DIR)/stages \
		-I$(P2DIR)/functions -I$(P2DIR)/elements -I$(P2DIR)/pythonElements \
		-I$(P2DIR)/net -I$(P2DIR)/overlog -I$(P2DIR)/planner -I$(P2DIR)/lang \
		-I$(P2DIR)/lang/parse -I$(P2DIR)/lang/eca -I$(P2DIR)/lang/local \
		-I$(P2DIR)/lang/rewrite -I$(P2DIR)/lang/debug -I$(P2DIR)/lang/planner \
		 -I$(P2DIR)/lang/p2dl -I$(P2DIR)/debugger -I$(P2DIR)/p2cpp -I$(P2DIR)/lang

	P2LADD = -lm -lpthread -ldl -lcrypto -lssl \
		-lboost_regex -lboost_date_time \
		$(P2DIR)/p2cpp/.libs/libp2cpp$(SHLIB_GCC_SUFFIX) \
		$(P2DIR)/planner/.libs/libp2planner$(SHLIB_GCC_SUFFIX) \
		$(P2DIR)/overlog/.libs/libp2overlog$(SHLIB_GCC_SUFFIX) \
		$(P2DIR)/net/.libs/libp2net$(SHLIB_GCC_SUFFIX) \
		$(P2DIR)/stages/.libs/libp2stages$(SHLIB_GCC_SUFFIX) \
		$(P2DIR)/functions/.libs/libp2functions$(SHLIB_GCC_SUFFIX) \
		$(P2DIR)/aggregates/.libs/libp2aggregates$(SHLIB_GCC_SUFFIX) \
		$(P2DIR)/elements/.libs/libp2elements$(SHLIB_GCC_SUFFIX) \
		$(P2DIR)/p2core/.libs/libp2core$(SHLIB_GCC_SUFFIX) \
		$(P2DIR)/debugger/.libs/libp2debugger$(SHLIB_GCC_SUFFIX)
# -lutil -lpython2.4
endif


#
# Alphabetical list of all java files goes here
# (Note that javac *.java doesn't reliably work, so we're stuck with this.)
#
THESRCS = $(DIR)AcceptStamp.java\
$(DIR)AcceptVV.java\
$(DIR)Assert.java\
$(DIR)BodyMsg.java\
$(DIR)BodyReceiver.java\
$(DIR)BodyRecvWorker.java\
$(DIR)BoundStatus.java\
$(DIR)BoundInval.java\
$(DIR)CSNContainer.java\
$(DIR)CantRecoverCheckpointException.java\
$(DIR)CausalOrderException.java\
$(DIR)CheckpointUpdateIncompleteException\
$(DIR)Config.java\
$(DIR)ConfigEntry.java\
$(DIR)ConstrainedOutputStream.java\
$(DIR)Controller.java\
$(DIR)Coordinator.java\
$(DIR)Core.java\
$(DIR)CounterVV.java\
$(DIR)DISTreeNode.java\
$(DIR)DataStore.java\
$(DIR)DelayOutputStream.java\
$(DIR)DeleteInv.java\
$(DIR)DemandReadWorker.java\
$(DIR)DirectoryUpdate.java\
$(DIR)DirectoryUpdateWorker.java\
$(DIR)Env.java\
$(DIR)GeneralInv.java\
$(DIR)HBFrame.java\
$(DIR)HBObj.java\
$(DIR)HeartbeatInputStream.java\
$(DIR)HeartbeatOutputStream.java\
$(DIR)HeartbeatServerSocket.java\
$(DIR)HeartbeatSocket.java\
$(DIR)IsImpreciseException.java\
$(DIR)ISIterator.java\
$(DIR)ISStatus.java\
$(DIR)ImmutableBytes.java\
$(DIR)ImpreciseInv.java\
$(DIR)InterestSet.java\
$(DIR)InterestSetRecord.java\
$(DIR)InvalIterator.java\
$(DIR)InvalListItem.java\
$(DIR)InvalReceiver.java\
$(DIR)InvalRecvWorker.java\
$(DIR)InvalSpanningList.java\
$(DIR)InvalTarget.java\
$(DIR)LocalController.java\
$(DIR)LocalInterface.java\
$(DIR)NetAddr.java\
$(DIR)NoSuchEntryException.java\
$(DIR)NodeId.java\
$(DIR)ObjId.java\
$(DIR)ObjInvalTarget.java\
$(DIR)ObjNotFoundException.java\
$(DIR)OmittedVVException.java\
$(DIR)PendingDemandList.java\
$(DIR)PendingDemandRequest.java\
$(DIR)PreciseInv.java\
$(DIR)RandomReadDirectory.java\
$(DIR)ReadDirectory.java\
$(DIR)ReadOfInvalidRangeException.java\
$(DIR)RMIApplicationException.java\
$(DIR)RMIClient.java\
$(DIR)RMINetworkException.java\
$(DIR)RMIServer.java\
$(DIR)RMIServerImpl.java\
$(DIR)RMITimeoutSocketFactory.java\
$(DIR)RandomAccessState.java\
$(DIR)ReconnectConnection.java\
$(DIR)SDIMSController.java\
$(DIR)SDIMSInterface.java\
$(DIR)SDIMSReadDirectory.java\
$(DIR)SingleWriterImpreciseInv.java\
$(DIR)SingleWriterInval.java\
$(DIR)SingleWriterLog.java\
$(DIR)SingleWriterLogUncommitted.java\
$(DIR)SocketServer.java\
$(DIR)SpanningChangeHandler.java\
$(DIR)SpanningDirectory.java\
$(DIR)SpanningTreeWorker.java\
$(DIR)SpanningTreeWatchdog.java\
$(DIR)Stats.java\
$(DIR)StatsRecord.java\
$(DIR)StreamPool.java\
$(DIR)SubscribeBodyWorker.java\
$(DIR)SubscribeInvalRequest.java\
$(DIR)SubscribeInvalWorker.java\
$(DIR)SyncPool.java\
$(DIR)SyncRequest.java\
$(DIR)SyncRequestQ.java\
$(DIR)SyncRequestThread.java\
$(DIR)SyncRplyReceiver.java\
$(DIR)SyncRplyRecvWorker.java\
$(DIR)TaggedOutputStream.java\
$(DIR)TimeoutHandler.java\
$(DIR)TimeoutQueue.java\
$(DIR)TimeoutQueueWorker.java\
$(DIR)URANode.java\
$(DIR)UnableToConnectException.java\
$(DIR)UnbindMsg.java\
$(DIR)UpdateLog.java\
$(DIR)UpdatePriorityComparator.java\
$(DIR)UpdatePriorityQueue.java\
$(DIR)UpdateRangeList.java\
$(DIR)VV.java\
$(DIR)VVIterator.java\
$(DIR)VVMap.java\
$(DIR)WorkQueue.java\
$(DIR)AllPreciseSets.java\
$(DIR)PreciseSet.java\
$(DIR)FileNameTokenizer.java\
$(DIR)ISStatus.java\
$(DIR)InterestRegion.java




SRCDIR=.
DIR:=$(SRCDIR)/
SRCS := $(THESRCS) 
DIR:=$(CLASSDIR)/
THECLASSFILES := $(THESRCS:.java=.class)
CLASSFILES = $(THECLASSFILES)
GCC = gcc
GCCFLAGS = -g -O


.phony:			clean all p2runtime picshare
.PHONY: 		clean all p2runtime picshare

#all:	javaclassfiles jni p2runtime picshare p2 rmic nfslib case-studies nfs
all:	javaclassfiles p2runtime picshare p2 rmic nfslib case-studies nfs

javaclassfiles:
			mkdir -p $(CLASSDIR)
			mkdir -p $(CLASSDIR)/code/gnu/getopt
			cp gnu/getopt/*.properties $(CLASSDIR)/code/gnu/getopt

			$(JAVAC) $(JAVACFLAGS)   -d $(CLASSDIR) -classpath $(CLASSPATH):./classes:./security/bcprov-jdk15-139.jar ./lasr/db/berkdb/*.java ./lasr/db/*.java ./lasr/util/*.java ./serialization/*.java ./security/unit/*.java ./security/ahs/unit/*.java ./security/ahs/*.java ./security/liveness/*.java ./security/liveness/unit/*.java ./security/holesync/filter/*.java ./security/holesync/*.java ./security/*.java *.java ./security/application/MapShare/trace/*.java ./security/application/MapShare/*.java ./gnu/getopt/*.java ./utils/junit/*.java ./signedVV/*.java ./security/application/BasicObjShare/*.java ./branchDetecting/*.java ./simulator/log/*.java ./simulator/protocolFilters/*.java ./simulator/checkpoint/*.java ./simulator/checkpoint/unit/*.java ./simulator/protocolFilters/unit/*.java ./simulator/agreement/*.java ./simulator/agreement/unit/*.java ./simulator/notification/*.java ./simulator/notification/unit/*.java ./simulator/store/*.java ./simulator/persistentLog/*.java ./simulator/*.java ./simulator/branchManager/*.java ./simulator/unit/*.java ./simulator/distributionsimulation/*.java ./untrustedstorage/writeanyreadany/*.java ./untrustedstorage/writeanyreadany/client/*.java ./untrustedstorage/writeanyreadany/server/*.java ./untrustedstorage/writeanyreadany/unit/*.java ./simulator/netty/*.java ./simulator/irisnetty/*.java 


			
#			$(JAVAC) $(JAVACFLAGS)   -d $(CLASSDIR) -classpath $(CLASSPATH):./classes:./security/bcprov-jdk15-139.jar ./security/unit/*.java ./security/ahs/unit/*.java ./security/ahs/*.java ./security/liveness/*.java ./security/liveness/unit/*.java ./security/holesync/filter/*.java ./security/holesync/*.java ./security/*.java *.java ./security/application/MapShare/trace/*.java ./security/application/MapShare/*.java ./gnu/getopt/*.java ./utils/junit/*.java ./signedVV/*.java ./security/application/BasicObjShare/*.java ./branchDetecting/*.java ./branchDetecting/unit/*.java ./simulator/*.java ./simulator/unit/*.java ./simulator/agreement/*.java ./simulator/branchManager/*.java
#			$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) NFSlib2/*.java


secureTest: ../BENCHMARKS/micro/PreciseInvalStreamTest.java ../BENCHMARKS/micro/PreciseInvalStreamTestHelper.java ../BENCHMARKS/micro/PreciseInvalStreamTestController.java
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH):./classes ../BENCHMARKS/micro/*.java
	$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) PreciseInvalStreamTest

runSecureTest:
	$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) PreciseInvalStreamTest $(ARG1)

micro: ../BENCHMARKS/micro/*.java 
	$(JAVAC)  $(JAVACFLAGS) -source 1.4 -deprecation -d $(CLASSDIR) -classpath $(CLASSPATH) ../BENCHMARKS/micro/*.java

#	$(JAVA) -Xmx256m -Xmx256M -ea -esa -classpath $(CLASSPATH) CriticalPartsPerformance	
#	sleep 1

#	$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) LocalOperationPerformanceUnit

#	$(JAVA) -Xms256M -Xmx256M -ea -esa -classpath $(CLASSPATH) SubscribeTime LOG 1
#	sleep 5

#	$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) PreciseInvalStreamTest
#	$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) SubscribeTime CP 1
#	sleep 5

#	$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) SubscribeTime LOG 2
#	sleep 5

#	$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) SubscribeTime CP 2
#	sleep 5

#	$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) SubscribeTime LOG 3
#	sleep 5

#	$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) SubscribeTime CP 3
#	sleep 5

#	$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) SubscribeTime LOG 4

#	$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) BerkeleyDBPerformance

p2runtime:
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) P2Runtime/*.java
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) P2Runtime/UnitTests/*.java
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) P2Runtime/experiments/*/*.java

#
# libP2JavaWrapper
#
p2: P2Runtime/P2JavaWrapper.C $(SHLIB_GCC_PREFIX)P2JavaWrapper$(SHLIB_JNI_SUFFIX)

$(SHLIB_GCC_PREFIX)P2JavaWrapper$(SHLIB_JNI_SUFFIX):
	$(P2GCC) $(P2GCCFLAGS) $(SHARED) $(P2INC) -o $(SHLIB_GCC_PREFIX)P2JavaWrapper$(SHLIB_JNI_SUFFIX) P2Runtime/P2JavaWrapper.C $(P2LIBS) $(P2LADD) $(OTHERFLAGS)

p2server:
	$(P2GCC) $(P2GCCFLAGS) $(P2INC) P2Runtime/P2Server.c $(P2LIBS) $(P2LADD) $(OTHERFLAGS) -o bin/P2Server

picshare:
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) PicShare/*.java

#
#  nfs stuff
#

nfslib: 
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) NFSlib2/*.java 

nfs: 
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) NFSlib2/*.java
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) NFS2Interface/*.java

#
#  case studies
#
case-studies: nfslib coda codaj pangaea bayou bayou-exp chainRep chainRepII tierstore

coda: nfslib
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) case-studies/Coda/*.java

codaj: case-studies/Coda/javaVersion/*.java
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) case-studies/Coda/javaVersion/*.java 

codas:
	$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) CodaExpt1Server

codac:
	$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) CodaExpt1Client
	
tierstore: nfslib
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) case-studies/TierStore/*.java
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) case-studies/TierStore/experiments/exp1/*.java


pangaea: nfslib
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) case-studies/Pangaea/*.java


bayou: 	nfslib
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) case-studies/Bayou/*.java

bayou-exp: 
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) case-studies/Bayou/experiments/localExp/*.java
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) case-studies/Bayou/experiments/exp1/*.java
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) case-studies/Bayou/experiments/exp2/*.java
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) case-studies/Bayou/experiments/exp3/*.java

chainRep: 
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) case-studies/ChainReplication/*.java
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) case-studies/ChainReplication/experiments/exp1/*.java
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) case-studies/ChainReplication/experiments/exp2/*.java	

chainRepII: 
	$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) case-studies/ChainReplicationII/*.java


#
# RMIC
#
rmic:	classes/code/RMIServerImpl_Stub.class classes/code/RuntimeRMIServerImpl_Stub.class

classes/code/RMIServerImpl_Stub.class: RMIServerImpl.java 
			$(RMIC_PATH) -d $(CLASSDIR) -classpath $(CLASSPATH):. code.RMIServerImpl

classes/code/RuntimeRMIServerImpl_Stub.class: P2Runtime/RuntimeRMIServerImpl.java
			$(RMIC_PATH) -d $(CLASSDIR) -classpath $(CLASSPATH) RuntimeRMIServerImpl






#
# JNI
#
jni:	$(SHLIB_GCC_PREFIX)nicesock$(SHLIB_JNI_SUFFIX) $(SHLIB_GCC_PREFIX)nicesockis$(SHLIB_JNI_SUFFIX) $(SHLIB_GCC_PREFIX)nicesockos$(SHLIB_JNI_SUFFIX) $(SHLIB_GCC_PREFIX)niceservsock$(SHLIB_JNI_SUFFIX)


$(SHLIB_GCC_PREFIX)nicesock$(SHLIB_JNI_SUFFIX): NiceSocketImpl.java code_NiceSocketImpl.c
			$(JAVAH) -jni -classpath classes code.NiceSocketImpl
			$(GCC) $(SHLIB_GCC_OPTIONS) -o $(SHLIB_GCC_PREFIX)nicesock$(SHLIB_JNI_SUFFIX) $(GCCFLAGS) -fPIC $(LDFLAGS) code_NiceSocketImpl.c

$(SHLIB_GCC_PREFIX)nicesockis$(SHLIB_JNI_SUFFIX): NiceSocketInputStream.java code_NiceSocketInputStream.c
			$(JAVAH) -jni -classpath classes code.NiceSocketInputStream
			$(GCC) $(SHLIB_GCC_OPTIONS) -o $(SHLIB_GCC_PREFIX)nicesockis$(SHLIB_GCC_SUFFIX) $(GCCFLAGS) -fPIC $(LDFLAGS) code_NiceSocketInputStream.c

$(SHLIB_GCC_PREFIX)nicesockos$(SHLIB_JNI_SUFFIX): NiceSocketOutputStream.java code_NiceSocketOutputStream.c
			$(JAVAH) -jni -classpath classes code.NiceSocketOutputStream
			$(GCC) $(SHLIB_GCC_OPTIONS) -o $(SHLIB_GCC_PREFIX)nicesockos$(SHLIB_JNI_SUFFIX) $(GCCFLAGS) -fPIC $(LDFLAGS) code_NiceSocketOutputStream.c

$(SHLIB_GCC_PREFIX)niceservsock$(SHLIB_JNI_SUFFIX): NiceServerSocket.java code_NiceServerSocket.c
			$(JAVAH) -jni -classpath classes code.NiceServerSocket
			$(GCC) $(SHLIB_GCC_OPTIONS) -o $(SHLIB_GCC_PREFIX)niceservsock$(SHLIB_JNI_SUFFIX) $(GCCFLAGS) -fPIC $(LDFLAGS) code_NiceServerSocket.c

#
# Experiments
#
experiments:
#			cd experiments/script-generators; make
			cd experiments/sosp; make
#			cd experiments/expt1; make







#
# Use
#    > make -k force 
# to force compilation of each file for cases when javac * skips
# some...
#
force:			classfiles

classfiles:		$(CLASSFILES)


clean:
			rm -rf $(CLASSDIR)/*
			rm -f *.dll *.so *.o *.la *.jnilib *.dylib *.tmp
			rm -f RMIServerImpl_Skel.java
			rm -rf experiments/expt1/$(CLASSDIR)
			rm -rf experiments/sosp/$(CLASSDIR)
			rm -rf experiments/expt2/$(CLASSDIR)
			rm -rf experiments/expt3/$(CLASSDIR)
#			rm -rf experiments/script-generators/$(CLASSDIR)

classes/%.class: %.java
	mkdir -p $(CLASSDIR); $(JAVAC)  $(JAVACFLAGS) -d $(CLASSDIR) -classpath $(CLASSPATH) $<



%.class: %.java
	mkdir -p $(CLASSDIR); $(JAVAC)  $(JAVACFLAGS) -d $(CLASSDIR) -classpath $(CLASSPATH) $<


rmi:
			mkdir -p $(CLASSDIR)
			$(JAVAC)  $(JAVACFLAGS)  -d $(CLASSDIR) -classpath $(CLASSPATH) RMIClient.java
			rmic -d $(CLASSDIR) -classpath $(CLASSPATH) RMIServerImpl

PACKAGEROOT=code

junit:	
	# utils/junit/sanityCheck.sh
	make classes/utils/junit/TestAll.class
	$(JAVA) -Xmx256m -classpath $(CLASSPATH) -Dclass_root=classes -Dtest_type=UNIT j-Dpackage_root=$(PACKAGEROOT) unit.awtui.TestRunner code.utils.junit.TestAll


junittext:
	# utils/junit/sanityCheck.sh
	make classes/utils/junit/TestAll.class
	$(JAVA) -Xmx256m -classpath $(CLASSPATH) -Dclass_root=classes -Dtest_type=UNIT -Dpackage_root=$(PACKAGEROOT) junit.textui.TestRunner code.utils.junit.TestAll 

PACKAGE=code

#%.junit: classes/%.class
%.junit:
	#utils/junit/sanityCheck.sh
	$(JAVA) -classpath $(CLASSPATH) -Dclass_root=classes -Dtest_type=UNIT junit.textui.TestRunner $(PACKAGE).$*;


%.runit: 
		$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) $(PACKAGE).$*; 

%.unit: classes/%.class
			$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) $(PACKAGE).$*; 

%.unitv: classes/%.class
			$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) code.$* -verbose;

%.unit0: classes/%.class
			$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) code.$* 0; 

%.unit1: classes/%.class
			$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) code.$* 1; 

%.unit2: classes/%.class
			$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) code.$* 2;

%.unit3: classes/%.class
			$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) code.$* 3;

%.unit4: classes/%.class
			$(JAVA) -Xmx256m -ea -esa -classpath $(CLASSPATH) code.$* 4;



PURIFY=purify
PURIFYJAVA=c:/Program Files/Java/jre1.5.0_07/bin/java.exe
%.purifyunit: classes/%.class
			$(PURIFY) /java $(PURIFYJAVA) -ea -classpath $(CLASSPATH) $*; 

#######################################################################
# $Log: Makefile,v $
# Revision 1.205  2007/12/18 17:31:59  nalini
# CRII added
#
# Revision 1.204  2007/11/28 08:09:16  nalini
# fixed jni for mac
#
# Revision 1.203  2007/11/06 00:06:39  zjiandan
# fix jni.
#
# Revision 1.202  2007/11/05 23:32:42  zjiandan
# fix SubscribeBWunit.
#
# Revision 1.201  2007/11/05 18:31:55  nalini
# fixed makefile for mac port
#
# Revision 1.200  2007/10/19 23:08:39  zjiandan
# Coda demo for SOSP poster 2007.
#
# Revision 1.199  2007/10/07 04:47:04  zjiandan
#  coda cooperative caching exp
#
# Revision 1.198  2007/10/06 18:44:06  zjiandan
# *** empty log message ***
#
# Revision 1.197  2007/10/06 05:29:53  zjiandan
# Add Coda java hack version.
#
# Revision 1.196  2007/10/01 14:13:47  zjiandan
# *** empty log message ***
#
# Revision 1.195  2007/09/18 03:14:34  zjiandan
# *** empty log message ***
#
# Revision 1.194  2007/09/18 02:41:40  zjiandan
# *** empty log message ***
#
# Revision 1.193  2007/09/13 21:51:45  nalini
# successfully ported p2-0.8.2 to CS machines
#
# Revision 1.192  2007/09/12 19:08:38  nalini
# upgraded to p2-0.8.2
#
# Revision 1.191  2007/09/10 23:52:22  zjiandan
# upgrade to newest BerkeleyDB je version.
#
# Revision 1.190  2007/08/04 13:44:09  zjiandan
# *** empty log message ***
#
# Revision 1.188  2007/07/03 07:57:54  zjiandan
#  more unit tests
#
# Revision 1.187  2007/06/25 05:21:28  zjiandan
# Cleanup OutgoingConnection and add unit tests
#
# Revision 1.186  2007/04/04 20:17:22  zjiandan
# fix rmi server cache bug.
#
# Revision 1.185  2007/03/21 22:33:52  nalini
# *** empty log message ***
#
# Revision 1.184  2007/03/16 23:58:18  nalini
# p2 server interface added
#
# Revision 1.183  2007/03/13 00:04:44  zjiandan
# mv test to cs machines.
#
# Revision 1.182  2007/03/12 03:37:06  nalini
# Chain Replication exp1 files added
#
# Revision 1.181  2007/03/09 03:01:38  nalini
# removed update workers option from P2Config
#
# Revision 1.180  2007/03/08 21:41:17  nalini
# total revamp of P2Runtime, update subscriptions removed, retry logic changed
#
# Revision 1.179  2007/03/02 01:35:28  zjiandan
# Yeah! Working Simplified TierStore.
#
# Revision 1.175  2007/02/23 20:54:28  zjiandan
# Fixed mem leak problems in NFS2Interface and some other bugs.
# Andrew benchmark passed, performance still needs to tune.
#
# Revision 1.174  2007/02/13 04:04:40  zjiandan
# fix Makefile for fc.
#
# Revision 1.173  2007/02/01 06:12:09  zjiandan
# Add acceptStamp to demandRead so that the sender only sends the data
# that's at least as new as the acceptStamp.
#
# Revision 1.172  2007/01/21 19:23:19  nalini
# ChainReplication works with NFS -- needed change NFSlib so that chainRep node makes root locally
#
# Revision 1.171  2007/01/19 22:03:27  nalini
# added noP2 for fc build
#
# Revision 1.170  2007/01/12 19:14:40  nalini
# bayou case-study added
#
# Revision 1.169  2007/01/10 06:34:01  zjiandan
# fixed "mount: localhost:practidir: can't read superblock" problem
# and the Java P2 wrapper string problem.
#
# Revision 1.168  2007/01/06 02:03:24  nalini
# minor junit  bug fixes
#
# Revision 1.167  2007/01/06 01:04:35  nalini
# minor bug fixes for requestSync(VV)
#
# Revision 1.166  2007/01/05 01:18:41  nalini
# support for sync with VV added
#
# Revision 1.165  2007/01/03 18:43:44  nalini
# increased heapsize for unit tests
#
# Revision 1.164  2006/11/18 05:23:17  nalini
# new read interface implemented
#
# Revision 1.163  2006/11/16 21:29:47  nalini
# attempt to fix junit
#
# Revision 1.162  2006/11/16 21:22:57  zjiandan
# *** empty log message ***
#
# Revision 1.161  2006/11/16 21:08:09  nalini
# Makefile
#
# Revision 1.160  2006/11/16 20:53:06  nalini
# *** empty log message ***
#
# Revision 1.158  2006/11/16 04:31:11  nalini
# *** empty log message ***
#
# Revision 1.157  2006/11/16 04:18:01  nalini
# junit fix
#
# Revision 1.156  2006/11/16 03:44:02  nalini
# junit fix
#
# Revision 1.155  2006/11/16 02:31:09  nalini
# temp junit fix
#
# Revision 1.154  2006/11/02 21:28:39  zjiandan
# fixed some minor bugs and turn off the debug printing.
#
# Revision 1.153  2006/11/01 19:26:46  zjiandan
# Integrate PangaeaFS and NFS interface.
#
# Revision 1.152  2006/10/25 21:11:53  nalini
# added support for P2 on cs linux machines and make file clean up
#
# Revision 1.151  2006/10/16 05:44:26  zjiandan
# Fixed DataStore::applyCheckpoint large lock problem (refer to mike's 2006.10.12.txt), moved IncommingConnection unit tests to junit.
#
# Revision 1.150  2006/10/11 19:49:30  nalini
# updated make file to fix junit error
#
# Revision 1.149  2006/09/24 20:06:31  nalini
# trying to make overlog and practi work
#
# Revision 1.148  2006/09/21 23:27:50  nalini
# Porting P2+Practi to CS machines
#
# Revision 1.147  2006/09/19 22:18:27  nalini
# P2 and Practi integration
#
# Revision 1.146  2006/09/01 15:57:49  dahlin
# Fixed to work with cygwin...had to remove quotes around cygwin string (odd..)
#
# Revision 1.145  2006/08/31 23:43:16  nalini
# added support for mac
#
# Revision 1.144  2006/08/25 20:31:45  dahlin
# Added serialization to PreciseSets (plan is to use serialization rather than sync() for persistence). Moved PreciseSet unit tests to junit (PreciseSetUnit)
#
# Revision 1.143  2006/08/24 23:08:53  nalini
# Simple unit test created for P2Runtime
#
# Revision 1.142  2006/08/15 23:16:39  dahlin
# Debugging linux case for picshareReaderUnit.junit
#
# Revision 1.141  2006/08/15 21:46:24  dahlin
# Added PicShare Reader and a simple unit test.
#
# Revision 1.140  2006/08/09 22:18:31  dahlin
# Got rmi.server.codebase working on cygwin; should now be portable...
#
# Revision 1.139  2006/08/09 20:43:26  dahlin
# Debugged PicShareWriterUnit unit test. It works!
#
# Revision 1.138  2006/08/09 18:52:16  dahlin
# Fixed Makefile to be portable to cygwin by fixing classpath definitions; fixed P2Runtime/Runtime v. java.lang.Runtime conflict by moving P2Runtime/Runtime to P2Runtime/P2Runtime
#
# Revision 1.137  2006/08/07 17:42:03  nayate
# Fixed minor tab-spacing problem
#
# Revision 1.136  2006/06/20 19:40:42  dahlin
# Update makefile to remove RMIServerImpl_Skel on make clean
#
# Revision 1.135  2006/06/20 19:26:35  dahlin
# Now it makes in cygwin.
#
# Revision 1.134  2006/06/13 03:49:19  nalini
# RMI for P2 Runtime Implemented
#
# Revision 1.133  2006/04/23 22:44:59  zjiandan
# change informReceiveInval to have senderId info.
#
# Revision 1.132  2006/04/22 22:31:15  zjiandan
# Completely merged with Runtime.
#
# Revision 1.131  2006/04/22 08:00:11  nalini
# Working Version of P2 Runtime: Works with JD's interfaces
#
# Revision 1.130  2005/10/13 00:36:44  zjiandan
# Fix RMIC_PATH
#
# Revision 1.129  2005/10/13 00:24:24  zjiandan
# remove Config.getMy* fixed Garbage Collection and Checkpoint exchange code
#
# Revision 1.128  2005/10/09 23:46:44  nayate
# Removed some debug printing
#
# Revision 1.127  2005/07/18 05:10:23  zjiandan
# Embargoed Writes etc. features implementation plus
# log overhead measurement with disk size and in-memory size.
#
# Revision 1.126  2005/06/13 17:56:22  dahlin
# Workaround for out of memory error. Most tests pass individually, but if all tests run, later ones fail. Seems to be a problem with not all memory freed across setup/teardown runs. Suspect berkeleydb leak? Workaround is to limit cache size for BerkeleyDB. BUT still have a bug -- memory consumption grows across tests (but more slowly than before.)
#
# Revision 1.125  2005/06/09 17:11:48  dahlin
# Moving unit tests for RandomAccessState to junit
#
# Revision 1.124  2005/06/08 20:09:03  dahlin
# *** empty log message ***
#
# Revision 1.123  2005/06/08 16:07:59  dahlin
# *** empty log message ***
#
# Revision 1.122  2005/06/08 14:14:23  dahlin
# adding scripts for nightly junit run
#
# Revision 1.121  2005/06/01 22:41:46  dahlin
# Added really basic self test for Nice
#
# Revision 1.120  2005/06/01 16:33:45  dahlin
# Cleaned up makefiles to compile more quickly
#
# Revision 1.119  2005/06/01 16:00:50  dahlin
# (1) Got JNI/Nice to compile for cygwin, (2) put junit framework in place
#
# Revision 1.118  2005/05/25 18:42:34  dahlin
# *** empty log message ***
#
# Revision 1.117  2005/05/24 16:21:02  dahlin
# It now compiles under cygwin
#
# Revision 1.116  2005/03/22 23:00:03  zjiandan
# Changes for TactExpt.
#
# Revision 1.115  2005/03/16 21:35:24  dahlin
# Added berekelyDB 1.7.1; added RandomAccessState test 18 stress test memory that fails
#
# Revision 1.114  2005/03/15 21:15:34  zjiandan
# Automatic GC checked in.
#
# Revision 1.113  2005/03/13 10:00:34  nayate
# Fixed a simple error
#
# Revision 1.112  2005/03/13 09:48:12  nayate
# Added code to work with TCP-LP
#
# Revision 1.111  2005/03/07 21:00:08  lgao
# Planet lab exp check-in
#
# Revision 1.110  2005/03/07 07:06:29  nayate
# Added some clean-up code
#
# Revision 1.109  2005/03/05 04:50:13  nayate
# Added some testing code
#
# Revision 1.108  2005/03/02 21:43:20  zjiandan
# Removed some bugs
#
# Revision 1.107  2005/03/02 19:16:05  nayate
# Bring Makefile up-to-date step 1
#
# Revision 1.106  2005/03/01 10:40:35  nayate
# First successful compilation
#
# Revision 1.105  2005/02/28 20:25:59  zjiandan
# Added Garbage Collection code and part of Checkpoint exchange protocol code
#
# Revision 1.104  2005/01/18 22:49:42  zjiandan
# Rewrited Class Serialization for network deliveringto reduce the overall bandwidth.
#
# Revision 1.103  2005/01/13 22:41:15  zjiandan
# fixed Makefile problem and add precise invalidate statistic collection facility.
#
# Revision 1.102  2005/01/13 20:55:40  zjiandan
# Reorganized sosp experiments files into sosp subdirectory under experiments.
#
# Revision 1.101  2005/01/10 03:47:47  zjiandan
# Fixed some bugs. Successfully run SanityCheck and Partial Replication experiments.
#
# Revision 1.100  2004/11/02 22:24:33  zjiandan
# add utility methods for core recovery self test.
#
# Revision 1.99  2004/11/01 18:48:48  nayate
# Changed the path used to access Berkeley DB.
#
# Revision 1.98  2004/10/22 20:46:55  dahlin
# Replaced TentativeState with RandomAccessState in DataStore; got rid of 'chain' in BodyMsg; all self-tests pass EXCEPT (1) get compile-time error in rmic and (2) ./runSDIMSControllerTest fails [related to (1)?]
#
# Revision 1.97  2004/10/22 18:13:39  zjiandan
# cleaned csn from UpdateLog, modified DeleteInv.
# TBD:
#    1. clean csn from all subclasses of GeneralInv
#    2. fix *Inv::cloneIntersectInvaltargetChopStartEnd
#
# Revision 1.96  2004/08/27 20:39:40  dahlin
# Fixed to compile under Cygwin
#
# Revision 1.95  2004/08/18 22:44:44  dahlin
# Made BoundInval subclass of PreciseInval; RandomAccessState passes 2 self tests
#
# Revision 1.94  2004/07/29 22:05:11  dahlin
# Set up unit test for TwoFileObjectStore.java
#
# Revision 1.93  2004/07/28 20:18:26  dahlin
# encapsulated byte[] bodies in ImmutableBytes for safety
#
# Revision 1.92  2004/07/26 20:03:39  dahlin
# Fixed typos from windows checkin so it will compile under Linux
#
# Revision 1.91  2004/07/07 21:14:51  nayate
# Added the ability to automate some experiments
#
# Revision 1.90  2004/05/27 00:20:40  zjiandan
# *** empty log message ***
#
# Revision 1.89  2004/05/26 20:14:39  nayate
# Added some experiments
#
# Revision 1.88  2004/05/26 17:15:10  lgao
# *** empty log message ***
#
# Revision 1.87  2004/05/26 16:19:28  nayate
# *** empty log message ***
#
# Revision 1.86  2004/05/26 08:00:55  lgao
# *** empty log message ***
#
# Revision 1.85  2004/05/25 23:04:57  lgao
# *** empty log message ***
#
# Revision 1.84  2004/05/25 08:16:41  lgao
# *** empty log message ***
#
# Revision 1.83  2004/05/25 06:26:37  nayate
# Minor changes
#
# Revision 1.82  2004/05/23 20:08:27  zjiandan
# *** empty log message ***
#
# Revision 1.81  2004/05/23 09:14:49  lgao
# *** empty log message ***
#
# Revision 1.80  2004/05/22 10:53:57  nayate
# Added some missing directories to CLASSPATH
#
# Revision 1.79  2004/05/22 04:15:07  nayate
# Added the "-rf" option to rm
#
# Revision 1.78  2004/05/22 03:05:13  nayate
# Fixed blocked read bug
#
# Revision 1.77  2004/05/21 23:25:05  nayate
# Minor change
#
# Revision 1.76  2004/05/21 22:22:23  zjiandan
# Add rm filesystem build in previous experiment in expt2.
#
# Revision 1.75  2004/05/21 20:32:18  zjiandan
# Add target for experiment 2.
#
# Revision 1.74  2004/05/21 11:57:42  arun
# minor
#
# Revision 1.73  2004/05/21 11:48:56  nayate
# Minor change
#
# Revision 1.72  2004/05/21 11:47:47  nayate
# Minor change
#
# Revision 1.71  2004/05/21 11:43:59  nayate
# Added expt1
#
# Revision 1.70  2004/05/21 08:08:47  lgao
# *** empty log message ***
#
# Revision 1.69  2004/05/21 00:46:39  lgao
# Added the ability to work for bash as well as tcsh
#
# Revision 1.68  2004/05/20 21:56:40  nayate
# Minor change
#
# Revision 1.67  2004/05/20 20:39:29  ypraveen
# Added sdims.jar to classpath for undefined OS case too. Missed last time
#
# Revision 1.66  2004/05/20 19:32:10  nayate
# Removed hard-coded path names
#
# Revision 1.65  2004/05/20 18:53:59  nayate
# Added experiments/expt1/classes to the class path
#
# Revision 1.64  2004/05/20 17:13:11  ypraveen
# Added sdims.jar to CLASSPATH
#
# Revision 1.63  2004/05/20 01:54:06  nayate
# Added the expt1 directory to the compilation path
#
# Revision 1.62  2004/05/20 00:47:34  dahlin
# Fixed several bugs to make inval log exchange work (biggest one: ISIterator handling case when an single-writer log exists but has no records in it; also added some debugging tools
#
# Revision 1.61  2004/05/19 20:43:11  lgao
# Add StatsRecord class to maintain stats
#
# Revision 1.60  2004/05/19 04:34:55  dahlin
# SDIMSController test compiles and runs but deadlocks
#
# Revision 1.59  2004/05/19 03:09:01  dahlin
# Fixed default constructor for URANode
#
# Revision 1.58  2004/05/19 01:46:30  arun
# added getLPVV functionality
#
# Revision 1.57  2004/05/19 00:18:01  dahlin
# Fixed makefile to work for windows/cygwin
#
# Revision 1.56  2004/05/18 20:28:07  nayate
# Allowed make to compile the script generators as well
#
# Revision 1.55  2004/05/18 08:53:37  nayate
# Added a new test "run-test1-local"
#
# Revision 1.54  2004/05/18 06:25:27  lgao
# Initial implementation of the ConstrainedOutputStream.
# Note: the bandwidth parameter, BW, in ufs.config limits the network output rate of the file system if ConstrainedOutputStream is used for sending data.
#
# Revision 1.53  2004/05/14 21:42:54  nayate
# (1) Changed Makefile to redirect stdout and stderr to files nodeXXX.output,
#     where XXX is the node id.
# (2) Added the "-hold" option to xterm windows so that they don't exit when
#     the application does.
#
# Revision 1.52  2004/05/14 20:37:11  nayate
# Added the ability to run tests locally
#
# Revision 1.51  2004/05/14 02:47:35  nayate
# Allowed the Makefile to run tests on others' machines
#
# Revision 1.50  2004/05/14 00:12:43  zjiandan
# Changes for second experiments.
#
# Revision 1.49  2004/05/13 21:58:14  dahlin
# simple unbind implemented
#
# Revision 1.48  2004/05/13 18:49:17  dahlin
# Clean SDIMSController by moving SpanningTree directory out as separate class (rather than using raw SDIMSInterface)
#
# Revision 1.47  2004/05/13 11:58:52  nayate
# (1) Added the ability to log output
# (2) Added a delay between before allowing the coordinator to start
#
# Revision 1.46  2004/05/13 01:17:15  nayate
# Added the simple ability to run tests using make
#
# Revision 1.45  2004/05/12 19:08:41  zjiandan
# Add UpdateLog self test.
#
# Revision 1.44  2004/05/12 17:12:36  lgao
# Modify the getNext() to block when no data to return
#
# Revision 1.43  2004/05/11 23:20:04  lgao
# *** empty log message ***
#
# Revision 1.42  2004/05/11 21:46:38  lgao
# Implementation of TaggedOutputStream which counts bytes sent over the wire.
#
# Revision 1.41  2004/05/11 17:38:41  nayate
# Added a unit test entry for DISTreeNode.java
#
# Revision 1.40  2004/05/11 03:49:45  zjiandan
# Made some changes to get the first version to work.
#
# Revision 1.39  2004/05/11 00:46:56  dahlin
# Added read-miss-directory updates to SDIMSController
#
# Revision 1.38  2004/05/10 23:55:42  dahlin
# Moved SDIMS read requests into ReadDirectory class for modularity and extensibility
#
# Revision 1.37  2004/05/10 22:45:47  dahlin
# All unit: target tests succeed
#
# Revision 1.36  2004/05/10 21:17:38  lgao
# Initial implementation
#
# Revision 1.35  2004/05/10 21:10:26  dahlin
# Make % targets work after make clean
#
# Revision 1.34  2004/05/10 21:00:22  lgao
# Just to make things compile.
#
# Revision 1.33  2004/05/10 20:50:17  nayate
# Added the ability to check for "linux" as well as "linux-gnu" as os types
#
# Revision 1.32  2004/05/10 20:48:19  dahlin
# Clarified RMI exceptions; full version of (stub) DemandReadWorker
#
# Revision 1.31  2004/05/10 18:56:31  dahlin
# Created PendingDemandList and PendingDemandRequest (needed by SDIMSController)
#
# Revision 1.30  2004/05/09 22:21:11  dahlin
# Unit test and stub implementation for spanningTreeWorker
#
# Revision 1.29  2004/05/09 20:43:32  dahlin
# Use make -k force to force compilation of all stale .java files
#
# Revision 1.28  2004/05/09 20:09:14  dahlin
# Updated unit tests for WorkQueue, TimeoutQueue, TimeoutQueueWorker, DirectoryInterestSet, SubscribeInvalRequest, InvalSpanningList, AcceptStamp, NodeId, and AcceptVV
#
# Revision 1.27  2004/05/09 19:27:03  dahlin
# Updated AcceptVV self tests
#
# Revision 1.26  2004/05/09 19:17:31  dahlin
# Updated NodeId self tests
#
# Revision 1.25  2004/05/09 19:11:10  dahlin
# Updated AcceptStamp self tests
#
# Revision 1.24  2004/05/09 18:51:39  dahlin
# Re-added unit: target that wa accidentally deleted in revision 1.21
#
# Revision 1.23  2004/05/09 18:49:23  nayate
# Removed more redundant entries
#
# Revision 1.22  2004/05/09 03:28:57  lgao
# Add configuration entries for InterestSets and Bandwidth for computing HBStream frame size.
#
# Revision 1.21  2004/05/09 03:04:04  zjiandan
# Remove some redundant updatelog dependency lines.
#
# Revision 1.20  2004/05/09 02:24:16  dahlin
# Complete coding and unit testing of InvalSpanningList and SubscribeInvalRequest
#
# Revision 1.19  2004/05/08 22:18:57  dahlin
# Partially complete version of SDIMSController (it should compile w/o error, though)
#
# Revision 1.18  2004/05/08 19:15:14  nayate
# Removed redundant entries
#
# Revision 1.17  2004/05/07 18:06:46  nayate
# Allowed make to work on Linux
#
#######################################################################
