#  Makefile for hexer version 1.0.3

#  Copyright (c) 1995,1996 Sascha Demetrio
#  Copyright (c) 2009 - 2011, 2014 - 2016 Peter Pentchev

#  It might be helpful to read the `README'-file first.

#  -- Where? --
#  The following lines determine where the binaries and manual pages for
#  hexer are gonna live.
PREFIX ?= /usr/local
BINDIR ?= $(PREFIX)/bin
MANDIR ?= $(PREFIX)/man/man1

#  -- Which terminal library? --
#  (It's probably save to leave the following lines unchanged.)
#
#  Use the following line if you want to use the termcap library.
#LTERMCAP ?= -ltermcap
#
#  ...or this one if you want to use curses.
LTERMCAP ?= -lcurses

CPPFLAGS_STD ?= -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 \
		-D_FILE_OFFSET_BITS=64

#  If you want to add some system specific defines, it's probably more
#  appropriate to put them into `config.h'.
CPPFLAGS += $(CPPFLAGS_STD) -DHEXER_VERSION=\"1.0.3\"

#  -- Which compiler? --
CC ?= cc
CFLAGS ?= -O
LDFLAGS ?=
LDLIBS = $(LTERMCAP) -lm
#
#  Uncomment the following lines if you want to use the GNU compiler.
#CC = gcc
#CFLAGS = -O6
#LDFALGS =
#LDLIBS = $(LTERMCAP)

#  -- Which installer? --
INSTALL ?= install
INSTALLBIN ?= $(INSTALL) -s
INSTALLMAN ?= $(INSTALL) -m 644
#
#  Uncomment these if you don't have an installer.
#INSTALL = cp
#INSTALLBIN = $(INSTALL)
#INSTALLMAN = $(INSTALL)

MKDIR ?= mkdir -p

###  It shouldn't be necessary to change anything below this line.

HEXER = hexer
MYC = myc

CTAGS = ctags -tawf tags

OBJECTS = buffer.o tio.o edit.o main.o hexer.o readline.o regex.o port.o \
          exh.o set.o map.o signal.o util.o commands.o helptext.o calc.o

all: $(HEXER)

$(HEXER): $(OBJECTS)
	$(CC) $(LDFLAGS) -o $@ $(OBJECTS) $(LDLIBS)

$(MYC): calc.c config.h
	$(CC) $(LDFLAGS) $(CPPFLAGS) $(CFLAGS) -DMYCALC=1 -o $@ calc.c -lm

bin2c: bin2c.c
	$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ bin2c.c

helptext.c: help.txt bin2c
	./bin2c -n helptext -o $@ help.txt

.c.o:	config.h
	$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

%.o:	%.c config.h
	$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

config.h:
	[ ! -e config.h.auto ] || rm config.h.auto
	echo "/* Autogenerated by Makefile and config-test.c */" > config.h.auto
	for item in \
		SIGTYPE_INT	\
		ALLOCA_H	\
		VASPRINTF	\
	    ; do \
		echo "Testing for $$item"; \
		if $(CC) $(CPPFLAGS) $(CFLAGS) -D"TEST_$$item" -c -o config-test.o -Werror config-test.c; then \
			value=1; \
		else \
			value=0; \
		fi; \
		echo "- result: $$value"; \
		printf "\\n#define HAVE_%s\\t%d\\n" "$$item" "$$value" >> config.h.auto; \
	done
	
	# These configuration settings are deprecated; hexer expects
	# a POSIX environment that provides these functions and
	# header files.  If the build breaks or hexer doesn't run
	# properly, try moving some of these to the upper section so
	# the configuration stage can actually check for them; please
	# also let the author know what your operating system, platform,
	# and build environment is.
	#
	for item in \
		STRCMP		\
		STRCASECMP	\
		MEMMOVE		\
		FLOAT_H		\
		STRERROR	\
	    ; do \
		echo "Assuming $$item is present"; \
		printf "\\n/* Assumed; please let the author know if the build breaks */\\n#define HAVE_%s\\t%d\\n" "$$item" 1 >> config.h.auto; \
	done
	
	[ ! -e config.h ] || rm config.h
	mv config.h.auto config.h

tags: *.c *.h
	-@{ \
	  echo Creating tags...; \
	  rm -f tags; \
	  for i in *.c *.h; do \
            echo $(CTAGS) $$i; \
	    $(CTAGS) $$i; \
	  done; \
	}

dep: depend

depend: *.c *.h config.h
	-rm -f Makefile~
	sed '/\#\#\# DO NOT DELETE THIS LINE \#\#\#/q' \
	  < Makefile > Makefile~
	-echo >> Makefile~
	-echo '#' Dependencies: >> Makefile~
	-echo >> Makefile~
	@{ for i in *.c; do \
	      echo $(CC) -MM $(CPPFLAGS) $$i '>>' Makefile~; \
	      $(CC) -MM $(CPPFLAGS) $$i >> Makefile~; \
	    done; }
	-echo >> Makefile~
	mv -f Makefile~ Makefile
	-touch depend

clean:
	rm -f $(HEXER) $(MYC) gen_testfile $(OBJECTS) bin2c
	rm -f config-test.o
	rm -f config.h
	rm -f helptext.c TESTFILE
	rm -f tags core *.bak

distclean: clean
	rm -f *~
	sed '/\#\#\# DO NOT DELETE THIS LINE \#\#\#/q' \
	  < Makefile > Makefile~
	echo >> Makefile~
	mv -f Makefile~ Makefile
	rm -f depend

install: all
	$(MKDIR) $(DESTDIR)$(BINDIR) $(DESTDIR)$(MANDIR)
	$(INSTALLBIN) $(HEXER) $(DESTDIR)$(BINDIR)
	$(INSTALLMAN) $(HEXER).1 $(DESTDIR)$(MANDIR)
	[ ! -f $(MYC) ] || $(INSTALLBIN) $(MYC) $(DESTDIR)$(BINDIR)
	[ ! -f $(MYC) ] || $(INSTALLMAN) $(MYC).1 $(DESTDIR)$(MANDIR)

### DO NOT DELETE THIS LINE ###

