# Tis a fine barn, but tis no swimming pool

CFLAGS = -g -W -Wall -pedantic -O2

LIBS = -ltermcap

OBJFILES = minitrue.o misc.o flags.o files.o fileops.o dirwalk.o wildcard.o \
  unzip.o backup.o buffers.o strings.o regexp.o rxfind.o rxparse.o \
  rxanalyz.o rxchars.o rxencode.o rxsubst.o rxmisc.o fixedstr.o charset.o \
  stdout.o viewer.o lines.o console.o statline.o winbuf.o hilites.o \
 attribs.o linenums.o scroll.o signals.o resizer.o

mtr: $(OBJFILES)
	gcc -o mtr $(LIBS) $(OBJFILES)

minitrue.o: minitrue.h buffers.h strings.h flags.h files.h hilites.h \
	viewer.h console.h attribs.h charset.h lines.h signals.h

misc.o: minitrue.h console.h statline.h resizer.h casetran.h

flags.o: flags.h minitrue.h

files.o: files.h fileops.h dirwalk.h unzip.h minitrue.h

fileops.o: fileops.h statline.h minitrue.h

dirwalk.o: dirwalk.h resizer.h fileops.h minitrue.h

wildcard.o: wildcard.h minitrue.h

unzip.o: unzip.h minitrue.h

backup.o: backup.h minitrue.h fileops.h

buffers.o: buffers.h files.h fileops.h minitrue.h

strings.o: strings.h buffers.h fixedstr.h regexp.h minitrue.h

regexp.o: regexp.h fixedstr.h charset.h minitrue.h

rxfind.o: regexp.h fixedstr.h charset.h minitrue.h

rxparse.o: regexp.h charset.h minitrue.h

rxanalyz.o: regexp.h minitrue.h

rxchars.o: rxchars.h regexp.h charset.h minitrue.h

rxencode.o: regexp.h minitrue.h

rxsubst.o: rxsubst.h regexp.h minitrue.h

rxmisc.o: regexp.h minitrue.h

rxopname.h: regexp.h
	./mtr -ox regexp.h 'enum\s*opcodes\s*(\{[^\}]*\})' = '\1' > rxopname.h
	./mtr -nx rxopname.h '\A' = 'static char *Op_names[] =' \
	   '([A-Z_]+)' = '\"\1\"'

fixedstr.o: fixedstr.h minitrue.h

charset.o: charset.h minitrue.h

stdout.o: stdout.h minitrue.h

viewer.o: viewer.h fileops.h buffers.h strings.h lines.h statline.h \
hilites.h attribs.h console.h scroll.h tutorial.h minitrue.h

lines.o: lines.h console.h winbuf.h hilites.h buffers.h charset.h \
attribs.h minitrue.h

console.o: console.h attribs.h ansiesc.h minitrue.h

statline.o: statline.h console.h lines.h winbuf.h minitrue.h

winbuf.o: winbuf.h console.h minitrue.h

hilites.o: hilites.h console.h minitrue.h

linenums.o: linenums.h minitrue.h

attribs.o: attribs.h console.h minitrue.h

scroll.o: scroll.h console.h minitrue.h

signals.o: signals.h lines.h console.h strings.h minitrue.h

resizer.o: resizer.h minitrue.h

flagtest: flags.c flags.h minitrue.h misc.o
	gcc -DFLAGS_TEST $(CFLAGS) -o flagtest flags.c misc.o

buftest: buffers.c buffers.h minitrue.h linenums.o files.o misc.o
	gcc -DTEST_PROG -DBUFFERS_TEST  $(CFLAGS) -o buftest buffers.c misc.c \
	files.o fileops.o unzip.o dirwalk.o wildcard.o resizer.o linenums.o \
	backup.o

booltest: $(OBJFILES)
	gcc -o booltest -DBOOL_TEST $(LIBS) $(CFLAGS) strings.c \
	$(filter-out strings.o, $(OBJFILES))

fstrtest: fixedstr.c fixedstr.h minitrue.h misc.o
	gcc -DFIXEDSTR_TEST -DTEST_PROG $(CFLAGS) -o fstrtest fixedstr.c misc.c

csettest: charset.c charset.h minitrue.h misc.o
	gcc -DCHARSET_TEST -DTEST_PROG $(CFLAGS) -o csettest charset.c misc.c

linetest: lines.c lines.h buffers.h files.h minitrue.h misc.o
	gcc -DLINES_TEST -DTEST_PROG $(CFLAGS) -o linetest lines.c misc.c \
	buffers.o files.o charset.o

dirtest: dirwalk.c dirwalk.h minitrue.h misc.o resizer.o fileops.o
	gcc -DDIRWALK_TEST -DTEST_PROG $(CFLAGS) -o dirtest dirwalk.c resizer.o \
	misc.c fileops.o

