#
# Makefile for Mn_Fit.
#
#MN_FIT_TOP := /home/brock/mn_fit
TMPDIR ?= /tmp
MN_FIT := $(PWD)
#
# Change these setting to reflect your setup - autoconf should handle it
# at some point
#
MACHINE := Linux
#
# Run with DEBUG=on for debug version
#
FC=g77
DEBUG = off
FFLAGS = -fno-second-underscore
ifeq ($(DEBUG),on)
  FFLAGS += -g
  CFLAGS += -g
endif
#
# CERN libraries etc.
#
CERN     := /cern
CERNVERS := 2002
#
# Locations for installation
#
bindir = /usr/local/bin
libdir = /usr/local/lib/mn_fit
#
# Special directoires for different places
#
ifeq ($(LOCATION),BONN)
  bindir = /usr/local/share/bin
  libdir = /usr/local/share/mn_fit
  CERNVERS := 2003
endif
ifeq ($(LOCATION),BONNDEV)
  bindir = /home/brock/scripts
  libdir = /home/brock/mn_fit
  CERNVERS := 2003
endif
ifeq ($(LOCATION),CERNAFS)
  bindir = /afs/cern.ch/user/b/brock/bin
  libdir = /afs/cern.ch/user/b/brock/public/mn_fit
  CERNVERS := 2004
endif
ifeq ($(LOCATION),CMU)
  bindir = /home/brock/scripts
  libdir = /home/brock/mn_fit
  CERN  := /usr/local
endif
ifeq ($(LOCATION),DESYAFS)
  bindir = /afs/desy.de/user/b/brock/bin
  libdir = /afs/desy.de/user/b/brock/public/mn_fit
  CERNVERS := 2002
endif
#
CERNLIB  := `CERN=$(CERN); export CERN; $(CERN)/$(CERNVERS)/bin/cernlib -v $(CERNVERS) mathlib`
CERNGLIB := `CERN=$(CERN); export CERN; $(CERN)/$(CERNVERS)/bin/cernlib -v $(CERNVERS) pawlib graflib packlib mathlib kernlib`
ifeq ($(LOCATION),DESYAFS)
  CERNLIB  := `$(CERN)/$(CERNVERS)/bin/cernlib -u -v $(CERNVERS) packlib_noshift mathlib`
  #CERNGLIB := `$(CERN)/$(CERNVERS)/bin/cernlib -v $(CERNVERS) pawlib graflib/Motif packlib mathlib` 
  CERNGLIB := `$(CERN)/$(CERNVERS)/bin/cernlib -u -v $(CERNVERS) pawlib graflib packlib_noshift mathlib -lnsl -lcrypt -ldl` 
endif
#
# Add Xt and Xm libraries to 2000 version of cernlib command
#
ifeq ($(CERNVERS),2000)
  CERNGLIB += -lXt -lXm
endif
#
# MN_FIT_SYS is the system dependent suubdirectory.
#
MN_FIT_SYS := $(MN_FIT)/$(MACHINE)
#
SRCDIR     := $(MN_FIT)/src
TYPDIR     := $(MN_FIT)/typscn
TESTDIR    := $(MN_FIT)/test
DOCDIR     := $(MN_FIT)/doc
FIGDIR     := $(MN_FIT)/figs
MANDIR     := $(MN_FIT)/manual
TDATADIR   := $(MN_FIT_SYS)/test_data
HELPDIR    := $(MN_FIT_SYS)/help
GENDIR     := $(MN_FIT_SYS)/gen
OBJDIR     := $(MN_FIT_SYS)/obj
LIBDIR     := $(MN_FIT_SYS)/lib
EXEDIR     := $(MN_FIT_SYS)/exe
#
# Libraries
#
MN_FITLIB   := -L$(LIBDIR) -lmn_fit
MN_MATHLIB  := -lmath
TYPSCNLIB   := -L$(LIBDIR) -ltypscn_read -lreadline -lncurses
# Use the following library if you do not have or want readline
# TYPSCNLIB   := -L$(LIBDIR) -ltypscn
#
# Set compile commands for your machine
# This should be done by autoconf at some point
# Do not remove intermediate files with debug turned on
#
RM  = rm
RMI = rm
ifeq ($(DEBUG),on)
  RMI = @echo
