################################################################################
# dpuser Makefile
################################################################################
# Type one of the following lines:
#   make                    same as 'make release'
#   make release            (static, 32/64-bit autodetect)
#   make release_shared     WIN only (shared, 32/64-bit autodetect)
#   make debug              (static, 32/64-bit autodetect)
#   make debug_shared       WIN only (shared, 32/64-bit autodetect)
#   make CYGWIN=-y          WIN only, target for CYGWIN-environment
#   make clean              to clean up the project
#   make revision           creates the revision-string
#   make dist               LINUX/MACOSX only to create a distribution as
#                           tar.gz-file, calls automatically the revision-target
#                           (do a checkout to a new location before, since all
#                           .svn-folders will be deleted!)
#
#
#   make parsers PLATFORM=LINUX (or MACOSX or WIN)
#                          to create just the parsers and lexxers for dpuser,
#                          dpuser2c & idl2c
#   make dpuser2c_header PLATFORM=LINUX (or MACOSX or WIN)
#                          to create just the dpuser2c.h-file
#
# In dpuser a static target means that all libraries and functionality is linked
# statically into the created binary.
# A shared target means that some dpuser-functionality is moved to a dll
# (external libraries are still linked statically).
#
################################################################################
RM          = rm -f
SED         = sed
CC          = gcc
CXX         = g++
LINK        = g++
QF          =
CYGWIN      =

PGPLOT      = -DHAS_PGPLOT
DPPGPLOT    = -DHAS_DPPGPLOT

DEFINES     = $(PGPLOT) $(DPPGPLOT) -D$(OS)
ifeq ($(QF), -qt)
   DEFINES  += -DDPQT -DNO_READLINE
endif
ifeq ($(CYGWIN), -y)
   DEFINES  += -DCYGWIN
endif

CFLAGS      = -pipe -O2 -D_REENTRANT -w $(DEFINES)
CXXFLAGS    = -pipe -O2 -D_REENTRANT -w $(DEFINES)
INCPATH     = -I. -I../utils -I../libfits -I../include -Iparser -I.

DLL_OBJECTS = utils.o \
              dpuser_utils.o \
              dpuser.procs.o \
              eso.o \
              functions.o \
              tools.o \
              y.dpuser2c.o \
              y.idl2c.o \
              lex.dpuser2c.o \
              lex.idl2c.o \
              procedures.o \
              dpuserType.o \
              dpstring.o \
              dpstringlist.o \
              regex_sr.o \
              mpfit.o \
              3d_stuff.o \
              cube.o \
              dpheader.o \
              fits.o \
              fits_cube.o \
              fits_dpl.o \
              fits_exc.o \
              fits_file.o \
              fits_filters.o \
              fits_funcs.o \
              fits_mem.o \
              fits_ops.o \
              fits_procs.o \
              fits_range.o \
              fits_red.o \
              JulianDay.o \
              math_utils.o \
              platform.o \
              dpComplex.o \
              fitting.o \
              voronoi.o \
              fits_logic.o \
              astrolib.o \
              primes.o

ifeq ($(PGPLOT), -DHAS_PGPLOT)
   ifeq ($(DPPGPLOT), -DHAS_DPPGPLOT)
      DLL_OBJECTS += cpg3d.o
   endif
endif

EXE_OBJECTS = dpuser.o \
              dpuser.yacchelper.o \
              dpuser_funcs.o \
              y.tab.o \
              dpuser.input.o \
              dpuser.pgplot.o \
              lex.yy.o \
              svn_revision.o \
              misc.o

################################################################################
# Platform-specific defines