wctest: wildcard.c wildcard.h misc.o
	gcc -DWILDCARD_TEST -DTEST_PROG $(CFLAGS) -o wctest wildcard.c misc.c

unziptst: unzip.c unzip.h misc.o fileops.o
	gcc -DUNZIP_TEST -DTEST_PROG $(CFLAGS) -o unziptst unzip.c misc.c fileops.o

bkuptst: backup.c backup.h misc.o fileops.o
	gcc -DBACKUP_TEST -DTEST_PROG $(CFLAGS) -o bkuptst backup.c misc.c \
	fileops.o

rxprint: rxprint.c regexp.c regexp.h rxopname.h rxparse.o rxanalyz.o \
	rxencode.o rxchars.o rxmisc.o charset.o fixedstr.o
	gcc -DTEST_PROG -DRX_DUMP $(CFLAGS) -o rxprint rxprint.c rxencode.o \
	regexp.o rxparse.o rxanalyz.o rxchars.o rxmisc.o misc.c fixedstr.o \
	charset.o

rxanalyz: rxprint.c regexp.c rxanalyz.c regexp.h rxparse.o rxencode.o \
	rxmisc.o charset.o fixedstr.o
	gcc -DTEST_PROG -DRX_DUMP -DRX_ANALYS $(CFLAGS) -o rxanalyz rxprint.c \
	rxencode.o regexp.o rxparse.o rxanalyz.c rxmisc.o rxchars.o misc.c \
	fixedstr.o charset.o

rxchars: rxchars.c rxchars.h regexp.h rxmisc.o rxparse.o charset.o misc.c \
	minitrue.h
	gcc -DTEST_PROG -DRXCHARS_TEST $(CFLAGS) -o rxchars rxchars.c rxparse.o \
	rxmisc.o charset.o misc.c

rxtrace: $(OBJFILES)
	gcc -o rxtrace -DRX_TRACE $(LIBS) $(CFLAGS) rxfind.c \
	$(filter-out rxfind.o, $(OBJFILES))

rxparens: $(OBJFILES)
	gcc -o rxparens -DRX_TRACE -DPRINT_PARS $(LIBS) $(CFLAGS) rxfind.c \
	$(filter-out rxfind.o, $(OBJFILES))

pardump: regexp.c regexp.h charset.o fixedstr.o
	gcc -DTEST_PROG -DPAREN_DUMP $(CFLAGS) -o pardump regexp.c misc.c \
	fixedstr.o charset.o

rxtest: regexp.c regexp.h charset.o misc.o
	gcc -DRX_TEST -DTEST_PROG $(CFLAGS) -o rxtest regexp.c charset.o misc.o

rsztest: resizer.c misc.o
	gcc -DRESIZER_TEST -DTEST_PROG $(CFLAGS) -o rsztest resizer.c misc.o

hltest: hilites.c
	gcc -DHILITES_TEST $(CFLAGS) -o hltest hilites.c misc.o

casetran.h : maktable.c minitrue.h
	gcc -DMAKE_CASE_TABLES -o makecase maktable.c
	./makecase > casetran.h
	rm makecase*

ansiesc.h : maktable.c minitrue.h
	gcc -DMAKE_ANSI_ESC -o makeansi maktable.c
	./makeansi > ansiesc.h
	rm makeansi*

tutorial.h:
	expand -4 tutorial.txt | mtru -o+i:text2str.mt > tutorial.h

clean:
	rm *.o

rmback:
	rm *~

zip:
	zip -llu@9 mtsrc.zip < projfile.lst

tgz:
	tar -T projfile.lst -czf mtsrc.tgz

unixsrc:
	tar -T srcfiles.lst -czf MiniTrue-2.0.2.tar.gz

srcconv:
	zip -lu@9 mtr202s.zip < srcfiles.lst

dossrc:
	zip -u@9 mtr202s.zip < srcfiles.lst

unixbin:
	tar -T unixbin.lst -czf MiniTrue-2.0.2.i386.tar.gz

dosbin:
	zip -lu@9 mtr202b.zip < dosbin.lst

tags: *.c *.h
	ctags *.c *.h

entab:
	for file in $$(mtru -o~ srcfiles.lst ^makefile) ; do \
		unexpand -4 $$file > /tmp/$$file; \
		touch -r $$file /tmp/$$file; \
		mv -f /tmp/$$file $$file; \
	done

untab:
	for file in $$(mtru -o~ srcfiles.lst ^makefile) ; do \
		expand -4 $$file > /tmp/$$file; \
		touch -r $$file /tmp/$$file; \
		mv -f /tmp/$$file $$file; \
	done
