# Build CXX = gcc CXXFLAGS = -Wall -Wextra -pedantic OPTIFLAG = -O2 DEBUGFLAG = -g COVFLAG = --coverage PROFFLAG = -g -pg # Executables UTFPATGEN_BIN = ./build/utfpatgen UNITTEST_BIN = ./build/unit_test # Test files PARAMPROFILE = ./test/cshyphen.in DICTIONARY = ./test/wortliste10k.wlh OUTFILE = ./test/output.pat TRANSLATEFILE = ./test/german.tr ifeq ($(OS),Windows_NT) EXT = .exe EMPTY = NUL else EXT = EMPTY = /dev/null endif # Targets .PHONY: all coverage build-profile build-debug build-execute analyze-cov run run-tests run-patgen all: clean utfpatgen.pdf build-execute run # Run configurations run: sed -b 's/1/\xFE\x01/g; s/2/\xFE\x02/g; s/3/\xFE\x03/g; s/4/\xFE\x04/g; s/5/\xFE\x05/g; s/6/\xFE\x06/g; s/7/\xFE\x07/g; s/8/\xFE\x08/g; s/9/\xFE\x09/g' $(DICTIONARY) > $(DICTIONARY)_utfp cat $(PARAMPROFILE) | $(UTFPATGEN_BIN) $(DICTIONARY)_utfp $(EMPTY) $(OUTFILE)_pre $(TRANSLATEFILE) sed -b 's/\xFE\x01/1/g; s/\xFE\x02/2/g; s/\xFE\x03/3/g; s/\xFE\x04/4/g; s/\xFE\x05/5/g; s/\xFE\x06/6/g; s/\xFE\x07/7/g; s/\xFE\x08/8/g; s/\xFE\x09/9/g' $(OUTFILE)_pre > $(OUTFILE) rm -f $(DICTIONARY)_utfp $(OUTFILE)_pre run-tests: $(UNITTEST_BIN) run-patgen: cat $(PARAMPROFILE) | patgen $(DICTIONARY) $(EMPTY) $(OUTFILE) $(TRANSLATEFILE) # Executables build-execute: test/unit_test.c | build build/utfpatgen.c cp utfpatgen.h build/ $(CXX) $(CXXFLAGS) $(OPTIFLAG) -o build/utfpatgen build/utfpatgen.c $(CXX) $(CXXFLAGS) $(OPTIFLAG) -DTEST -o build/unit_test build/utfpatgen.c test/unit_test.c $(eval UTFPATGEN_BIN = ./build/utfpatgen) $(eval UNITTEST_BIN = ./build/unit_test) rm build/utfpatgen.h build-coverage: test/unit_test.c | build build/utfpatgen.c cp utfpatgen.h build/ $(CXX) $(CXXFLAGS) $(COVFLAG) -o build/utfpatgen_cov build/utfpatgen.c $(CXX) $(CXXFLAGS) $(COVFLAG) -DTEST -o build/unit_test_cov build/utfpatgen.c test/unit_test.c $(eval UTFPATGEN_BIN = ./build/utfpatgen_cov) $(eval UNITTEST_BIN = ./build/unit_test_cov) rm build/utfpatgen.h build-profile: test/unit_test.c | build build/utfpatgen.c cp utfpatgen.h build/ $(CXX) $(CXXFLAGS) $(PROFFLAG) -o build/utfpatgen_prof build/utfpatgen.c $(CXX) $(CXXFLAGS) $(PROFFLAG) -DTEST -o build/unit_test_prof build/utfpatgen.c test/unit_test.c $(eval UTFPATGEN_BIN = ./build/utfpatgen_prof) $(eval UNITTEST_BIN = ./build/unit_test_prof) rm build/utfpatgen.h analyze-prof: build-profile run gprof -b $(UTFPATGEN_BIN)$(EXT) ./gmon.out | gprof2dot | dot -Tpng -o profile_visual.png build-debug: test/unit_test.c | build build/utfpatgen.c cp utfpatgen.h build/ $(CXX) $(CXXFLAGS) $(DEBUGFLAG) -o build/utfpatgen_debug build/utfpatgen.c $(CXX) $(CXXFLAGS) $(DEBUGFLAG) -DTEST -o build/unit_test_debug build/utfpatgen.c test/unit_test.c $(eval UTFPATGEN_BIN = ./build/utfpatgen_debug) $(eval UNITTEST_BIN = ./build/unit_test_debug) rm build/utfpatgen.h build: mkdir build # PDF documentation build/utfpatgen.tex: utfpatgen.w | build cweave $< - $@ utfpatgen.pdf: build/utfpatgen.tex | build cp cweb.cls build/ cp cwebacromac.tex build/ cp cwebmac.tex build/ cd build; pdftex utfpatgen.tex cd build; pdftex utfpatgen.tex rm build/cweb.cls build/cwebacromac.tex build/cwebmac.tex mv build/utfpatgen.pdf utfpatgen.pdf # C source code build/utfpatgen.c: utfpatgen.w | build ctangle $< - $@ # Cleaning .PHONY: clean clean: rm -rf utfpatgen.pdf build pattmp.* profile_visual.png build/ gmon.out