#######################################################################
#######################################################################
INCLUDE = ../include
CFLAGS = $(CC_OPT)

# order is important for link
LIBDIRS1 = ../lib/spfte.a ../lib/fte.a ../lib/cp.a
LIBDIRS2 = ../lib/analysis.a ../lib/inp.a ../lib/ckt.a ../lib/ni.a \
    ../lib/sparse.a
XLIBDIRS = ../lib/hlp.a ../lib/plot.a
LIBDIRS3 = ../lib/sced.a ../lib/misc.a
LIBRARIES = $(LIBDIRS1) ../lib/dev.a $(LIBDIRS2) $(XLIBDIRS) $(LIBDIRS3) \
    ../lib/$(MFB).a

D_OBJS = \
    ../lib/dev/bjt.o ../lib/dev/bsim1.o ../lib/dev/bsim2.o ../lib/dev/cap.o \
    ../lib/dev/dio.o ../lib/dev/ind.o ../lib/dev/jfet.o ../lib/dev/jj.o \
    ../lib/dev/ltra.o ../lib/dev/mes.o ../lib/dev/mos.o ../lib/dev/res.o \
    ../lib/dev/src.o ../lib/dev/sw.o ../lib/dev/tra.o ../lib/dev/urc.o \
    ../lib/dev/disto.o

MAKEFS1 = $(LIBDIRS1:.a=/Makefile) $(LIBDIRS3:.a=/Makefile) \
    ../lib/$(MFB)/Makefile
MAKEFS2 = $(LIBDIRS2:.a=/Makefile)
MAKEFS3 = $(XLIBDIRS:.a=/Makefile)
MAKEFS4 = $(D_OBJS:.o=/Makefile)

CFILES = \
        nuconfig.c spconfig.c main.c multidec.c \
        help.c proc2mod.c scedstub.c spiced.c xeditor.c

stupid::
	@cat message

#######################################################################
####### Dependencies in this directory ################################

depend::
	@$(DEPEND_PROG) -I$(INCLUDE) $(INCX) $(CFILES)

#######################################################################
####### Create the config files #######################################

preamble::
	@echo char *Spice_Exec_Dir  = \"$(SPICE_EXEC_DIR)\"\;
	@echo char *Spice_Lib_Dir   = \"$(SPICE_LIB_DIR)\"\;
	@echo char Spice_OptChar    = \'$(OPT_CHAR)\'\;
	@echo char *Def_Editor      = \"$(DEFAULT_EDITOR)\"\;
	@echo int  AsciiRawFile     = $(ASCII_RAWFILE)\;
	@echo char *Bug_Addr        = \"$(BUG_ADDR)\"\;
	@echo char *Spice_Host      = \"$(SPICE_HOST)\"\;
	@echo char *Spiced_Log      = \"$(SPICED_LOG)\"\;
	@echo char Spice_Version[ ] = \"$(VERSION)\"\;
	@echo char Spice_Notice[ ]  = \"$(SPICE_NOTICE)\"\;
	@echo char Spice_Build_Date[ ] = \"$(DATE)\"\;

devs: $(DEVICES) $(ANALYSES)
$(DEVICES)::
	@echo \#define DEV_$@
$(ANALYSES)::
	@echo \#define AN_$@

spconfig::
	$(MAKE) preamble > spconfig.c
	$(MAKE) devs >> spconfig.c
	cat sconfig.c >> spconfig.c

nuconfig::
	$(MAKE) preamble > nuconfig.c
	cat nconf.c >> nuconfig.c

#######################################################################
####### Executable targets ############################################

TARGETS = jspice3 nutmeg help multidec proc2mod spiced xeditor
all: $(TARGETS)

jspice3: smain.o spconfig.o xeditor.o $(LIBRARIES)
	$(CC) -o jspice3 smain.o spconfig.o $(LIBRARIES) xeditor.o \
          $(LIBX) $(LDFLAGS)

slink::
	$(CC) -o jspice3 smain.o spconfig.o $(LIBRARIES) xeditor.o \
          $(LIBX) $(LDFLAGS)

nutmeg: nmain.o nuconfig.o scedstub.o ../lib/cp.a ../lib/fte.a \
          ../lib/hlp.a ../lib/plot.a ../lib/misc.a ../lib/$(MFB).a
	$(CC) -o nutmeg nmain.o nuconfig.o scedstub.o ../lib/cp.a \
          ../lib/fte.a ../lib/hlp.a ../lib/plot.a ../lib/misc.a \
          ../lib/$(MFB).a $(LIBX) $(LDFLAGS)

