|
1 |
| -SHELL := /bin/bash |
| 1 | +#!/usr/bin/make -f |
| 2 | + |
| 3 | +# ============================================================================ |
| 4 | +# google-code-prettify Makefile |
| 5 | +# ============================================================================ |
| 6 | +# |
| 7 | +# Requirements: |
| 8 | +# - Make: runs this makefile |
| 9 | +# - Shell: runs various core utils as part of the build |
| 10 | +# (touch, mkdir, cp, rm, wc, grep, zip) |
| 11 | +# - Perl: runs js_include.pl script which combines/generates JS source files, |
| 12 | +# also to run some regex search-and-replace |
| 13 | +# - Java: runs Closure Compiler and YUI Compressor |
| 14 | +# - Node.js: runs lang-handler-aliases.js script which generates language |
| 15 | +# aliases from loader/lang-*.js extensions |
| 16 | +# |
| 17 | +# ============================================================================ |
2 | 18 |
|
3 |
| -CLOSURE_COMPILER=java -jar tools/closure-compiler/compiler.jar \ |
4 |
| - --warning_level VERBOSE \ |
5 |
| - --language_in ECMASCRIPT5 \ |
6 |
| - --compilation_level ADVANCED_OPTIMIZATIONS \ |
7 |
| - --charset US-ASCII |
8 | 19 | # Don't specify --charset=UTF-8. If we do, then non-ascii codepoints
|
9 | 20 | # that do not correspond to line terminators are converted
|
10 | 21 | # to UTF-8 sequences instead of being emitted as ASCII.
|
11 | 22 | # This makes the resulting JavaScript less portable.
|
| 23 | +CLOSURE_COMPILER=java -jar tools/closure-compiler/compiler.jar \ |
| 24 | + --warning_level VERBOSE \ |
| 25 | + --language_in ECMASCRIPT5 \ |
| 26 | + --compilation_level ADVANCED_OPTIMIZATIONS \ |
| 27 | + --charset US-ASCII |
12 | 28 |
|
13 | 29 | YUI_COMPRESSOR=java -jar tools/yui-compressor/yuicompressor-2.4.8.jar \
|
14 |
| - --charset UTF-8 |
15 |
| - |
16 |
| -TAR_ROOT=distrib/google-code-prettify |
17 |
| - |
18 |
| -all: distrib loader |
| 30 | + --charset UTF-8 |
| 31 | + |
| 32 | +RE_TOKENS='s/\bPR\.PR_ATTRIB_NAME\b/"atn"/g; \ |
| 33 | + s/\bPR\.PR_ATTRIB_VALUE\b/"atv"/g; \ |
| 34 | + s/\bPR\.PR_COMMENT\b/"com"/g; \ |
| 35 | + s/\bPR\.PR_DECLARATION\b/"dec"/g; \ |
| 36 | + s/\bPR\.PR_KEYWORD\b/"kwd"/g; \ |
| 37 | + s/\bPR\.PR_LITERAL\b/"lit"/g; \ |
| 38 | + s/\bPR\.PR_PLAIN\b/"pln"/g; \ |
| 39 | + s/\bPR\.PR_PUNCTUATION\b/"pun"/g; \ |
| 40 | + s/\bPR\.PR_STRING\b/"str"/g; \ |
| 41 | + s/\bPR\.PR_TAG\b/"tag"/g; \ |
| 42 | + s/\bPR\.PR_TYPE\b/"typ"/g;' |
| 43 | + |
| 44 | +# targets |
| 45 | +OUT_DIR := loader/ loader/skins/ distrib/ |
| 46 | +JS_FILES := loader/prettify.js loader/run_prettify.js |
| 47 | +LANG_FILES := $(subst src/, loader/, $(wildcard src/lang-*.js)) |
| 48 | +STYLE_FILES := $(subst src/, loader/, $(wildcard src/*.css)) |
| 49 | +SKIN_FILES := $(subst styles/, loader/skins/, $(wildcard styles/*.css)) |
| 50 | +TARGETS := $(JS_FILES) $(LANG_FILES) $(STYLE_FILES) $(SKIN_FILES) |
| 51 | + |
| 52 | +.PHONY: all clean |
| 53 | + |
| 54 | +all: $(TARGETS) lang-aliases.tstamp distrib/prettify-small.zip |
19 | 55 |
|
20 | 56 | clean:
|
21 |
| - rm -rf distrib.tstamp distrib loader.tstamp src/prettify.js src/run_prettify.js |
22 |
| - |
23 |
| -src/prettify.js: js-modules/*.js js-modules/*.pl |
24 |
| - @if [ -e "$@" ]; then chmod +w "$@"; fi |
25 |
| - @perl js-modules/js_include.pl "$$(basename $@)" > "$@" |
26 |
| - @if [ -e "$@" ]; then chmod -w "$@"; fi |
27 |
| - |
28 |
| -src/run_prettify.js: js-modules/*.js js-modules/*.pl |
29 |
| - @if [ -e "$@" ]; then chmod +w "$@"; fi |
30 |
| - @perl js-modules/js_include.pl "$$(basename $@)" > "$@" |
31 |
| - @if [ -e "$@" ]; then chmod -w "$@"; fi |
32 |
| - |
33 |
| -distrib: distrib.tstamp distrib/prettify-small.tgz distrib/prettify-small.zip distrib/prettify-small.tar.bz2 |
34 |
| - @wc -c distrib/prettify-small.{tar.bz2,tgz,zip} \ |
35 |
| - | grep -v total |
36 |
| - |
37 |
| -distrib.tstamp: src/prettify.js src/run_prettify.js src/*.js src/*.css |
38 |
| - @echo Compiling |
39 |
| - @mkdir -p $(TAR_ROOT) |
40 |
| - @for f in src/*.css; do \ |
41 |
| - $(YUI_COMPRESSOR) --type css $$f \ |
42 |
| - > $(TAR_ROOT)/$$(basename $$f); \ |
43 |
| - wc -c $$f $(TAR_ROOT)/$$(basename $$f) \ |
44 |
| - | grep -v total; \ |
45 |
| - done |
46 |
| - @$(CLOSURE_COMPILER) --js src/prettify.js \ |
47 |
| - --externs tools/closure-compiler/amd-externs.js \ |
48 |
| - --define IN_GLOBAL_SCOPE=true \ |
49 |
| - --output_wrapper='!function(){%output%}()' \ |
50 |
| - > $(TAR_ROOT)/prettify.js |
51 |
| - @wc -c src/prettify.js $(TAR_ROOT)/prettify.js \ |
52 |
| - | grep -v total |
53 |
| - @$(CLOSURE_COMPILER) --js src/run_prettify.js \ |
54 |
| - --externs tools/closure-compiler/amd-externs.js \ |
55 |
| - --define IN_GLOBAL_SCOPE=false \ |
56 |
| - --output_wrapper='!function(){%output%}()' \ |
57 |
| - > $(TAR_ROOT)/run_prettify.js |
58 |
| - @wc -c src/run_prettify.js $(TAR_ROOT)/run_prettify.js \ |
59 |
| - | grep -v total |
60 |
| - @for f in src/lang*.js; do \ |
61 |
| - if [ $$f -nt $(TAR_ROOT)/$$(basename $$f) ]; then \ |
62 |
| - $(CLOSURE_COMPILER) --js $$f --externs js-modules/externs.js \ |
63 |
| - | perl -pe 's/\bPR\.PR_ATTRIB_NAME\b/"atn"/g; \ |
64 |
| - s/\bPR\.PR_ATTRIB_VALUE\b/"atv"/g; \ |
65 |
| - s/\bPR\.PR_COMMENT\b/"com"/g; \ |
66 |
| - s/\bPR\.PR_DECLARATION\b/"dec"/g; \ |
67 |
| - s/\bPR\.PR_KEYWORD\b/"kwd"/g; \ |
68 |
| - s/\bPR\.PR_LITERAL\b/"lit"/g; \ |
69 |
| - s/\bPR\.PR_PLAIN\b/"pln"/g; \ |
70 |
| - s/\bPR\.PR_PUNCTUATION\b/"pun"/g; \ |
71 |
| - s/\bPR\.PR_STRING\b/"str"/g; \ |
72 |
| - s/\bPR\.PR_TAG\b/"tag"/g; \ |
73 |
| - s/\bPR\.PR_TYPE\b/"typ"/g;' \ |
74 |
| - > $(TAR_ROOT)/$$(basename $$f); \ |
75 |
| - wc -c $$f $(TAR_ROOT)/$$(basename $$f) \ |
76 |
| - | grep -v total; \ |
77 |
| - fi \ |
78 |
| - done |
79 |
| - @touch distrib.tstamp |
80 |
| - |
81 |
| -lang-aliases : lang-aliases.tstamp |
82 |
| -lang-aliases.tstamp : distrib.tstamp |
83 |
| - tools/lang-handler-aliases.sh \ |
84 |
| - distrib/google-code-prettify \ |
85 |
| - | perl -ne 'system("cp $$1 $$2") if m/^(\S+) (\S+)$$/ && ! -e $$2' \ |
| 57 | + rm -rf *.tstamp src/prettify.js src/run_prettify.js $(OUT_DIR) |
| 58 | + |
| 59 | +# (order-only prerequisite to make sure output directories exist) |
| 60 | +$(TARGETS): | $(OUT_DIR) |
| 61 | + |
| 62 | +$(OUT_DIR): |
| 63 | + mkdir -p $(OUT_DIR) |
| 64 | + |
| 65 | +# JS_FILES |
| 66 | +src/prettify.js src/run_prettify.js: js-modules/*.js js-modules/*.pl |
| 67 | + @perl js-modules/js_include.pl $(notdir $@) > $@ |
| 68 | + |
| 69 | +# JS_FILES |
| 70 | +loader/prettify.js: src/prettify.js |
| 71 | + @$(CLOSURE_COMPILER) --js $< \ |
| 72 | + --externs tools/closure-compiler/amd-externs.js \ |
| 73 | + --define IN_GLOBAL_SCOPE=true \ |
| 74 | + --output_wrapper='!function(){%output%}()' \ |
| 75 | + --js_output_file $@ |
| 76 | + @wc -c $< $@ | grep -v total |
| 77 | + |
| 78 | +# JS_FILES |
| 79 | +loader/run_prettify.js: src/run_prettify.js |
| 80 | + @$(CLOSURE_COMPILER) --js $< \ |
| 81 | + --externs tools/closure-compiler/amd-externs.js \ |
| 82 | + --define IN_GLOBAL_SCOPE=false \ |
| 83 | + --output_wrapper='!function(){%output%}()' \ |
| 84 | + --js_output_file $@ |
| 85 | + @wc -c $< $@ | grep -v total |
| 86 | + |
| 87 | +# LANG_FILES |
| 88 | +loader/lang-%.js: src/lang-%.js |
| 89 | + @$(CLOSURE_COMPILER) --js $< \ |
| 90 | + --externs js-modules/externs.js \ |
| 91 | + | perl -pe $(RE_TOKENS) \ |
| 92 | + > $@ |
| 93 | + @wc -c $< $@ | grep -v total |
| 94 | + |
| 95 | +# STYLE_FILES |
| 96 | +loader/%.css: src/%.css |
| 97 | + @$(YUI_COMPRESSOR) --type css $< > $@ |
| 98 | + @wc -c $< $@ | grep -v total |
| 99 | + |
| 100 | +# SKIN_FILES |
| 101 | +loader/skins/%.css: styles/%.css |
| 102 | + @$(YUI_COMPRESSOR) --type css $< > $@ |
| 103 | + @wc -c $< $@ | grep -v total |
| 104 | + |
| 105 | +# aliases |
| 106 | +lang-aliases.tstamp: $(LANG_FILES) |
| 107 | + @node tools/lang-handler-aliases.js \ |
86 | 108 | && touch lang-aliases.tstamp
|
87 | 109 |
|
88 |
| -loader : loader.tstamp lang-aliases.tstamp styles/*.css |
89 |
| - |
90 |
| -loader.tstamp : distrib.tstamp |
91 |
| - @cp distrib/google-code-prettify/*.{css,js} loader/ \ |
92 |
| - && for f in styles/*.css; do \ |
93 |
| - $(YUI_COMPRESSOR) --type css $$f \ |
94 |
| - > loader/skins/$$(basename $$f); \ |
95 |
| - wc -c $$f loader/skins/$$(basename $$f) \ |
96 |
| - | grep -v total; \ |
97 |
| - done \ |
98 |
| - && touch loader.tstamp |
99 |
| - |
100 |
| -%.tgz: %.tar |
101 |
| - @gzip -c -9 $^ > $@ |
102 |
| - |
103 |
| -%.tar.bz2: %.tar |
104 |
| - @bzip2 -k -9f $^ |
105 |
| - |
106 |
| -distrib/prettify-small.tar: distrib.tstamp |
107 |
| - tar cf $@ -C distrib google-code-prettify |
108 |
| - |
109 |
| -distrib/prettify-small.zip: distrib.tstamp |
110 |
| - @pushd distrib >& /dev/null; \ |
111 |
| - rm -f ../$@; \ |
112 |
| - zip -q -9 -r ../$@ google-code-prettify; \ |
113 |
| - popd >& /dev/null |
114 |
| - |
115 |
| -distrib/prettify.tar: distrib.tstamp |
116 |
| - mkdir -p distrib/sources/google-code-prettify |
117 |
| - cp -fr CHANGES.html COPYING README.html Makefile \ |
118 |
| - examples js-modules src styles tests tools \ |
119 |
| - distrib/sources/google-code-prettify |
120 |
| - tar cf distrib/prettify.tar -C distrib/sources google-code-prettify |
| 110 | +# zip file |
| 111 | +distrib/prettify-small.zip: $(TARGETS) |
| 112 | + @rm -f $@ \ |
| 113 | + && cp -R loader google-code-prettify \ |
| 114 | + && zip -q -9 -r $@ google-code-prettify \ |
| 115 | + && rm -rf google-code-prettify |
| 116 | + @wc -c $@ | grep -v total |
0 commit comments