e6b45952b3
added content to the readme added fff for function faking fixed coverage reports of the integrationtest added testscenarios to test the history buffer
177 lines
7.2 KiB
Makefile
177 lines
7.2 KiB
Makefile
#
|
|
# Copyright (c) 2019 - 2021 Stefan Strobel <stefan.strobel@shimatta.net>
|
|
#
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
#
|
|
|
|
OBJ_DIR := output/
|
|
INTEGRATIONTEST_CPP_OBJ_DIR := $(OBJ_DIR)test/integrationtest/
|
|
INTEGRATIONTEST_C_OBJ_DIR := $(INTEGRATIONTEST_CPP_OBJ_DIR)
|
|
UNITTEST_OBJ_DIR := $(OBJ_DIR)test/unittest/
|
|
|
|
CC := gcc
|
|
CPP := g++
|
|
LN := ln
|
|
|
|
SOURCES := src/shellmatta.c \
|
|
src/shellmatta_autocomplete.c \
|
|
src/shellmatta_history.c \
|
|
src/shellmatta_utils.c \
|
|
src/shellmatta_escape.c \
|
|
src/shellmatta_opt.c
|
|
|
|
INCLUDES := api .
|
|
|
|
UNITTEST_SOURCES := test/unittest/test_main.cpp \
|
|
test/unittest/shellmatta_opt/test_opt_findNextHunk.cpp \
|
|
test/unittest/shellmatta_opt/test_opt_peekNextHunk.cpp \
|
|
test/unittest/shellmatta_utils/test_utils_writeEcho.cpp \
|
|
test/unittest/shellmatta_utils/test_utils_shellItoa.cpp \
|
|
test/unittest/shellmatta_utils/test_utils_saveCursorPos.cpp \
|
|
test/unittest/shellmatta_utils/test_utils_restoreCursorPos.cpp \
|
|
test/unittest/shellmatta_utils/test_utils_eraseLine.cpp \
|
|
test/unittest/shellmatta_utils/test_utils_rewindCursor.cpp \
|
|
test/unittest/shellmatta_utils/test_utils_forwardCursor.cpp \
|
|
test/unittest/shellmatta_utils/test_utils_clearInput.cpp \
|
|
test/unittest/shellmatta_utils/test_utils_insertChars.cpp \
|
|
test/unittest/shellmatta_utils/test_utils_terminateInput.cpp \
|
|
test/unittest/shellmatta_utils/test_utils_removeChars.cpp \
|
|
test/unittest/shellmatta_autocomplete/test_autocomplete_run.cpp \
|
|
test/unittest/shellmatta_escape/test_escape_processArrowKeys.cpp \
|
|
test/unittest/shellmatta_history/test_appendHistoryByte.cpp \
|
|
test/unittest/shellmatta/test_shellmatta_doInit.cpp
|
|
|
|
INTEGRATIONTEST_SOURCES := test/integrationtest/test_main.cpp \
|
|
test/integrationtest/test_integration.cpp \
|
|
test/integrationtest/test_integration_opt.cpp \
|
|
test/integrationtest/test_integration_optLong.cpp \
|
|
test/integrationtest/test_integration_continue.cpp \
|
|
test/integrationtest/test_integration_busy.cpp \
|
|
test/integrationtest/test_integration_history.cpp
|
|
|
|
UNITTEST_CPPOBJ := $(patsubst %.cpp,$(UNITTEST_OBJ_DIR)%.o,$(UNITTEST_SOURCES))
|
|
|
|
INTEGRATIONTEST_CPPOBJ := $(patsubst %.cpp,$(INTEGRATIONTEST_CPP_OBJ_DIR)%.o,$(INTEGRATIONTEST_SOURCES))
|
|
INTEGRATIONTEST_COBJ := $(patsubst %.c,$(INTEGRATIONTEST_CPP_OBJ_DIR)%.o,$(SOURCES))
|
|
|
|
CFLAGS := $(INCLUDES:%=-I%) -g -Wall -Werror -Wextra -pedantic -DSHELLMATTA_HELP_ALIAS=\(char*\)\"?\"
|
|
TESTFLAGS := $(CFLAGS) -fprofile-arcs -ftest-coverage
|
|
TESTLFLAGS := -fprofile-arcs -Wl,--allow-multiple-definition
|
|
|
|
DEPEND = -MT $@ -MF "$(@:%.o=%.d)" -MG -MM
|
|
|
|
COBJ := $(patsubst %.c,$(OBJ_DIR)%.o,$(SOURCES))
|
|
|
|
EXAMPLE_SOURCES := example/main.c
|
|
EXAMPLE_COBJ := $(patsubst %.c,$(OBJ_DIR)%.o,$(EXAMPLE_SOURCES))
|
|
|
|
EXAMPLE_TARGET := $(OBJ_DIR)example/example
|
|
|
|
UNITTEST_TARGET := $(OBJ_DIR)test/unittest/unittest
|
|
|
|
INTEGRATIONTEST_TARGET := $(OBJ_DIR)test/integrationtest/integrationtest
|
|
|
|
OBJ := $(COBJ) $(EXAMPLE_COBJ) $(UNITTEST_CPPOBJ) $(INTEGRATIONTEST_CPPOBJ) $(INTEGRATIONTEST_COBJ)
|
|
DEPS := $(OBJ:%.o=%.d)
|
|
|
|
export
|
|
|
|
help:
|
|
@echo Shellmatta help
|
|
@echo -----------------------------------------------
|
|
@echo test - run all tests
|
|
@echo cppcheck - run static code analysis (cppcheck)
|
|
@echo example - build example
|
|
@echo -----------------------------------------------
|
|
|
|
test: unittest integrationtest
|
|
|
|
cppcheck:
|
|
- @mkdir -p output/cppcheck/html
|
|
cppcheck --enable=all --template=gcc --cppcheck-build-dir=output/cppcheck $(SOURCES)
|
|
cppcheck --enable=all --template=gcc --cppcheck-build-dir=output/cppcheck $(SOURCES) --xml 2>output/cppcheck/cppcheck.xml
|
|
cppcheck-htmlreport --file=output/cppcheck/cppcheck.xml --title="Shellmatta" --report-dir=output/cppcheck/html
|
|
|
|
unittest: $(UNITTEST_TARGET)
|
|
- @mkdir -p output/test/unittest/report
|
|
@echo running test:
|
|
# remove coverage from former run
|
|
@-find . -name "*.gcda" -type f -delete
|
|
-$(UNITTEST_TARGET)
|
|
|
|
# remove report from former run
|
|
-rm -rf $(OBJ_DIR)test/unittest/report/*
|
|
gcovr --html-details --output $(OBJ_DIR)test/unittest/report/report.html output/test/unittest -f src -f api -d
|
|
|
|
integrationtest: $(INTEGRATIONTEST_TARGET)
|
|
- @mkdir -p output/test/integrationtest/report
|
|
@echo running test:
|
|
# remove coverage from former run
|
|
# @-find . -name "*.gcda" -type f -delete
|
|
-$(INTEGRATIONTEST_TARGET)
|
|
|
|
# remove report from former run
|
|
# -rm -rf $(OBJ_DIR)test/unittest/report/*
|
|
gcovr --html-details --output $(OBJ_DIR)test/integrationtest/report/report.html output/test/integrationtest -f src -f api -d
|
|
|
|
example: $(EXAMPLE_TARGET)
|
|
@echo building example
|
|
|
|
doc:
|
|
- @mkdir -p output/doc/html
|
|
- @mkdir -p output/doc/latex
|
|
doxygen cfg/doxygen/doxyfile
|
|
|
|
clean:
|
|
- rm -rf $(OBJ_DIR)
|
|
|
|
$(EXAMPLE_TARGET): $(COBJ) $(EXAMPLE_COBJ)
|
|
- @mkdir -p $(@D)
|
|
$(CC) $(LFLAGS) $(LIB_PATH) -o $@ $^ $(LIBS)
|
|
|
|
$(UNITTEST_TARGET): $(UNITTEST_CPPOBJ)
|
|
- @mkdir -p $(@D)
|
|
$(CPP) $(TESTLFLAGS) $(LIB_PATH) -o $@ $^ $(LIBS)
|
|
|
|
$(INTEGRATIONTEST_TARGET): $(INTEGRATIONTEST_CPPOBJ) $(INTEGRATIONTEST_COBJ)
|
|
- @mkdir -p $(@D)
|
|
$(CPP) $(TESTLFLAGS) $(LIB_PATH) -o $@ $^ $(LIBS)
|
|
|
|
$(TARGET): $(OBJ)
|
|
- @mkdir -p $(@D)
|
|
$(CC) $(LFLAGS) $(LIB_PATH) -o $@ $^ $(LIBS)
|
|
|
|
$(COBJ):
|
|
- @mkdir -p $(@D)
|
|
@$(CC) -c $(CFLAGS) $(DEPEND) -o $@ $(subst $(OBJ_DIR), ,$(@:%.o=%.c))
|
|
$(CC) -c $(CFLAGS) -o $@ $(subst $(OBJ_DIR), ,$(@:%.o=%.c))
|
|
|
|
$(EXAMPLE_COBJ):
|
|
- @mkdir -p $(@D)
|
|
@$(CC) -c $(CFLAGS) $(DEPEND) -o $@ $(subst $(OBJ_DIR), ,$(@:%.o=%.c))
|
|
$(CC) -c $(CFLAGS) -o $@ $(subst $(OBJ_DIR), ,$(@:%.o=%.c))
|
|
|
|
$(UNITTEST_CPPOBJ):
|
|
- @mkdir -p $(@D)
|
|
@$(CPP) -c $(TESTFLAGS) $(DEPEND) -o $@ $(subst $(UNITTEST_OBJ_DIR), ,$(@:%.o=%.cpp))
|
|
$(CPP) -c $(TESTFLAGS) -o $@ $(subst $(UNITTEST_OBJ_DIR), ,$(@:%.o=%.cpp))
|
|
|
|
$(INTEGRATIONTEST_CPPOBJ):
|
|
- @mkdir -p $(@D)
|
|
@$(CPP) -c $(TESTFLAGS) $(DEPEND) -o $@ $(subst $(INTEGRATIONTEST_CPP_OBJ_DIR), ,$(@:%.o=%.cpp))
|
|
$(CPP) -c $(TESTFLAGS) -o $@ $(subst $(INTEGRATIONTEST_CPP_OBJ_DIR), ,$(@:%.o=%.cpp))
|
|
|
|
$(INTEGRATIONTEST_COBJ):
|
|
- @mkdir -p $(@D)
|
|
@$(CC) -c $(TESTFLAGS) $(DEPEND) -o $@ $(subst $(INTEGRATIONTEST_C_OBJ_DIR), ,$(@:%.o=%.c))
|
|
$(CC) -c $(TESTFLAGS) -o $@ $(subst $(INTEGRATIONTEST_C_OBJ_DIR), ,$(@:%.o=%.c))
|
|
|
|
%.o: %.cpp
|
|
- @mkdir -p $(@D)
|
|
@$(CPP) -c $(CFLAGS) $(DEPEND) -o $@ $(subst $(OBJ_DIR), ,$(@:%.o=%.c))
|
|
$(CPP) -c $(CFLAGS) -o $@ $<
|
|
|
|
-include $(DEPS)
|