ifeq ($(HOMEDRIVE), C:)
   OS             = WIN
   RM             = del
   SED_INPLACE    = ../bin/WIN/sed.exe -i
   
   # didn't manage to do this as onliner like in the unix-case, pipe doesn't work...
   REV_NR := $(shell svnversion -c ..)
   $(shell @echo $(REV_NR) > _bbb.txt)
   REV_NR := $(shell sed -e 's/[MS]//g' -e 's/^[[:digit:]]*://' _bbb.txt)
   $(shell del _bbb.txt)

   ifndef $(ARCH)
   # didn't manage to do this as onliner like in the unix-case, pipe doesn't work...
      ARCH := $(shell wmic os get osarchitecture)
      $(shell @echo $(ARCH) > _bbb.txt)
      ARCH := $(shell sed  -e "s/OSArchitecture//g" -e "s/ //g" -e "s/-bit//g" -e "s/-Bit//g" _bbb.txt)
      $(shell del _bbb.txt)
   endif

   DEFINES  += -DHAVE_MINGW32
   
   ifeq ($(CYGWIN), -y)
      LIBS     = /usr/lib/libreadline.a \
                 /usr/lib/libncurses.a \
                 ../lib/WIN32.cygwin/libgsl.a

      DLL_LIBS = ../lib/WIN32.cygwin/libgsl.a \
                 ../lib/WIN32.cygwin/libgslcblas.a \
                 ../lib/WIN32.cygwin/librfftw.a \
                 ../lib/WIN32.cygwin/libfftw.a \
                 ../lib/WIN32.cygwin/libcpgplot.a \
                 ../lib/WIN32.cygwin/libpgplot.a \
                 /usr/lib/libz.a \
                 /usr/lib/libpng.a \
                 ../lib/WIN32.cygwin/libxpa.a \
                 -lg2c \
                 -lgdi32
   else
      LIBS     = ../lib/$(OS)$(ARCH)/libgsl.a \
                 ../lib/$(OS)$(ARCH)/libreadline.a \
                 ../lib/$(OS)$(ARCH)/libtermcap.a

      DLL_LIBS = ../lib/$(OS)$(ARCH)/libgsl.a \
                 ../lib/$(OS)$(ARCH)/libgslcblas.a \
                 ../lib/$(OS)$(ARCH)/librfftw.a \
                 ../lib/$(OS)$(ARCH)/libfftw.a \
                 ../lib/$(OS)$(ARCH)/libcpgplot.a \
                 ../lib/$(OS)$(ARCH)/libpgplot.a \
                 ../lib/$(OS)$(ARCH)/libz.a \
                 ../lib/$(OS)$(ARCH)/libpng.a \
                 ../lib/$(OS)$(ARCH)/libxpa.a \
                 ../lib/$(OS)$(ARCH)/libf2c.a \
                 -lgdi32 \
                 -lws2_32
				 
      LDFLAG      =
   endif
	
   DEL_STRING     = 2d
else
   REV_NR := $(shell svnversion -c .. | sed -e 's/[MS]//g' -e 's/^[[:digit:]]*://')

   ifeq ($(shell uname -m), x86_64)
      ARCH = 64
   else
      ARCH = 32
   endif

   ifeq ($(TERM_PROGRAM), Apple_Terminal)
      OS          = MACOSX
      ifeq ($(ARCH), 32)
         LDFLAG      = -arch i386
         CXXFLAGS    := -arch i386 $(CXXFLAGS)
      else
         # -arch x86_64
         LDFLAG      = 
      endif
      SED_INPLACE = sed -i ''
      LIBS        = ../lib/$(OS)$(ARCH)/libxpa.a \
                    ../lib/$(OS)$(ARCH)/librfftw.a \
                    ../lib/$(OS)$(ARCH)/libfftw.a \
                    ../lib/$(OS)$(ARCH)/libcpgplot.a \
                    ../lib/$(OS)$(ARCH)/libpgplot.a \
                    ../lib/$(OS)$(ARCH)/libpng.a \
                    ../lib/$(OS)$(ARCH)/libgsl.a \
                    ../lib/$(OS)$(ARCH)/libgslcblas.a \
                    ../lib/$(OS)$(ARCH)/libreadline.a \
                    ../lib/$(OS)$(ARCH)/libz.a \
                    ../lib/$(OS)$(ARCH)/libncurses.a \
                    ../lib/$(OS)$(ARCH)/libf2c.a \
                    -L/opt/X11/lib \
                    -lX11

   else
      OS          = LINUX
      LDFLAG      =
      SED_INPLACE = sed -i''
      LIBS        = -rdynamic \
                    ../lib/$(OS)$(ARCH)/libxpa.a \
                    ../lib/$(OS)$(ARCH)/librfftw.a \
                    ../lib/$(OS)$(ARCH)/libfftw.a \
                    ../lib/$(OS)$(ARCH)/libcpgplot.a \
                    ../lib/$(OS)$(ARCH)/libgsl.a \
                    ../lib/$(OS)$(ARCH)/libgslcblas.a \
                    ../lib/$(OS)$(ARCH)/libpgplot.a \
                    ../lib/$(OS)$(ARCH)/libf2c.a \
                    ../lib/$(OS)$(ARCH)/libz.a \
                    ../lib/$(OS)$(ARCH)/libpng.a \
                    ../lib/$(OS)$(ARCH)/libreadline.a \
                    ../lib/$(OS)$(ARCH)/libncurses.a \
                    -lX11 -ldl -lxcb -lpthread -lXdmcp -lXau

   endif
   TARDIR     := $(shell echo $(PWD) | sed 's|/dpuser$$||g' | sed 's|\/.*\/||g')
   DEL_STRING = '2d'
