mirror of
https://github.com/Smaug123/KaTeX
synced 2025-10-06 03:38:39 +00:00
This adds a stamp file which is used to detect whether the `package.json` file got updated since the last `npm install`. If so, `npm install` is run again to update all modules to the version described in `package.json`. This happens as a dependency of only those modules which actually need some npm-installed module. Setting the corresponding make variable to the empty string disables the feature, which is used by the `make` invocation in the `prepublish` script inside `package.json` to avoid infinite loops. It can also be used by developers working in an environment with reduced connectivity, as long as they know what they are doing.
106 lines
3.3 KiB
Makefile
106 lines
3.3 KiB
Makefile
.PHONY: build dist lint setup copy serve clean metrics test zip contrib
|
|
build: lint build/katex.min.js build/katex.min.css contrib zip compress
|
|
|
|
dist: build
|
|
rm -rf dist/
|
|
cp -R build/katex/ dist/
|
|
|
|
# Export these variables for use in contrib Makefiles
|
|
export BUILDDIR = $(realpath build)
|
|
export BROWSERIFY = $(realpath ./node_modules/.bin/browserify)
|
|
export UGLIFYJS = $(realpath ./node_modules/.bin/uglifyjs) \
|
|
--mangle \
|
|
--beautify \
|
|
ascii_only=true,beautify=false
|
|
|
|
# The prepublish script in package.json will override the following variable,
|
|
# setting it to the empty string and thereby avoiding an infinite recursion
|
|
NIS = .npm-install.stamp
|
|
|
|
$(NIS) setup: package.json
|
|
npm install
|
|
@touch $(NIS)
|
|
|
|
lint: $(NIS) katex.js server.js cli.js $(wildcard src/*.js) $(wildcard test/*.js) $(wildcard contrib/*/*.js) $(wildcard dockers/*/*.js)
|
|
./node_modules/.bin/eslint $(filter-out *.stamp,$^)
|
|
|
|
build/katex.js: katex.js $(wildcard src/*.js) $(NIS)
|
|
$(BROWSERIFY) $< --standalone katex > $@
|
|
|
|
build/katex.min.js: build/katex.js
|
|
$(UGLIFYJS) < $< > $@
|
|
|
|
build/katex.less.css: static/katex.less $(wildcard static/*.less) $(NIS)
|
|
./node_modules/.bin/lessc $< $@
|
|
|
|
build/katex.min.css: build/katex.less.css
|
|
./node_modules/.bin/cleancss -o $@ $<
|
|
|
|
.PHONY: build/fonts
|
|
build/fonts:
|
|
rm -rf $@
|
|
mkdir $@
|
|
for font in $(shell grep "font" static/katex.less | grep -o "KaTeX_\w\+" | cut -d" " -f 2 | sort | uniq); do \
|
|
cp static/fonts/$$font* $@; \
|
|
done
|
|
|
|
test/screenshotter/unicode-fonts:
|
|
git clone https://github.com/Khan/KaTeX-test-fonts test/screenshotter/unicode-fonts
|
|
cd test/screenshotter/unicode-fonts && \
|
|
git checkout 99fa66a2da643218754c8236b9f9151cac71ba7c && \
|
|
cd ../../../
|
|
|
|
contrib: build/contrib
|
|
|
|
.PHONY: build/contrib
|
|
build/contrib:
|
|
mkdir -p build/contrib
|
|
@# Since everything in build/contrib is put in the built files, make sure
|
|
@# there's nothing in there we don't want.
|
|
rm -rf build/contrib/*
|
|
$(MAKE) -C contrib/auto-render
|
|
|
|
.PHONY: build/katex
|
|
build/katex: build/katex.min.js build/katex.min.css build/fonts README.md build/contrib
|
|
mkdir -p build/katex
|
|
rm -rf build/katex/*
|
|
cp -r $^ build/katex
|
|
|
|
build/katex.tar.gz: build/katex
|
|
cd build && tar czf katex.tar.gz katex/
|
|
|
|
build/katex.zip: build/katex
|
|
rm -f $@
|
|
cd build && zip -rq katex.zip katex/
|
|
|
|
zip: build/katex.tar.gz build/katex.zip
|
|
|
|
compress: build/katex.min.js build/katex.min.css
|
|
@$(eval JSSIZE!=gzip -c build/katex.min.js | wc -c)
|
|
@$(eval CSSSIZE!=gzip -c build/katex.min.css | wc -c)
|
|
@$(eval TOTAL!=echo ${JSSIZE}+${CSSSIZE} | bc)
|
|
@printf "Minified, gzipped js: %6d\n" "${JSSIZE}"
|
|
@printf "Minified, gzipped css: %6d\n" "${CSSSIZE}"
|
|
@printf "Total: %6d\n" "${TOTAL}"
|
|
|
|
serve: $(NIS)
|
|
node server.js
|
|
|
|
test: $(NIS)
|
|
JASMINE_CONFIG_PATH=test/jasmine.json node_modules/.bin/jasmine
|
|
|
|
PERL=perl
|
|
PYTHON=$(shell python2 --version >/dev/null 2>&1 && echo python2 || echo python)
|
|
|
|
metrics:
|
|
cd metrics && $(PERL) ./mapping.pl | $(PYTHON) ./extract_tfms.py | $(PYTHON) ./extract_ttfs.py | $(PYTHON) ./format_json.py > ../src/fontMetricsData.js
|
|
|
|
extended_metrics:
|
|
cd metrics && $(PERL) ./mapping.pl | $(PYTHON) ./extract_tfms.py | $(PYTHON) ./extract_ttfs.py | $(PYTHON) ./format_json.py --width > ../src/fontMetricsData.js
|
|
|
|
clean:
|
|
rm -rf build/* $(NIS)
|
|
|
|
screenshots: test/screenshotter/unicode-fonts $(NIS)
|
|
dockers/Screenshotter/screenshotter.sh
|