# A Makefile for fusing Google Test and building a sample test against it.
#
# SYNOPSIS:
#
#   make [all]  - makes everything.
#   make TARGET - makes the given target.
#   make check  - makes everything and runs the built sample test.
#   make clean  - removes all files generated by make.

# Points to the root of fused Google Test, relative to where this file is.
FUSED_GTEST_DIR = output

# Paths to the fused gtest files.
FUSED_GTEST_H = $(FUSED_GTEST_DIR)/gtest/gtest.h
FUSED_GTEST_ALL_CC = $(FUSED_GTEST_DIR)/gtest/gtest-all.cc

# Where to find the sample test.
SAMPLE_DIR = ../../samples

# Where to find gtest_main.cc.
GTEST_MAIN_CC = ../../src/gtest_main.cc

# Flags passed to the preprocessor.
CPPFLAGS += -I$(FUSED_GTEST_DIR)

# Flags passed to the C++ compiler.
CXXFLAGS += -g

all : sample1_unittest

check : all
	./sample1_unittest

clean :
	rm -rf $(FUSED_GTEST_DIR) sample1_unittest *.o

$(FUSED_GTEST_H) :
	../fuse_gtest_files.py $(FUSED_GTEST_DIR)

$(FUSED_GTEST_ALL_CC) :
	../fuse_gtest_files.py $(FUSED_GTEST_DIR)

gtest-all.o : $(FUSED_GTEST_H) $(FUSED_GTEST_ALL_CC)
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(FUSED_GTEST_DIR)/gtest/gtest-all.cc

gtest_main.o : $(FUSED_GTEST_H) $(GTEST_MAIN_CC)
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(GTEST_MAIN_CC)

sample1.o : $(SAMPLE_DIR)/sample1.cc $(SAMPLE_DIR)/sample1.h
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(SAMPLE_DIR)/sample1.cc

sample1_unittest.o : $(SAMPLE_DIR)/sample1_unittest.cc \
                     $(SAMPLE_DIR)/sample1.h $(FUSED_GTEST_H)
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(SAMPLE_DIR)/sample1_unittest.cc

sample1_unittest : sample1.o sample1_unittest.o gtest-all.o gtest_main.o
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $^ -o $@