endif

################################################################################
# main targets
all: release

##### RELEASE TARGETS #####
ifeq ($(OS), WIN) # start WIN
ifeq ($(CYGWIN), -y)
release:
	$(MAKE) static "TARGET_WIN = dpuserCyg.exe"
release_shared:
	$(MAKE) all_dp "TARGET_WIN = dpuserCyg.exe" "TARGET_DLL = dpuserCyg.dll"
else
release:
	$(MAKE) static "TARGET_WIN = dpuser.exe"
release_shared:
	$(MAKE) all_dp "TARGET_WIN = dpuser.exe" "TARGET_DLL = dpuser.dll"
endif # end WIN
else # start LINUX & MACOSX
release:
	$(MAKE) static "TARGET_LINUX = dpuser"
endif # end LINUX & MACOSX

##### DEBUG TARGETS #####
ifeq ($(OS), WIN) # start WIN
ifeq ($(CYGWIN), -y)
debug:
	$(MAKE) static "TARGET_WIN = dpuserCygD.exe" "CFLAGS = $(CFLAGS) -g -DDBG" "CXXFLAGS = $(CXXFLAGS) -g -DDBG"
debug_shared:
	$(MAKE) shared "TARGET_WIN = dpuserCygD.exe" "TARGET_DLL = dpuserCygD.dll" "CFLAGS = $(CFLAGS) -g -DDBG" "CXXFLAGS = $(CXXFLAGS) -g -DDBG"
else
debug:
	$(MAKE) static "TARGET_WIN = dpuserD.exe" "CFLAGS = $(CFLAGS) -g -DDBG" "CXXFLAGS = $(CXXFLAGS) -g -DDBG"
debug_shared:
	$(MAKE) shared "TARGET_WIN = dpuserD.exe" "TARGET_DLL = dpuserD.dll" "CFLAGS = $(CFLAGS) -g -DDBG" "CXXFLAGS = $(CXXFLAGS) -g -DDBG"
endif # end WIN
else # start LINUX & MACOSX
debug:
	$(MAKE) static "TARGET_LINUX = dpuserD" "CFLAGS = $(CFLAGS) -g -DDBG" "CXXFLAGS = $(CXXFLAGS) -g -DDBG"
endif # end LINUX & MACOSX

################################################################################
# sub targets

ifeq ($(OS), WIN) # start WIN
static: revision dpuser2c_header parsers $(DLL_OBJECTS) $(EXE_OBJECTS)
	$(LINK) $(LDFLAG) -static -static-libgcc -static-libstdc++ -Wl,--enable-runtime-pseudo-reloc -o $(TARGET_WIN) $(DLL_OBJECTS) $(EXE_OBJECTS) $(DLL_LIBS) $(LIBS)
shared: revision dpuser2c_header parsers
	$(MAKE) $(MULTIPROZGEIL) $(TARGET_DLL)
	$(MAKE) $(MULTIPROZGEIL) $(TARGET_WIN)
else # end WIN, start LINUX & MACOSX
static: revision dpuser2c_header parsers
	$(MAKE) $(MULTIPROZGEIL) $(TARGET_LINUX)
endif # end LINUX & MACOSX

$(TARGET_DLL): $(DLL_OBJECTS)
	g++ -shared -o $(TARGET_DLL) $(DLL_OBJECTS) $(DLL_LIBS)

$(TARGET_WIN): $(EXE_OBJECTS)
	$(LINK) -Wl,--enable-runtime-pseudo-reloc -o $(TARGET_WIN) $(EXE_OBJECTS) $(LIBS) $(TARGET_DLL)

$(TARGET_LINUX): $(DLL_OBJECTS) $(EXE_OBJECTS)
	$(LINK) $(LDFLAG) -o $(TARGET_LINUX) $(DLL_OBJECTS) $(EXE_OBJECTS) $(LIBS)

# creates dpuser2c.h
dpuser2c_header:
	$(MAKE) -C dpuser2c header PLATFORM=$(OS)

# Builds parser-, dpuser2c & idl2c-source-files
parsers: parsers_qf
	$(MAKE) -C parser PLATFORM=$(OS)

