#  -*- Mode: makefile -*-
#
# rules.properties: contains pattern rules for jaccelerator.
# 
# Syntax here is just like in makefiles except we use ";" instead of 
# "LF TAB" as command delimiter. More precisely, instead of
# 
#   target+ : dependency* [; command] [ LF TAB command ]*
# 
# we use less baroque 
# 
#   target+ : dependency* [; command]*
# 
# Restrictions: 
#
# (1) for pattern-matching, we support only simple target patterns 
#     with leading "%." :
# 
#       %.<target_suffix> : <text>%<text>...
#
#     This limit the expressiveness; However, it is allowed to 
#     freely use run-time macros on the right-hand side, for instance
# 
#       %.obj : $(*:f).c
#
#     This way, % on the right-hand side is just a shortcut for $*
#

%.increment :  ; \
  $(gen-incr-dumper-class.command); \
  $(load-incr-dumper-class.command) $(*:b)_minimalClassListAndTCDumper.java; \
  $(compute-dump-minimal-class-set.command) $(*:b)_minimalClassListAndTCDumper increment; \
  $(drop-incr-dumper-class.command) $(*:b)_minimalClassListAndTCDumper.java; \
  $(genproject.command) $(genproject.commonClosure.flags) exact_class_list.txt 

%.force :  ; \
  $(gen-incr-dumper-class.command); \
  $(load-incr-dumper-class.command) $(*:b)_minimalClassListAndTCDumper.java; \
  $(compute-dump-minimal-class-set.command) $(*:b)_minimalClassListAndTCDumper force; \
  $(drop-incr-dumper-class.command) $(*:b)_minimalClassListAndTCDumper.java; \
  $(genproject.command) $(genproject.commonClosure.flags) exact_class_list.txt

%.status :  ; \
  $(gen-incr-dumper-class.command); \
  $(load-incr-dumper-class.command) $(*:b)_minimalClassListAndTCDumper.java; \
  $(compute-dump-minimal-class-set.command) $(*:b)_minimalClassListAndTCDumper increment $(status.output.file); \
  $(drop-incr-dumper-class.command) $(*:b)_minimalClassListAndTCDumper.java

%.generate : %.classes ; $(genproject.command) -excludeInvalidClasses $<

%.$(file.extension.obj) : $(*:f).c ; $(COMPILE.c)

%.$(file.extension.dll) : ; $(EXPORTS_COMMAND) ; $(LINK_COMMAND)

%.stp : %.cfg ; \
  $(translate.preamble.command) ; \
  $(translate.command) ; \
  $(dll.installer.maker.command) ; \
  touch $@

%.compinstallers : ; \
  $(compile.dll.installers)

%.jar : $(make.deployment.jar.content) ; \
  $(rm.command) $@ ; \
  $(compile-for-server.javac.command) -d $(WORK_DIR) $(JA_HOME)/SQL.java ; \
  $(compile.dll.installers) ; \
  $(bundle.installer.maker.command) ; \
  $(jar) cvf0 $@ $(jar.include.list) $(deployment.jar.content)


%.createDeploymentJar : ; \
  $(compile-for-server.javac.command) -d $(WORK_DIR) $(JA_HOME)/SQL.java ; \
  $(compile.dll.installers) ; \
  $(bundle.installer.maker.command) ; \
  $(jar) cvf0 $* $(jar.include.list) $(deployment.jar.content)

%.updateDeploymentJar : ; \
  $(compile-for-server.javac.command) -d $(WORK_DIR) $(JA_HOME)/SQL.java ; \
  $(compile.dll.installers) ; \
  $(bundle.installer.maker.command) ; \
  $(jar) uvf0 $* $(jar.include.list) $(deployment.jar.content)


# For this to work, you need to grant the user
# file-write permissions. Use javasyspriv role
# if deploy-as-normal-resource method is used, otherwise
# if oracle/aurora/deploy/ resources are used, use java_deploy role
#
%.deploy : ; \
  $(deploy.command) ; \

%.install : ; \
  $(dlls.status.command); \
  $(dropjava) $(loadjava.connection) $*.jar 

%.installer : $(*:f)_Installer.java ; \
  $(dll.installer.maker.command)

%.clean : ; \
  $(rm.command) $(MODULE_TARGETS:+".stp") ; \
  $(rm.command) $(MODULE_TARGETS:+"_Installer.java") ; \
  $(rm.command) $(JVMC_C_FILE_LIST) ; \
  $(rm.command) $(JVMC_C_FILE_LIST:s/.c/_private.h/) ; \
  $(rm.command) $(JVMC_C_FILE_LIST:s/.c/_public.h/) ; \
  $(rm.command) $(DLL_LIST) $(OBJLIST) ; \
  $(rmdir.command) classes ; \
  $(rm.command) class_attributes.txt

%.clobber : %.clean ; \
  $(rm.command) $(MODULE_TARGETS:+".cfg") ; \
  $(rm.command) $(MODULE_TARGETS:+".c") ; \
  $(rm.command) $(MODULE_TARGETS:+".java") ; \
  $(rm.command) $(MODULE_TARGETS:+".export") ; \
  $(rm.command) $*.jar $*.install ; \
  $(rm.command) Makefile


#
# To execute a shell command
# Example: $JA_HOME/make.sh scott/tiger pwd.exec
#

%.exec : ; $*
%.cd : ; /usr/bin/sh cdpwd $*

#
# To load something with loadjava.
# Example: $JA_HOME/make.sh scott/tiger /usr/me/foo.jar.loadjava
#

%.loadjava : ; $(loadjava) $*

%.dropjava : ; $(dropjava) $(loadjava.connection) -verbose $*

#
# Invoke the session shell
# Example: $JA_HOME/make.sh scott/tiger //localhost:2481:orcl.sess_sh
#

%.sess_sh : ; sess_sh -u $(SCHEMA)  -p $(PASSWORD) -s sess_iiop:$*
