#  Le Makefile de fabrication des diffe'rents syste`mes 
#  Le-Lisp version 15.2 > 1-Aout-1987 sur SUN
SYSTEM=hp9300

##################################
# Les noms des syste`mes standard
##################################
# lelisp, lelisps, lesoft31, lefpu31, lesoft64, lefpu64, 
# cmplc, cpsoft31, cpfpu31, cpsoft64, cpfpu64, ceyx
# lelispX, lefpuX, lelispX11, caml, camlX, camlX11
LELISP=lelisp
CAMLVERSION=V2-6.1
################################################
# Les tailles par de'faut des zones de donne'es
################################################

# tailles des flottants pour les xxxx31bin
SIZEF31= -float 0

# tailles des flottants pour les xxxx64bin
SIZEF64= -float 16

# tailles des flottants pour les xxxxbin
# par defaut: les flottants sont sur 31 bits
SIZEF= $(SIZEF31)


# normal avec plutot des CONS ~= 1,3M octets
SZCONS=  -stack 6 -code 200 -heap 128 -number 0 \
        -vector 4 -string 6 -symbol 4 -cons 8 $(SIZEF)

# normal avec plutot du code  ~= 1,7M octets
SZCODE=  -stack 6 -code 600 -heap 256 -number 0 \
        -vector 4 -string 6 -symbol 5 -cons 4 $(SIZEF)

# gros  ~= 2,5M octets
SZ++= -stack 8 -code 624 -heap 536 -number 0 \
	-vector 8 -string 12 -symbol 11 -cons 8 $(SIZEF)

# petit ~= 700k octets
SZ-= -stack 3 -code 1 -heap 90 -number 0 \
	-vector 2 -string 2 -symbol 2 -cons 3 $(SIZEF)

# CAML : gros
SZCAML= -stack 24 -code 850 -heap 1000 -number 0 \
        -vector 30 -string 40 -symbol 6  -cons 15  $(SIZEF)

# CAML : gros avec code pour X
SZCAMLX= -stack 24 -code 1250 -heap 1000 -number 0 \
        -vector 30 -string 40 -symbol 6  -cons 15  $(SIZEF)


##########################################################
# Les entre'es classiques
##########################################################
# Standard.
# % make
all:	lelisp cmplc lelispX11 lefpuX11bin
tout: lesoft31bin lefpu31bin lesoft64bin lefpu64bin

