####################################################################
#
#     Installation instructions
#
# 1. Choose a directory where you want to install rauto. Typical
#    locations are '/usr/local' or '/opt'. The binaries will be
#    copied to the subdirectory 'bin', and the documentation to
#    the subdirectory 'share/doc/rauto'.

default_prefix = /usr/local

# 2. Set the variable AUTO_DIR to the directory where AUTO is
#    installed. A typical location is '/usr/local/auto'. Note that
#    the environment variable AUTO_DIR might already be set on your
#    system. In that case you do not need to change anything here.

# AUTO_DIR = /usr/local/auto

# 3. Run 'make' and then 'make install'. This will build and install
#    rauto and its documentation.
#
####################################################################


####################################################################
#
#     Modifications below this line should not be necessary.
#
####################################################################

-include Makefile.defs

DEFINES  = -DAUTODIR='"'$(AUTO_DIR)'"' -DNDEBUG
SOURCES  = main.cpp parser.cpp
OBJECTS  = $(patsubst %.cpp, %.o, $(SOURCES))
TARGETS  = rauto awk/rfcon awk/rdm
UNINSTMF = $(pref)/share/rauto/Makefile

# macros for checking if command script of a target changed,
# add $(SAVECMD) to the dependency list of the targets for
# which you want to enable command-script dependency check

MKCMDDIR = mkcmds
SAVECMD  = #$(MKCMDDIR)/$$(@).cmd
CMD      = cmd
RCMD     = rcmd
cmddep   = on

.SUFFIXES: .cpp .o .f

.cpp.o:
	g++ $(DEFINES) -Wall -c $<

.f.o:
	g77 -Wall -c $<

all: $(TARGETS)

rauto: $(OBJECTS) $(SAVECMD)
	g++ -o rauto $(OBJECTS)

awk/rfcon: rfcon $(SAVECMD)
	sed -e "s|AUTO_DIR|$(AUTO_DIR)|g" rfcon > awk/rfcon
	chmod +x awk/rfcon

awk/rdm: rdm $(SAVECMD)
	sed -e "s|DEMO_DIR|$(pref)/share/rauto|g" $< > $@
	chmod +x $@

install: all do_install uninstall_mf
	@echo
	@echo "installation successfull"
	@echo "run 'make uninstall' in $(pref)/share/rauto to remove rauto"

