Skip to content
This repository has been archived by the owner on Apr 22, 2020. It is now read-only.

Patch 1: makefile + fixes #467

Merged
merged 13 commits into from Jan 18, 2017
Merged
3 changes: 1 addition & 2 deletions .gitignore
@@ -1,4 +1,3 @@
*.tstamp
*~
distrib/google-code-prettify
distrib/prettify-small.tar
/google-code-prettify/
214 changes: 105 additions & 109 deletions Makefile
@@ -1,120 +1,116 @@
SHELL := /bin/bash
#!/usr/bin/make -f

# ============================================================================
# google-code-prettify Makefile
# ============================================================================
#
# Requirements:
# - Make: runs this makefile
# - Shell: runs various core utils as part of the build
# (touch, mkdir, cp, rm, wc, grep, zip)
# - Perl: runs js_include.pl script which combines/generates JS source files,
# also to run some regex search-and-replace
# - Java: runs Closure Compiler and YUI Compressor
# - Node.js: runs lang-handler-aliases.js script which generates language
# aliases from loader/lang-*.js extensions
#
# ============================================================================

CLOSURE_COMPILER=java -jar tools/closure-compiler/compiler.jar \
--warning_level VERBOSE \
--language_in ECMASCRIPT5 \
--compilation_level ADVANCED_OPTIMIZATIONS \
--charset US-ASCII
# Don't specify --charset=UTF-8. If we do, then non-ascii codepoints
# that do not correspond to line terminators are converted
# to UTF-8 sequences instead of being emitted as ASCII.
# This makes the resulting JavaScript less portable.
CLOSURE_COMPILER=java -jar tools/closure-compiler/compiler.jar \
--warning_level VERBOSE \
--language_in ECMASCRIPT5 \
--compilation_level ADVANCED_OPTIMIZATIONS \
--charset US-ASCII

YUI_COMPRESSOR=java -jar tools/yui-compressor/yuicompressor-2.4.8.jar \
--charset UTF-8

TAR_ROOT=distrib/google-code-prettify

all: distrib loader
--charset UTF-8

RE_TOKENS='s/\bPR\.PR_ATTRIB_NAME\b/"atn"/g; \
s/\bPR\.PR_ATTRIB_VALUE\b/"atv"/g; \
s/\bPR\.PR_COMMENT\b/"com"/g; \
s/\bPR\.PR_DECLARATION\b/"dec"/g; \
s/\bPR\.PR_KEYWORD\b/"kwd"/g; \
s/\bPR\.PR_LITERAL\b/"lit"/g; \
s/\bPR\.PR_PLAIN\b/"pln"/g; \
s/\bPR\.PR_PUNCTUATION\b/"pun"/g; \
s/\bPR\.PR_STRING\b/"str"/g; \
s/\bPR\.PR_TAG\b/"tag"/g; \
s/\bPR\.PR_TYPE\b/"typ"/g;'