parsers_qf:
	$(MAKE) -C dpuser2c PLATFORM=$(OS)
	$(MAKE) -C idl2c PLATFORM=$(OS)

clean: clean_qf
	-$(RM) $(EXE_OBJECTS)
	-$(RM) $(DLL_OBJECTS)
	$(if $(OS:WIN=), \
		-$(RM) dpuser dpuserD \
	, \
		-$(RM) dpuser.exe dpuserD.exe dpuserCyg.exe dpuserCygD.exe \
		-$(RM) dpuser.dll dpuserD.dll dpuserCyg.dll dpuserCygD.dll\
	)

# this target is called by QFitsView 'make clean'
clean_qf: FORCE
	$(MAKE) -C parser clean  PLATFORM=$(OS)
	$(MAKE) -C dpuser2c clean PLATFORM=$(OS)
	$(MAKE) -C idl2c clean PLATFORM=$(OS)

FORCE:

################################################################################
# Updates the revision in parser/svn_revision.h
revision:
ifeq ($(OS), WIN)
	echo #include "svn_revision.h" > parser/svn_revision.cpp
	echo. >> parser/svn_revision.cpp
	echo char* GetRevString() { return "Rev. $(REV_NR)"; } >> parser/svn_revision.cpp
else
	@echo '#include "svn_revision.h"' > parser/svn_revision_new.cpp; \
	echo '' >> parser/svn_revision_new.cpp; \
	echo 'char* GetRevString() { return "Rev. $(REV_NR)"; }' >> parser/svn_revision_new.cpp; \
	cmp -s parser/svn_revision.cpp parser/svn_revision_new.cpp; \
	RETVAL=$$?; \
	if [ $$RETVAL -ne 0 ]; then \
		mv parser/svn_revision_new.cpp parser/svn_revision.cpp; \
	fi
endif
	@echo "Revision number: "$(REV_NR)


################################################################################
# Creates a distribution
ifeq ($(OS), WIN) # start WIN
dist:
	@echo "*************************************************************"
	@echo "ERROR: Distribution can only be generated under LINUX or MAC!"
	@echo "*************************************************************"