nlink::
	$(CC) -o nutmeg nmain.o nuconfig.o scedstub.o ../lib/cp.a \
          ../lib/fte.a ../lib/hlp.a ../lib/plot.a ../lib/misc.a \
          ../lib/$(MFB).a $(LIBX) $(LDFLAGS)

help: help.o scedstub.o ../lib/hlp.a ../lib/cp.a ../lib/misc.a \
          ../lib/plot.a ../lib/$(MFB).a
	$(CC) -o help help.o scedstub.o ../lib/hlp.a ../lib/cp.a \
          ../lib/misc.a ../lib/plot.a ../lib/$(MFB).a $(LIBX) $(LDFLAGS)

multidec: multidec.o ../lib/sparse.a ../lib/misc.a
	$(CC) -o multidec multidec.o ../lib/sparse.a ../lib/misc.a $(LDFLAGS)

proc2mod: proc2mod.o ../lib/cp.a ../lib/inp.a ../lib/misc.a
	$(CC) -o proc2mod proc2mod.o ../lib/cp.a ../lib/inp.a ../lib/misc.a \
          $(LDFLAGS)

spiced: spiced.o ../lib/misc.a
	$(CC) -o spiced spiced.o ../lib/misc.a $(LDFLAGS)

xeditor: xeditor_.o
	$(CC) -o xeditor xeditor_.o $(LIBX) $(LDFLAGS)

#######################################################################
####### Recursively generate libraries ################################

$(LIBRARIES):: bsd_make_bug
	cd $(@:.a=); $(MAKE)

# won't recurse without this!
bsd_make_bug:

#######################################################################
####### Object file targets ###########################################

nmain.o: main.c
	$(CC) $(CFLAGS) -I$(INCLUDE) -c main.c -o nmain.o

smain.o: main.c
	$(CC) $(CFLAGS) -I$(INCLUDE) -DSIMULATOR  -c main.c -o smain.o

help.o: help.c Makefile
	$(CC) $(CFLAGS) -I$(INCLUDE) $(INCX) $(INTERFACE_OPTS) \
          -DSPICE_HELP=\"$(SPICE_LIB_DIR)/helpdir\" -c $*.c

xeditor_.o: xeditor.c
	$(CC) $(CFLAGS) -DSPICE_MAKE -DSTAND_ALONE $(INTERFACE_OPTS) \
          -I$(INCLUDE) $(INCX) -c -o xeditor_.o xeditor.c

xeditor.o: xeditor.c
	$(CC) $(CFLAGS) -DSPICE_MAKE $(INTERFACE_OPTS) -I$(INCLUDE) \
           $(INCX)  -c xeditor.c

.c.o:
	$(CC) $(CFLAGS) -I$(INCLUDE) -c $*.c

#######################################################################
####### Clean up ######################################################

clean::
	-rm -f *.o *.exe errs jspice3 nutmeg help multidec proc2mod \
          spiced xeditor spconfig.c nuconfig.c
	-rm -f ../lib/*.a
	-rm -f $(LIBDIRS1:.a=/*.o)
	-rm -f $(LIBDIRS2:.a=/*.o)
	-rm -f $(LIBDIRS3:.a=/*.o)
	-rm -f $(XLIBDIRS:.a=/*.o)
	-rm -f ../lib/dev/*.o
	-rm -f ../lib/$(MFB)/*.o
	-rm -f $(D_OBJS:.o=/*.o)
	-rm -f ../../errs

realclean::
	-rm -f *.o *.exe errs jspice3 nutmeg help multidec proc2mod \
          spiced xeditor spconfig.c nuconfig.c Makefile
	-rm -f ../lib/*.a
	-rm -f $(LIBDIRS1:.a=/*.o) $(LIBDIRS1:.a=/Makefile)
	-rm -f $(LIBDIRS2:.a=/*.o) $(LIBDIRS2:.a=/Makefile)
	-rm -f $(LIBDIRS3:.a=/*.o) $(LIBDIRS3:.a=/Makefile)
	-rm -f $(XLIBDIRS:.a=/*.o) $(XLIBDIRS:.a=/Makefile)
	-rm -f ../lib/dev/*.o ../lib/dev/Makefile
	-rm -f ../lib/$(MFB)/*.o ../lib/$(MFB)/Makefile
	-rm -f $(D_OBJS:.o=/*.o)
	-rm -f $(D_OBJS:.o=/Makefile)
	-rm -f ../../conf/config*
	-rm -f ../../conf/mk*
	-rm -f ../include/config.h
	-rm -f ../../errs