do_install:
	@echo "creating directories:"
	@echo "creating $(pref)"
	@test -d $(pref)                   || \
		mkdir $(pref)
	@echo "creating $(pref)/bin"
	@test -d $(pref)/bin               || \
		mkdir $(pref)/bin
	@echo "creating $(pref)/share"
	@test -d $(pref)/share             || \
		mkdir $(pref)/share
	@echo "creating $(pref)/share/rauto"
	@test -d $(pref)/share/rauto       || \
		mkdir $(pref)/share/rauto
	@echo "creating $(pref)/share/rauto/cusp"
	@test -d $(pref)/share/rauto/cusp  || \
		mkdir $(pref)/share/rauto/cusp
	@echo "creating $(pref)/share/rauto/roess"
	@test -d $(pref)/share/rauto/roess || \
		mkdir $(pref)/share/rauto/roess
	@echo "creating $(pref)/share/rauto/duff"
	@test -d $(pref)/share/rauto/duff  || \
		mkdir $(pref)/share/rauto/duff
	@echo "creating $(pref)/share/doc"
	@test -d $(pref)/share/doc         || \
		mkdir $(pref)/share/doc
	@echo "creating $(pref)/share/doc/rauto"
	@test -d $(pref)/share/doc/rauto   || \
		mkdir $(pref)/share/doc/rauto
	@#################################################
	@echo "installing scripts"
	@cp -f rauto awk/* $(pref)/bin/
	@#################################################
	@echo "installing chkdrv.f"
	@cp -f chkdrv.f $(pref)/share/rauto/
	@#################################################
	@echo "installing documentation in $(pref)/share/doc/rauto/"
	@cp -rf doc/* $(pref)/share/doc/rauto/
	@#################################################
	@echo -n "installing examples:"
	@#######################  cusp
	@echo -n " cusp"
	-@cp -f cusp/* $(pref)/share/rauto/cusp/
	@echo "C Uncomment next line to enable checking of derivatives" \
		> $(pref)/share/rauto/cusp/cusp.f
	@echo "C      INCLUDE '"`echo $(pref)`"/share/rauto/chkdrv.f'" \
		>> $(pref)/share/rauto/cusp/cusp.f
	@cat cusp/cusp.f >> $(pref)/share/rauto/cusp/cusp.f
	@#######################  roess
	@echo -n " roess"
	-@cp -f roess/* $(pref)/share/rauto/roess/
	@echo "C Uncomment next line to enable checking of derivatives" \
		> $(pref)/share/rauto/roess/roess.f
	@echo "C      INCLUDE '"`echo $(pref)`"/share/rauto/chkdrv.f'" \
		>> $(pref)/share/rauto/roess/roess.f
	@cat roess/roess.f >> $(pref)/share/rauto/roess/roess.f
	@#######################  duff
	@echo -n " duff"
	-@cp -f duff/* $(pref)/share/rauto/duff/
	@echo "C Uncomment next line to enable checking of derivatives" \
		> $(pref)/share/rauto/duff/duff.f
	@echo "C      INCLUDE '"`echo $(pref)`"/share/rauto/chkdrv.f'" \
		>> $(pref)/share/rauto/duff/duff.f
	@cat duff/duff.f >> $(pref)/share/rauto/duff/duff.f
	@#######################  done
	@echo ""

uninstall_mf:
	@echo "installing $(UNINSTMF)"
	@rm -f $(UNINSTMF)
	@echo "#############################################" >> $(UNINSTMF)
	@echo "### This file is created automatically.   ###" >> $(UNINSTMF)
	@echo "### Do not edit. All changes wil be lost. ###" >> $(UNINSTMF)
	@echo "#############################################" >> $(UNINSTMF)
	@echo "" >> $(UNINSTMF)
	@echo "uninstall:" >> $(UNINSTMF)
	@echo -n "	@echo -n "'"'"uninstall package rauto " >> $(UNINSTMF)
	@echo    "from '$(pref)'? (y/n) "'"' >> $(UNINSTMF)
	@echo "	@read ans; { test "'"$$$$'"ans"'"'" = "'"'y'"'" || \
		{ echo "'"'uninstall aborted'"'"; exit 1; }; }" >> $(UNINSTMF)
	@echo "	rm -rf $(pref)/share/doc/rauto" >> $(UNINSTMF)
	@echo "	rm -f $(pref)/bin/rauto" >> $(UNINSTMF)
	@cd awk ; \
		for f in * ; do \
			echo "	rm -f $(pref)/bin/$$f" >> $(UNINSTMF) ; \
		done
	@echo "	rm -rf $(pref)/share/rauto" >> $(UNINSTMF)

tar:
	cd ..; tar --exclude "*/data/*" --exclude "*/data" \
		--exclude "*/bddat/*" --exclude "*/bddat" \
		--exclude "*/pics/*" --exclude "*/pics" \
		--exclude "*.dat" --exclude "*.eps" --exclude "fort*" \
		--exclude "*.exe" --exclude rauto/awk/rfcon --exclude rauto/awk/rdm \
		-cvzf rauto/rauto.tgz \
		rauto/*.cpp rauto/*.h rauto/*.f rauto/Makefile rauto/Makefile.dep \
		rauto/rfcon rauto/rdm rauto/awk rauto/cusp rauto/roess rauto/duff \
		rauto/doc

clean:
	rm -f $(OBJECTS) $(TARGETS) Makefile.defs
	rm -rf $(MKCMDDIR) tmp.cmd

depend Makefile.dep: $(SOURCES) Makefile
	g++ -MM $(SOURCES) > Makefile.dep

test:

Makefile.defs: $(SAVECMD)
	@test -f $@ || { \
		echo "dprefix=$(default_prefix)" > $@ ; \
		test "$(prefix)" != "" \
			&& echo "pref=$(prefix)" >> $@ \
			|| echo "pref=$(default_prefix)" >> $@ ; \
		}
	@dline=`sed -n "1p" Makefile.defs` ; \
		pline=`sed -n "2p" Makefile.defs` ; \
		test "$${dline}" = "dprefix=$(default_prefix)" \
			|| { \
				dline="dprefix=$(default_prefix)" ; \
				pline="pref=$(default_prefix)" ; \
			} ; \
		test "$(prefix)" != "" && pline="pref=$(prefix)" ; \
		echo "$${dline}"  > $@ ; \
		echo "$${pline}" >> $@

$(MKCMDDIR)/%.$(CMD): $(MKCMDDIR) .FORCE
	@test "$(cmddep)" = "on" && { \
		$(MAKE) CMD=rcmd RCMD=cmd -s -n -W $(MKCMDDIR)/$*.cmd $* > tmp.cmd ; \
		cmp -s tmp.cmd $(MKCMDDIR)/$*.cmd || \
			{ mkdir -p $(@D) ; cp -rf tmp.cmd $(MKCMDDIR)/$*.cmd ; } ; \
		rm -f tmp.cmd ; \
		} || { \
		test -f $(MKCMDDIR)/$*.cmd || \
			{ mkdir -p $(@D) ; touch $(MKCMDDIR)/$*.cmd ; } ; \
		}

$(MKCMDDIR):
	@mkdir -p $@

%.$(RCMD):

.FORCE:

$(OBJECTS): %.o: $(SAVECMD)

-include Makefile.dep