else # end WIN, start LINUX & MACOSX
dist: clean
	cd ../QFitsView && make -i clean
	make revision
	find .. -type d -name ".svn" -exec rm -rf {} +
	find .. -type d -name "obsolete" -exec rm -rf {} +
	find .. -regextype posix-extended -regex '.*\.(a|lib|dll|exe)' -exec rm {} +
	rm -rf ../include/*
	rm -rf ../bin/*
	rm -rf ../external/*z
	tar cfvz ../../dpuser-r$(REV_NR).tar.gz ../../$(TARDIR)
endif # end LINUX & MACOSX

################################################################################
# Compile rules
dpuser.o:              dpuser.cpp \
                       dpuser.h \
                       dpuser.yacchelper.h \
                       dpuser.procs.h \
                       dpuser.pgplot.h \
                       dpuser_funcs.h \
                       dpuser_utils.h \
                       dpuser2c/dpuserType.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o dpuser.o dpuser.cpp

dpuser.input.o:        dpuser.input.cpp \
                       dpuser.h \
                       dpuser2c/tools.h \
                       dpuser2c/dpuserType.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o dpuser.input.o dpuser.input.cpp

dpuser.pgplot.o:       dpuser.pgplot.cpp \
                       dpuser.h \
                       dpuser.pgplot.h \
                       dpuser.procs.h \
                       dpuser_utils.h \
                       dpuser.yacchelper.h \
                       dpuser_funcs.h \
                       dpuser2c/dpuserType.h \
                       dpuser2c/procedures.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o dpuser.pgplot.o dpuser.pgplot.cpp

dpuser.procs.o:        dpuser.procs.cpp \
                       dpuser.h \
                       dpuser_funcs.h \
                       dpuser_utils.h \
                       dpuser.pgplot.h \
                       dpuser2c/dpuserType.h \
                       dpuser2c/procedures.h \
                       doc/help.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o dpuser.procs.o dpuser.procs.cpp

dpuser.yacchelper.o:    dpuser.yacchelper.cpp \
                        dpuser.h \
                        dpuser_funcs.h \
                        dpuser.pgplot.h \
                        dpuser_utils.h \
                        dpuser2c/dpuserType.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o dpuser.yacchelper.o dpuser.yacchelper.cpp

dpuser_funcs.o:         dpuser_funcs.cpp \
                        dpuser.h \
                        dpuser_funcs.h \
                        dpuser.pgplot.h \
                        dpuser_utils.h \
                        dpuser.yacchelper.h \
                        dpuser2c/dpuserType.h \
                        dpuser2c/functions.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o dpuser_funcs.o dpuser_funcs.cpp

dpuser_utils.o:         dpuser_utils.cpp \
                        dpuser_utils.h \
                        dpuser2c/utils.h \
                        dpuser.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o dpuser_utils.o dpuser_utils.cpp

lex.yy.o:               parser/lex.yy.cpp \
                        dpuser.h \
                        dpuser.yacchelper.h \
                        dpuser.pgplot.h \
                        dpuser_funcs.h \
                        dpuser_utils.h \
                        dpuser2c/dpuserType.h \
                        parser/y.tab.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o lex.yy.o parser/lex.yy.cpp

y.tab.o:                parser/y.tab.cpp \
                        dpuser.h \
                        dpuser.yacchelper.h \
                        dpuser.procs.h \
                        dpuser.pgplot.h \
                        dpuser_funcs.h \
                        dpuser_utils.h \
                        dpuser2c/dpuserType.h \
                        parser/svn_revision.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o y.tab.o parser/y.tab.cpp

svn_revision.o:         parser/svn_revision.cpp \
                        parser/svn_revision.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o svn_revision.o parser/svn_revision.cpp

dpuserType.o:           dpuser2c/dpuserType.cpp \
                        dpuser.h \
                        dpuser_utils.h \
                        dpuser2c/dpuserType.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o dpuserType.o dpuser2c/dpuserType.cpp

utils.o:                dpuser2c/utils.cpp \
                        dpuser.h \
                        dpuser_funcs.h \
                        dpuser2c/dpuserType.h \
                        dpuser2c/utils.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o utils.o dpuser2c/utils.cpp

eso.o:                  dpuser2c/eso.cpp \
                        dpuser2c/eso.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o eso.o dpuser2c/eso.cpp

functions.o:            dpuser2c/functions.cpp \
                        dpuser.h \
                        dpuser_utils.h \
                        dpuser.yacchelper.h \
                        dpuser_funcs.h \
                        dpuser2c/functions.h \
                        dpuser2c/dpuserType.h \
                        dpuser2c/utils.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o functions.o dpuser2c/functions.cpp

procedures.o:           dpuser2c/procedures.cpp \
                        dpuser.h \
                        dpuser_utils.h \
                        dpuser.procs.h \
                        dpuser.yacchelper.h \
                        dpuser2c/procedures.h \
                        dpuser2c/dpuserType.h \
                        dpuser2c/functions.h \
                        dpuser2c/utils.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o procedures.o dpuser2c/procedures.cpp

y.dpuser2c.o:           dpuser2c/y.dpuser2c.cpp \
                        dpuser.h \
                        dpuser2c/tools.h \
                        dpuser2c/dpuserType.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o y.dpuser2c.o dpuser2c/y.dpuser2c.cpp

lex.dpuser2c.o:         dpuser2c/lex.dpuser2c.cpp \
                        dpuser.h \
                        dpuser_utils.h \
                        dpuser2c/tools.h \
                        dpuser2c/dpuserType.h \
                        dpuser2c/y.tab.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o lex.dpuser2c.o dpuser2c/lex.dpuser2c.cpp

y.idl2c.o:              idl2c/y.idl2c.cpp \
                        dpuser.h \
                        dpuser2c/tools.h \
                        dpuser2c/dpuserType.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o y.idl2c.o idl2c/y.idl2c.cpp

lex.idl2c.o:            idl2c/lex.idl2c.cpp \
                        dpuser.h \
                        dpuser_utils.h \
                        dpuser2c/tools.h \
                        dpuser2c/dpuserType.h \
                        idl2c/y.tab.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o lex.idl2c.o idl2c/lex.idl2c.cpp

tools.o:                dpuser2c/tools.cpp \
                        dpuser.h \
                        dpuser_funcs.h \
                        dpuser2c/tools.h \
                        dpuser2c/dpuserType.h \
                        dpuser2c/dpuser2c.h \
                        dpuser2c/functions.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o tools.o dpuser2c/tools.cpp

cpg3d.o:                ../utils/cpg3d.c 
	$(CC) -c $(CXXFLAGS) $(INCPATH) -o cpg3d.o ../utils/cpg3d.c

dpstring.o:             ../utils/dpstring.cpp \
                        ../utils/dpstring.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o dpstring.o ../utils/dpstring.cpp

dpstringlist.o:         ../utils/dpstringlist.cpp \
                        ../utils/dpstringlist.h \
                        ../utils/dpstring.h \
                        ../utils/osdir/osdir.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o dpstringlist.o ../utils/dpstringlist.cpp

regex_sr.o:            ../utils/regex/regex_sr.cpp \
                       ../utils/regex/regex_sr.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o regex_sr.o ../utils/regex/regex_sr.cpp

mpfit.o:               ../utils/cmpfit/mpfit.c \
                       ../utils/cmpfit/mpfit.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o mpfit.o ../utils/cmpfit/mpfit.c

3d_stuff.o:             ../libfits/3d_stuff.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/fits.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h \
                        ../libfits/platform.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o 3d_stuff.o ../libfits/3d_stuff.cpp

cube.o:                 ../libfits/cube.c \
                        ../libfits/cube.h
	$(CC) -c $(CXXFLAGS) $(INCPATH) -o cube.o ../libfits/cube.c

dpheader.o:             ../libfits/dpheader.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/fits.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o dpheader.o ../libfits/dpheader.cpp

fits.o:                 ../libfits/fits.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/fits.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h \
                        ../libfits/platform.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o fits.o ../libfits/fits.cpp

fits_cube.o:            ../libfits/fits_cube.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/platform.h \
                        ../libfits/fits.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o fits_cube.o ../libfits/fits_cube.cpp

fits_dpl.o:             ../libfits/fits_dpl.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/fits.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h \
                        ../libfits/cube.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o fits_dpl.o ../libfits/fits_dpl.cpp

fits_exc.o:             ../libfits/fits_exc.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/fits.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o fits_exc.o ../libfits/fits_exc.cpp

fits_file.o:            ../libfits/fits_file.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/fits.h \
                        ../libfits/platform.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o fits_file.o ../libfits/fits_file.cpp

fits_filters.o:         ../libfits/fits_filters.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/fits.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o fits_filters.o ../libfits/fits_filters.cpp

fits_funcs.o:           ../libfits/fits_funcs.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/fits.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o fits_funcs.o ../libfits/fits_funcs.cpp

fits_mem.o:             ../libfits/fits_mem.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/fits.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o fits_mem.o ../libfits/fits_mem.cpp

fits_ops.o:             ../libfits/fits_ops.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/fits.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h \
                        ../libfits/platform.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o fits_ops.o ../libfits/fits_ops.cpp

fits_procs.o:           ../libfits/fits_procs.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/fits.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h \
                        ../libfits/platform.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o fits_procs.o ../libfits/fits_procs.cpp

fits_range.o:           ../libfits/fits_range.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/fits.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o fits_range.o ../libfits/fits_range.cpp

fits_red.o:             ../libfits/fits_red.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/fits.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h \
                        ../libfits/fitting.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o fits_red.o ../libfits/fits_red.cpp

JulianDay.o:            ../libfits/JulianDay.cpp \
                        ../libfits/JulianDay.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o JulianDay.o ../libfits/JulianDay.cpp

math_utils.o:           ../libfits/math_utils.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/fits.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o math_utils.o ../libfits/math_utils.cpp

misc.o:                 ../libfits/misc.c 
	$(CC) -c $(CXXFLAGS) $(INCPATH) -o misc.o ../libfits/misc.c

platform.o:             ../libfits/platform.cpp \
                        ../libfits/platform.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o platform.o ../libfits/platform.cpp

dpComplex.o:            ../libfits/dpComplex.cpp \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o dpComplex.o ../libfits/dpComplex.cpp

fitting.o:              ../libfits/fitting.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/fits.h \
                        ../libfits/fitting.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o fitting.o ../libfits/fitting.cpp

voronoi.o:              ../libfits/voronoi.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/fits.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o voronoi.o ../libfits/voronoi.cpp

fits_logic.o:           ../libfits/fits_logic.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/fits.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o fits_logic.o ../libfits/fits_logic.cpp

astrolib.o:             ../libfits/functions/astrolib/astrolib.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/functions/astrolib/astrolib.h \
                        ../libfits/fits.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h \
                        ../libfits/fitting.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o astrolib.o ../libfits/functions/astrolib/astrolib.cpp

primes.o:               ../libfits/functions/astrolib/primes.cpp \
                        dpuser_utils.h \
                        dpuser.h \
                        ../libfits/fits.h \
                        ../libfits/dpComplex.h \
                        ../libfits/defines.h \
                        ../libfits/math_utils.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o primes.o ../libfits/functions/astrolib/primes.cpp
