PACKAGE		= r2llib
VERSION 	= 0.38
LIBTOOL_VERSION	= 0:38:0
CC		= gcc
DEBUG		= -g
PREFIX		= /usr/local
LIBDIR		= $(PREFIX)/lib
BINDIR		= $(PREFIX)/bin
MANDIR		= $(PREFIX)/man
TARGET_MANDIR	= $(MANDIR)/man1
#INCLUDEDIR	= $(PREFIX)/include/$(PACKAGE)
INCLUDEDIR	= $(PREFIX)/include
INCLUDE 	= 
OPT_CFLAGS	= -O2
CFLAGS  	= $(OPT_CFLAGS) -Wall $(DEBUG) $(INCLUDE)
LIBS		=
LD 		= $(CC)
PIC             = -fPIC
# set LIBTOOL to an empty value to build static lib
#LIBTOOL	= libtool
LIBTOOL		= 
LDFLAGS		=
CHMOD		= chmod
TAR 		= tar
TAR_OPTS 	= czvhf
# Archiver and indexer
AR 		= ar
ARFLAGS		= rc
RANLIB 		= ranlib
CP		= cp
RM		= rm -fr
MKDIR		= mkdir

# #########################
#
#  Will be overriden in make.defs
# include 'make.defs' if it exists 
INSTALL		= install -c
-include make.defs

TESTPROG	= r2llib-test
CMDLINE		= r2l
TCL_PROG	= r2ltcl
#PROGS  	= $(TESTPROG) $(CMDLINE)
PROGS  		= $(CMDLINE) $(TCL_PROG)
LIB_NAME	= r2l
LIB  		= lib$(LIB_NAME).a
ifneq ($(LIBTOOL),) 
  LIB_SHARED	= $(LIB:.a=.la)
else
  LIB_SHARED	= $(LIB)
endif
OBJS 		= r2llib.o r2l_state.o biditext_base_state.o parse_argv.o \
                  r2llib_data.o file_ops.o query_state.o access.o
ifneq ($(LIBTOOL),) 
  OBJS_SHARED	= $(OBJS:.o=.lo)
else
  OBJS_SHARED	= $(OBJS)
endif
DEPS 		= r2llib.h r2l_state.h biditext_base_state.h parse_argv.h \
	          r2llib_data.h file_ops.h query_state.h access.h
EXT_HEADERS	= r2llib.h
CONFIG_BIN	= $(PACKAGE)-config
CONFIG_SRC	= $(CONFIG_BIN).in
LIBFLAGS 	= -L. -lr2l
VERSION_FLAG	= -version-info $(LIBTOOL_VERSION)

LD_LIB_LIBTOOL	= $(LIBTOOL) $(LD) $(VERSION_FLAG) -rpath $(LIBDIR)  
MAN_PAGES	= r2l.1

# for the packaging:
PACKAGE_FILES_LIST = README ChangeLog TODO spec $(MAN_PAGES) \
 Doxyfile Makefile $(PACKAGE).spec.in $(PACKAGE).spec $(CONFIG_SRC)\
 biditext_base_state.c biditext_base_state.h file_ops.c file_ops.h \
 r2l.c r2llib-test.c parse_argv.c parse_argv.h r2l_state.c r2l_state.h \
 r2llib.c r2llib.h r2llib_data.c r2llib_data.h query_state.h \
 query_state.c access.h access.c make.defs.in r2ltcl.in
# what about 'rev' ?
TAR_BALL_DIR=$(PACKAGE)-$(VERSION)
TAR_BALL=$(TAR_BALL_DIR).tar.gz

all: $(LIB) $(PROGS) $(CONFIG_BIN)

#$(LIB): $(OBJS) $(DEPS)
#	$(AR) $(ARFLAGS) $@ $(OBJS) 
#	$(RANLIB) $@

$(LIB): $(OBJS) $(DEPS)
ifneq ($(LIBTOOL),)
	$(LIBTOOL) $(LD) $(VERSION_FLAG) $(LDFLAGS) -rpath $(LIBDIR) \
	-o $(LIB_SHARED) $(OBJS_SHARED)
