CppCoreGuidelines/scripts/Makefile

75 lines
2.7 KiB
Makefile

# This Makefile is supposed to run on the Travis CI server and also locally
# it assumes the nodejs package managaer npm is installed
# make magic not needed
MAKEFLAGS += --no-builtin-rules
.SUFFIXES:
BUILD_DIR=build
SOURCEFILE = CppCoreGuidelines.md
SOURCEPATH = ../$(SOURCEFILE)
.PHONY: default
default: all
.PHONY: all
all: \
check-markdown \
check-references \
check-notabs
$(BUILD_DIR):
mkdir -p $(BUILD_DIR)
#### clean: remove all files generated by the productive rules
.PHONY: clean
clean:
rm -rf $(BUILD_DIR)
#### distclean: remove all helper executables that may be downloaded by the Makefile
.PHONY: distclean
distclean:
rm -rf ./nodejs/node_modules
#### check markdown
## run remark markdown checker based on configuration in .remarkrc
.PHONY: check-markdown
check-markdown: nodejs/node_modules/remark nodejs/remark/.remarkrc $(SOURCEPATH) $(BUILD_DIR) Makefile
## run remark, paste output to temporary file
cd nodejs; ./node_modules/.bin/remark ../$(SOURCEPATH) --no-color -q --config-path ./remark/.remarkrc 1> ../$(BUILD_DIR)/$(SOURCEFILE).fixed --frail
## show a diff with changes remark suggests
.PHONY: show-diff
show-diff: nodejs/node_modules/remark nodejs/remark/.remarkrc $(SOURCEPATH) $(BUILD_DIR) Makefile
cd nodejs; ./node_modules/.bin/remark ../$(SOURCEPATH) --no-color -q --config-path ./remark/.remarkrc 1> ../$(BUILD_DIR)/$(SOURCEFILE).fixed
## compare temporary file to original, error and fail with message if differences exist
diff $(SOURCEPATH) $(BUILD_DIR)/$(SOURCEFILE).fixed -u3 || \
(echo "Error: remark found bad markdown syntax, see output above" && false)
.PHONY: check-references
check-references: $(SOURCEPATH) $(BUILD_DIR) Makefile
## check references unique
rm -f $(BUILD_DIR)/$(SOURCEFILE).uniq
grep -oP '(?<=<a name=")[^\"]+' $(SOURCEPATH) | uniq -d > $(BUILD_DIR)/$(SOURCEFILE).uniq
## check if output has data
if [ -s "build/CppCoreGuidelines.md.uniq" ]; then echo 'Found duplicate anchors:'; cat $(BUILD_DIR)/$(SOURCEFILE).uniq; false; fi
.PHONY: check-notabs
check-notabs: $(SOURCEPATH) $(BUILD_DIR) Makefile
# find lines with tabs
# old file still might be around
rm -f $(BUILD_DIR)/CppCoreGuidelines.md.tabs
# print file, add line numbers, remove tabs from nl tool, grep for remaining tabs, replace with stars
cat ../CppCoreGuidelines.md | nl -ba | sed -s 's/\(^[^\t]*\)\t/\1--/g' | grep -P '\t' | sed -s 's/\t/\*\*\*\*/g' > $(BUILD_DIR)/CppCoreGuidelines.md.tabs
if [ -s $(BUILD_DIR)/CppCoreGuidelines.md.tabs ]; then echo 'Warning: Tabs found:'; cat $(BUILD_DIR)/CppCoreGuidelines.md.tabs; false; fi;
#### install npm modules
# install/update npm dependencies defined in file package.json
# requires npm (nodejs package manager)
nodejs/node_modules/%: nodejs/package.json
@cd nodejs; npm install