# Makefile for compiling, testing, and installing Mathomatic under any UNIX like OS.
# Currently uses gcc only options in CFLAGS, just remove them for other C compilers.

VERSION		= `cat VERSION`
CFLAGS		+= -Wuninitialized -Wshadow -Wformat -Wparentheses -Wcast-align # gcc specific flags
CFLAGS		+= -O -DUNIX -DVERSION=\"$(VERSION)\" # general cc flags
LDFLAGS		+= # The default linker flags.
LIBS		+= -lm # The default libraries to link.

# "make READLINE=1" to include readline support:
CFLAGS		+= $(READLINE:1=-DREADLINE)
LIBS		+= $(READLINE:1=-lreadline -lncurses)

# Install directories:
prefix		?= /usr/local
bindir		?= $(prefix)/bin
mandir		?= $(prefix)/man
docdir		?= $(prefix)/share/doc

AOUT		= mathomatic # The name of the executable to create.
TARGETS		= $(AOUT) doc/manpage.html

OBJECTS		= main.o globals.o am.o solve.o help.o parse.o cmds.o simplify.o \
		  factor.o super.o unfactor.o poly.o diff.o integrate.o \
		  complex.o complex_lib.o list.o gcd.o factor_int.o

MAN1		= mathomatic.1
DOCS		= COPYING README.txt changes.txt mathomatic.ico mathomatic.png mathomatic.desktop

all: $(TARGETS)
	@echo Make completed.

check test:
	@echo Testing Mathomatic...
	@cd tests && time ../$(AOUT) -t all >test.out && diff -u all.out test.out
	@rm tests/test.out
	@echo All tests passed.

baseline:
	@cd tests && ../$(AOUT) -t all >all.out
	@rm -f tests/test.out

$(OBJECTS): includes.h am.h externs.h complex.h proto.h VERSION

$(AOUT): $(OBJECTS)
	$(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $(AOUT)

doc/manpage.html: mathomatic.1
	groff -Thtml -man mathomatic.1 >doc/manpage.html

install:
	install -d $(bindir)
	install -d $(mandir)/man1
	install -d $(docdir)/mathomatic
	install -d $(docdir)/mathomatic/html
	install -d $(docdir)/mathomatic/tests
	install -d $(docdir)/mathomatic/factorial
	install -m 0755 $(AOUT) $(bindir)
	install -m 0644 $(MAN1) $(mandir)/man1
	install -m 0644 $(DOCS) $(docdir)/mathomatic
	install -m 0644 doc/* $(docdir)/mathomatic/html
	install -m 0644 tests/* $(docdir)/mathomatic/tests
	install -m 0644 factorial/* $(docdir)/mathomatic/factorial
	@echo Install completed.

uninstall:
	rm -f $(bindir)/$(AOUT)
	cd $(mandir)/man1 && rm -f $(MAN1)
	rm -rf $(docdir)/mathomatic
	@echo Uninstall completed.

clean:
	rm -f *.o *.a
	rm -f lib/*.o lib/*.a

flush: clean
	rm -f $(AOUT)
	rm -f mathomatic_secure
