# @configure_input@

ARCH = unix
POLL = poll

GC = @GCDIR@
GCOPTIONS = @GCOPTIONS@
GCLIB = @GCLIB@
GCPPLIB = @GCPPLIB@
GCLIBS = $(GCPPLIB) $(GCLIB)
LFLAGS = @LDFLAGS@
LIBS = $(LFLAGS) @LIBS@ $(GCLIBS)

CAMP = camperror path drawpath drawlabel picture psfile texfile util settings \
       guide flatguide knot drawfill path3 drawpath3 drawsurface

RUNTIME_FILES = runtime runbacktrace runpicture runlabel runhistory runarray \
	runfile runsystem runpair runtriple runpath runpath3d runstring \
	runmath

PRC =  prc/PRCbitStream prc/oPRCFile prc/PRCdouble prc/writePRC

FILES = $(CAMP) $(RUNTIME_FILES) env genv main stm dec errormsg \
        callable name symbol types entry exp newexp stack camp.tab lex.yy \
	access virtualfieldaccess absyn record interact fileio builtin fftw++ \
	simpson coder coenv \
	@getopt@ locate parser program application varinit fundec refaccess \
	envcompleter process constructor array Delaunay predicates \
	$(PRC) glrender tr arcball algebra3 quaternion svnrevision

DIST = camp.tab.h camp.tab.cc lex.yy.cc runtime.h runtime.cc keywords.cc \
	asy-keywords.el
NAME = asy
XNAME = x$(NAME)
CLEAN = camp.output asy.list svnrevision.cc doc/version.texi GUI/xasyVersion.py $(XNAME)
EXTRA = asy-mode.el asy-init.el asy.vim asy-kate.sh asymptote.py reload.js nopapersize.ps
EXEXTRA = piicon.eps *.views *.dat
DOCEXTRA = *.asy *.csv *.dat latexusage.tex externalprc.tex pixel.pdf
KEYWORDS = base $(ASYMPTOTE_SITEDIR)
LATEXFILES = asymptote.sty asycolors.sty ocg.sty
CONTEXTFILES = colo-asy.tex
ASY = ./asy -dir base -config "" -render=0

DEFS = @DEFS@ @OPTIONS@
CFLAGS = @CPPFLAGS@ @CFLAGS@ 
OPTS = $(DEFS) $(CFLAGS)
INCL = -I . @INCL@

CXX = @CXX@ -Wall -ansi
CC = @CC@ -Wall -ansi
MAKEDEPEND = $(OPTS) -O0 -M -DDEPEND
BISON = bison
LEX = @LEX@

prefix = @prefix@
exec_prefix = @exec_prefix@
datarootdir = @datarootdir@
bindir = $(DESTDIR)@bindir@
mandir = $(DESTDIR)@mandir@
infodir = $(DESTDIR)@infodir@
datadir = $(DESTDIR)@datadir@
asydir = $(datadir)/asymptote
GUIdir = $(asydir)/GUI
docdir = $(DESTDIR)@docdir@
exampledir = $(docdir)/examples
animationsdir = $(exampledir)/animations
latexdir = $(DESTDIR)@latexdir@
contextdir = $(DESTDIR)@contextdir@
INSTALL = @INSTALL@
REVISION = "const char *SVN_REVISION="
revision = `svn info 2>/dev/null | grep 'Revision' | sed -e 's/Revision: \(.*\)/-r\1/'`
last = `cat svnrevision.cc | sed -e 's/.*\"\(.*\)\";/\\1/'`

export prefix docdir exampledir mandir infodir INSTALL MAKE DESTDIR TEXI2DVI

asy: $(GCLIB) $(FILES:=.o) prc
	if test "$(revision)" != "$(last)"; then \
	  echo $(REVISION)\"$(revision)\"\; > svnrevision.cc; \
	  $(CXX) $(OPTS) $(INCL) -o svnrevision.o -c svnrevision.cc; \
	fi
	echo string VERSION=\"@VERSION@$(revision)\"\; > base/version.asy
	echo @set VERSION @VERSION@$(revision) > doc/version.texi
	echo @set Datadir @datadir@ >> doc/version.texi
	echo "#!/usr/bin/env python" > GUI/xasyVersion.py
	echo xasyVersion = \"@VERSION@$(revision)\" >> GUI/xasyVersion.py
	ln -sf GUI/xasy.py $(XNAME)
	$(CXX) $(OPTS) -o $(NAME) $(FILES:=.o) $(LIBS)

svnrevision.cc:
	echo $(REVISION)\"\"\; > svnrevision.cc;

msdos: $(GCLIB) $(FILES:=.o) prc asy.o
	echo string VERSION=\"@VERSION@\"\; > base/version.asy
	echo @set VERSION @VERSION@ > doc/version.texi
	echo @set Datadir @datadir@ >> doc/version.texi
	echo "#!/usr/bin/env python" > GUI/xasyVersion.py
	echo xasyVersion = \"@VERSION@\" >> GUI/xasyVersion.py
	$(CXX) $(OPTS) -o $(NAME) $(FILES:=.o) asy.o $(LIBS) -s -static

asy.o:	asy.rc asy.ico Makefile
	cat asy.rc | sed -e "s/ASYMPTOTE_VERSION/@VERSION@$(revision)/" | \
	windres -o asy.o

all:  	asy man faq asy-keywords.el

$(GCLIB): $(GC).tar.gz
	gunzip -c $(GC).tar.gz > $(GC).tar
	tar -xf $(GC).tar
	rm -f $(GC).tar
	if test "$(GC)" = "gc6.8"; then \
	  cd $(GC)/include; patch < ../../patches/gc6.8_AIX.patch; \
	fi
	if test "$(GC)" = "gc-7.0"; then \
	  cd $(GC)/include/private; patch < ../../../patches/gc-7.0nomem.patch;\
	fi
	cd $(GC); \
	./configure $(GCOPTIONS); \
	$(MAKE) check

