# Gnu makefile and libtool are required
# use -D options to overrides defaults
CC=gcc
CP=/bin/cp
prefix=/usr/local
exec_prefix=${prefix}

APACHE2_HOME=
OS=
JAVA_HOME=
APACHE2_INCL=-I/usr/include/apache2
APACHE2_LIBEXEC=/usr/lib/apache2/modules
APACHE2_LIBDIR=/usr/lib
APR_INCL= -I/home/thom/packages/apache2-2.0.49/build-tree/apache2-build/worker/srclib/apr-util/include /home/thom/packages/apache2-2.0.49/build-tree/apache2/srclib/apr-util/include -I/home/thom/packages/apache2-2.0.49/build-tree/apache2-build/worker/srclib/apr/include /home/thom/packages/apache2-2.0.49/build-tree/apache2/srclib/apr/include
APR_LIBS=-L/usr/lib -lapr-0
APR_LIBDIR_LA=
EXTRA_CFLAGS=-pipe -I/usr/include/xmltok -I/usr/include/openssl -O2 -pipe -I/usr/include/xmltok -I/usr/include/openssl -O2 -pthread
EXTRA_CPPFLAGS=-DLINUX=2 -D_REENTRANT -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE

ifneq ($(strip $(JAVA_HOME)),)
JAVA_INCL=-I ${JAVA_HOME}/include -I ${JAVA_HOME}/include/${OS}
JAVA_LIB=-L ${JAVA_HOME}/jre/lib/${ARCH} -L ${JAVA_HOME}/lib/${ARCH}/native_threads
endif

JK_DIR := ../..
BUILD_DIR = ${JK_DIR}/../build/jk2/apache2

# Extract EXTRA_CFLAGS and EXTRA_CPPFLAGS - same flags used during apache2 
# compilation
#include ${APACHE2_HOME}/build/config_vars.mk

# Yes, we use the same properties file as ant
#include ../../../build.properties

LIBTOOL=/bin/sh /usr/bin/libtool --silent 

# It doesn't hurt if we include all
INCLUDES= -I${JK_DIR}/include \
          ${APACHE2_INCL} \
          ${APR_INCL} \
          ${JAVA_INCL}

JK_CFLAGS=-DCHUNK_SIZE=4096 -DUSE_APACHE_MD5  
ifdef APR_LIBDIR_LA
JK_LDFLAGS=-L${APACHE2_LIBDIR} -lcrypt 
else
JK_LDFLAGS=-lcrypt ${APR_LIBS} 
endif

###### Based on rules.mk ##########################################
ALL_CFLAGS   = $(EXTRA_CFLAGS) $(NOTEST_CFLAGS) $(CFLAGS)
ALL_CPPFLAGS = $(DEFS) $(EXTRA_CPPFLAGS) $(NOTEST_CPPFLAGS) $(CPPFLAGS)
ALL_LDFLAGS  = $(EXTRA_LDFLAGS) $(NOTEST_LDFLAGS) $(LDFLAGS)
ALL_LIBS     = $(EXTRA_LIBS) $(NOTEST_LIBS) $(LIBS)
ALL_INCLUDES = $(INCLUDES) $(EXTRA_INCLUDES)

# Compile commands
COMPILE      = $(CC)  $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(ALL_INCLUDES)

SH_COMPILE = $(LIBTOOL) --mode=compile $(COMPILE) $(JK_CFLAGS)
MOD_LINK = $(LIBTOOL) --mode=link $(CC) -avoid-version -module -rpath ${APACHE2_LIBEXEC} $(LT_LDFLAGS) $(ALL_LDFLAGS)
MOD_INSTALL = $(LIBTOOL) --mode=install $(CP)

#############################################################################

# ---------- File list creation -------------------- 
# Same behavior as ant - 'all files from a dir'. 
# Excludes are not yet implemented.

COMMON_C_FILES := $(wildcard ${JK_DIR}/common/*.c )
JNI_C_FILES := $(wildcard ${JK_DIR}/jni/*.c )
A2_C_FILES := $(wildcard ${JK_DIR}/server/apache2/*.c )
H_FILES := $(wildcard ${JK_DIR}/include/*.h )

COMMON_LO_FILES := $(patsubst ${JK_DIR}/common/%, ${BUILD_DIR}/%, \
			 $(patsubst %c, %lo, ${COMMON_C_FILES} ))
JNI_LO_FILES := $(patsubst ${JK_DIR}/jni/%, ${BUILD_DIR}/%, \
			 $(patsubst %c, %lo, ${JNI_C_FILES} ))
A2_LO_FILES := $(patsubst ${JK_DIR}/server/apache2/%, ${BUILD_DIR}/%, \
			 $(patsubst %c, %lo, ${A2_C_FILES} ))


# ---------- Compile rules --------------------

.PHONY: all


VPATH=.:../../common

.c.lo:
	 ${SH_COMPILE} -c $< -o $>

${BUILD_DIR}/%.lo: ${JK_DIR}/common/%.c
	 ${SH_COMPILE} -c $< -o $@

${BUILD_DIR}/%.lo: ${JK_DIR}/jni/%.c
	 ${SH_COMPILE} -c $< -o $@

${BUILD_DIR}/%.lo: ${JK_DIR}/server/apache2/%.c
	 ${SH_COMPILE} -c $< -o $@


# ---------- Targets -------------------- 

all: prepare ${BUILD_DIR}/mod_jk2.so 

jni-build: ${BUILD_DIR}/libjkjni.so

${BUILD_DIR}/mod_jk2.so: ${BUILD_DIR}/${APACHE2_LIBEXEC}/mod_jk2.so
	$(CP) $^ $@
${BUILD_DIR}/${APACHE2_LIBEXEC}/mod_jk2.so: ${BUILD_DIR}/mod_jk2.la
	$(MOD_INSTALL) $^ `pwd`/${BUILD_DIR}/${APACHE2_LIBEXEC}

${BUILD_DIR}/libjkjni.so: ${BUILD_DIR}/${APACHE2_LIBEXEC}/libjkjni.so
	$(CP) $^ $@
${BUILD_DIR}/${APACHE2_LIBEXEC}/libjkjni.so: ${BUILD_DIR}/libjkjni.la
	$(MOD_INSTALL) $^ `pwd`/${BUILD_DIR}/${APACHE2_LIBEXEC}

${BUILD_DIR}/libjkjni.la: ${JNI_LO_FILES} ${COMMON_LO_FILES}
	$(MOD_LINK) -o $@ $(JK_LDFLAGS) $^

${BUILD_DIR}/mod_jk2.la: ${COMMON_LO_FILES} ${JNI_LO_FILES} ${A2_LO_FILES}
	${MOD_LINK} -o $@ $^ 

${COMMON_C_FILES} ${A2_C_FILES}: ${H_FILES}

prepare: 
	mkdir -p ${BUILD_DIR}${APACHE2_LIBEXEC}

clean: 
	rm -rf ${BUILD_DIR}/*.lo ${BUILD_DIR}/*.la ${BUILD_DIR}/*.o ${BUILD_DIR}/*.a \
		${BUILD_DIR}/.libs ${BUILD_DIR}/*.so ${BUILD_DIR}${APACHE2_LIBEXEC}/*.so \
		${BUILD_DIR}${APACHE2_LIBEXEC}/*.la
