# ===== Variables ===== PEGJS_VERSION = `cat $(VERSION_FILE)` # ===== Directories ===== SRC_DIR = src LIB_DIR = lib BIN_DIR = bin BROWSER_DIR = browser SPEC_DIR = spec BENCHMARK_DIR = benchmark NODE_MODULES_DIR = node_modules NODE_MODULES_BIN_DIR = $(NODE_MODULES_DIR)/.bin # ===== Files ===== MAIN_FILE = $(LIB_DIR)/peg.js PARSER_SRC_FILE = $(SRC_DIR)/parser.pegjs PARSER_OUT_FILE = $(LIB_DIR)/parser.js BROWSER_FILE_DEV = $(BROWSER_DIR)/peg.js BROWSER_FILE_MIN = $(BROWSER_DIR)/peg.min.js SPEC_SERVER_FILE = $(SPEC_DIR)/server BENCHMARK_SERVER_FILE = $(BENCHMARK_DIR)/server VERSION_FILE = VERSION # ===== Executables ===== ESLINT = $(NODE_MODULES_BIN_DIR)/eslint BROWSERIFY = $(NODE_MODULES_BIN_DIR)/browserify UGLIFYJS = $(NODE_MODULES_BIN_DIR)/uglifyjs JASMINE_NODE = $(NODE_MODULES_BIN_DIR)/jasmine-node PEGJS = $(BIN_DIR)/pegjs BENCHMARK_RUN = $(BENCHMARK_DIR)/run # ===== Targets ===== # Default target all: browser # Generate the grammar parser parser: $(PEGJS) -o $(PARSER_OUT_FILE) $(PARSER_SRC_FILE) # Build the browser version of the library browser: mkdir -p $(BROWSER_DIR) rm -f $(BROWSER_FILE_DEV) rm -f $(BROWSER_FILE_MIN) echo "// PEG.js $(PEGJS_VERSION)" >> $(BROWSER_FILE_DEV) echo '//' >> $(BROWSER_FILE_DEV) echo '// http://pegjs.org/' >> $(BROWSER_FILE_DEV) echo '//' >> $(BROWSER_FILE_DEV) echo '// Copyright (c) 2010-2016 David Majda' >> $(BROWSER_FILE_DEV) echo '// Licensed under the MIT license.' >> $(BROWSER_FILE_DEV) $(BROWSERIFY) \ --standalone peg \ --transform [ babelify --presets [ es2015 ] --compact false ] \ $(MAIN_FILE) >> $(BROWSER_FILE_DEV) $(UGLIFYJS) \ --mangle \ --compress warnings=false \ --comments /Copyright/ \ -o $(BROWSER_FILE_MIN) \ $(BROWSER_FILE_DEV) # Remove browser version of the library (created by "browser") browserclean: rm -rf $(BROWSER_DIR) # Run the spec suite spec: $(JASMINE_NODE) --verbose $(SPEC_DIR) # Run the benchmark suite benchmark: $(BENCHMARK_RUN) # Run ESLint on the source lint: $(ESLINT) \ `find $(LIB_DIR) -name '*.js' -and -not -path '$(PARSER_OUT_FILE)'` \ `find $(SPEC_DIR) -name '*.js' -and -not -path '$(SPEC_DIR)/vendor/*'` \ $(SPEC_SERVER_FILE) \ $(BENCHMARK_DIR)/*.js \ $(BENCHMARK_RUN) \ $(BENCHMARK_SERVER_FILE) \ $(PEGJS) .PHONY: all parser browser browserclean spec benchmark lint .SILENT: all parser browser browserclean spec benchmark lint