# File:  Makefile

#----------------------------------------------------------------------------
# Project specific path defintions.
#----------------------------------------------------------------------------
INSTALLDIR  = ../lib
LIBINCLDIR  = ../include

PROJDIR    = .

SRC        = $(PROJDIR)/src
INCL       = $(PROJDIR)/include
OBJ        = $(PROJDIR)/obj
BIN        = $(PROJDIR)/bin
LIB        = $(PROJDIR)/lib
TESTDIR    = $(PROJDIR)/test
#----------------------------------------------------------------------------
# LINCLUDES and LDEFINES are appended to CFLAGS and C++FLAGS
#----------------------------------------------------------------------------
#LDEFINES    = -DNO_RANGE_CHECK  -DDEBUG
LDEFINES    = -DNO_RANGE_CHECK  
LINCLUDES      =  -I$(INCL) -I$(LIBINCLDIR) 

#----------------------------------------------------------------------------
# Include the appropriate compiler/platform definitions ...
#----------------------------------------------------------------------------
include ../etc/Makefile.platform

TOPFILES = Makefile COPYRIGHT README WHATSNEW regex.3 regex.7

# Internal stuff, should not need changing.
OBJS  = $(OBJ)/regcomp.o \
	$(OBJ)/regexec.o \
	$(OBJ)/regerror.o \
	$(OBJ)/regfree.o

ALLOBJS = $(OBJS) \
	$(OBJ)/split.o \
	$(OBJ)/debug.o \
	$(OBJ)/main.o

TESTFILES = $(TESTDIR)/tests

REGEXH	= $(INCL)/regex.h

H     = $(INCL)/cclass.h \
	$(INCL)/cname.h \
	$(INCL)/regex2.h \
	$(INCL)/utils.h

REGSRC = $(SRC)/regcomp.c \
	$(SRC)/regerror.c \
	$(SRC)/regexec.c \
	$(SRC)/regfree.c

ALLSRC = $(REGSRC) \
	$(SRC)/engine.c \
	$(SRC)/debug.c \
	$(SRC)/main.c \
	$(SRC)/split.c

IH  = $(INCL)/regcomp.ih \
		$(INCL)/engine.ih \
		$(INCL)/regerror.ih \
		$(INCL)/debug.ih \
		$(INCL)/main.ih

TARGET   = $(BIN)/re
REGEXLIB = $(LIB)/libregex.a


all:  $(ALLOBJS) $(REGEXLIB)


$(REGEXLIB): $(OBJS) 
	$(AR) $(AR_PUTFLAGS) $(REGEXLIB) $(OBJS)
	$(RANLIB) $(REGEXLIB)
	@echo $(REGEXLIB) " is up to date."

# dependencies
$(OBJ)/regcomp.o:	$(H) $(REGEXH) $(SRC)/regcomp.c $(INCL)/regcomp.ih
	$(CC) $(CFLAGS_NONANSI) -DPOSIX_MISTAKE -c $(SRC)/regcomp.c -o $@
$(OBJ)/regexec.o:	$(H) $(REGEXH) $(SRC)/regcomp.c $(SRC)/engine.c $(INCL)/engine.ih
	$(CC) $(CFLAGS_NONANSI) -DPOSIX_MISTAKE -c $(SRC)/regexec.c -o $@

$(OBJ)/regerror.o:	$(H) $(REGEXH) $(SRC)/regerror.c $(INCL)/regerror.ih
	$(CC) $(CFLAGS_NONANSI) -DPOSIX_MISTAKE -c $(SRC)/regerror.c -o $@

$(OBJ)/debug.o:		$(H) $(REGEXH) $(SRC)/debug.c $(INCL)/debug.ih
	$(CC) $(CFLAGS_NONANSI) -DPOSIX_MISTAKE -c $(SRC)/debug.c -o $@

$(OBJ)/main.o:		$(H) $(REGEXH) $(SRC)/main.c $(INCL)/main.ih
	$(CC) $(CFLAGS_NONANSI) -DPOSIX_MISTAKE -c $(SRC)/main.c -o $@

