#
# Makefile for Serf
#
srcdir = @srcdir@
VPATH = @srcdir@

SERF_MAJOR_VERSION=@SERF_MAJOR_VERSION@
SERF_DOTTED_VERSION=@SERF_DOTTED_VERSION@

OBJECTS = buckets/aggregate_buckets.lo buckets/request_buckets.lo context.lo \
          buckets/buckets.lo buckets/simple_buckets.lo buckets/file_buckets.lo \
          buckets/mmap_buckets.lo buckets/socket_buckets.lo \
          buckets/response_buckets.lo buckets/headers_buckets.lo \
          buckets/allocator.lo buckets/dechunk_buckets.lo \
          buckets/deflate_buckets.lo buckets/limit_buckets.lo \
          buckets/ssl_buckets.lo buckets/barrier_buckets.lo \
          buckets/chunk_buckets.lo buckets/bwtp_buckets.lo \
          incoming.lo outgoing.lo \
          auth/auth.lo auth/auth_basic.lo auth/auth_digest.lo \
          auth/auth_kerb.lo auth/auth_kerb_gss.lo

TARGET_LIB=libserf-$(SERF_MAJOR_VERSION).la

TEST_OBJECTS = test/serf_get.lo test/serf_response.lo test/serf_request.lo \
               test/serf_spider.lo test/serf_server.lo test/serf_bwtp.lo

TEST_SUITE_OBJECTS = test/CuTest.lo test/test_all.lo test/test_util.lo \
                     test/test_buckets.lo test/test_context.lo \
                     test/test_ssl.lo 

PROGRAMS = $(TEST_OBJECTS:.lo=) test/test_all

TESTCASES = test/testcases/simple.response \
  test/testcases/chunked-empty.response test/testcases/chunked.response \
  test/testcases/chunked-trailers.response \
  test/testcases/deflate.response

HEADERS = serf.h serf_bucket_types.h serf_bucket_util.h

prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@

LIBTOOL = @APR_LIBTOOL@
LTFLAGS = @LTFLAGS@ --tag=CC
CC = @CC@
CFLAGS =  @EXTRA_CFLAGS@ @CFLAGS@
CPPFLAGS = @EXTRA_CPPFLAGS@ @CPPFLAGS@
INCLUDES = -I$(srcdir) @APR_INCLUDES@ @APU_INCLUDES@ @EXTRA_INCLUDES@
MKDIR = @mkdir_p@
INSTALL = @INSTALL@

LDFLAGS = @EXTRA_LDFLAGS@ @LDFLAGS@
LIBS = @EXTRA_LIBS@  @SERF_LIBS@ -lz -lssl -lcrypto

all: $(TARGET_LIB) $(PROGRAMS)

context.lo: context.c $(HEADERS)
incoming.lo: incoming.c $(HEADERS)
outgoing.lo: outgoing.c $(HEADERS)
buckets/aggregate_buckets.lo: buckets/aggregate_buckets.c $(HEADERS)
buckets/request_buckets.lo: buckets/request_buckets.c $(HEADERS)
buckets/buckets.lo: buckets/buckets.c $(HEADERS)
buckets/simple_buckets.lo: buckets/simple_buckets.c $(HEADERS)
buckets/file_buckets.lo: buckets/file_buckets.c $(HEADERS)
buckets/mmap_buckets.lo: buckets/mmap_buckets.c $(HEADERS)
buckets/socket_buckets.lo: buckets/socket_buckets.c $(HEADERS)
buckets/response_buckets.lo: buckets/response_buckets.c $(HEADERS)
buckets/headers_buckets.lo: buckets/headers_buckets.c $(HEADERS)
buckets/allocator.lo: buckets/allocator.c $(HEADERS)
buckets/dechunk_buckets.lo: buckets/dechunk_buckets.c $(HEADERS)
buckets/deflate_buckets.lo: buckets/deflate_buckets.c $(HEADERS)
buckets/limit_buckets.lo: buckets/limit_buckets.c $(HEADERS)
buckets/ssl_buckets.lo: buckets/ssl_buckets.c $(HEADERS)
buckets/barrier_buckets.lo: buckets/barrier_buckets.c $(HEADERS)
buckets/chunk_buckets.lo: buckets/chunk_buckets.c $(HEADERS)
buckets/bwtp_buckets.lo: buckets/bwtp_buckets.c $(HEADERS)

