#Makefile for oCADis
COPTS = -c -fexceptions -ffast-math -Wall -o2 -I. -I./tool/  -I./object/ -I../others/agg/include -I../others/fparser/include -I../others/dxflib/include
LOPTS = -lsyllable
TOOL_MAIN = tool/tool_main/tool_main.o tool/tool_main/tool_main_state_0.o

# THE OBJECTS
OBJ_OBJ = object/object.o
OBJ_LINE = object/object_line.o
OBJ_CIRCLE = object/object_circle.o
OBJ_ARC = object/object_arc.o
OBJ_ALL_OBJECTS = $(OBJ_OBJ) $(OBJ_LINE) $(OBJ_CIRCLE) $(OBJ_ARC)

# CREATE NEW OBJECTS
TOOL_CREATE = tool/tool_create/tool_create.o tool/tool_create/tool_create_state_0.o
TOOL_LINE = tool/tool_line/tool_line.o tool/tool_line/tool_line_state_0.o tool/tool_line/tool_line_state_1.o
TOOL_CIRCLE = tool/tool_circle/tool_circle.o tool/tool_circle/tool_circle_state_0.o tool/tool_circle/tool_circle_state_1.o tool/tool_circle/tool_circle_state_2.o tool/tool_circle/tool_circle_state_3.o tool/tool_circle/tool_circle_state_4.o tool/tool_circle/tool_circle_state_5.o tool/tool_circle/tool_circle_state_6.o tool/tool_circle/tool_circle_state_7.o
TOOL_ARC = tool/tool_arc/tool_arc.o tool/tool_arc/tool_arc_state_0.o tool/tool_arc/tool_arc_state_1.o tool/tool_arc/tool_arc_state_2.o tool/tool_arc/tool_arc_state_3.o tool/tool_arc/tool_arc_state_4.o tool/tool_arc/tool_arc_state_5.o tool/tool_arc/tool_arc_state_6.o tool/tool_arc/tool_arc_state_7.o tool/tool_arc/tool_arc_state_15.o
TOOL_ALL_CREATE = $(TOOL_CREATE) $(TOOL_LINE) $(TOOL_CIRCLE) $(TOOL_ARC)

# CREATE NEW OBJECTS FROM OLD OBJECTS
TOOL_CONSTRUCT = tool/tool_construct/tool_construct.o tool/tool_construct/tool_construct_state_0.o
TOOL_COPY = tool/tool_copy/tool_copy.o tool/tool_copy/tool_copy_state_0.o tool/tool_copy/tool_copy_state_1.o tool/tool_copy/tool_copy_state_2.o
TOOL_ALL_CONSTRUCT = $(TOOL_CONSTRUCT) $(TOOL_COPY)

# MODIFY CURRENT OBJECTS
TOOL_MODIFY = tool/tool_modify/tool_modify.o tool/tool_modify/tool_modify_state_0.o
TOOL_MOVE = tool/tool_move/tool_move.o tool/tool_move/tool_move_state_0.o tool/tool_move/tool_move_state_1.o tool/tool_move/tool_move_state_2.o
TOOL_ROTATE = tool/tool_rotate/tool_rotate.o tool/tool_rotate/tool_rotate_state_0.o tool/tool_rotate/tool_rotate_state_1.o tool/tool_rotate/tool_rotate_state_2.o
TOOL_ERASE = tool/tool_erase/tool_erase.o tool/tool_erase/tool_erase_state_0.o
TOOL_ALIGN = tool/tool_align/tool_align.o tool/tool_align/tool_align_state_0.o tool/tool_align/tool_align_state_1.o
TOOL_ALL_MODIFY = $(TOOL_MODIFY) $(TOOL_MOVE) $(TOOL_ROTATE) $(TOOL_ERASE) $(TOOL_ALIGN)

GUI = gui/splitter.o
DIALOGS = dialogs/dialog.o dialogs/dialog_style.o dialogs/dialog_layer.o dialogs/dialog_guide.o dialogs/dialog_osnap.o
WINDIAS = windialogs/windia_addlayer.o windialogs/windia_modifylayer.o windialogs/windia_pagesetup.o windialogs/windia_alert.o windialogs/windia_about.o
FILTERS = filters/filter_base.o filters/filter_ocadis.o filters/filter_ocadis_old.o filters/filter_ps.o filters/filter_dxf.o
EXTERNAL = ../../others/agg/lib/libagg.a ../../others/fparser/lib/libfparser.a ../../others/dxflib/lib/libdxflib.a

OBJS = 	main.o appwindow.o common.o cadmath.o canvas.o canvasbitmap.o postoffice.o sidebar.o colour_button.o pattern.o rtsltextview.o colorrequester.o sidebar_toolbox.o sidebar_dialog.o viewcoord.o prompt.o sltextview.o tableview.o document.o undo.o layer.o transform.o   toolbox_button.o toolbox_point.o toolbox_value.o toolbox_frame.o toolbox_action.o toolbox_navigation.o toolbox.o tool/tool.o style.o bkgbitmap.o preferences.o $(DIALOGS) tool/tool_multiselect.o tool/tool_selecttool.o $(TOOL_MAIN) $(OBJ_ALL_OBJECTS) $(TOOL_ALL_CREATE) $(TOOL_ALL_CONSTRUCT) $(TOOL_ALL_MODIFY) $(WINDIAS) $(FILTERS) $(GUI) $(EXTERNAL)

OBJDIR := objs
OBJS	:= $(addprefix $(OBJDIR)/,$(OBJS))

# Rules
$(OBJDIR)/%.o : %.c
	@echo Compiling : $<
	@$(CC) $(COPTS) $< -o $@

$(OBJDIR)/%.o : %.cpp
	@echo Compiling : $<
	@$(CXX) $(COPTS) $< -o $@

$(OBJDIR)/%.o : %.s
	@echo Assembling : $<
	@$(CC) $(COPTS) -x assembler-with-cpp $< -o $@

all : objs ocadis

objs:
	@echo Creating subdirectories...
	@mkdir -p objs
	@mkdir -p objs/object
	@mkdir -p objs/dialogs
	@mkdir -p objs/windialogs
	@mkdir -p objs/filters
	@mkdir -p objs/gui
	@mkdir -p objs/tool
	@mkdir -p objs/tool/tool_main
	@mkdir -p objs/tool/tool_create
	@mkdir -p objs/tool/tool_line
	@mkdir -p objs/tool/tool_circle
	@mkdir -p objs/tool/tool_arc
	@mkdir -p objs/tool/tool_modify
	@mkdir -p objs/tool/tool_move
	@mkdir -p objs/tool/tool_copy
	@mkdir -p objs/tool/tool_erase
	@mkdir -p objs/tool/tool_rotate
	@mkdir -p objs/tool/tool_align
	@mkdir -p objs/tool/tool_construct

ocadis: $(OBJS)
	@echo Linking...
	@$(CXX) $(LOPTS)  $(OBJS) -o ocadis
	@echo Adding resources...
	@rescopy ocadis -r images/*

clean:
	@echo Cleaning...
	@rm -r $(OBJDIR)
	@rm -f ocadis
