#
# $Id: Makefile,v 1.33 2004/05/17 05:51:13 evertonm Exp $
#

#DEBUG = -DRULI_RES_DEBUG -DRULI_SRV_DEBUG -DRULI_TXT_COMPARE_DEBUG
#DEBUG = -DRULI_SYNC_DEBUG
#DEBUG = -DRULI_SEARCH_DEBUG
#DEBUG = -DRULI_MSG_DUMP_DEBUG -DRULI_SOCK_DUMP_DEBUG
#DEBUG = -DRULI_SMTP_DEBUG

#
# OOP_INCLUDE_DIR points the location of
# Liboop headers in your system
#
# Debian packaging likes this: OOP_BASE_DIR = /usr/lib
#
OOP_BASE_DIR    = /usr/local/oop
OOP_INCLUDE_DIR = $(OOP_BASE_DIR)/include

#
# INSTALL_BASE_DIR indicates where RULI
# is to be installed in your system
#
# Example: INSTALL_BASE_DIR=/usr/local/ruli
#
# Debian packaging likes this: INSTALL_BASE_DIR = $(DESTDIR)/usr
#
INSTALL_BASE_DIR     = ../install/ruli
INSTALL_INCLUDE_DIR  = $(INSTALL_BASE_DIR)/include
INSTALL_LIB_DIR      = $(INSTALL_BASE_DIR)/lib
INSTALL_MAN_DIR      = $(INSTALL_BASE_DIR)/share/man

WARN = -pedantic -Wshadow -Wpointer-arith -Wcast-qual \
	-Wcast-align -Wwrite-strings -Wstrict-prototypes \
	-Wmissing-prototypes -Wnested-externs -Wredundant-decls \
        -Werror

CC     = gcc
CFLAGS = $(DEBUG) $(WARN) -O2 -pipe -Wall -g -shared -fPIC \
	-I. -I$(OOP_INCLUDE_DIR)
LIBOBJ = ruli_isaac.o ruli_mem.o ruli_rand.o ruli_util.o ruli_list.o ruli_sock.o \
	ruli_txt.o ruli_msg.o ruli_fsm.o ruli_res.o ruli_parse.o \
	ruli_srv.o ruli_conf.o ruli_search.o ruli_smtp.o ruli_sync.o
SONAME = libruli.so.1

.PHONY: default
default: ruli

.PHONY: clean
clean:
	rm -f *~ .*~ *.o *.so *.a *.so.*

.PHONY: build
build: clean default

.PHONY: strip
strip: ruli
	strip $(SONAME) libruli.a

.PHONY: install
install: ruli
	install -d $(INSTALL_LIB_DIR) \
		$(INSTALL_INCLUDE_DIR) \
		$(INSTALL_MAN_DIR)/man3
	install -m 644 $(SONAME) libruli.a $(INSTALL_LIB_DIR)
	install -m 644 *.h $(INSTALL_INCLUDE_DIR)
	install -m 644 ../doc/man/*.3 $(INSTALL_MAN_DIR)/man3
	cd $(INSTALL_LIB_DIR) && ln -s $(SONAME) libruli.so
	@echo
	@echo "REMINDER:"
	@echo "Add $(INSTALL_LIB_DIR) to your dynamic loader path:"
	@echo "# echo $(INSTALL_LIB_DIR) >> /etc/ld.so.conf"
	@echo "# ldconfig"
	@echo

.PHONY: ruli
ruli: $(SONAME) libruli.a

ruli_isaac.o: ruli_isaac.c ruli_isaac.h
	$(CC) $(CFLAGS) -c $<

ruli_mem.o: ruli_mem.c ruli_mem.h
	$(CC) $(CFLAGS) -c $<

ruli_rand.o: ruli_rand.c ruli_rand.h
	$(CC) $(CFLAGS) -c $<

ruli_util.o: ruli_util.c ruli_util.h
	$(CC) $(CFLAGS) -c $<

ruli_list.o: ruli_list.c ruli_list.h
	$(CC) $(CFLAGS) -c $<

ruli_sock.o: ruli_sock.c ruli_sock.h
	$(CC) $(CFLAGS) -c $<

ruli_txt.o: ruli_txt.c ruli_txt.h ruli_limits.h
	$(CC) $(CFLAGS) -c $<

ruli_msg.o: ruli_msg.c ruli_msg.h ruli_limits.h
	$(CC) $(CFLAGS) -c $<

ruli_fsm.o: ruli_fsm.c ruli_fsm.h
	$(CC) $(CFLAGS) -c $<

ruli_res.o: ruli_res.c ruli_res.h
	$(CC) $(CFLAGS) -c $<

ruli_parse.o: ruli_parse.c ruli_parse.h
	$(CC) $(CFLAGS) -c $<

ruli_srv.o: ruli_srv.c ruli_srv.h
	$(CC) $(CFLAGS) -c $<

ruli_conf.o: ruli_conf.c ruli_conf.h
	$(CC) $(CFLAGS) -c $<

ruli_search.o: ruli_search.c ruli_search.h
	$(CC) $(CFLAGS) -c $<

ruli_smtp.o: ruli_smtp.c ruli_smtp.h
	$(CC) $(CFLAGS) -c $<

ruli_sync.o: ruli_sync.c ruli_sync.h
	$(CC) $(CFLAGS) -c $<

libruli.so: $(LIBOBJ)
	$(CC) $(CFLAGS) -Wl,-soname,$(SONAME) -o $@ $(LIBOBJ) -loop

$(SONAME): libruli.so
	cp libruli.so $(SONAME)

#
# Solaris ar
#
#libruli.a: $(LIBOBJ)
#	ar -r -v $@ $(LIBOBJ)

#
# GNU ar
#
libruli.a: $(LIBOBJ)
	ar rcv $@ $(LIBOBJ)
	ar sv $@


