NAME = aseawk
MODE = release

JNI_INC = \
	-I"$(JAVA_HOME)\include" \
	-I"$(JAVA_HOME)\include\win32" 

CC = dmc
LD = dmc
AR = lib
JAVAC = javac
JAR = jar

CFLAGS = -mn -I..\.. -DUNICODE -D_UNICODE #-D_DEBUG
JAVACFLAGS = -classpath ..\.. -Xlint:unchecked

OUT_DIR = ..\$(MODE)\lib
OUT_FILE_LIB = $(OUT_DIR)\$(NAME).lib
OUT_FILE_JNI = $(OUT_DIR)\$(NAME)_jni.dll
OUT_FILE_JAR = $(OUT_DIR)\$(NAME).jar

TMP_DIR = $(MODE)

OBJ_FILES_LIB = \
	$(TMP_DIR)\awk.obj \
	$(TMP_DIR)\err.obj \
	$(TMP_DIR)\tree.obj \
	$(TMP_DIR)\tab.obj \
	$(TMP_DIR)\parse.obj \
	$(TMP_DIR)\run.obj \
	$(TMP_DIR)\rec.obj \
	$(TMP_DIR)\val.obj \
	$(TMP_DIR)\func.obj \
	$(TMP_DIR)\misc.obj \
	$(TMP_DIR)\extio.obj

OBJ_FILES_JNI = $(TMP_DIR)\jni.obj 

OBJ_FILES_JAR = \
	$(TMP_DIR)\ase\awk\Awk.class \
	$(TMP_DIR)\ase\awk\StdAwk.class \
	$(TMP_DIR)\ase\awk\Context.class \
	$(TMP_DIR)\ase\awk\Clearable.class \
	$(TMP_DIR)\ase\awk\Argument.class \
	$(TMP_DIR)\ase\awk\Return.class 
	$(TMP_DIR)\ase\awk\Extio.class \
	$(TMP_DIR)\ase\awk\IO.class \
	$(TMP_DIR)\ase\awk\Console.class \
	$(TMP_DIR)\ase\awk\File.class \
	$(TMP_DIR)\ase\awk\Pipe.class \
	$(TMP_DIR)\ase\awk\Exception.class

all: lib

lib: $(OUT_FILE_LIB) 

jnidll: $(OUT_FILE_JNI)

jar: $(OUT_FILE_JAR)

$(OUT_FILE_LIB): $(TMP_DIR) $(OUT_DIR) $(OBJ_FILES_LIB)
	$(AR) -c $(OUT_FILE_LIB) $(OBJ_FILES_LIB)

$(OUT_FILE_JNI): $(OUT_FILE_LIB) $(OBJ_FILES_JNI)
	$(LD) -WD -o$(OUT_FILE_JNI) $(OBJ_FILES_JNI) $(OUT_FILE_LIB) $(OUT_DIR)\asecmn.lib $(OUT_DIR)\aseutl.lib kernel32.lib jni-dmc.def

$(OUT_FILE_JAR): $(OBJ_FILES_JAR)
	$(JAR) -Mcvf $(OUT_FILE_JAR) -C $(TMP_DIR) ase

$(TMP_DIR)\awk.obj: awk.c
	$(CC) $(CFLAGS) -o$@ -c awk.c

$(TMP_DIR)\err.obj: err.c
	$(CC) $(CFLAGS) -o$@ -c err.c

$(TMP_DIR)\tree.obj: tree.c
	$(CC) $(CFLAGS) -o$@ -c tree.c

$(TMP_DIR)\tab.obj: tab.c
	$(CC) $(CFLAGS) -o$@ -c tab.c

$(TMP_DIR)\parse.obj: parse.c
	$(CC) $(CFLAGS) -o$@ -c parse.c

$(TMP_DIR)\run.obj: run.c
	$(CC) $(CFLAGS) -o$@ -c run.c

$(TMP_DIR)\rec.obj: rec.c
	$(CC) $(CFLAGS) -o$@ -c rec.c

$(TMP_DIR)\val.obj: val.c
	$(CC) $(CFLAGS) -o$@ -c val.c

$(TMP_DIR)\func.obj: func.c
	$(CC) $(CFLAGS) -o$@ -c func.c

$(TMP_DIR)\misc.obj: misc.c
	$(CC) $(CFLAGS) -o$@ -c misc.c

$(TMP_DIR)\extio.obj: extio.c
	$(CC) $(CFLAGS) -o$@ -c extio.c

$(TMP_DIR)\jni.obj: jni.c
	$(CC) $(CFLAGS) $(JNI_INC) -o$@ -c jni.c

$(TMP_DIR)\ase\awk\Awk.class: Awk.java
	$(JAVAC) $(JAVACFLAGS) -d $(TMP_DIR) Awk.java

$(TMP_DIR)\ase\awk\StdAwk.class: StdAwk.java
	$(JAVAC) $(JAVACFLAGS) -d $(TMP_DIR) StdAwk.java

$(TMP_DIR)\ase\awk\Context.class: Context.java
	$(JAVAC) $(JAVACFLAGS) -d $(TMP_DIR) Context.java

$(TMP_DIR)\ase\awk\Clearable.class: Clearable.java
	$(JAVAC) $(JAVACFLAGS) -d $(TMP_DIR) Clearable.java

$(TMP_DIR)\ase\awk\Argument.class: Argument.java
	$(JAVAC) $(JAVACFLAGS) -d $(TMP_DIR) Argument.java

$(TMP_DIR)\ase\awk\Return.class: Return.java
	$(JAVAC) $(JAVACFLAGS) -d $(TMP_DIR) Return.java

$(TMP_DIR)\ase\awk\Extio.class: Extio.java
	$(JAVAC) $(JAVACFLAGS) -d $(TMP_DIR) Extio.java

$(TMP_DIR)\ase\awk\IO.class: IO.java
	$(JAVAC) $(JAVACFLAGS) -d $(TMP_DIR) IO.java

$(TMP_DIR)\ase\awk\Console.class: Console.java
	$(JAVAC) $(JAVACFLAGS) -d $(TMP_DIR) Console.java

$(TMP_DIR)\ase\awk\File.class: File.java
	$(JAVAC) $(JAVACFLAGS) -d $(TMP_DIR) File.java

$(TMP_DIR)\ase\awk\Pipe.class: Pipe.java
	$(JAVAC) $(JAVACFLAGS) -d $(TMP_DIR) Pipe.java

$(TMP_DIR)\ase\awk\Exception.class: Exception.java
	$(JAVAC) $(JAVACFLAGS) -d $(TMP_DIR) Exception.java

$(OUT_DIR):
	md $(OUT_DIR)

$(TMP_DIR):
	md $(TMP_DIR)

clean:
	del $(OUT_FILE_LIB) 
	del $(OUT_FILE_JNI) 
	del $(OUT_FILE_JAR) 
	del $(OBJ_FILES_LIB) 
	del $(OBJ_FILES_JNI) 
	del $(OBJ_FILES_JAR)