$(GCPPLIB): $(GCLIB)

dvi:	asy
	cd doc; $(MAKE) dvi

html:	asy
	cd doc; $(MAKE) doc

man:	asy
	cd doc; $(MAKE) man

faq:	asy
	cd doc; $(MAKE) faq

$(RUNTIME_FILES:=.cc): %.cc: runtime.pl runtimebase.in %.in
	./runtime.pl $(@:.cc=)

camp.tab.cc: camp.y
	$(BISON) -dvt -b camp camp.y && mv camp.tab.c camp.tab.cc

camp.tab.h: camp.tab.cc

lex.yy.cc: camp.l
	$(LEX) -d -olex.yy.cc camp.l

lex.yy.d: $(GCLIB) lex.yy.cc camp.tab.h

keywords.cc: keywords.pl camp.l
	./keywords.pl

envcompleter.d: keywords.cc

asy-keywords.el: asy
	@echo Creating $@;
	$(ASY) -l > asy.list
	ls $(addsuffix /*.asy,$(KEYWORDS)) | grep -v plain\* | \
          grep -v three_\* | grep -v featpost3D | xargs $(ASY) -l >> asy.list
	./asy-list.pl asy.list @VERSION@

install: asy-keywords.el install-texhash install-man

install-all: asy-keywords.el install-texhash install-html

install-texhash: install-asy
	-if test -z "$(DESTDIR)"; then \
	  texhash; \
	fi

install-asy: asy
	${INSTALL} -d $(bindir) $(asydir) $(GUIdir) $(exampledir) \
          $(animationsdir)
	-${INSTALL} -d $(latexdir)
	-${INSTALL} -d $(contextdir)
	${INSTALL} -p -m 755 $(NAME) $(bindir)
	${INSTALL} -p -m 644 asy-keywords.el base/*.asy $(addprefix base/,$(EXTRA)) $(asydir)
	${INSTALL} -p -m 755 GUI/*.py $(GUIdir)
	ln -sf @datadir@/asymptote/GUI/xasy.py $(bindir)/$(XNAME)
	${INSTALL} -p -m 644 examples/*.asy $(addprefix examples/,$(EXEXTRA)) \
	  doc/extra/*.asy $(addprefix doc/,$(DOCEXTRA)) $(exampledir)
	${INSTALL} -p -m 644 examples/animations/*.asy \
          examples/animations/inlinemovie.tex \
	  examples/animations/inlinemovie3.tex $(animationsdir)
	-${INSTALL} -p -m 644 $(addprefix doc/,$(LATEXFILES)) $(latexdir)
	-${INSTALL} -p -m 644 $(addprefix doc/,$(CONTEXTFILES)) $(contextdir)

install-html: html
	cd doc; $(MAKE) install-all

install-man: man
	cd doc; $(MAKE) install

install-prebuilt: install-asy
	cd doc; $(MAKE) install-prebuilt

uninstall: uninstall-all

uninstall-all: uninstall-man uninstall-asy

uninstall-asy:
	-cd $(animationsdir); rm -f *.asy *.tex
	-rmdir $(animationsdir)
	-cd $(exampledir); rm -f $(EXEXTRA) $(DOCEXTRA)
	-rmdir $(exampledir)
	-rmdir $(docdir)
	-cd $(GUIdir); rm -f *.py
	-rmdir $(GUIdir)
	-cd $(asydir); rm -f asy-keywords.el *.asy $(EXTRA)
	-rmdir $(asydir)
	-cd $(latexdir); rm -f $(LATEXFILES)
	-rmdir $(latexdir)
	-cd $(contextdir); rm -f $(CONTEXTFILES)
	-rmdir $(contextdir)
	-cd $(bindir); rm -f $(NAME) $(XNAME)

uninstall-man: 
	cd doc; $(MAKE) uninstall

prc-clean: FORCE
	-rm -f prc/*.o prc/*.d 

clean:  FORCE prc-clean
	-rm -f asy *.o *.d *mon.out $(CLEAN)

gc-clean: FORCE clean
	-if test -d $(GC); then \
		$(MAKE) -C $(GC) clean; \
	fi

cleaner: FORCE distclean
distclean: FORCE clean
	-if test -d $(GC); then \
		rm -rf $(GC); \
	fi
	-rm -f Makefile config.h config.log config.status errors.temp
	cd doc; $(MAKE) distclean
	cd tests; $(MAKE) distclean

cleanest: FORCE maintainer-clean
maintainer-clean: FORCE distclean
	-rm -f configure config.h.in $(DIST)
	-rm -rf autom4te.cache

check: asy FORCE
	./wce
	$(MAKE) -C tests

.SUFFIXES: .c .cc .o .d
.cc.o:
	$(CXX) $(OPTS) $(INCL) -o $@ -c $<
.cc.d:
	@echo Creating $@; \
	rm -f $@; \
	${CXX} $(MAKEDEPEND) $(INCL) $(MDOPTS) $< > $@.$$$$ 2>/dev/null && \
	sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
	rm -f $@.$$$$
.c.d:
	@echo Creating $@; \
	rm -f $@; \
	${CC} $(MAKEDEPEND) $(INCL) $(MDOPTS) $< > $@.$$$$ 2>/dev/null && \
	sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
	rm -f $@.$$$$

ifeq (,$(findstring clean,${MAKECMDGOALS}))
-include $(FILES:=.d)
endif

FORCE:

configure: configure.ac
	autoheader && autoconf

Makefile: Makefile.in config.status
	./config.status

config.status: configure
	./config.status --recheck

