#*---------------------------------------------------------------------*/
#*    serrano/ml/camloo/contrib0.1/callcc/Makefile ...                 */
#*                                                                     */
#*    Auteur      :  Manuel SERRANO                                    */
#*    Creation    :  Tue May 14 14:21:00.1991                          */
#*    Last change :  Wed Apr 27 15:28:06 1994 (serrano)                */
#*                                                                     */
#*    Le makefile pour construire la librarie de caml-bigloo ...       */
#*    -------------------------------------------------------------    */
#*    Ce fichier peut-etre interprete soit par `make' sur les machines */
#*    SUN soit par `gmake' sur toutes les autres machines.             */
#*---------------------------------------------------------------------*/

#*---------------------------------------------------------------------*/
#*     Les flags ...                                                   */
#*---------------------------------------------------------------------*/
BIGLOOLIBDIR	= `$(BIGLOO) -query | grep "\*lib-dir[ ]*\*" | sed 's/\*lib-dir\*[ ]*: //'`
MACH        	= `arch`
PWD         	= `pwd`
CC          	= gcc
VERSION		= 0.1
BIGLOO          = bigloo1.6
CAMLOODIR	= /net/cornas/icsla2/serrano/ml/camloo
LIBDIR         	= $(CAMLOODIR)/lib/$(VERSION)
INCLUDE     	= -I$(LIBDIR) -I"$(BIGLOOLIBDIR)" -I$(CAMLOODIR)/runtime$(VERSION)/CAMLClib
HEAPNAME	= caml-callcc.heap
LIBNAME		= libcallcc_u.a
BEEP            = ../../tools/beep
SHELL           = /bin/csh
STDLIB		= "$(BIGLOOLIBDIR)"/camloo/$(VERSION)
DATE		= `date +%m-%d-%y`

#*---------------------------------------------------------------------*/
#*     Les suffixes ...                                                */
#*---------------------------------------------------------------------*/
.SUFFIXES:
.SUFFIXES: .ml .scm .c .S .o .ml .mli .zi .mlp


#*---------------------------------------------------------------------*/
#*    Les objets des extansions                                        */
#*---------------------------------------------------------------------*/
_OBJ_LLIB	= bcallcc.o

OBJ_LLIB	= $(_OBJ_LLIB:%=Llib/%)  
O_OBJ_LLIB	= $(OBJ_LLIB:%=$(O)/%)
C_OBJ_LLIB  	= $(OBJ_LLIB:%.o=$(O)/%.c)

#*---------------------------------------------------------------------*/
#*    Les objets de la librairie standard                              */
#*---------------------------------------------------------------------*/
_OBJ_MLIB	= 

OBJ_MLIB	= $(_OBJ_MLIB:%=Mlib/%)  
O_OBJ_MLIB	= $(OBJ_MLIB:%=$(O)/%)
SCM_OBJ_MLIB  	= $(OBJ_MLIB:%.o=%.ml)

#*---------------------------------------------------------------------*/
#*    Les fichiers interfaces de la librairie standard                 */
#*---------------------------------------------------------------------*/
OBJ_MLIB_MLI	= callcc.zi

O_OBJ_MLIB_MLI	= $(OBJ_MLIB_MLI:%=Mlib/%)

#*---------------------------------------------------------------------*/
#*    La construction du `heap'                                        */
#*---------------------------------------------------------------------*/
heap:
	@ $(BIGLOO) Llib/callcc.scm -mkheap +ALPHA -heap ../../lib/$(VERSION)/$(HEAPNAME)
	@ echo "Heap Done..."
	@ $(BEEP)
	@ echo "-------------------------------"

#*---------------------------------------------------------------------*/
#*    La librairie                                                     */
#*---------------------------------------------------------------------*/
lib: lib_u

#*---------------------------------------------------------------------*/
#*    La libarie `libbigloo_caml_u.a' (safe)                           */
#*---------------------------------------------------------------------*/
lib_s:  
	@ make blib BFLAGS="-call/cc -O3 -mklib -cc $(CC) -fshared-data -cg -g -rm"\
                    MFLAGS="-rm -mklib -extend caml"                   \
                    CAMLFLAGS=""                                       \
	            CFLAGS="$(INCLUDE) -g"                             \
	            O=".Olib"                                          \
	            D="$(LIBNAME)"

