# +++++++++++++++++++++++++++++
# Makefile for building nls2
# +++++++++++++++++++++++++++++
R_SHARE_DIR= /usr/local/lib64/R/share
RCONFIG= /usr/local/lib64/R/etc/Makeconf

include ${RCONFIG}
include ./Makevars

# +++++++++++++++++++++++++++++
LINKER=$(SHLIB_LD) $(SHLIB_LDFLAGS)

# +++++++++++++++++++++++++++++

srcdir = $(top_dir)/src
execdir = $(top_dir)/inst

# Attention: crlibs en 1ier pour creer le directory
# 'nls2libs' et plib en dernier pour linker tous les *.o
#  panalDer aprs analder

all: crlibs initlibs  pbasic pnl panalder plsoda pprogramme parbre panalDer  pPsi parbrePsi pprogrammePsi pInv parbreInv pprogrammeInv crPsi crInv plib mvso fini


crlibs:
	test -d $(execdir) || mkdir $(execdir)
	test -d $(libsdir) || mkdir $(libsdir)

initlibs:
	$(C)   $(srcdir)/*.c
	mv $(srcdir)/*.o $(libsdir)

pbasic:
	test -d $(libsdir)/Basic || mkdir $(libsdir)/Basic
	$(C)     $(srcdir)/Basic/*.c
	$(F)   $(srcdir)/Basic/*.f
	mv $(srcdir)/Basic/*.o $(libsdir)/Basic
	@echo End of compilation of the 'basic' part
pnl:
	$(C)   $(srcdir)/nl/*.c 
	ar r $(libsdir)/libnl.a $(srcdir)/nl/*.o
	ranlib $(libsdir)/libnl.a
	rm $(srcdir)/nl/*.o
	@echo End of compilation of the 'nl' part
panalder:
	$(C)   $(srcdir)/analder/*.c 
	ar r $(libsdir)/libanalder.a $(srcdir)/analder/*.o
	ar d $(libsdir)/libanalder.a TanalDer.o
	ranlib $(libsdir)/libanalder.a
	rm $(srcdir)/analder/*.o
	@echo End of compilation of the 'analder' part
plsoda:
	$(F)   $(srcdir)/lsoda/*.f >/dev/null 
	ar r $(libsdir)/liblsoda.a $(srcdir)/lsoda/*.o
	ranlib $(libsdir)/liblsoda.a
	rm $(srcdir)/lsoda/*.o
	@echo End of compilation of the 'lsoda' part

parbre:
	test -d $(libsdir)/arbre || mkdir $(libsdir)/arbre
	$(C)   $(srcdir)/arbre/*.c
	mv $(srcdir)/arbre/*.o $(libsdir)/arbre
	@echo End of compilation of the 'arbre' part

pprogramme:
	test -d $(libsdir)/programme || mkdir $(libsdir)/programme
	$(C)  $(srcdir)/programme/*.c
	mv $(srcdir)/programme/*.o $(libsdir)/programme
	@echo End of compilation of the 'programme' part
panalDer:
	$(CC) -I$(srcdir)/Basic  -I$(srcdir)/analder  \
	  -o $(execdir)/analDer  $(srcdir)/analder/TanalDer.c \
	  $(PKG_LIBS)
	@echo The command analDer is built
	@echo " "


pPsi:
	test -d $(libsdir)/Psi || mkdir $(libsdir)/Psi
	$(CPSI)   $(srcdir)/Psi/*.c
	mv $(srcdir)/Psi/*.o $(libsdir)/Psi
	@echo End of compilation of the 'Psi' part


parbrePsi:
	test -d $(libsdir)/arbrePsi || mkdir $(libsdir)/arbrePsi
	$(CPSI)   $(srcdir)/arbrePsi/*.c
	mv $(srcdir)/arbrePsi/*.o $(libsdir)/arbrePsi
	@echo End of compilation of the 'arbrePsi' part

pprogrammePsi:
	test -d $(libsdir)/programmePsi || mkdir $(libsdir)/programmePsi
	$(CPSI)   $(srcdir)/programmePsi/*.c
	mv $(srcdir)/programmePsi/*.o $(libsdir)/programmePsi
	@echo End of compilation of the 'programmePsi' part

crPsi:
	$(CC) -I$(srcdir)/Basic  -I$(srcdir)/Psi \
	  -o $(execdir)/crPsi   $(libsdir)/Psi/crpsi.o \
	  $(libsdir)/arbrePsi/psi.o  \
	  $(PKG_LIBS)
	rm $(libsdir)/Psi/crpsi.o
	@echo The command crPsi is built
	@echo " "


pInv:
	test -d $(libsdir)/Inv || mkdir $(libsdir)/Inv
	$(CINV)   $(srcdir)/Inv/*.c
	mv $(srcdir)/Inv/*.o $(libsdir)/Inv
	@echo End of compilation of the 'Inv' part


parbreInv:
	test -d $(libsdir)/arbreInv || mkdir $(libsdir)/arbreInv
	$(CINV)    $(srcdir)/arbreInv/*.c
	mv $(srcdir)/arbreInv/*.o $(libsdir)/arbreInv
	@echo End of compilation of the 'arbreInv' part

pprogrammeInv:
	test -d $(libsdir)/programmeInv || mkdir $(libsdir)/programmeInv
	$(CINV)  $(srcdir)/programmeInv/*.c
	mv $(srcdir)/programmeInv/*.o $(libsdir)/programmeInv
	@echo End of compilation of the 'programmeInv' part

crInv:
	$(CC) -I$(srcdir)/Basic  -I$(srcdir)/Inv \
	  -o $(execdir)/crInv \
	$(libsdir)/Inv/crinv.o \
	  $(libsdir)/arbreInv/inv.o \
	  $(PKG_LIBS)
	rm $(libsdir)/Inv/crinv.o
	@echo The command crInv is built
	@echo " "

# The object-file used when no user's programs
# are provided, i.e when the models are evaluated by syntax trees

plib :
	test -f $(libsdir)/libnls2$(SHLIB_EXT) && rm  $(libsdir)/libnls2$(SHLIB_EXT); \
	$(LINKER) -o $(libsdir)/libnls2$(SHLIB_EXT)  \
	       $(libsdir)/Basic/*.o \
		$(libsdir)/ToMyOwn.o  \
		$(libsdir)/arbre/*.o \
	       $(libsdir)/Psi/*.o \
		$(libsdir)/arbrePsi/*.o \
		$(libsdir)/Inv/*.o \
		$(libsdir)/arbreInv/*.o \
		 $(PKG_LIBS) 
	@echo End of creation of 'libs/libnls2$(SHLIB_EXT)'
	test -f $(libsdir)/loadnls2$(SHLIB_EXT) && rm $(libsdir)/loadnls2$(SHLIB_EXT); \
	$(LINKER)  -o $(libsdir)/loadnls2$(SHLIB_EXT) \
		$(libsdir)/Basic/loadnls2.o \
		 $(PKG_LIBS) 
	@echo End of creation of 'libs/loadnls2$(SHLIB_EXT)'

# Mettre les *.so dans src pour R CMD INSTALL: il les mettra dans libs
mvso :
	mv $(libsdir)/*$(SHLIB_EXT) $(srcdir)

fini :
	echo "End of nls2 Makefile"
	echo "--------------------"

# +++++++++++++++++++++++++++++++++++++++++++++++
# Pour la fonction R loadnls2
# +++++++++++++++++++++++++++++++++++++++++++++++
usercompile:
	@$(COMPILER)  -I$(top_dir)/loaduser  $(OBJ)

userlink:
	@$(LINKER) -o $(OUT)   -I$(top_dir)/loaduser $(OBJ)  $(PKG_LIBS)
# Use the Fortran compilator instead of R CMD SHLIB because the Fortran library
# is required even if the user-program is in C
