#CFLAGS += -Wall -g3  -funsigned-char -I.
CFLAGS += -Wall -g3 -O3 -funsigned-char -I.
#LDFLAGS += $(shell pkg-config --libs glib-2.0)
LDFLAGS += $(shell pkg-config --libs bdw-gc)
LDFLAGS += -lm
COMMON_OBJECTS = Formatter.o View.o Buffer.o Log.o Symbol.o Controller.o Event.o Mark.o BufferIterator.o Reactor.o InputState.o Terminfo.o encoders.o Styles.o RTF.o Linkmark.o Stylemark.o JSF.o Structured.o Mode.o ModeDetector.o ghashtable.o Directory.o MetadataMemory.o Digits.o

GTK_CFLAGS = $(CFLAGS)
GTK_LDFLAGS = $(LDFLAGS)
GTK_CFLAGS += $(shell pkg-config --cflags gtk+-2.0) -I. -I..
GTK_LDFLAGS += $(shell pkg-config --libs gtk+-2.0)

CED_OBJECTS = $(COMMON_OBJECTS) ConsoleTextDev.o cedmain.o
GED_OBJECTS = $(COMMON_OBJECTS) GtkTextDev.o gedmain.o
all: ced ged
ced: $(CED_OBJECTS)
	$(CC) -o ced $(CED_OBJECTS) $(LDFLAGS)
ged: $(GED_OBJECTS)
	$(CC) -o ged $(GED_OBJECTS) $(GTK_LDFLAGS)
cedmain.o: cedmain.c Buffer.h Symbol.h View.h Controller.h ConsoleTextDev.h Reactor.h
gedmain.o: gedmain.c Buffer.h Symbol.h View.h Controller.h GtkTextDev.h Reactor.h
	$(CC) -o $@ -c $< $(GTK_CFLAGS) 
Formatter.o: Formatter.c Formatter.h TextDev.h Reactor.h InputState.h Symbol.h Mark.h Allocator.h
View.o: View.c View.h Allocator.h Formatter.h Buffer.h TextDev.h
Buffer.o: Buffer.c Buffer.h Allocator.h Mark.h BufferIterator.h Symbol.h
BufferIterator.o: BufferIterator.c BufferIterator.h Allocator.h
Log.o: Log.c Log.h Allocator.h Event.h
Symbol.o: Symbol.c Symbol.h Allocator.h ghashtable.h
#Allocator.o: Allocator.c Allocator.h
Controller.o: Controller.c Controller.h Allocator.h View.h Buffer.h BufferIterator.h Log.h Symbol.h TextDev.h Reactor.h Event.h InputState.h Mode.h 
Event.o: Event.c Event.h Symbol.h Allocator.h
Mark.o: Mark.c Mark.h Allocator.h Buffer.h
Reactor.o: Reactor.c Reactor.h Allocator.h
InputState.o: InputState.c InputState.h Allocator.h Digits.h Symbol.h
ConsoleTextDev.o: ConsoleTextDev.c ConsoleTextDev.h TextDev.h Allocator.h Reactor.h InputState.h Event.h Symbol.h Terminfo.h Terminfo.h TextDev.inc.c
Terminfo.o: Terminfo.c Terminfo.h Allocator.h
test-TextDev: test-TextDev.o TextDev.o InputState.o Symbol.o Terminfo.o encoders.o Event.o Reactor.o
	$(CC) -o $@ test-TextDev.o TextDev.o InputState.o Symbol.o Terminfo.o encoders.o Event.o Reactor.o $(LDFLAGS)
test-Formatter: test-Formatter.o Formatter.o TextDev.o InputState.o Symbol.o Terminfo.o encoders.o Event.o Reactor.o
	$(CC) -o $@ test-Formatter.o Formatter.o TextDev.o InputState.o Symbol.o Terminfo.o encoders.o Event.o Reactor.o $(LDFLAGS)
test-TextDev.o: test-TextDev.c TextDev.h
test-Formatter.o: test-Formatter.c Formatter.h TextDev.h
Styles.o: Styles.c Styles.h Symbol.h Allocator.h
Stylemark.o: Stylemark.c Stylemark.h Mark.h Allocator.h Symbol.h
Linkmark.o: Linkmark.c Linkmark.h Mark.h Allocator.h Symbol.h
RTF.o: RTF.c RTF.h Symbol.h Buffer.h Styles.h Stylemark.h Linkmark.h Allocator.h
Structured.o: Structured.c Structured.h Symbol.h Buffer.h Styles.h Stylemark.h Linkmark.h InputState.h Mode.h
Directory.o: Directory.c Directory.h Symbol.h Buffer.h Styles.h Stylemark.h Linkmark.h InputState.h Mode.h
JSF.o: JSF.c JSF.h InputState.h Symbol.h
Mode.o: Mode.c Mode.h InputState.h Symbol.h Allocator.h View.h Buffer.h ModeDetector.h
ModeDetector.o: ModeDetector.c Mode.h InputState.h Symbol.h Allocator.h View.h Buffer.h ghashtable.h Directory.h
MetadataMemory.o: MetadataMemory.c MetadataMemory.h ghashtable.h
ghashtable.o: ghashtable.c ghashtable.h
encoders.o: encoders.c encoders.h
	$(CC) -o $@ -c $<
GtkTextDev.o: GtkTextDev.c GtkTextDev.h TextDev.h Reactor.h TextDev.inc.c
	$(CC) -o $@ -c $< $(GTK_CFLAGS) 
clean:
	rm -f -- *.o
distclean: clean