#############################################################################
##             __________               __   ___.
##   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
##   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
##   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
##   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
##                     \/            \/     \/    \/            \/
## Copyright Alan Korr, 2002. All rights reserved.
##
## Permission to use, copy, modify, and distribute this software for any
## purpose is hereby granted without fee, provided that this copyright and
## permissions notice appear in all copies and derivatives, and that no
## charge may be made for the software and its documentation except to cover
## cost of distribution.
##
## This software is provided "as is" without express or implied warranty.
#############################################################################

#######################################################################
## PLEASE CONSIDER THERE IS NOTHING TO CHANGE IN THE FOLLOWING LINES
##              SINCE THERE ARE COMMON FOR ALL LIBRARY             
##

.SUFFIXES : .o .c .s

%.o: %.c
	@echo "Compiling" $<...
	@$(CC) -o $(@) $(CFLAGS) $(INCLUDES) -c $<
	@$(CC) -M $< $(CFLAGS) $(INCLUDES) > $(*F).d

%.o: %.s
	@echo "Assembling" $<...
	@$(CC) -o $(@) $(CFLAGS) $(INCLUDES) -c $<
	@$(CC) -M $< $(CFLAGS) $(INCLUDES) > $(*F).d

.PHONY: splash all clean backup restore dist install

all: splash $(LIBRARY) test

splash:
	@echo "<<< " $(PACKAGE) "-" $(VERSION) ">>>"

####################################################
# LIBRAY PART :

$(LIBRARY): $(OBJECTS)
	@echo "Creating library" $(LIBRARY)... 
	@$(AR) cru $(@) $(OBJECTS)
	@$(RL) $(@)

####################################################
# TEST PART :

test: test.tab.o test.lex.o $(LIBRARY)
	@echo "Creating executable" $@...
	@$(CC) -g -o $(@) $(INCLUDES) $(+) -lfl -lreadline

test.tab.o: test.tab.c
	@echo "Compiling" $<...
	@$(CC) $(INCLUDES) -g -o $(@) -O3 -fomit-frame-pointer -c test.tab.c

test.lex.o: test.lex.c
	@echo "Compiling" $<...
	@$(CC) $(INCLUDES) -g -o $(@) -O3 -fomit-frame-pointer -c test.lex.c

test.tab.h: test.tab.c

test.lex.c: test.l test.tab.h
	@echo "Flex:" $<
	@flex -otest.lex.c test.l

test.tab.c: test.y
	@echo "Bison:" $<
	@bison -d test.y


####################################################
# MISCELLANOUS PART :

clean:
	@rm -f $(LIBRARY)
	@rm -f $(OBJECTS) test.lex.o test.tab.o
	@rm -f $(DEPENDENCIES)
	@rm -f *~ test test.exe
	@rm -f test.tab.h test.tab.c test.lex.c 
	@rm -f core

backup:
	@mkdir -p ./backup
	@cp -f makefile ./backup
	@cp -f test.l ./backup
	@cp -f test.y ./backup
	@cp -f $(SOURCES:.c=.txt) ./backup
	@for header in $(HEADERS) ; do cp -f $$header ./backup ; done
	@for source in $(SOURCES) ; do cp -f $$source ./backup ; done

restore:
	@cp -f ./backup/makefile .
	@cp -f ./backup/test.l .
	@cp -f ./backup/test.y .
	@cp -f ./backup/$(SOURCES:.c=.txt)
	@for header in $(HEADERS) ; do cp -f ./backup/$$header . ; done
	@for source in $(SOURCES) ; do cp -f ./backup/$$source . ; done

dist: backup
	@mv backup $(PACKAGE)
	@tar czvf $(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)/*
	@rm -f $(PACKAGE)/*
	@rmdir $(PACKAGE)

install: all
	@mkdir -p $(PREFIX)/libraries
	@cp $(LIBRARY) $(PREFIX)/libraries
	@mkdir -p $(PREFIX)/headers/$(PACKAGE)
	@for header in $(HEADERS) ; do cp $$header $(PREFIX)/headers/$(PACKAGE) ; done
	     
-include $(DEPENDENCIES)