endif
CP = cp
CPR = cp -R
MKDIR = mkdir
RANLIB = ranlib
ARFLAGS = rv
O = .o
A = .a
#
FPP = gcc -E -C -P
CPPMNF = gcc -E -C -P -x c
#CPPMNF = cpp -P
FPPFLAGS += -DUNIX -I./inc -I./inc/cern_$(CERNVERS)
# FPPFLAGS += -I./inc/cern_$(CERNVERS)/hbook
# FPPFLAGS += -I./inc/cern_$(CERNVERS)/higz
CPPMNFFLAGS += -DUNIX
#CPPMNFFLAGS += -traditional-cpp -DUNIX
CFLAGS += -I./inc/cern_$(CERNVERS)
# CFLAGS += -I./inc/cern_$(CERNVERS)/kuip
#
# Flags for graphics
#
FPPFLAGS += -DHIGZ -DX11

#
# Manual pages for figures and fonts
#
FONTPAGE  = 201
FIGSPAGE  = 199
NFONTPAGE =   3
NFIGSPAGE =  17

#
# Generic useful commands
#
find_f_files = $(wildcard $(SRCDIR)/$(dir)/*.fpp)
find_c_files = $(wildcard $(SRCDIR)/$(dir)/*.c)
find_tf_files = $(wildcard $(TYPDIR)/src/$(dir)/*.fpp)
find_tc_files = $(wildcard $(TYPDIR)/src/$(dir)/*.c)
find_mnf_files = $(wildcard $(SRCDIR)/$(dir)/*.mnf)
find_man_files  = $(wildcard $(SRCDIR)/$(dir)/*.tex)
find_man_files += $(wildcard $(SRCDIR)/$(dir)/*.bib)
find_man_files += $(wildcard $(SRCDIR)/$(dir)/*.cls)
comp_file = $(addsuffix $(O), $(basename $(file)))
mnf_file = $(addprefix $(HELPDIR)/, $(file))

#
# The libraries
#
MN_FIT_LIBPATH := $(LIBDIR)/libmn_fit
MATH_LIBPATH   := $(LIBDIR)/libmath
TYPSCN_LIBPATH := $(LIBDIR)/libtypscn_read
TYPSCN_LIBPATH_NOREAD := $(LIBDIR)/libtypscn

#
# Subdirectories with source code
#
MN_FIT_SUBSRCS  := mn_fit minuit spline function ntuple parser plot set
MN_FIT_SUBSRCS  += display dbase user machine handler util
MN_FIT_SUBSRCS  += graphics
MN_FIT_SUBSRCS  += util_cc
MATH_SUBSRCS := math
TYPSCN_SUBSRCS := lunmgr typscn typsio typsub
TYPSCN_SUBSRCS += typsio_c
EXTRAS_SUBSRCS := extras
HELP_SUBSRCS := demo

#
# Add all subdirectories to VPATH
#
VPATH := $(foreach dir, $(MN_FIT_SUBSRCS), $(SRCDIR)/$(dir))
VPATH += $(foreach dir, $(TYPSCN_SUBSRCS), $(TYPDIR)/src/$(dir))
VPATH += $(foreach dir, $(EXTRAS_SUBSRCS), $(SRCDIR)/$(dir))
VPATH += $(foreach dir, $(HELP_SUBSRCS),   $(SRCDIR)/help/$(dir))

#
# Mn_Fit source files
#
SOURCESF   := $(foreach dir, $(MN_FIT_SUBSRCS), $(find_f_files) )
SOURCESC   := $(foreach dir, util_cc, $(find_c_files) )
SOURCESM   := $(foreach dir, math, $(find_f_files) )

#
# Typscn source files
#
TYPSCN_SOURCESF := $(foreach dir, $(TYPSCN_SUBSRCS), $(find_tf_files) )
TYPSCN_SOURCESC := $(foreach dir, $(TYPSCN_SUBSRCS), $(find_tc_files) )

#
# Help and demo macros
#
HELP_MNF := $(foreach dir, help/demo, $(find_mnf_files) )

#
# Manual LaTeX files
#
MANUAL_SOURCE := $(foreach dir, manual, $(find_man_files) )

#
# Extract just the file names
#
MN_FIT_FSOURCES := $(foreach file, $(SOURCESF), $(notdir $(file)) )
MN_FIT_CSOURCES := $(foreach file, $(SOURCESC), $(notdir $(file)) )
MN_FIT_MSOURCES := $(foreach file, $(SOURCESM), $(notdir $(file)) )
TYPSCN_FSOURCES := $(foreach file, $(TYPSCN_SOURCESF), $(notdir $(file)) )
TYPSCN_CSOURCES := $(foreach file, $(TYPSCN_SOURCESC), $(notdir $(file)) )
HELP_MNFS       := $(foreach file, $(HELP_MNF), $(notdir $(file)) )
MANUAL_SOURCES  := $(foreach file, $(MANUAL_SOURCE), $(notdir $(file)) )

#
# List of compiled files for archiving in the Library
#
COMP_FILES := $(foreach file, $(MN_FIT_FSOURCES), $(comp_file) )
COMP_FILES += $(foreach file, $(MN_FIT_CSOURCES), $(comp_file) )
MATH_FILES := $(foreach file, $(MN_FIT_MSOURCES), $(comp_file) )
TYPSCN_FILES := $(foreach file, $(TYPSCN_FSOURCES), $(comp_file) )
TYPSCN_FILES += $(foreach file, $(TYPSCN_CSOURCES), $(comp_file) )

#
# List of macros for help and demo
#
HELP_FILES := $(foreach file, $(HELP_MNFS), $(mnf_file) )

#
#------------------------------------------------------------------------------
# Phony targets
#------------------------------------------------------------------------------
#
.PHONY : all checkdirs mn_fit_lib typscn_lib typscn_lib_noread
.PHONY : mn_fit_help mn_fit_test
.PHONY : help pictures install
.PHONY : manual

#
#------------------------------------------------------------------------------
# Default target - help
# Target all - make Mn_Fit + help + test files
#------------------------------------------------------------------------------
#

help : 
	@echo "Arguments:"
	@echo " DEBUG"
	@echo "  on      Make a debug version"
	@echo "  off     Do not make a debug version"
	@echo " CERN     Location of the CERN libraries" 
	@echo " CERNVERS CERN library version"
	@echo " MACHINE  Machine type - usually use `uname -s` "
	@echo " LOCATION Site specific settings:"
	@echo "  BONN    libdir = /usr/local/share/mn_fit"
	@echo "          bindir = /usr/local/share/bin"
	@echo "  BONNDEV libdir = /home/brock/mn_fit"
	@echo "          bindir = /home/brock/scripts"
	@echo "  CERNAFS libdir = /afs/cern.ch/user/b/brock/bin"
	@echo "          bindir = /afs/cern.ch/user/b/brock/public/mn_fit"
	@echo "  DESYAFS libdir = /afs/desy.de/user/b/brock/bin"
	@echo "          bindir = /afs/desy.de/user/b/brock/public/mn_fit"
	@echo " "
	@echo "Targets:"
	@echo " all         Make everything"
	@echo " mn_fit_exe  Make a Mn_Fit executable"
	@echo " manual      Make the Mn_Fit manual"

all: checkdirs typscn_lib mn_fit_exe mn_fit_help mn_fit_test \
	pictures

#
#------------------------------------------------------------------------------
# Standard targets
#------------------------------------------------------------------------------
#
mn_fit_exe : $(EXEDIR)/mn_fit_x.exe
	@echo "Made the Mn_Fit executable:"
	@echo "    $^."

mn_fit_lib : $(MN_FIT_LIBPATH)$(A)
	@echo "Made the Mn_Fit library:"
	@echo "    $(MN_FIT_LIBPATH)$(A)."

typscn_lib : $(TYPSCN_LIBPATH)$(A)
	@echo "Made the Typscn library:"
	@echo "    $(TYPSCN_LIBPATH)$(A)."

typscn_lib_noread : $(TYPSCN_LIBPATH_NOREAD)$(A)
	@echo "Made the Typscn library without readline:"
	@echo "    $(TYPSCN_LIBPATH_NOREAD)$(A)."

mn_fit_help: $(OBJDIR)/extras/helpmke.o help_macros
	-$(RM) $(HELPDIR)/mn_fit_help.fil
	cat $(wildcard $(SRCDIR)/help/mn_fit_help/*.txt) \
	$(SRCDIR)/help/changes/changes.txt \
	$(wildcard $(SRCDIR)/help/changes/v5_0.txt) \
	$(SRCDIR)/help/changes/v4_07.txt \
	$(SRCDIR)/help/changes/v4_06.txt \
	$(SRCDIR)/help/changes/v4_05.txt \
	$(SRCDIR)/help/changes/v4_04.txt \
	$(SRCDIR)/help/changes/v4_03.txt \
	$(SRCDIR)/help/changes/v4_02.txt \
	$(SRCDIR)/help/changes/v4_01.txt \
	$(wildcard $(SRCDIR)/help/changes/v3*.txt) \
	$(wildcard $(SRCDIR)/help/changes/v2*.txt) \
	>$(HELPDIR)/mn_fit_help.fil
	-$(RM) $(HELPDIR)/minuit_help.fil
	cat $(SRCDIR)/help/minuit_help/*.txt \
	>$(HELPDIR)/minuit_help.fil
	$(CP) $(DOCDIR)/mn_news.txt $(HELPDIR)
	$(FC) $(FFLAGS) -o $(EXEDIR)/helpmke.exe $< \
	$(MN_FITLIB) $(TYPSCNLIB) $(CERNLIB)
	(MN_FIT_SYS=$(MN_FIT_SYS); export MN_FIT_SYS; \
	cd $(HELPDIR); $(EXEDIR)/helpmke.exe)

mn_fit_test: $(OBJDIR)/extras/histmke.o
	$(FC) $(FFLAGS) -o $(EXEDIR)/histmke.exe $^ \
	$(MN_FITLIB) $(TYPSCNLIB) $(CERNGLIB)
	(cd $(TDATADIR); $(EXEDIR)/histmke.exe)

igtext_exam: $(OBJDIR)/extras/igtext_exam.o
	$(FC) $(FFLAGS) -o $(EXEDIR)/igtext_exam.exe $^ \
	$(MN_FITLIB) $(CERNGLIB)
	(cd $(HELPDIR); $(EXEDIR)/igtext_exam.exe)

$(EXEDIR)/mn_latex.exe : $(OBJDIR)/extras/mn_latex.o
	$(FC) $(FFLAGS) -o $(EXEDIR)/mn_latex.exe $< \
	$(MN_FITLIB) $(TYPSCNLIB) $(CERNLIB)
	(MN_FIT=$(MN_FIT); MN_FIT_SYS=$(MN_FIT_SYS); export MN_FIT; export MN_FIT_SYS; \
	$(EXEDIR)/mn_latex.exe)

$(MANDIR)/mn_fit.tex : $(EXEDIR)/mn_latex.exe $(HELPDIR)/mn_fit_help.fil

$(MANDIR)/mn_fit.dvi : $(MANDIR)/mn_fit.tex  $(MANUAL_SOURCE)
	$(CP) $(HELPDIR)/*.eps* $(MANDIR)/figs/
	$(CP) $(SRCDIR)/manual/mnreport.cls $(MANDIR)
	$(CP) $(SRCDIR)/manual/mn_fit.bib $(MANDIR)
	(cd $(MANDIR); latex mn_fit; bibtex mn_fit; latex mn_fit; makeindex mn_fit; latex mn_fit)

#
# Only make standard files, unless someone has font problems
#
man_dvips : $(MANDIR)/mn_fit.dvi
	$(CP) $(MANDIR)/figs/font00.eps $(MANDIR)/figs/font.eps
	(cd $(MANDIR); dvips -o mn_fit.ps mn_fit)
	(cd $(MANDIR); dvips -n 1 -o mn_fit_cover.ps mn_fit)
	(cd $(MANDIR); dvips -p $(FIGSPAGE) -n $(NFIGSPAGE) -o mn_fit_figs.ps mn_fit)
	(cd $(MANDIR); dvips -p $(FONTPAGE) -n $(NFONTPAGE) -o mn_fit_font.ps mn_fit)
	(cd $(MANDIR);  pstops -q -b -w21cm -h29.7cm \
	'2:0L@.7(1w,0.03h)+1L@.7(1w,0.47h)' \
	mn_fit.ps mn_fit_2ppp.ps)

man_pdf : $(MANDIR)/mn_fit.dvi
	(cd $(MANDIR); ps2pdf mn_fit.ps; ps2pdf mn_fit_2ppp.ps)
	(cd $(MANDIR); ps2pdf mn_fit_cover.ps; ps2pdf mn_fit_figs.ps; ps2pdf mn_fit_font.ps)

man_gzip : $(MANDIR)/mn_fit.ps
	(cd $(MANDIR); gzip -f *.ps)

latex2html : $(MANDIR)/mn_fit.dvi
	(cd $(MANDIR); latex2html -t 'The Mn_Fit Manual' -auto_navigation \
	-nomath -html_version 4.0,math,frame \
	-mkdir -dir mn_fit_html -local_icons \
	-no_reuse mn_fit)

help_macros : $(HELP_FILES)
	@echo "Made the demo and help macros"

pictures : 
	echo "none"                     >$(TMPDIR)/mn_fit_pictures.mnf
	echo "exec demo_man"           >>$(TMPDIR)/mn_fit_pictures.mnf
	echo "exec pictures epost eps" >>$(TMPDIR)/mn_fit_pictures.mnf
	echo "1"                       >>$(TMPDIR)/mn_fit_pictures.mnf
	echo "1"                       >>$(TMPDIR)/mn_fit_pictures.mnf
	echo "1"                       >>$(TMPDIR)/mn_fit_pictures.mnf
	echo "1"                       >>$(TMPDIR)/mn_fit_pictures.mnf
	echo "1"                       >>$(TMPDIR)/mn_fit_pictures.mnf
	echo "1"                       >>$(TMPDIR)/mn_fit_pictures.mnf
	echo "1"                       >>$(TMPDIR)/mn_fit_pictures.mnf
	echo "exit"                    >>$(TMPDIR)/mn_fit_pictures.mnf
	(MN_FIT=$(MN_FIT); MN_FIT_SYS=$(MN_FIT_SYS); export MN_FIT; export MN_FIT_SYS; \
	cd $(HELPDIR); $(EXEDIR)/mn_fit_x.exe <$(TMPDIR)/mn_fit_pictures.mnf)
	$(CP) $(HELPDIR)/font.eps $(HELPDIR)/font00.eps
	$(CP) $(wildcard $(FIGDIR)/*.ps) $(HELPDIR)
	$(CP) $(wildcard $(FIGDIR)/*.eps*) $(HELPDIR)

ps_char_all : 
	echo "none"                        >$(TMPDIR)/mn_fit_ps_char.mnf
	echo "exec ps_char_all epost eps" >>$(TMPDIR)/mn_fit_ps_char.mnf
	echo "exit"                       >>$(TMPDIR)/mn_fit_ps_char.mnf
	(MN_FIT=$(MN_FIT); MN_FIT_SYS=$(MN_FIT_SYS); export MN_FIT;  export MN_FIT_SYS; \
	cd $(HELPDIR); $(EXEDIR)/mn_fit_x.exe <$(TMPDIR)/mn_fit_ps_char.mnf)
	$(CP) $(wildcard $(HELPDIR)/ps_char*.ps) $(FIGDIR)
	$(CP) $(wildcard $(HELPDIR)/ps_char*.eps*) $(FIGDIR)

manual : igtext_exam help_macros pictures man_dvips man_pdf man_gzip

checkdirs :
	@echo "Checking that all necesary directories exist"
	@test -d $(MN_FIT_SYS)      || $(MKDIR) $(MN_FIT_SYS)
	@test -d $(HELPDIR)         || $(MKDIR) $(HELPDIR)
	@test -d $(TESTDIR)         || $(MKDIR) $(TESTDIR)
	@test -d $(TDATADIR)        || $(MKDIR) $(TDATADIR)
	@test -d $(MANDIR)          || $(MKDIR) $(MANDIR)
	@test -d $(MANDIR)/figs     || $(MKDIR) $(MANDIR)/figs
	@test -d $(GENDIR)          || $(MKDIR) $(GENDIR)
	@test -d $(GENDIR)/programs || $(MKDIR) $(GENDIR)/programs
	@test -d $(GENDIR)/extras   || $(MKDIR) $(GENDIR)/extras
	@test -d $(GENDIR)/typscn   || $(MKDIR) $(GENDIR)/typscn
	@test -d $(OBJDIR)          || $(MKDIR) $(OBJDIR)
	@test -d $(OBJDIR)/programs || $(MKDIR) $(OBJDIR)/programs
	@test -d $(OBJDIR)/extras   || $(MKDIR) $(OBJDIR)/extras
	@test -d $(OBJDIR)/typscn   || $(MKDIR) $(OBJDIR)/typscn
	@test -d $(LIBDIR)          || $(MKDIR) $(LIBDIR)
	@test -d $(EXEDIR)          || $(MKDIR) $(EXEDIR)

mn_fit_date :
	(DATETIME=`date +'%Y/%m/%d %H:%M'`; \
	STRING="s|^      date =.*|      date = \'Date: $$DATETIME\'|"; \
	sed -e "$$STRING" \
	 $(SRCDIR)/machine/m_start.fpp >$(SRCDIR)/machine/m_start.fpp-new; \
	mv $(SRCDIR)/machine/m_start.fpp $(SRCDIR)/machine/m_start.fpp-old; \
	mv $(SRCDIR)/machine/m_start.fpp-new $(SRCDIR)/machine/m_start.fpp)

install :
	sed 's|XXX_MN_FIT_ENV_XXX|$(libdir)|' \
	 $(SRCDIR)/bin/mn_fit >$(bindir)/mn_fit
	chmod a+x $(bindir)/mn_fit
	@test -d $(libdir)     || $(MKDIR)    $(libdir)
	@test -d $(libdir)/exe || $(MKDIR)    $(libdir)/exe
	$(CP) $(MN_FIT_SYS)/exe/mn_fit_x.exe $(libdir)/$(MACHINE)/exe/
	$(CP) -r $(MN_FIT_SYS)/help           $(libdir)/$(MACHINE)
	$(CP) -r $(MN_FIT_SYS)/lib            $(libdir)/$(MACHINE)
	$(CP) -r $(MN_FIT_SYS)/test_data      $(libdir)/$(MACHINE)
	$(CP) -r $(MN_FIT)/test               $(libdir)
#
#------------------------------------------------------------------------------
# The real targets start here
#------------------------------------------------------------------------------
#
$(EXEDIR)/mn_fit_x.exe : $(OBJDIR)/programs/mn_main_k.o $(MN_FIT_LIBPATH)$(A) $(MATH_LIBPATH)$(A) $(TYPSCN_LIBPATH)$(A)
	$(FC) $(FFLAGS) -o $@ $(OBJDIR)/programs/mn_main_k.o \
	$(MN_FITLIB) $(TYPSCNLIB) $(MN_MATHLIB) $(CERNGLIB)

$(MN_FIT_LIBPATH)$(A) : $(MN_FIT_LIBPATH)$(A)( $(COMP_FILES) ) 
	$(RANLIB) $@

$(MATH_LIBPATH)$(A) : $(MATH_LIBPATH)$(A)( $(MATH_FILES) ) 
	$(RANLIB) $@

$(TYPSCN_LIBPATH)$(A) : $(TYPSCN_LIBPATH)$(A)( $(TYPSCN_FILES) ) 
	$(RANLIB) $@

$(TYPSCN_LIBPATH_NOREAD)$(A) : $(TYPSCN_LIBPATH_NOREAD)$(A)( $(TYPSCN_FILES) ) 
	$(RANLIB) $@

$(MN_FIT_LIBPATH)$(A)(%$O) : %.fpp
	@echo "-------------- Using the Mn_Fit Unix FPP-to-Lib rule"
	$(FPP) $(FPPFLAGS) $< -o $(GENDIR)/$*.f
	$(FC) $(FFLAGS) -c -o $(OBJDIR)/$*$O $(GENDIR)/$*.f
	$(AR) $(ARFLAGS) $@ $(OBJDIR)/$*$O
	$(RMI) $(GENDIR)/$*.f
	$(RMI) $(OBJDIR)/$*$O

$(MN_FIT_LIBPATH)$(A)(%$O) : %.c
	@echo "-------------- Using the Mn_Fit Unix c-to-Lib rule"
	$(CC) $(CFLAGS) -c -o $(OBJDIR)/$*$O $^
	$(AR) $(ARFLAGS) $@ $(OBJDIR)/$*$O
	$(RMI) $(OBJDIR)/$*$O

$(MATH_LIBPATH)$(A)(%$O) : $(SRCDIR)/math/%.fpp
	@echo "-------------- Using the Math Unix FPP-to-Lib rule"
	$(FPP) $(FPPFLAGS) $< -o $(GENDIR)/$*.f
	$(FC) $(FFLAGS) -c -o $(OBJDIR)/$*$O  $(GENDIR)/$*.f
	$(AR) $(ARFLAGS) $@ $(OBJDIR)/$*$O
	$(RMI) $(OBJDIR)/$*$O

$(TYPSCN_LIBPATH)$(A)(%$O) : %.fpp
	@echo "-------------- Using the TYPSCN Unix FPP-to-Lib rule"
	$(FPP) $(FPPFLAGS) -DREADLINE -I./typscn/inc $< -o $(GENDIR)/typscn/$*.f
	$(FC) $(FFLAGS) -c -o $(OBJDIR)/typscn/$*$O $(GENDIR)/typscn/$*.f
	$(AR) $(ARFLAGS) $@ $(OBJDIR)/typscn/$*$O
	$(RMI) $(GENDIR)/typscn/$*.f
	$(RMI) $(OBJDIR)/typscn/$*$O

$(TYPSCN_LIBPATH_NOREAD)$(A)(%$O) : %.fpp
	@echo "-------------- Using the TYPSCN Unix FPP-to-Lib rule without readline"
	$(FPP) $(FPPFLAGS) -I./typscn/inc $< -o $(GENDIR)/typscn/$*.f
	$(FC) $(FFLAGS) -c -o $(OBJDIR)/typscn/$*$O $(GENDIR)/typscn/$*.f
	$(AR) $(ARFLAGS) $@ $(OBJDIR)/typscn/$*$O
	$(RMI) $(GENDIR)/typscn/$*.f
	$(RMI) $(OBJDIR)/typscn/$*$O

$(TYPSCN_LIBPATH)$(A)(%$O) : %.c
	@echo "-------------- Using the Typscn Unix c-to-Lib rule"
	$(CC) $(CFLAGS) -DREADLINE -c -o $(OBJDIR)/typscn/$*$O $^
	$(AR) $(ARFLAGS) $@ $(OBJDIR)/typscn/$*$O
	$(RMI) $(OBJDIR)/typscn/$*$O

$(TYPSCN_LIBPATH_NOREAD)$(A)(%$O) : %.c
	@echo "-------------- Using the Typscn Unix c-to-Lib rule without readlinie"
	$(CC) $(CFLAGS) -c -o $(OBJDIR)/typscn/$*$O $^
	$(AR) $(ARFLAGS) $@ $(OBJDIR)/typscn/$*$O
	$(RMI) $(OBJDIR)/typscn/$*$O

$(OBJDIR)/extras/%$O : %.fpp
	@echo "-------------- Using the Extras Unix F77 fpp-rule"
	$(FPP) $(FPPFLAGS) $< -o $(GENDIR)/extras/$*.f
	$(FC) $(FFLAGS) -c -o $@ $(GENDIR)/extras/$*.f

$(OBJDIR)/programs/%$O : $(SRCDIR)/programs/%.fpp
	$(FPP) $(FPPFLAGS) $< -o $(GENDIR)/programs/$*.f
	$(FC) $(FFLAGS) -c -o $@ $(GENDIR)/programs/$*.f

$(OBJDIR)/programs/%$O : $(SRCDIR)/programs/%.c
	$(CC) $(CFLAGS) -c -o $@ $<

$(HELPDIR)/%.mnf : %.mnf
	@echo "-------------- Making a help or demo macro"
	$(CPPMNF) $(CPPMNFFLAGS) $< -o $@

#_____________________________________________________________________________
#
# Cleaning up
#_____________________________________________________________________________
#
.PHONY : cleanhelp cleanexe cleanlib cleanobj cleangen cleantypscn
.PHONY : cleanman

cleanexe :
	-$(RM) $(EXEDIR)/*.exe

cleanlib :
	-$(RM) $(MN_FIT_LIBPATH)$(A)
	-$(RM) $(MATH_LIBPATH)$(A)

cleanobj :
	-$(RM) $(OBJDIR)/*.o
	-$(RM) $(OBJDIR)/programs/*.o

cleangen :
	-$(RM) $(GENDIR)/*.f
	-$(RM) $(GENDIR)/programs/*.f

cleantypscn :
	-$(RM) $(TYPSCN_LIBPATH)$(A)
	-$(RM) $(OBJDIR)/typscn/*.o
	-$(RM) $(GENDIR)/typscn/*.f

cleanhelp :
	-$(RM) $(EXEDIR)/helpmke.exe
	-$(RM) $(OBJDIR)/extras/helpmke.o
	-$(RM) $(GENDIR)/extras/helpmke.f
	-$(RM) $(HELPDIR)/*.fil
	-$(RM) $(HELPDIR)/*.txt
	-$(RM) $(HELPDIR)/*.mnf
	-$(RM) $(HELPDIR)/*.eps*
	-$(RM) $(HELPDIR)/*.ps

cleantest :
	-$(RM) $(EXEDIR)/histmke.exe
	-$(RM) $(OBJDIR)/extras/histmke.o
	-$(RM) $(GENDIR)/extras/histmke.f
	-$(RM) $(TDATADIR)/*.his
	-$(RM) $(TDATADIR)/*.mnd
	-$(RM) $(TDATADIR)/*.mnh

cleanman :
	-$(RM) $(EXEDIR)/igtext_exam.exe
	-$(RM) $(OBJDIR)/extras/igtext_exam.o
	-$(RM) $(GENDIR)/extras/igtext_exam.f
	-$(RM) $(EXEDIR)/mn_latex.exe
	-$(RM) $(OBJDIR)/extras/mn_latex.o
	-$(RM) $(GENDIR)/extras/mn_latex.f
	-$(RM) $(MANDIR)/mn_fit.tex
	-$(RM) $(MANDIR)/mn_fit.bib
	-$(RM) $(MANDIR)/*.ps*
	-$(RM) $(MANDIR)/*.pdf
	-$(RM) $(MANDIR)/*.aux
	-$(RM) $(MANDIR)/*.bbl
	-$(RM) $(MANDIR)/*.blg
	-$(RM) $(MANDIR)/*.dvi
	-$(RM) $(MANDIR)/*.idx
	-$(RM) $(MANDIR)/*.ilg
	-$(RM) $(MANDIR)/*.ind
	-$(RM) $(MANDIR)/*.lof
	-$(RM) $(MANDIR)/*.log
	-$(RM) $(MANDIR)/*.toc
	-$(RM) $(MANDIR)/figs/*.eps*
	-$(RM) $(MANDIR)/mn_fit_html/*

clean : cleanexe cleanlib cleanobj cleangen cleantypscn cleanhelp cleantest \
	cleanman

#_____________________________________________________________________________
#
# Targets to debug the Make stuff.
#_____________________________________________________________________________
#
.PHONY : testcomp testlibrules
testcomp :
	@echo "The Compiled files for Mn_Fit are the following:"
	@echo $(COMP_FILES)
	@echo ""
	@echo "The Compiled files for Typscn are the following:"
	@echo $(TYPSCN_FILES)
	@echo ""
#
testlibrules :
	@echo "VPATH = $(VPATH)."
	@echo "  "
	@echo "The MN_FIT_LIBPATH.A = $(MN_FIT_LIBPATH)$(A)."
	@echo "  "
	@echo "The COMP_FILES = $(COMP_FILES)."
	@echo "  "
	@echo "The TYPSCN_LIBPATH.A = $(TYPSCN_LIBPATH)$(A)."
	@echo "  "
	@echo "The TYPSCN_FILES = $(TYPSCN_FILES)."
	@echo "  "
#
testtypscn :
	@echo "The TYPSCN_LIBPATH.A = $(TYPSCN_LIBPATH)$(A)."
	@echo "  "
	@echo "The TYPSCN_SUBSRCS = $(TYPSCN_SUBSRCS)."
	@echo "  "
	@echo "The TYPSCN_SOURCESF = $(TYPSCN_SOURCESF)."
	@echo "  "
	@echo "The TYPSCN_SOURCESC = $(TYPSCN_SOURCESC)."
	@echo "  "
	@echo "The TYPSCN_FSOURCES = $(TYPSCN_FSOURCES)."
	@echo "  "
	@echo "The TYPSCN_CSOURCES = $(TYPSCN_CSOURCES)."
	@echo "  "
	@echo "The TYPSCN_FILES = $(TYPSCN_FILES)."
	@echo "  "
#
testhelp :
	@echo "The help and demo macros are:"
	@echo $(HELP_MNF)
	@echo $(HELP_MNFS)
	@echo $(HELP_FILES)
	@echo ""
#
testmanual :
	@echo "The manual source files:"
	@echo "MANUAL_SOURCE:"
	@echo $(MANUAL_SOURCE)
	@echo "MANUAL_SOURCES:"
	@echo $(MANUAL_SOURCES)
	@echo ""