else
	$(AR) $(ARFLAGS) $@ $(OBJS) 
	$(RANLIB) $@
endif

$(CMDLINE): $(CMDLINE).o $(LIB) $(DEPS)
	$(LIBTOOL) $(LD) $(LDFLAGS) $(CFLAGS) $< $(LIB_SHARED) -o $@

$(TESTPROG): $(TESTPROG).o $(LIB) $(DEPS)
	$(LIBTOOL) $(LD) $(LDFLAGS) $(CFLAGS) $< $(LIB_SHARED) -o $@

# compile C source files into object files.
%.o: %.c
	$(LIBTOOL) $(CC) $(PIC) $(CFLAGS) -c $<

clean:
	$(RM) $(PROGS) *.o *.lo *.html *~ core $(PACKAGE).spec $(CONFIG_BIN) \
	      .libs/

libclean: clean
	$(RM) $(LIB)

html: libclean
	htmlize_code.pl

install: $(PROGS) $(CONFIG_BIN) $(LIB) $(EXT_HEADERS) 
	$(INSTALL) -d $(LIBDIR)
	for lib in $(LIB_SHARED); do                \
	  $(LIBTOOL) $(INSTALL) $$lib $(LIBDIR); \
	done
	$(INSTALL) -d $(INCLUDEDIR)
	for header in $(EXT_HEADERS); do        \
	  $(INSTALL) -m 644 $$header $(INCLUDEDIR); \
	done
	$(INSTALL) -d $(BINDIR)
	for prog in $(PROGS) $(CONFIG_BIN); do       \
	  $(LIBTOOL) $(INSTALL) $$prog $(BINDIR);    \
	done

install_progs: $(PROGS) $(MAN_PAGES)
	$(INSTALL) -d $(BINDIR)
	for prog in $(PROGS); do                    \
	  $(LIBTOOL) $(INSTALL) $$prog $(BINDIR);   \
	done
	$(INSTALL) -d $(MANDIR)
	for man in $(MAN_PAGES); do            \
	  $(INSTALL) $$man $(TARGET_MANDIR);   \
	done

uninstall:
	for file in $(LIB_SHARED); do \
	  $(RM) $(LIBDIR)/$$file; \
	done
	for file in $(PROGS) $(CONFIG_BIN) ; do \
	  $(RM) $(BINDIR)/$$file; \
	done
	for file in $(EXT_HEADERS); do \
	  $(RM) $(INCLUDEDIR)/$$file; \
	done

uninstall_progs:
	for file in $(PROGS) ; do \
	  $(RM) $(BINDIR)/$$file; \
	done

# The maintainer should not be required to to update the version in the rpm
# spec file manually:
# (Maybe replace this with 'perl -p -ei' of the spec file, and akip .spec.in) ?
$(PACKAGE).spec: $(PACKAGE).spec.in
	cat $< |sed -e 's#PACKAGE_VERSION#$(VERSION)#g' \
	        > $@

# Create the config-script from its template
$(CONFIG_BIN): $(CONFIG_SRC)
	cat $< | sed -e 's#PACKAGE_VERSION#$(VERSION)#g'         \
	             -e 's#PACKAGE_LIBRARY_DIR#$(LIBDIR)#g'   \
	             -e 's#PACKAGE_LIBRARY#$(LIB_NAME)#g'   \
	             -e 's#PACKAGE_INCLUDE_PATH#$(INCLUDEDIR)#g' \
	        > $@
	$(CHMOD) +x $@

pack: $(TAR_BALL)

$(TAR_BALL): $(PACKAGE_FILES_LIST)
	if [ -e $(TAR_BALL_DIR) ] ; then \
	  $(RM) -rf $(TAR_BALL_DIR);     \
	fi
	$(MKDIR) $(TAR_BALL_DIR)
	$(CP) $(PACKAGE_FILES_LIST) $(TAR_BALL_DIR)
	$(TAR) cvzf $(TAR_BALL) $(TAR_BALL_DIR)

rpm: $(TAR_BALL)
	rpm -tb $(TAR_BALL)
