#*=====================================================================*/
#*    serrano/prgm/project/bigloo/cigloo0.2/Makefile                   */
#*    -------------------------------------------------------------    */
#*    Author      :  Manuel Serrano                                    */
#*    Creation    :  Wed Nov 16 08:44:09 1994                          */
#*    Last change :  Mon Apr  8 12:54:56 1996 (serrano)                */
#*    -------------------------------------------------------------    */
#*    Le makefile pour construire `Cigloo' ...                         */
#*    -------------------------------------------------------------    */
#*    Ce fichier peut-etre interprete soit par `make' sur les machines */
#*    Sun soit par `gmake' sur toutes les autres machines.             */
#*=====================================================================*/
 
#*---------------------------------------------------------------------*/
#*     Les flags ...                                                   */
#*---------------------------------------------------------------------*/
MACH            = `arch`
CC              = gcc
CIGLOOVERSION	= 0.2
BINDIR          = the-bin-dir
BIGLOO          = bigloo
BIGLOODIR	= /udir/serrano/prgm/project/bigloo
CIGLOO_DEST      = ../bin/cigloo$(CIGLOOVERSION)
AFILE           = .afile
SHELL           = /bin/csh

#*---------------------------------------------------------------------*/
#*    Les flags par defauts (pour pouvoir faire make *.o)              */
#*---------------------------------------------------------------------*/
BDBGFLAGS	= -afile $(AFILE) -g2 -cg -O -cc $(CC) +rm -fsharing
BOPTFLAGS	= -afile $(AFILE) -O2 -cc $(CC) -rm -fsharing -unsafe
BFLAGS		= $(BOPTFLAGS)
CFLAGS          = 

#*---------------------------------------------------------------------*/
#*    Les sources                                                      */
#*---------------------------------------------------------------------*/
#*--- init ------------------------------------------------------------*/
INIT_FILE	= main setrc parse-args

INIT_OBJ	= $(INIT_FILE:%=Init/%.o)

#*--- engine ----------------------------------------------------------*/
ENGINE_FILE	= engine param translate

ENGINE_OBJ	= $(ENGINE_FILE:%=Engine/%.o)

#*--- translate -------------------------------------------------------*/
TRANSLATE_FILE	= function declaration type decl tspec expr

TRANSLATE_OBJ	= $(TRANSLATE_FILE:%=Translate/%.o)


#*--- tools -----------------------------------------------------------*/
TOOLS_FILE	= date speek error file

TOOLS_OBJ	= $(TOOLS_FILE:%=Tools/%.o)

#*--- write -----------------------------------------------------------*/
WRITE_FILE	= version

WRITE_OBJ	= $(WRITE_FILE:%=Write/%.o)

#*--- parser ---------------------------------------------------------*/
PARSER_FILE	= parser lexer tools cpp

PARSER_OBJ	= $(PARSER_FILE:%=Parser/%.o)

#*---------------------------------------------------------------------*/
#*    Tout le code ...                                                 */
#*---------------------------------------------------------------------*/
O_OBJECTS       = $(INIT_OBJ) $(ENGINE_OBJ) $(PARSE_OBJ) $(TOOLS_OBJ)   \
                  $(WRITE_OBJ) $(PARSER_OBJ) $(TRANSLATE_OBJ)

SOURCE_FILES	= $(O_OBJECTS:%.o=%.scm)

#*---------------------------------------------------------------------*/
#*     Les suffixes ...                                                */
#*---------------------------------------------------------------------*/
.SUFFIXES:
.SUFFIXES: .scm .c .S .o

#*---------------------------------------------------------------------*/
#*    L'executable `cigloo'                                             */
#*---------------------------------------------------------------------*/
cigloo: Tools/date.scm
	@ $(MAKE) cigloo.exe

#*---------------------------------------------------------------------*/
#*    install                                                          */
#*---------------------------------------------------------------------*/
install: 
	@- \rm -f $(BINDIR)/cigloo
	@- \rm -f $(BINDIR)/cigloo$(CIGLOOVERSION)
	@- cp $(CIGLOO_DEST) $(BINDIR)
	@- (cd $(BINDIR); ln -s cigloo$(CIGLOOVERSION) cigloo)
	