test/serf_get.lo: test/serf_get.c $(HEADERS)
test/serf_response.lo: test/serf_response.c $(HEADERS)
test/serf_request.lo: test/serf_request.c $(HEADERS)
test/serf_server.lo: test/serf_server.c $(HEADERS)
test/serf_spider.lo: test/serf_spider.c $(HEADERS)
test/serf_bwtp.lo: test/serf_bwtp.c $(HEADERS)

test/CuTest.lo: test/CuTest.c $(HEADERS)
test/test_all.lo: test/test_all.c $(HEADERS)
test/test_util.lo: test/test_util.c $(HEADERS)
test/test_buckets.lo: test/test_buckets.c $(HEADERS)
test/test_context.lo: test/test_context.c $(HEADERS)
test/test_ssl.lo: test/test_ssl.c $(HEADERS)

$(TARGET_LIB): $(OBJECTS)
	$(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LDFLAGS) -rpath $(libdir) -o $@ $^ $(LIBS)

test/serf_get: $(TARGET_LIB) test/serf_get.lo
	$(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LDFLAGS) -static -o $@ $^ $(LIBS)

test/serf_response: $(TARGET_LIB) test/serf_response.lo
	$(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LDFLAGS) -static -o $@ $^ $(LIBS)

test/serf_request: $(TARGET_LIB) test/serf_request.lo
	$(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LDFLAGS) -static -o $@ $^ $(LIBS)

test/serf_server: $(TARGET_LIB) test/serf_server.lo
	$(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LDFLAGS) -static -o $@ $^ $(LIBS)

test/serf_spider: $(TARGET_LIB) test/serf_spider.lo
	$(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LDFLAGS) -static -o $@ $^ $(LIBS)

test/serf_bwtp: $(TARGET_LIB) test/serf_bwtp.lo
	$(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LDFLAGS) -static -o $@ $^ $(LIBS)

test/test_all: $(TARGET_LIB) $(TEST_SUITE_OBJECTS)
	$(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LDFLAGS) -static -o $@ $^ $(LIBS)

check: test/serf_response test/test_all
	@for i in $(TESTCASES); \
		 do echo "== Testing $$i =="; \
		 ./test/serf_response $$i; \
	done;
	@echo "== Running test_all ==";
	@./test/test_all

install: $(TARGET_LIB)
	$(MKDIR) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir)
	$(LIBTOOL) $(LTFLAGS) --mode=install $(INSTALL) -m 644 $(TARGET_LIB) $(DESTDIR)$(libdir)
	for i in $(srcdir)/*.h; do \
		$(INSTALL) -m 644 $$i $(DESTDIR)$(includedir); \
	done

clean:
	rm -f $(TARGET_LIB) $(OBJECTS) $(OBJECTS:.lo=.o) $(PROGRAMS) $(TEST_OBJECTS) $(TEST_OBJECTS:.lo=.o) $(TEST_SUITE_OBJECTS) $(TEST_SUITE_OBJECTS:.lo=.o)
	for subdir in . buckets test; do \
		(cd $$subdir && rm -rf .libs) ; \
	done

distclean: clean
	rm -f Makefile config.log config.status

.SUFFIXES:
.SUFFIXES: .c .lo .o

mkdir-vpath:
	@if [ ! -d buckets ]; then \
		$(MKDIR) buckets; \
	fi;
	@if [ ! -d test ]; then \
		$(MKDIR) test; \
	fi;

.c.lo:
	$(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) $(CFLAGS) $(CPPFLAGS) $(INCLUDES) -c -o $@ $< && touch $@