# Pour nettoyer tout ce qui est fabrique' par ce makefile: Les binaires, 
#  les commandes standard, les fichiers de configurations standard fabrique's.
# % make clean
clean:
	rm -f *bin 
	rm -f lelisp lelisp- lelisps cmplc cmplc++ lelispX lelispX11
	rm -f o/*.o
	rm -f conf/lelispconf.ll conf/cmplcconf.ll \
		conf/leXconf.ll conf/leX11conf.ll

# Pour effacer tout ce qui n'est pas indispensable a` une utilisation minimale
#  de Le-Lisp.  Attention, plus aucun binaire, plus aucune image me'moire de 
#  Le-Lisp ne sera faisable de`s que cette commande aura e'te' lance'e!
#
# Il est e'vident qu'aucune  maintenance ne pourra etre effectue'e
#  sans une distribution COMPLETE de Le-Lisp.
#
# % make minimal
minimal:
	@( echo "Voulez-vous vraiment ne garder qu'un Le-Lisp minimun?(o/n) ";\
	read rep ;\

	if [ $$rep = "o" ] ;\
	then \
		echo "OK, on y va..." ;\
		(cd .. ;\
		/bin/rm -f TAR* LL*FILES ;\
		/bin/rm -rf benchmarks ;\
		/bin/rm -rf ceyx ;\
		/bin/rm -rf common ;\
		/bin/rm -rf info ;\
		/bin/rm -rf lltest ) ;\
		/bin/rm -rf conf ;\
		/bin/rm -rf recette ;\
		/bin/rm -rf o ;\
		/bin/rm -ri llcore ;\
		/bin/rm -f USERFILES* ;\
		/bin/rm -f makemod config makefile ;\
		echo "C'est fait." ;\
	fi )

##########################################################
# Les points d'entre'e permettant de faire les syste`mes
##########################################################
### lelisp "systeme standard modulaire"
$(LELISP): conf/$(LELISP)conf.ll  $(LELISP)bin
	./config $(LELISP) $(LELISP)bin $(LELISP)conf.ll $(SZCODE)

### lelisp++ "gros systeme standard modulaire"
lelisp++: conf/lelispconf.ll  lelispbin
	./config lelisp++ lelispbin lelispconf.ll $(SZ++)

### lelisp- "petit systeme standard modulaire"
lelisp-: conf/lelisp-conf.ll  lelispbin
	./config lelisp- lelispbin lelisp-conf.ll $(SZ-)

### lelisps "systeme standard "
lelisps: conf/lelispsconf.ll  lelispbin
	./config lelisps lelispbin lelispsconf.ll $(SZCONS)

### cmplc "systeme complice modulaire"
cmplc: conf/cmplcconf.ll  lelispbin
	./config cmplc lelispbin cmplcconf.ll $(SZCODE)

### cmplc++ "gros systeme complice modulaire"
cmplc++: conf/cmplcconf.ll  lelispbin
	./config cmplc++ lelispbin cmplcconf.ll $(SZ++)

### lelispX: Le-Lisp avec bitmap virtuel sur X10.4
lelispX: conf/leXconf.ll leXbin
	./config lelispX leXbin leXconf.ll $(SZCODE)

### lefpuX: Le-Lisp avec fpu 68881 et bitmap virtuel sur X10.4
lefpuX: conf/lXfpuconf.ll lefpuXbin
	./config lefpuX lefpuXbin lXfpuconf.ll $(SZCODE)

### lelispX11: Le-Lisp avec bitmap virtuel sur X11
lelispX11: conf/leX11conf.ll  leX11bin
	./config lelispX11 leX11bin leX11conf.ll $(SZCODE)

### qq exemples de configurations spe'cifiques:
lefpu31: conf/lefpuconf.ll  lefpu31bin
	./config lefpu31 lefpu31bin lefpuconf.ll $(SZCODE)

lefpu64: conf/lefpuconf.ll  lefpu64bin
	./config lefpu64 lefpu64bin lefpuconf.ll $(SZCODE) $(SIZEF64)

cpfpu31: conf/cpfpuconf.ll  lefpu31bin
	./config cpfpu64 lefpu64bin cpfpuconf.ll $(SZCODE)

### camlisp
camlisp: conf/camlconf.ll  camlispbin
	./config camlisp camlispbin camlconf.ll $(SZCAML)
	sed  -e 's/\/usr\/local\/lelispv15\.22/\/usr\/local\/caml\/$(CAMLVERSION)\/camlisp/g' camlisp > camlisp.new
	mv camlisp.new camlisp
	chmod a+x camlisp

### camlispX
camlispX: conf/camlXconf.ll  camlXbin
	./config camlispX camlXbin camlXconf.ll $(SZCAMLX)

### camlispX11
camlispX11: conf/camlX11conf.ll  camlX11bin
	./config camlispX11 camlX11bin camlX11conf.ll $(SZCAMLX)



# etc etc

############################################################################
# Les fichiers de configuration des differents systemes

conf/lelispconf.ll: conf/lesoftconf.ll
	@rm -f conf/lelispconf.ll
	ln conf/lesoftconf.ll conf/lelispconf.ll

conf/cmplcconf.ll: conf/cpsoftconf.ll
	@rm -f conf/cmplcconf.ll
	ln conf/cpsoftconf.ll conf/cmplcconf.ll

conf/leXconf.ll: conf/lXsoftconf.ll
	@rm -f conf/leXconf.ll
	ln conf/lXsoftconf.ll conf/leXconf.ll

conf/leX11conf.ll: conf/lX11softconf.ll
	@rm -f conf/leX11conf.ll
	ln conf/lX11softconf.ll conf/leX11conf.ll

conf/camlconf.ll: conf/camlsoftconf.ll
	@rm -f conf/camlconf.ll
	ln conf/camlsoftconf.ll conf/camlconf.ll

conf/camlXconf.ll: conf/camlXsoftconf.ll
	@rm -f conf/camlXconf.ll
	ln conf/camlXsoftconf.ll conf/camlXconf.ll

conf/camlX11conf.ll: conf/camlX11softconf.ll
	@rm -f conf/camlX11conf.ll
	ln conf/camlX11softconf.ll conf/camlX11conf.ll

############################################################################
# Les options de'pendant du syste`me
############################################################################
# Ou` trouver les bibliotheques X
# (A editer si besoin est)
#
# Pour ld qui doit trouver les lib*.a
# de la forme: $(XLIB)/libX*.a
XLIB=/usr/lib

# Pour les includes qui doivent trouver les *.h:
# de la forme: $(XINCLUDE)/X/*.h
XINCLUDE=/usr/include

#
# LOCALVARS = -x par defaut, pas de symboles locaux.
#           = -X pour aider au debug  (toutes les variables 
#             locales sont conserve'es dans la table des symboles).
LOCALVARS=-x

# Les flags pour le link
LDFLAGS= -q -n
#= -z $(LOCALVARS) -L$(XLIB) 

# Les librairies du linker
LDLIBS= -lm -lc

#######################################
# Les options de compilation sur Sun:

# pour les includes C propres a Le-Lisp:
LLINCLUDE=../common

# Pour avoir des messages en breton:
FOREIGN=-DFOREIGN
#FOREIGN=

# Pour les cores executables:
#EXECORE=

# Le syste`me d'exploitation sur Sun
# - rien      pour les syste`mes Sun 3.x
#SUNOS= 
# - SUNOS4.0  pour les syste`mes Sun 4.0.1 [suppose' etre le defaut]
#SUNOS=-DSUNOS40 -Bstatic 
SUNOS=

# Le fichier initial au lancement d'un lelispbin sans argument
FILEINI=-DFILEINI=\"../llib/startup.ll\"


# - il faut laisser -DINRIA pour les 4.2 sans les bogues de kernel vax4.2
CFLAGS= -O -DNBSYST=23  -DTIMEUNIT=50. -DS5 -DHP9000 -DHP9300 \
	-DLELISPDIR=\"/usr/local/lelispv15.22\" -DINRIA  $(FOREIGN) \
	 $(FILEINI) $(EXECORE) -I$(LLINCLUDE) -I$(XINCLUDE)

cobj=	o/llmain.o o/lelisp.o o/llstdio.o o/llfloat.o

camlobj=	o/llmain.o o/caml.o o/camlstdio.o o/llfloat.o

#########################################################################
# Comment refaire les binaires standard
# Le(s) binaire(s) standard
lelispbin: lesoft31bin
	@rm -f lelispbin
	ln lesoft31bin lelispbin

# Comment refaire les binaires pour lelisp standard
#  (calculs flottants soft)
lesoft31bin: $(cobj) lesoft31bin.o
	cc $(CFLAGS) $(LDFLAGS) $(cobj) lesoft31bin.o \
	$(LDLIBS) -o lesoft31bin

lesoft64bin: $(cobj) lesoft64bin.o
	cc $(CFLAGS) $(LDFLAGS) $(cobj) lesoft64bin.o \
	$(LDLIBS) -o lesoft64bin

# (calculs flottants fpu 68881)
lefpu31bin: $(cobj) lefpu31bin.o
	cc $(CFLAGS) $(LDFLAGS) $(cobj) lefpu31bin.o \
	$(LDLIBS) -o lefpu31bin

# (calculs flottants fpu 68881)
lefpu64bin: $(cobj) lefpu64bin.o
	cc $(CFLAGS) $(LDFLAGS) $(cobj) lefpu64bin.o \
	$(LDLIBS) -o lefpu64bin

# Pour tester les callexterns (sans cload)
letestbin: $(cobj) lesoft31bin.o testext.o
	cc $(LDFLAGS) $(cobj) testext.o lesoft31bin.o \
	$(LDLIBS) -o letestbin

testext.o: ../lltest/testext.c
	cc -c ../lltest/testext.c

leftestbin: $(cobj) lesoft31bin.o testfortran.o
	cc $(LDFLAGS) $(cobj) testfortran.o lesoft31bin.o \
	$(LDLIBS) -o leftestbin

testfortran.o: ../lltest/testfortran.f
	f77 -c ../lltest/testfortran.f

#########################################################################
# Pour faire un binaire Le-Lisp integrant un bitmap X10.4 avec/sans FPU

xcobj= o/llx.o o/llxmenu.o o/cstruct.o

# Les entrees courantes:
leXbin: lesoft31Xbin
	@rm -f leXbin
	ln lesoft31Xbin leXbin
lefpuXbin: lefpu31Xbin
	@rm -f lefpuXbin
	ln lefpu31Xbin lefpuXbin

# Les entrees specifiques:
lesoft31Xbin: $(cobj) $(xcobj) lesoft31bin.o
	cc $(CFLAGS) $(LDFLAGS)  $(cobj) $(xcobj) \
	lesoft31bin.o -u _bidon -lXMenu -lX \
	$(LDLIBS) -o lesoft31Xbin

lesoft64Xbin: $(cobj) $(xcobj)  lesoft64bin.o
	cc $(CFLAGS) $(LDFLAGS) $(cobj) $(xcobj) \
	lesoft64bin.o -u _bidon -lXMenu -lX \
	$(LDLIBS) -o lesoft64Xbin

lefpu31Xbin: $(cobj) $(xcobj) lefpu31bin.o
	cc $(CFLAGS) $(LDFLAGS) $(cobj) $(xcobj) \
	lefpu31bin.o -u _bidon -lXMenu -lX \
	$(LDLIBS) -o lefpu31Xbin

lefpu64Xbin: $(cobj) $(xcobj) lefpu64bin.o
	cc $(CFLAGS) $(LDFLAGS) $(cobj) $(xcobj) \
	lefpu64bin.o -u _bidon -lXMenu -lX \
	$(LDLIBS) -o lefpu64Xbin

#########################################################################
# Pour faire un binaire Le-Lisp integrant un bitmap X11 avec/sans FPU

x11cobj= o/x11.o

# Les entrees courantes:
leX11bin: lesoft31X11bin
	@rm -f leX11bin
	ln lesoft31X11bin leX11bin

lefpuX11bin: lefpu31X11bin
	@rm -f lefpuX11bin
	ln lefpu31X11bin lefpuX11bin

# Les entrees specifiques:
lesoft31X11bin: $(cobj) $(x11cobj) lesoft31bin.o
	cc $(CFLAGS) $(LDFLAGS) $(cobj) $(x11cobj) \
	lesoft31bin.o -lX11 $(LDLIBS) -o $(@F)

lesoft64X11bin: $(cobj) $(x11cobj) lesoft64bin.o
	cc $(CFLAGS) $(LDFLAGS) $(cobj) $(x11cobj) \
	lesoft64bin.o -lX11 $(LDLIBS) -o $(@F)

lefpu31X11bin: $(cobj) $(x11cobj) lefpu31bin.o
	cc $(CFLAGS) $(LDFLAGS) $(cobj) $(x11cobj) \
	lefpu31bin.o -lX11 $(LDLIBS) -o $(@F)

lefpu64X11bin: $(cobj) $(x11cobj) lefpu64bin.o
	cc $(CFLAGS) $(LDFLAGS) $(cobj) $(x11cobj) \
	lefpu64bin.o -lX11 $(LDLIBS) -o $(@F)

########################################################################
#  Pour faire les binaires de CAML

camlispbin: casoft31bin
	@rm -f camlispbin
	ln casoft31bin camlispbin

casoft31bin: $(camlobj) lesoft31bin.o
	cc -DMAXCHAR=1024 \
	$(CFLAGS) \
	$(LDFLAGS) $(camlobj) lesoft31bin.o \
	$(LDLIBS) -o casoft31bin

camlXbin: casoft31Xbin
	  @rm -f camlXbin
	  ln casoft31Xbin camlXbin

casoft31Xbin: $(camlobj) $(xcobj) lesoft31bin.o
	cc $(CFLAGS) $(LDFLAGS)  $(camlobj) $(xcobj) \
	lesoft31bin.o -u _bidon -lXMenu -lX \
	$(LDLIBS) -o casoft31Xbin
	
camlX11bin: casoft31X11bin
	@rm -f camlX11bin
	ln casoft31X11bin camlX11bin

casoft31X11bin: $(camlobj) $(x11cobj) lesoft31bin.o
	cc $(CFLAGS) $(LDFLAGS) $(camlobj) $(x11cobj) \
	lesoft31bin.o -lX11 $(LDLIBS) -o $(@F)

#########################################################################
# Les fichiers .c

o/llmain.o: ../common/llmain.c
	cc $(CFLAGS) -c  ../common/llmain.c
	mv llmain.o o

o/lelisp.o: ../common/lelisp.c
	cc $(CFLAGS) -c ../common/lelisp.c
	mv lelisp.o o/lelisp.o

o/caml.o: ../common/caml.c
	cc $(CFLAGS) -c  ../common/caml.c
	mv caml.o o/caml.o

o/llstdio.o: ../common/llstdio.c
	cc $(CFLAGS) -c  ../common/llstdio.c
	mv llstdio.o o

o/camlstdio.o: ../common/camlstdio.c
	cc $(CFLAGS) -c ../common/camlstdio.c
	mv camlstdio.o o

o/llfloat.o: ../common/llfloat.c
	cc $(CFLAGS) -c  ../common/llfloat.c
	mv llfloat.o o

o/cstruct.o: ../common/cstruct.c
	cc $(CFLAGS) -c  ../common/cstruct.c
	mv cstruct.o o

# Pour Le bitmap X10.4
o/llx.o: ../virbitmap/X10.4/llx.c
	(CFLAGS="$(CFLAGS)"; \
	 cd ../virbitmap/X10.4 ; \
	 $(MAKE) ../../$(SYSTEM)/o/llx.o SYSTEM=$(SYSTEM) CFLAGS="$$CFLAGS" )

o/llxmenu.o: ../virbitmap/X10.4/llxmenu.c
	(CFLAGS="$(CFLAGS)"; \
	cd ../virbitmap/X10.4 ; \
	$(MAKE) ../../$(SYSTEM)/o/llxmenu.o SYSTEM=$(SYSTEM) CFLAGS="$$CFLAGS")

# Pour le bitmap X11
o/x11.o: ../virbitmap/X11/x11.c
	@if [ -f $(XINCLUDE)/X11/Xlib.h ] ;\
	then \
		( cd ../virbitmap/X11 ; \
		$(MAKE) ../../$(SYSTEM)/o/x11.o \
			SYSTEM=$(SYSTEM) CFLAGS='$(CFLAGS)' ) ;\
	else \
		echo "make: ** Les bibliotheques de X11 ne sont pas en $(XINCLUDE)/X11" ;\
		echo "      ** Editer la variable XINCLUDE dans le makefile." ;\
		exit 1 ;\
	fi 


##########################################################
# Ceci n'est valide que pour un SUN2 avec une bande SUN3 #
pobj=	o/llsun.o \
	o/llinit.o  o/toperr.o  o/gc.o     o/physio.o o/read.o \
	o/macroch.o o/print.o   o/eval.o   o/fspecs.o o/cntrl.o  \
	o/carcdr.o  o/symbs.o   o/fntstd.o o/number.o o/specnb.o \
	o/string.o  o/chars.o   o/extend.o o/bllsht.o

lelispbin.o: $(pobj)
	ld -r -x $(pobj) -o lelispbin.o