#*---------------------------------------------------------------------*/
#*    cigloo.exe                                                        */
#*---------------------------------------------------------------------*/
cigloo.exe: $(O_OBJECTS)
	@ $(BIGLOO) $(BFLAGS) $(O_OBJECTS) -o $(CIGLOO_DEST)
	@ strip $(CIGLOO_DEST) >& /dev/null
	@ echo "Cigloo Done..."
	@ echo "-------------------------------"

#*---------------------------------------------------------------------*/
#*    afile                                                            */
#*---------------------------------------------------------------------*/
afile: Tools/date.scm
	@ echo "   - .afile"
	@ $(BIGLOODIR)/examples/Afile/afile -o $(AFILE) $(SOURCE_FILES)
	@ echo "   - dep"
	@ $(MAKE) dep
	@ echo "   - .etags"
	@ $(MAKE) tags

#*---------------------------------------------------------------------*/
#*    tags                                                             */
#*---------------------------------------------------------------------*/
tags:
	@ etags -o .etags $(SOURCE_FILES) 

#*---------------------------------------------------------------------*/
#*    dep                                                              */
#*---------------------------------------------------------------------*/
dep: 
	@ - head -`grep -n \^#depend Makefile | awk -F: '{ print $$1}' -` Makefile > /tmp/Makefile.aux
	@ $(BIGLOODIR)/examples/Depend/depend $(SOURCE_FILES) >> /tmp/Makefile.aux
	@ mv /tmp/Makefile.aux Makefile

#*---------------------------------------------------------------------*/
#*     clean ...                                                       */
#*---------------------------------------------------------------------*/
clean:
	@ echo "removing .o files"
	@ find . \( -name '*.o' \) -exec \rm {} \;
	@ (cd Example; $(MAKE) clean)
	@ cleanup
	@ echo "cleanup done..."
	@ echo "-------------------------------"

#*---------------------------------------------------------------------*/
#*     touchall ...                                                    */
#*---------------------------------------------------------------------*/
touchall:
	@ touch $(SOURCE_FILES)
	@ echo "touchall done..."
	@ echo "-------------------------------"

#*---------------------------------------------------------------------*/
#*    link ...                                                         */
#*---------------------------------------------------------------------*/
link:
	@ echo "Linking:"
	@ $(BIGLOO) $(BFLAGS) -o $(CIGLOO_DEST) Init/main.o $(O_OBJECTS) -lm
	@ echo "link done..."
	@ echo "-------------------------------"

#*---------------------------------------------------------------------*/
#*    date.scm                                                         */
#*---------------------------------------------------------------------*/
Tools/date.scm:
	@ echo "Creating Tools/date.scm"
	@ $(BIGLOODIR)/private/make-date-file cigloo Tools/date.scm tools_date

#*---------------------------------------------------------------------*/
#*     .scm --> .o                                                     */
#*---------------------------------------------------------------------*/
.scm.o:
	@ $(BIGLOO) $(BFLAGS) -c $*.scm -o $*.o
	
#*---------------------------------------------------------------------*/
#*     .scm --> .c                                                     */
#*---------------------------------------------------------------------*/
.scm.c:
	@ $(BIGLOO) $(BFLAGS) -C $*.scm -o $*.o

#*---------------------------------------------------------------------*/
#*    Les dependances                                                  */
#*---------------------------------------------------------------------*/
#depend
Translate/expr.o: Translate/ast.sch Translate/type.sch Tools/union.sch
Translate/tspec.o: Translate/ast.sch Translate/type.sch Tools/union.sch
Translate/decl.o: Parser/coord.sch Translate/ast.sch Translate/type.sch Tools/union.sch
Translate/type.o: Translate/ast.sch Translate/type.sch Tools/union.sch
Translate/declaration.o: Translate/ast.sch Translate/type.sch Tools/union.sch
Translate/function.o: Parser/coord.sch Translate/ast.sch Translate/type.sch Translate/function.sch Tools/union.sch
Parser/cpp.o: Parser/coord.sch
Parser/tools.o: Parser/coord.sch
Parser/parser.o: Translate/ast.sch Tools/union.sch
Tools/error.o: Translate/ast.sch Parser/coord.sch Tools/union.sch
Engine/translate.o: Parser/coord.sch Translate/ast.sch Tools/union.sch