$(OBJ)/split.o:		$(H) $(REGEXH) $(SRC)/split.c 
	$(CC) $(CFLAGS_NONANSI) -DPOSIX_MISTAKE -c $(SRC)/split.c -o $@

$(OBJ)/regfree.o:	$(H) $(REGEXH) $(SRC)/regfree.c 
	$(CC) $(CFLAGS_NONANSI) -DPOSIX_MISTAKE -c $(SRC)/regfree.c -o $@

# tester
$(TARGET): $(ALLOBJS)
	$(CC) $(CFLAGS) -DPOSIX_MISTAKE $(LDFLAGS) $(ALLOBJS) $(LIBS) -o $@

# regression test
test:	$(TARGET) $(TESTDIR)/tests
	$(TARGET) <$(TESTDIR)/tests
	$(TARGET) -el <$(TESTDIR)/tests
	$(TARGET) -er <$(TESTDIR)/tests

# 57 variants, and other stuff, for development use -- not useful to you
ra:	$(TARGET) $(TESTDIR)/tests
	-$(TARGET) <$(TESTDIR)/tests
	-$(TARGET) -el <$(TESTDIR)/tests
	-$(TARGET) -er <$(TESTDIR)/tests

rx:	$(TARGET) $(TESTDIR)/tests
	$(TARGET) -x <$(TESTDIR)/tests
	$(TARGET) -x -el <$(TESTDIR)/tests
	$(TARGET) -x -er <$(TESTDIR)/tests

t:	$(TARGET) $(TESTDIR)/tests
	-time $(TARGET) <$(TESTDIR)/tests
	-time $(TARGET) -cs <$(TESTDIR)/tests
	-time $(TARGET) -el <$(TESTDIR)/tests
	-time $(TARGET) -cs -el <$(TESTDIR)/tests


install: $(REGEXLIB)
	$(INSTALL) $(INSTALLOPTS) $(REGEXH)   $(LIBINCLDIR)/.
	$(INSTALL) $(INSTALLOPTS) $(REGEXLIB) $(INSTALLDIR)/.

clean:	
	rm -f core core.* *.core *.tmp
	rm -f $(OBJ)/*.o $(BIN)/re $(REGEXLIB)
	@cd ..; rm -f $(REGEXLIB)
	@cd ..; rm -f $(REGEXH)


fullprint:
	ti README WHATSNEW notes todo | list
	ti *.h | list
	list *.c
	list regex.3 regex.7

print:
	ti README WHATSNEW notes todo | list
	ti *.h | list
	list reg*.c engine.c

export:
	mkdir -p $(EXPORT_DIR)
	@cd $(EXPORT_DIR); mkdir -p $(INCL)
	$(EXPORT) $(EXPORT_LIST) $(REGEXH) $(EXPORT_DIR)/$(INCL)
	@cd $(EXPORT_DIR); mkdir -p $(SRC)
	$(EXPORT) $(EXPORT_LIST) $(H) $(EXPORT_DIR)/$(INCL)
	@cd $(EXPORT_DIR); mkdir -p $(SRC)
	$(EXPORT) $(EXPORT_LIST) $(IH) $(EXPORT_DIR)/$(INCL)
	@cd $(EXPORT_DIR); mkdir -p $(SRC)
	$(EXPORT) $(EXPORT_LIST) $(ALLSRC) $(EXPORT_DIR)/$(SRC)
	@cd $(EXPORT_DIR); mkdir -p $(TESTDIR)
	@cp $(TESTFILES) $(EXPORT_DIR)/$(TESTDIR)
	@cd $(EXPORT_DIR); mkdir -p $(BIN)
	@cd $(EXPORT_DIR); mkdir -p $(LIB)
	@cd $(EXPORT_DIR); mkdir -p $(OBJ)
	@cp $(TOPFILES) $(EXPORT_DIR)
