# Where you want it installed when you do 'make install'
PREFIX=/usr/local
# Where you want the includes to go when you do 'make install'
IPREFIX=/usr/local



# You shouldn't have to touch the rest unless the compile is failing for some reason?
DISTNAME=b0
VERSION=0.0.18
SRC=./src
EXAMPLE_DIR=./examples

# To assist in cross-compiling
CC=gcc
AS=fasm
#CFLAGS=-std=c99 -Wall -O3 -mtune=opteron -m64 -I$(SRC)
CFLAGS=-Wall -O3 -mtune=opteron -m64 -I$(SRC)
#CFLAGS=-Wall -I$(SRC)
LDFLAGS=

#flags for ghostscript and html2ps
GS=gs
GSFLAGS=-sDEVICE=pdfwrite -q -dNOPAUSE -dBATCH
HTML2PS=html2ps

#flags for building the examples
B0_FLAGS=-felf

all: b0
b0: $(SRC)/b0.c $(SRC)/b0.h
	$(CC) $(CFLAGS) -s $(LDFLAGS) -o b0 $(SRC)/b0.c

b0-debug: $(SRC)/b0.c $(SRC)/b0.h
	$(CC) $(CFLAGS) -ggdb $(LDFLAGS) -o b0 $(SRC)/b0.c

b0-ia32: $(SRC)/b0.c $(SRC)/b0.h
	$(CC) -Wall -O3 -I$(SRC) -Di386 -s $(LDFLAGS) -o b0 $(SRC)/b0.c
	