# targets
OUT_DIR := loader/ loader/skins/ distrib/
JS_FILES := loader/prettify.js loader/run_prettify.js
LANG_FILES := $(subst src/, loader/, $(wildcard src/lang-*.js))
STYLE_FILES := $(subst src/, loader/, $(wildcard src/*.css))
SKIN_FILES := $(subst styles/, loader/skins/, $(wildcard styles/*.css))
TARGETS := $(JS_FILES) $(LANG_FILES) $(STYLE_FILES) $(SKIN_FILES)

.PHONY: all clean

all: $(TARGETS) lang-aliases.tstamp distrib/prettify-small.zip

clean:
rm -rf distrib.tstamp distrib loader.tstamp src/prettify.js src/run_prettify.js

src/prettify.js: js-modules/*.js js-modules/*.pl
@if [ -e "$@" ]; then chmod +w "$@"; fi
@perl js-modules/js_include.pl "$$(basename $@)" > "$@"
@if [ -e "$@" ]; then chmod -w "$@"; fi

src/run_prettify.js: js-modules/*.js js-modules/*.pl
@if [ -e "$@" ]; then chmod +w "$@"; fi
@perl js-modules/js_include.pl "$$(basename $@)" > "$@"
@if [ -e "$@" ]; then chmod -w "$@"; fi

distrib: distrib.tstamp distrib/prettify-small.tgz distrib/prettify-small.zip distrib/prettify-small.tar.bz2
@wc -c distrib/prettify-small.{tar.bz2,tgz,zip} \
| grep -v total

distrib.tstamp: src/prettify.js src/run_prettify.js src/*.js src/*.css
@echo Compiling
@mkdir -p $(TAR_ROOT)
@for f in src/*.css; do \
$(YUI_COMPRESSOR) --type css $$f \
> $(TAR_ROOT)/$$(basename $$f); \
wc -c $$f $(TAR_ROOT)/$$(basename $$f) \
| grep -v total; \
done
@$(CLOSURE_COMPILER) --js src/prettify.js \
--externs tools/closure-compiler/amd-externs.js \
--define IN_GLOBAL_SCOPE=true \
--output_wrapper='!function(){%output%}()' \
> $(TAR_ROOT)/prettify.js
@wc -c src/prettify.js $(TAR_ROOT)/prettify.js \
| grep -v total
@$(CLOSURE_COMPILER) --js src/run_prettify.js \
--externs tools/closure-compiler/amd-externs.js \
--define IN_GLOBAL_SCOPE=false \
--output_wrapper='!function(){%output%}()' \
> $(TAR_ROOT)/run_prettify.js
@wc -c src/run_prettify.js $(TAR_ROOT)/run_prettify.js \
| grep -v total
@for f in src/lang*.js; do \
if [ $$f -nt $(TAR_ROOT)/$$(basename $$f) ]; then \
$(CLOSURE_COMPILER) --js $$f --externs js-modules/externs.js \
| perl -pe 's/\bPR\.PR_ATTRIB_NAME\b/"atn"/g; \
s/\bPR\.PR_ATTRIB_VALUE\b/"atv"/g; \
s/\bPR\.PR_COMMENT\b/"com"/g; \
s/\bPR\.PR_DECLARATION\b/"dec"/g; \
s/\bPR\.PR_KEYWORD\b/"kwd"/g; \
s/\bPR\.PR_LITERAL\b/"lit"/g; \
s/\bPR\.PR_PLAIN\b/"pln"/g; \
s/\bPR\.PR_PUNCTUATION\b/"pun"/g; \
s/\bPR\.PR_STRING\b/"str"/g; \
s/\bPR\.PR_TAG\b/"tag"/g; \
s/\bPR\.PR_TYPE\b/"typ"/g;' \
> $(TAR_ROOT)/$$(basename $$f); \
wc -c $$f $(TAR_ROOT)/$$(basename $$f) \
| grep -v total; \
fi \
done
@touch distrib.tstamp

lang-aliases : lang-aliases.tstamp
lang-aliases.tstamp : distrib.tstamp
tools/lang-handler-aliases.sh \
distrib/google-code-prettify \
| perl -ne 'system("cp $$1 $$2") if m/^(\S+) (\S+)$$/ && ! -e $$2' \
rm -rf *.tstamp src/prettify.js src/run_prettify.js $(OUT_DIR)

# (order-only prerequisite to make sure output directories exist)
$(TARGETS): | $(OUT_DIR)

$(OUT_DIR):
mkdir -p $(OUT_DIR)

# JS_FILES
src/prettify.js src/run_prettify.js: js-modules/*.js js-modules/*.pl
@perl js-modules/js_include.pl $(notdir $@) > $@

# JS_FILES
loader/prettify.js: src/prettify.js
@$(CLOSURE_COMPILER) --js $< \
--externs tools/closure-compiler/amd-externs.js \
--define IN_GLOBAL_SCOPE=true \
--output_wrapper='!function(){%output%}()' \
--js_output_file $@
@wc -c $< $@ | grep -v total

# JS_FILES
loader/run_prettify.js: src/run_prettify.js
@$(CLOSURE_COMPILER) --js $< \
--externs tools/closure-compiler/amd-externs.js \
--define IN_GLOBAL_SCOPE=false \
--output_wrapper='!function(){%output%}()' \
--js_output_file $@
@wc -c $< $@ | grep -v total

# LANG_FILES
loader/lang-%.js: src/lang-%.js
@$(CLOSURE_COMPILER) --js $< \
--externs js-modules/externs.js \
| perl -pe $(RE_TOKENS) \
> $@
@wc -c $< $@ | grep -v total

# STYLE_FILES
loader/%.css: src/%.css
@$(YUI_COMPRESSOR) --type css $< > $@
@wc -c $< $@ | grep -v total

# SKIN_FILES
loader/skins/%.css: styles/%.css
@$(YUI_COMPRESSOR) --type css $< > $@
@wc -c $< $@ | grep -v total

# aliases
lang-aliases.tstamp: $(LANG_FILES)
@node tools/lang-handler-aliases.js \
&& touch lang-aliases.tstamp

loader : loader.tstamp lang-aliases.tstamp styles/*.css

loader.tstamp : distrib.tstamp
@cp distrib/google-code-prettify/*.{css,js} loader/ \
&& for f in styles/*.css; do \
$(YUI_COMPRESSOR) --type css $$f \
> loader/skins/$$(basename $$f); \
wc -c $$f loader/skins/$$(basename $$f) \
| grep -v total; \
done \
&& touch loader.tstamp

%.tgz: %.tar
@gzip -c -9 $^ > $@

%.tar.bz2: %.tar
@bzip2 -k -9f $^

distrib/prettify-small.tar: distrib.tstamp
tar cf $@ -C distrib google-code-prettify

distrib/prettify-small.zip: distrib.tstamp
@pushd distrib >& /dev/null; \
rm -f ../$@; \
zip -q -9 -r ../$@ google-code-prettify; \
popd >& /dev/null

distrib/prettify.tar: distrib.tstamp
mkdir -p distrib/sources/google-code-prettify
cp -fr CHANGES.html COPYING README.html Makefile \
examples js-modules src styles tests tools \
distrib/sources/google-code-prettify
tar cf distrib/prettify.tar -C distrib/sources google-code-prettify
# zip file
distrib/prettify-small.zip: $(TARGETS)
@rm -f $@ \
&& cp -R loader google-code-prettify \
&& zip -q -9 -r $@ google-code-prettify \
&& rm -rf google-code-prettify
@wc -c $@ | grep -v total