include ../package.conf

CURDIR = $(CMIXDIR)/insts/jg/SPECTACLE
OBJLIBDIR = ../objlib
OBJLIB_A = $(OBJLIBDIR)/objlib.a
OBJLIB_H = $(OBJLIBDIR)/objlib.h

COMMON_OBJS = SPECTACLE_BASE.o fft.o
COMMON_HEADERS = SPECTACLE_BASE.h fft.h
SPECTACLE_OBJS = SPECTACLE.o $(COMMON_OBJS)
TVSPECTACLE_OBJS = TVSPECTACLE.o $(COMMON_OBJS)
SPECTEQ_OBJS = SPECTEQ.o $(COMMON_OBJS)
CMIXOBJS += $(PROFILE_O)
CXXFLAGS += -I$(OBJLIBDIR)
PROGS = libSPECTACLE.so libTVSPECTACLE.so libSPECTEQ.so \
SPECTACLE TVSPECTACLE SPECTEQ

.PHONY: all standalone install dso_install standalone_install \
uninstall dso_uninstall standalone_uninstall clean cleanall

all: libSPECTACLE.so libTVSPECTACLE.so libSPECTEQ.so

$(OBJLIB_A):
	@( cd $(OBJLIBDIR); echo "making in objlib..."; \
	  $(MAKE) $(MFLAGS); echo "done in objlib" ); \

standalone: SPECTACLE TVSPECTACLE SPECTEQ

libSPECTACLE.so: $(SPECTACLE_OBJS) $(GENLIB) $(OBJLIB_A)
	$(CXX) $(SHARED_LDFLAGS) -o $@ $(SPECTACLE_OBJS) $(GENLIB) $(SYSLIBS) \
		$(OBJLIB_A)

SPECTACLE: $(SPECTACLE_OBJS) $(CMIXOBJS) $(OBJLIB_A)
	$(CXX) -o $@ $(SPECTACLE_OBJS) $(CMIXOBJS) $(OBJLIB_A) $(LDFLAGS)

$(SPECTACLE_OBJS): $(INSTRUMENT_H) $(OBJLIB_H) $(COMMON_HEADERS) SPECTACLE.h

libTVSPECTACLE.so: $(TVSPECTACLE_OBJS) $(GENLIB) $(OBJLIB_A)
	$(CXX) $(SHARED_LDFLAGS) -o $@ $(TVSPECTACLE_OBJS) $(GENLIB) $(SYSLIBS) \
		$(OBJLIB_A)

TVSPECTACLE: $(TVSPECTACLE_OBJS) $(CMIXOBJS) $(OBJLIB_A)
	$(CXX) -o $@ $(TVSPECTACLE_OBJS) $(CMIXOBJS) $(OBJLIB_A) $(LDFLAGS)

$(TVSPECTACLE_OBJS): $(INSTRUMENT_H) $(OBJLIB_H) $(COMMON_HEADERS) TVSPECTACLE.h

libSPECTEQ.so: $(SPECTEQ_OBJS) $(GENLIB) $(OBJLIB_A)
	$(CXX) $(SHARED_LDFLAGS) -o $@ $(SPECTEQ_OBJS) $(GENLIB) $(SYSLIBS) \
		$(OBJLIB_A)

SPECTEQ: $(SPECTEQ_OBJS) $(CMIXOBJS) $(OBJLIB_A)
	$(CXX) -o $@ $(SPECTEQ_OBJS) $(CMIXOBJS) $(OBJLIB_A) $(LDFLAGS)

$(SPECTEQ_OBJS): $(INSTRUMENT_H) $(OBJLIB_H) $(COMMON_HEADERS) SPECTEQ.h

SPECTACLE_BASE.o: $(INSTRUMENT_H) $(COMMON_HEADERS)

install: dso_install

dso_install: all
	$(INSTALL) $(CURDIR)/libSPECTACLE.so $(LIBDESTDIR)
	$(INSTALL) $(CURDIR)/libTVSPECTACLE.so $(LIBDESTDIR)
	$(INSTALL) $(CURDIR)/libSPECTEQ.so $(LIBDESTDIR)

standalone_install: standalone
	$(INSTALL) $(CURDIR)/SPECTACLE $(DESTDIR)
	$(INSTALL) $(CURDIR)/TVSPECTACLE $(DESTDIR)
	$(INSTALL) $(CURDIR)/SPECTEQ $(DESTDIR)

uninstall: dso_uninstall standalone_uninstall

dso_uninstall:
	$(RM) $(LIBDESTDIR)/libSPECTACLE.so
	$(RM) $(LIBDESTDIR)/libTVSPECTACLE.so
	$(RM) $(LIBDESTDIR)/libSPECTEQ.so

standalone_uninstall:
	$(RM) $(DESTDIR)/SPECTACLE
	$(RM) $(DESTDIR)/TVSPECTACLE
	$(RM) $(DESTDIR)/SPECTEQ

clean:
	$(RM) $(SPECTACLE_OBJS) $(TVSPECTACLE_OBJS) $(SPECTEQ_OBJS) $(PROGS)

cleanall: clean uninstall

