CXXFLAGS=-g -O0 include ../common.mk ifeq ($(CXXTYPE),clang++) CXXFLAGS+=-fprofile-instr-generate -fcoverage-mapping LDFLAGS+=-fprofile-instr-generate -fcoverage-mapping else # GCC CXXFLAGS+=--coverage LDFLAGS+=--coverage endif UNITS=\ base64.cpp \ file.cpp \ mime.cpp \ os.cpp \ process.cpp \ stringhelper.cpp \ tempfile.cpp \ url.cpp UNITTESTS=\ test-archive.cpp \ test-base64.cpp \ test-file.cpp \ test-mime.cpp \ test-os.cpp \ test-process.cpp \ test-stringhelper.cpp \ test-tempfile.cpp \ test-url.cpp CXXFLAGS+=\ -I/usr/src/googletest/googletest/include \ -I/usr/src/googletest/googlemock/include \ -I/usr/src/googletest/googletest \ -I/usr/src/googletest/googlemock \ -I.. test: unittests # https://clang.llvm.org/docs/SourceBasedCodeCoverage.html ifeq ($(CXXTYPE),clang++) LLVM_PROFILE_FILE="unittests.profraw" ./unittests $(LLVMPROFDATA) merge -sparse unittests.profraw -o unittests.profdata $(LLVMCOV) report --ignore-filename-regex='google' --ignore-filename-regex='test-' --ignore-filename-regex='Magick' --show-region-summary=0 -instr-profile unittests.profdata unittests else ./unittests gcovr -r .. endif coverage: $(LLVMCOV) show -instr-profile unittests.profdata $(UNITS:.cpp=.o) unittests: libgmock.a $(UNITTESTS:.cpp=.o) $(UNITS:.cpp=.o) $(CXX) $(LDFLAGS) $^ $(LDLIBS) $(LIBS) -o $@ %.o: %.cpp $(CXX) $(CXXFLAGS) -o $@ -c $< base64.o: ../base64.cpp $(CXX) $(CXXFLAGS) -o $@ -c $< file.o: ../file.cpp $(CXX) $(CXXFLAGS) -o $@ -c $< mime.o: ../mime.cpp $(CXX) $(CXXFLAGS) -o $@ -c $< os.o: ../os.cpp $(CXX) $(CXXFLAGS) -o $@ -c $< process.o: ../process.cpp $(CXX) $(CXXFLAGS) -o $@ -c $< stringhelper.o: ../stringhelper.cpp $(CXX) $(CXXFLAGS) -o $@ -c $< tempfile.o: ../tempfile.cpp $(CXX) $(CXXFLAGS) -o $@ -c $< url.o: ../url.cpp $(CXX) $(CXXFLAGS) -o $@ -c $< libgmock.a: $(CXX) $(CXXFLAGS) -c /usr/src/googletest/googletest/src/gtest-all.cc $(CXX) $(CXXFLAGS) -c /usr/src/googletest/googlemock/src/gmock-all.cc $(CXX) $(CXXFLAGS) -c /usr/src/googletest/googlemock/src/gmock_main.cc ar -rv libgmock.a gmock-all.o gtest-all.o gmock_main.o clean: -rm -f *.o *.a unittests *.gcda *.gcno *.profraw *.profdata *.gcov