#%ARCHIVE = libd2_region.a
#%DEPENDS = d2_vector angle math_extension float_traits ref_count_ptr unit_test

CXX = ../../bin/g++w
MAKE_ARCHIVE = ../../bin/make-archive
RM = rm
CHDIR = cd

INCLUDES = -I../d2_vector/include -I../angle/include \
	   -I../math_extension/include -I../float_traits/include \
	   -I../ref_count_ptr/include \
	   -I../unit_test/include

CXXFLAGS = -g $(CCXXOPTFLAGS) $(CXXOPTFLAGS) $(INCLUDES) \
	      $(CCXXADDITIONALFLAGS) $(CXXADDITIONALFLAGS) \
		-DLIB_MEMORY -DNO_IMPLEMENTATION_WARNING \
		-DSTRICT_FLOAT_CHECK

LIB_D2_VECTOR = ../d2_vector/libd2_vector.a

LDFLAGS = -lm $(LDADDITIONALFLAGS)

OBJS = d2_region.o \
       d2_universal_region.o d2_composite_region.o \
       d2_point.o d2_straight_line.o \
       d2_straight_line_divided_region.o \
       d2_composite_straight_line_divided_region_interface.o \
       d2_segment.o d2_triangle.o d2_polygon.o

TESTS = d2_triangle-test d2_segment-test d2_polygon-test


all: check

library: libd2_region.a

library-lean: library
	$(RM) -f *.o d2_region-test

libd2_region.a: $(OBJS)
	$(MAKE_ARCHIVE) libd2_region.a $(OBJS)

d2_region-test: d2_region-test.o libd2_region.a $(LIB_D2_VECTOR)
	$(CXX) -o d2_region-test d2_region-test.o \
		  $(CXXFLAGS) -L. -ld2_region $(LIB_D2_VECTOR) $(LDFLAGS)

$(LIB_D2_VECTOR):
	($(CHDIR) ../d2_vector && $(MAKE) libd2_vector.a)

check: $(TESTS)
	@for t in $(TESTS); do echo == $${t} == && ./$${t} || exit 1; done

clean:
	$(RM) -f *.o libd2_region.a d2_region-test $(TESTS)

.PHONY: all library library-lean check clean


##
d2_region.o: d2_region.h d2_region.cc
d2_universal_region.o: d2_universal_region.h d2_universal_region.cc
d2_composite_region.o: d2_composite_region.h d2_composite_region.cc
d2_point.o: d2_point.h d2_point.cc
d2_straight_line.o: d2_straight_line.h d2_straight_line.cc d2_region.h
d2_straight_line_divided_region.o: d2_straight_line_divided_region.h \
				   d2_straight_line_divided_region.cc \
				   d2_straight_line.h
d2_composite_straight_line_divided_region_interface.o: \
	d2_composite_straight_line_divided_region_interface.h \
	d2_composite_straight_line_divided_region_interface.cc \
	d2_straight_line_divided_region.h d2_straight_line.h

#
d2_segment.o: d2_segment.h d2_segment.cc d2_triangle.h
d2_segment-test.o: d2_segment-test.cc d2_segment.h d2_triangle.h
d2_segment-test: d2_segment-test.o libd2_region.a $(LIB_D2_VECTOR)
	$(CXX) -o d2_segment-test d2_segment-test.o \
		  $(CXXFLAGS) -L. -ld2_region $(LIB_D2_VECTOR) $(LDFLAGS)

d2_triangle.o: d2_triangle.h d2_triangle.cc d2_segment.h
d2_triangle-test.o: d2_triangle-test.cc d2_triangle.h d2_segment.h
d2_triangle-test: d2_triangle-test.o libd2_region.a $(LIB_D2_VECTOR)
	$(CXX) -o d2_triangle-test d2_triangle-test.o \
		  $(CXXFLAGS) -L. -ld2_region $(LIB_D2_VECTOR) $(LDFLAGS)

d2_polygon.o: d2_polygon.h d2_polygon.cc d2_triangle.h d2_segment.h \
	      d2_rectangle_region.h
d2_polygon-test.o: d2_polygon-test.cc d2_polygon.h d2_triangle.h \
		   d2_rectangle_region.h
d2_polygon-test: d2_polygon-test.o libd2_region.a $(LIB_D2_VECTOR)
	$(CXX) -o d2_polygon-test d2_polygon-test.o \
		  $(CXXFLAGS) -L. -ld2_region $(LIB_D2_VECTOR) $(LDFLAGS)
