# Makefile for Lab 08 (Ten Short C++ Labs)
# wget http://oceanai.mit.edu/cpplabs/lab08/Makefile

all: shapes_v1 shapes_v2 shapes_v3 shapes_v4 shapes_v5 shapes_v6

#----------------------------------------------------------------------
# Builing a simple Triangle and Square subclass
v1_source  = shapes_v1.cpp Triangle.cpp Square.cpp
v1_headers = Triangle.h Square.h 

shapes_v1: ../lib_geometry/libgeometry.a $(v1_source) $(v1_headers)
	g++ -I../lib_geometry -L../lib_geometry -lgeometry -o shapes_v1 $(v1_source) 

#----------------------------------------------------------------------
# Using an inherited function getPerimeter in the subclasses
v2_source  = shapes_v2.cpp TriangleV2.cpp SquareV2.cpp SegListV2.cpp 
v2_headers = TriangleV2.h SquareV2.h SegListV2.h

shapes_v2: ../lib_geometry/libgeometry.a $(v2_source) $(v2_headers)
	g++ -I../lib_geometry -L../lib_geometry -lgeometry -o shapes_v2 $(v2_source) 

#----------------------------------------------------------------------
# Polymorphism: implementing an area() function in the subclasses
v3_source  = shapes_v3.cpp TriangleV3.cpp SquareV3.cpp SegListV3.cpp 
v3_headers = TriangleV3.h SquareV3.h SegListV3.h

shapes_v3: ../lib_geometry/libgeometry.a $(v3_source) $(v3_headers)
	g++ -I../lib_geometry -L../lib_geometry -lgeometry -o shapes_v3 $(v3_source) 

#----------------------------------------------------------------------
# Virtual functions: making area() virtual, using base-class pointers
v4_source  = shapes_v4.cpp TriangleV4.cpp SquareV4.cpp SegListV4.cpp 
v4_headers = TriangleV4.h SquareV4.h SegListV4.h

shapes_v4: ../lib_geometry/libgeometry.a $(v4_source) $(v4_headers)
	g++ -I../lib_geometry -L../lib_geometry -lgeometry -o shapes_v4 $(v4_source) 

#----------------------------------------------------------------------
# Moving the getSpec() function totally into the superclass
v5_source  = shapes_v5.cpp TriangleV5.cpp SquareV5.cpp SegListV5.cpp 
v5_headers = TriangleV5.h SquareV5.h SegListV5.h

shapes_v5: ../lib_geometry/libgeometry.a $(v5_source) $(v5_headers)
	g++ -I../lib_geometry -L../lib_geometry -lgeometry -o shapes_v5 $(v5_source) 

#----------------------------------------------------------------------
# Moving the getSpec() function totally into the superclass
v6_source  = shapes_v6.cpp TriangleV6.cpp SquareV6.cpp SegListV6.cpp 
v6_headers = TriangleV6.h SquareV6.h SegListV6.h

shapes_v6: ../lib_geometry/libgeometry.a $(v6_source) $(v6_headers)
	g++ -I../lib_geometry -L../lib_geometry -lgeometry -o shapes_v6 $(v6_source) 

#----------------------------------------------------------------------
clean:
	rm -f shapes_v1 shapes_v2 shapes_v3 shapes_v4 shapes_v5 shapes_v6