#
# SQLJ Demo Makefile
#

help:
	@echo "Make targets:" 
	@echo "  compile_all - compile all demos"
	@echo "  run_all     - compile and run all demos"
	@echo "  clean_all   - remove .class and .ser files for all demos"
	@echo "  Foo.class   - compile demo Foo" 
	@echo "  Foo.run     - compile and run demo Foo" 
	@echo "  Foo.debug   - compile and run demo Foo with debug output" 
	@echo "  Foo.clean   - remove .class and .ser files for demo Foo" 
	@echo "Edit makefile to modify PATHSEP, DIRSEP, SHELL for your operating system."
	@echo "Invoke with \"SQLJ_FLAGS=-user=scott/tiger\" for online compile."
	@echo "Invoke with \"Foo_FLAGS=args...\" to pass runtime options to demo Foo."
	@echo "Ensure that ORACLE_HOME is defined and points to your Oracle home directory."

#
# Redefine PATHSEP and DIRSEP as appropriate for OS.  
# For example, on NT:
#  PATHSEP=; 
#  DIRSEP=\
#
# On Unix:
PATHSEP=:
DIRSEP=/

#
# If necessary, define SHELL as appropriate for your OS.
#
# On Unix, for example:
#  SHELL = /bin/sh
# On NT, for example:
#  SHELL = sh

# CLASSPATH for compiling the SQLJ program
MAKE_CLASSPATH = ".$(PATHSEP)$(ORACLE_HOME)$(DIRSEP)jdbc$(DIRSEP)lib$(DIRSEP)classes12.jar$(PATHSEP)$(ORACLE_HOME)$(DIRSEP)sqlj$(DIRSEP)lib$(DIRSEP)runtime12.jar$(PATHSEP)$(ORACLE_HOME)$(DIRSEP)sqlj$(DIRSEP)lib$(DIRSEP)translator.jar$(PATHSEP)$(CLASSPATH)"

# CLASSPATH for running the SQLJ program
RUN_CLASSPATH = ".$(PATHSEP)$(ORACLE_HOME)$(DIRSEP)jdbc$(DIRSEP)lib$(DIRSEP)classes12.jar$(PATHSEP)$(ORACLE_HOME)$(DIRSEP)sqlj$(DIRSEP)lib$(DIRSEP)runtime12.jar$(PATHSEP)$(CLASSPATH)"

DEBUG_RUN_CLASSPATH = $(MAKE_CLASSPATH)

# List of demo .sqlj files
DEMO_SQLJ = StructuredTypes.sqlj    \
            JDBC20Types.sqlj        \
            ScrollableIterator.sqlj \
            DataSource.sqlj         \
            ConnectionCache.sqlj    \
            FetchSize.sqlj          \
            JDBCConversion.sqlj     \
            JavaSerialization.sqlj 

# List of demo .java files
DEMO_JAVA = 

SQLJ = "$(ORACLE_HOME)$(DIRSEP)bin$(DIRSEP)sqlj"
JAVA = java
JAVAC = javac
SQLJ_FLAGS = 
SQLPLUS = "$(ORACLE_HOME)$(DIRSEP)bin$(DIRSEP)sqlplus"
USER = scott/tiger

#
# Runline flags for specific demos follow.  
# They may also be overridden in the invocation of make.
#
# - none -

#
# Macro to run a SQL script for a target file if it exists
#
loadsql = if [ -f $*.sql ]; then \
  echo loading script $*.sql "..."; $(SQLPLUS) "$(USER)" < $*.sql; fi

#
# explicit rules follow 
#
DataSource_JAVAVM_FLAGS="-Djava.naming.factory.initial=DataSourceCF"


compile_all: compile_java compile_sqlj

compile_java: $(DEMO_JAVA)
	$(MAKE) -i $(?:.java=.class)

compile_sqlj: $(DEMO_SQLJ) DataSourceCF.sqlj         \
	$(MAKE) -i $(?:.sqlj=.class)
 
run_all: run_java run_sqlj

run_java: $(DEMO_JAVA)
	$(MAKE) -i $(?:.java=.run)

run_sqlj: $(DEMO_SQLJ) DataSourceCF.sqlj
	$(MAKE) -i $(?:.sqlj=.run)
 

clean_all:
	rm -f *.class *.ser $(DEMO_SQLJ:.sqlj=.java)


DataSource.sqlj: DataSourceCF.class

#
# suffix rules follow
#
.SUFFIXES:
.SUFFIXES: .class .sqlj .run .clean .java .debug

.sqlj.class :
	@$(loadsql)
	@echo translating $< "..."
	@(CLASSPATH=$(MAKE_CLASSPATH); export CLASSPATH;\
	$(SQLJ) $(SQLJ_FLAGS) $<)

.class.run : 
	@echo running $* $($*_FLAGS) "..."
	@(CLASSPATH=$(RUN_CLASSPATH); export CLASSPATH;\
	$(JAVA) $($*_JAVAVM_FLAGS) $* $($*_FLAGS))

.class.debug : 
	@echo adding debug information to $* "..."
	@(CLASSPATH=$(MAKE_CLASSPATH); export CLASSPATH;\
	$(SQLJ) -P-debug $*_SJProfile*.ser)
	@echo running $* $($*_FLAGS) with debug information "..."
	@(CLASSPATH=$(DEBUG_RUN_CLASSPATH); export CLASSPATH;\
	$(JAVA) $($*_JAVAVM_FLAGS) $* $($*_FLAGS))

.sqlj.clean :
	rm -f $**.java $**.ser $**.class

.java.class :
	@$(loadsql)
	@echo compiling $< "..."
	@(CLASSPATH=$(MAKE_CLASSPATH); export CLASSPATH;\
	$(JAVAC) $<)

.java.clean :
	rm -f $**.class