clean: 
	rm -f *.o *.asm *.tmp *~ b0 le le2 le3 le4 le5 le6 test $(DISTNAME)-$(VERSION).tar.bz2 *.pdf *.ps $(EXAMPLE_DIR)/*.asm $(EXAMPLE_DIR)/*.o $(EXAMPLE_DIR)/*~ $(SRC)/*.asm $(SRC)/*.o $(SRC)/*~ doc/*~
	
docs: ./doc/b0-man.html
	$(HTML2PS) -o b0.ps ./doc/b0-man.html
	$(GS) $(GSFLAGS) -sOutputFile=b0.pdf b0.ps
	rm -f ./b0.ps

install: b0
	if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi
	if ( test ! -d $(IPREFIX)/include ) ; then mkdir -p $(IPREFIX)/include ; fi
	if ( test ! -d $(IPREFIX)/include/b0 ) ; then mkdir -p $(IPREFIX)/include/b0 ; fi
	cp -f b0 $(PREFIX)/bin/b0
	chmod a+x $(PREFIX)/bin/b0
	cp -f ./include/stdlib.b0 \
		./include/stdlib_unicode.b0 \
		./include/stdlib_linux.b0 \
		$(IPREFIX)/include/b0
	cp -f ./doc/b0.man $(PREFIX)/man/man1/b0.1
	@echo 
	@echo Please set environment variable BO_INCLUDE=$(IPREFIX)/include/b0
	@echo 

uninstall:
	rm -fR $(IPREFIX)/include/b0
	rm -f $(PREFIX)/bin/b0
	rm -f $(PREFIX)/man/man1/b0.1
	
dist:
	rm -f $(DISTNAME)-$(VERSION).tar.bz2
	ln -sf . $(DISTNAME)-$(VERSION)
	tar -cvf $(DISTNAME)-$(VERSION).tar \
	   $(DISTNAME)-$(VERSION)/Makefile \
	   $(DISTNAME)-$(VERSION)/Makefile.w32 \
	   $(DISTNAME)-$(VERSION)/README \
	   $(DISTNAME)-$(VERSION)/COPYING \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0.c \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0.h \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0.b0 \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0.h.b0 \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0_libc.b0 \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0_linux.b0 \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0_win64.b0 \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0_stdlib.b0 \
	   $(DISTNAME)-$(VERSION)/$(SRC)/b0_linux.b0 \
	   $(DISTNAME)-$(VERSION)/$(EXAMPLE_DIR)/le.b0 \
	   $(DISTNAME)-$(VERSION)/$(EXAMPLE_DIR)/le2.b0 \
	   $(DISTNAME)-$(VERSION)/$(EXAMPLE_DIR)/le3.b0 \
	   $(DISTNAME)-$(VERSION)/$(EXAMPLE_DIR)/le4_p1.b0 \
	   $(DISTNAME)-$(VERSION)/$(EXAMPLE_DIR)/le4_p2.b0 \
	   $(DISTNAME)-$(VERSION)/$(EXAMPLE_DIR)/le5.b0 \
	   $(DISTNAME)-$(VERSION)/$(EXAMPLE_DIR)/le6.b0 \
	   $(DISTNAME)-$(VERSION)/$(EXAMPLE_DIR)/win64.b0 \
	   $(DISTNAME)-$(VERSION)/$(EXAMPLE_DIR)/cgi1.b0 \
	   $(DISTNAME)-$(VERSION)/$(EXAMPLE_DIR)/gtk/gtk-cal.b0 \
	   $(DISTNAME)-$(VERSION)/$(EXAMPLE_DIR)/gtk/gtk2-cal.b0 \
	   $(DISTNAME)-$(VERSION)/$(EXAMPLE_DIR)/gtk/Makefile \
	   $(DISTNAME)-$(VERSION)/$(EXAMPLE_DIR)/gtk/gtk1.inc \
	   $(DISTNAME)-$(VERSION)/$(EXAMPLE_DIR)/ia32/le.b0 \
	   $(DISTNAME)-$(VERSION)/$(EXAMPLE_DIR)/ia32/le2.b0 \
	   $(DISTNAME)-$(VERSION)/$(EXAMPLE_DIR)/ia32/win32.b0 \
	   $(DISTNAME)-$(VERSION)/include/stdlib.b0 \
	   $(DISTNAME)-$(VERSION)/include/stdlib_linux.b0 \
	   $(DISTNAME)-$(VERSION)/include/stdlib_unicode.b0 \
	   $(DISTNAME)-$(VERSION)/doc/b0.man \
	   $(DISTNAME)-$(VERSION)/doc/common.css \
	   $(DISTNAME)-$(VERSION)/doc/b0.html \
	   $(DISTNAME)-$(VERSION)/doc/b0-man.html \
	   $(DISTNAME)-$(VERSION)/doc/b0-ver.html \
	   $(DISTNAME)-$(VERSION)/doc/b0-tutorial.html \
	   $(DISTNAME)-$(VERSION)/doc/b0-internals.html \
	   $(DISTNAME)-$(VERSION)/doc/stdlib.html \
	   $(DISTNAME)-$(VERSION)/doc/b0.xml
	bzip2 $(DISTNAME)-$(VERSION).tar
	rm -f $(DISTNAME)-$(VERSION)

test: b0
	./b0 $(B0_FLAGS) $(EXAMPLE_DIR)/le.b0
	$(AS) $(EXAMPLE_DIR)/le.asm le
	./b0 $(B0_FLAGS) $(EXAMPLE_DIR)/le2.b0
	$(AS) $(EXAMPLE_DIR)/le2.asm le2
	./b0 $(B0_FLAGS)o $(EXAMPLE_DIR)/le3.b0
	$(AS) $(EXAMPLE_DIR)/le3.asm $(EXAMPLE_DIR)/le3.o
	$(CC) $(CFLAGS) $(LDFLAGS) -o le3 $(EXAMPLE_DIR)/le3.o
	./b0 $(B0_FLAGS)o $(EXAMPLE_DIR)/le4_p1.b0
	./b0 $(B0_FLAGS)o $(EXAMPLE_DIR)/le4_p2.b0
	$(AS) $(EXAMPLE_DIR)/le4_p1.asm $(EXAMPLE_DIR)/le4_p1.o
	$(AS) $(EXAMPLE_DIR)/le4_p2.asm $(EXAMPLE_DIR)/le4_p2.o
	$(CC) $(CFLAGS) $(LDFLAGS) -o le4 $(EXAMPLE_DIR)/le4_p1.o $(EXAMPLE_DIR)/le4_p2.o
	./b0 $(B0_FLAGS)o $(EXAMPLE_DIR)/le5.b0
	$(AS) $(EXAMPLE_DIR)/le5.asm $(EXAMPLE_DIR)/le5.o
	$(CC) $(CFLAGS) $(LDFLAGS) -o le5 $(EXAMPLE_DIR)/le5.o
	./b0 $(B0_FLAGS) -UTF8 $(EXAMPLE_DIR)/le6.b0
	$(AS) $(EXAMPLE_DIR)/le6.asm le6
	rm -f $(EXAMPLE_DIR)/*.asm $(EXAMPLE_DIR)/*.o
	cp le test
