_EX  = brachistochrone  Breakwell  catmix     diplant  \
       pendulum         rocket     vanderpol  vtbrachistochrone

_EXA = $(_EX:%=%A)
_EXD = $(_EX:%=%D)
_EXS = $(_EX:%=%S)


EXAMPLES_EXA = $(_EXA:%=$(EXAMPLES_OBJDIR)/%)
EXAMPLES_EXD = $(_EXD:%=$(EXAMPLES_OBJDIR)/%)
EXAMPLES_EXS = $(_EXS:%=$(EXAMPLES_OBJDIR)/%)


all: all_examples
clean: examples_clean
veryclean: examples_veryclean
distclean: examples_veryclean

A: all_snctrl $(EXAMPLES_EXA)

D: all_snctrl $(EXAMPLES_EXD)

S: all_snctrl $(EXAMPLES_EXS)

all_examples: all_snctrl $(EXAMPLES_EXA) $(EXAMPLES_EXD) $(EXAMPLES_EXS)


$(EXAMPLES_OBJDIR)/brachistochroneA: $(EXAMPLES_OBJDIR)/brachistochroneA.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)

$(EXAMPLES_OBJDIR)/brachistochroneD: $(EXAMPLES_OBJDIR)/brachistochroneD.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)

$(EXAMPLES_OBJDIR)/brachistochroneS: $(EXAMPLES_OBJDIR)/brachistochroneS.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)


$(EXAMPLES_OBJDIR)/BreakwellA: $(EXAMPLES_OBJDIR)/BreakwellA.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)

$(EXAMPLES_OBJDIR)/BreakwellD: $(EXAMPLES_OBJDIR)/BreakwellD.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)

$(EXAMPLES_OBJDIR)/BreakwellS: $(EXAMPLES_OBJDIR)/BreakwellS.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)


$(EXAMPLES_OBJDIR)/catmixA: $(EXAMPLES_OBJDIR)/catmixA.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)

$(EXAMPLES_OBJDIR)/catmixD: $(EXAMPLES_OBJDIR)/catmixD.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)

$(EXAMPLES_OBJDIR)/catmixS: $(EXAMPLES_OBJDIR)/catmixS.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)


$(EXAMPLES_OBJDIR)/diplantA: $(EXAMPLES_OBJDIR)/diplantA.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)

$(EXAMPLES_OBJDIR)/diplantD: $(EXAMPLES_OBJDIR)/diplantD.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)

$(EXAMPLES_OBJDIR)/diplantS: $(EXAMPLES_OBJDIR)/diplantS.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)


$(EXAMPLES_OBJDIR)/pendulumA: $(EXAMPLES_OBJDIR)/pendulumA.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)

$(EXAMPLES_OBJDIR)/pendulumD: $(EXAMPLES_OBJDIR)/pendulumD.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)

$(EXAMPLES_OBJDIR)/pendulumS: $(EXAMPLES_OBJDIR)/pendulumS.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)


$(EXAMPLES_OBJDIR)/rocketA: $(EXAMPLES_OBJDIR)/rocketA.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)

$(EXAMPLES_OBJDIR)/rocketD: $(EXAMPLES_OBJDIR)/rocketD.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)

$(EXAMPLES_OBJDIR)/rocketS: $(EXAMPLES_OBJDIR)/rocketS.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)


$(EXAMPLES_OBJDIR)/vanderpolA: $(EXAMPLES_OBJDIR)/vanderpolA.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)

$(EXAMPLES_OBJDIR)/vanderpolD: $(EXAMPLES_OBJDIR)/vanderpolD.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)

$(EXAMPLES_OBJDIR)/vanderpolS: $(EXAMPLES_OBJDIR)/vanderpolS.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)


$(EXAMPLES_OBJDIR)/vtbrachistochroneA: $(EXAMPLES_OBJDIR)/vtbrachistochroneA.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)

$(EXAMPLES_OBJDIR)/vtbrachistochroneD: $(EXAMPLES_OBJDIR)/vtbrachistochroneD.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)

$(EXAMPLES_OBJDIR)/vtbrachistochroneS: $(EXAMPLES_OBJDIR)/vtbrachistochroneS.o
	$(FC) $(FFLAGS) $(MODFLAGS) $(RFLAGS) $^ -o $@ -L$(SNCTRL_LIBDIR) $(SNCTRL_LIB) -L$(SNOPT_LIBDIR) $(SNOPT_LIBS) $(LIBRARIES)


$(EXAMPLES_OBJDIR)/%.o: $(EXAMPLES_SRCDIR)/%.f90
	$(FC) -c $(FFLAGS) $(MODFLAGS) $< -o $@


examples_clean:
	rm -f $(EXAMPLES_OBJDIR)/*.o


examples_veryclean: examples_clean
	rm -f $(EXAMPLES_EXA) $(EXAMPLES_EXD) $(EXAMPLES_EXS)
	rm -f $(EXAMPLES_OBJDIR)/*.out