#*---------------------------------------------------------------------*/
#*    La libarie `libbigloo_caml_u.a' (unsafe)                         */
#*---------------------------------------------------------------------*/
lib_u:  
	@ make blib BFLAGS="-call/cc -O3 -mklib -cc $(CC) -fshared-data -rm"    \
                    MFLAGS="-rm -mklib -extend caml -O2"               \
                    CAMLFLAGS=""                                       \
	            CFLAGS="$(INCLUDE) -O"                             \
	            O=".Olib"                                          \
	            D="$(LIBNAME)"

#*---------------------------------------------------------------------*/
#*    install                                                          */
#*---------------------------------------------------------------------*/
install:
	@ ../../distribution/install.libcallcc
	@ echo "Libcallcc installed Done..."
	@ $(BEEP)
	@ echo "-------------------------------"

#*---------------------------------------------------------------------*/
#*    clean                                                            */
#*---------------------------------------------------------------------*/
clean:
	@ cp $(LIBDIR)/$(HEAPNAME) $(LIBDIR)/$(HEAPNAME).$(DATE)
	@- \rm -f .Olib/Llib/*
	@- \rm -f .Olib/Mlib/*
	@- \rm -f Mlib/*.zi
	@ echo "Cleanup Done..."
	@ $(BEEP)
	@ echo "-------------------------------"

#*---------------------------------------------------------------------*/
#*    blib                                                             */
#*---------------------------------------------------------------------*/
blib: $(O_OBJ_MLIB_MLI) $(O_OBJ_C) $(O_OBJ_LLIB) $(O_OBJ_MLIB)
	@ ar rcv $(LIBDIR)/$(D) $(O_OBJ_C) $(O_OBJ_LLIB) $(O_OBJ_MLIB)
	@ ranlib $(LIBDIR)/$(D)
	@ echo "$(D) Done..."
	@ $(BEEP)
	@ echo "-------------------------------"

#*---------------------------------------------------------------------*/
#*     touchall ...                                                    */
#*---------------------------------------------------------------------*/
touchall:
	@ touch Llib/*.scm {Clib}/*.c Mlib/*.{ml,mli}
	@ echo "touchall done..."
	@ $(BEEP)
	@ echo "-------------------------------"

#*---------------------------------------------------------------------*/
#*    wc                                                               */
#*---------------------------------------------------------------------*/
wc:
	@ wc Llib/*.{scm,sch} {Clib}/*.c Include/*.h Mlib/*.ml
	@ echo "wc done..."
	@ $(BEEP)
	@ echo "-------------------------------"

#*---------------------------------------------------------------------*/
#*    La regle implicite `.scm.o'                                      */
#*---------------------------------------------------------------------*/
.Olib/%.o: %.scm
	@ $(BIGLOO) -copt "$(INCLUDE)" $(BFLAGS) $*.scm -o .Olib/$*.o -A

#*---------------------------------------------------------------------*/
#*    La regle implicite `.ml.o'                                       */
#*---------------------------------------------------------------------*/
.Olib/%.o: %.ml
	@ $(BIGLOO) -A -o .Olib/$*.o $*.ml $(MFLAGS)  

#*---------------------------------------------------------------------*/
#*    La regle implicite `.mli.zi'                                     */
#*    -------------------------------------------------------------    */
#*    Attention, ce n'est pas le meme pbm que dans la librairie        */
#*    standard car ici on importe les modules (et seulement ici) !     */
#*---------------------------------------------------------------------*/
.mli.zi:
	@ $(BIGLOO) -A $*.mli $(MFLAGS)
	@ (echo "(module __camli_`basename $*` (foreign))"> $*.sci )


#*---------------------------------------------------------------------*/
#*    La regle implicite `.c.o'                                        */
#*---------------------------------------------------------------------*/
$(O)/%.o: %.c
	@ echo "$*.c:"
	@ $(CC) $(CFLAGS) $*.c -o $(O)/$*.o -c


