blob: 1eddcf34c8f76814e9542ffdc41afaf79f37f78c [file] [log] [blame]
mikesamuel63dba942012-11-06 16:15:19 +00001default: javadoc runtests findbugs
2
mikesamuelb54a71c2012-09-22 22:48:19 +00003help:
4 @echo "Usage: make [<target> ...]"
5 @echo ""
6 @echo "Targets include:"
mikesamuel2394e9a2013-02-12 22:44:42 +00007 @echo " help - Displays this message."
8 @echo " ----------- QUICK"
9 @echo " clean - Delete all built files."
10 @echo " default - Build documentation&classes, and run checks."
11 @echo " The output will be available under out/."
12 @echo " ----------- DIAGNOSTIC"
13 @echo " classes - Put Java .class files under out/."
14 @echo " tests - Compile tests."
15 @echo " runtests - Runs tests. Some require a network connection."
16 @echo " coverage - Runs tests and generates a code coverage report."
17 @echo " findbugs - Runs a code quality tool. Slow."
18 @echo " benchmark - Times the sanitizer against a tree builder."
19 @echo " profile - Profiles the benchmark."
20 @echo " ----------- ARTIFACTS"
21 @echo " distrib - Build everything and package it into JARs."
22 @echo " Requires an svn executable on PATH."
23 @echo " release - Additionally, cut a new Maven version."
24 @echo " Should be run from client that has sibling"
25 @echo " directories of trunk checked out."
26 @echo " download - Bundle docs, externally required jars, and"
27 @echo " license files into a zip file suitable for"
28 @echo " the code.google site downloads."
mikesamuel8e2bb422013-07-17 00:07:10 +000029 @echo ""
30 @echo "For more verbose test runner output, do"
31 @echo " make VERBOSE=1 runtests"
32 @echo ""
33 @echo "To run tests with assertions on, do"
mikesamuel195fd712013-07-17 16:51:25 +000034 @echo " make NOASSERTS=1 runtests"
mikesamuelb54a71c2012-09-22 22:48:19 +000035
mikesamuel77740a72013-07-17 22:12:43 +000036SHELL=/bin/bash
mikesamuel0f3a7562011-03-02 19:03:22 +000037CLASSPATH=lib/guava-libraries/guava.jar:lib/jsr305/jsr305.jar
mikesamuelee7fe142011-08-02 17:01:39 +000038TEST_CLASSPATH=$(CLASSPATH):lib/htmlparser-1.3/htmlparser-1.3.jar:lib/junit/junit.jar:lib/commons-codec-1.4/commons-codec-1.4.jar:benchmark-data
mikesamuelb530bfd2011-11-02 00:33:00 +000039JAVAC_FLAGS=-source 1.5 -target 1.5 -Xlint -encoding UTF-8
mikesamuel8e2bb422013-07-17 00:07:10 +000040TEST_RUNNER=junit.textui.TestRunner
mikesamuel195fd712013-07-17 16:51:25 +000041JASSERTS=-ea
mikesamuel39d10de2014-02-27 21:00:22 +000042# Run tests in the Turkish locale to trigger any extra-case-folding-rule bugs
43# http://www.moserware.com/2008/02/does-your-code-pass-turkey-test.html
44TURKEYTEST=-Duser.counter=TR -Duser.language-tr
mikesamuel3a3d9122011-03-02 16:32:53 +000045
mikesamuel8e2bb422013-07-17 00:07:10 +000046ifdef VERBOSE
47override TEST_RUNNER=org.owasp.html.VerboseTestRunner
48endif
49
mikesamuel195fd712013-07-17 16:51:25 +000050ifdef NOASSERTS
51override JASSERTS=
mikesamuel8e2bb422013-07-17 00:07:10 +000052endif
mikesamuel3a3d9122011-03-02 16:32:53 +000053
mikesamuel2a41aba2013-02-12 22:32:20 +000054out:
mikesamuel2394e9a2013-02-12 22:44:42 +000055 mkdir -p out
mikesamuel2a41aba2013-02-12 22:32:20 +000056
57out/classes: out
mikesamuel2394e9a2013-02-12 22:44:42 +000058 mkdir -p out/classes
mikesamuel2a41aba2013-02-12 22:32:20 +000059
60out/genfiles: out
mikesamuel2394e9a2013-02-12 22:44:42 +000061 mkdir -p out/genfiles
mikesamuel2a41aba2013-02-12 22:32:20 +000062
manico.james@gmail.com5c702c12011-03-01 08:47:19 +000063clean:
64 rm -rf out
65
mikesamuel0f3a7562011-03-02 19:03:22 +000066classes: out/classes.tstamp
mikesamuel2a41aba2013-02-12 22:32:20 +000067out/classes.tstamp: out/classes src/main/org/owasp/html/*.java
68 javac -g ${JAVAC_FLAGS} -classpath ${CLASSPATH} -d out/classes \
mikesamuelc40720d2011-03-10 22:58:05 +000069 $$(echo $^ | tr ' ' '\n' | egrep '\.java$$')
70 touch out/classes.tstamp
mikesamuel3a3d9122011-03-02 16:32:53 +000071
mikesamuel04fec672011-03-11 05:10:16 +000072examples: out/examples.tstamp
73out/examples.tstamp: out/classes.tstamp src/main/org/owasp/html/examples/*.java
mikesamuel2a41aba2013-02-12 22:32:20 +000074 javac -g ${JAVAC_FLAGS} -classpath ${CLASSPATH}:out/classes \
75 -d out/classes \
mikesamuel04fec672011-03-11 05:10:16 +000076 $$(echo $^ | tr ' ' '\n' | egrep '\.java$$')
77 touch out/examples.tstamp
78
mikesamuel3a3d9122011-03-02 16:32:53 +000079# Depends on all java files under tests.
mikesamuel6f71b092013-02-12 18:41:19 +000080tests: out/tests.tstamp
mikesamuel2a41aba2013-02-12 22:32:20 +000081out/tests.tstamp: out/classes.tstamp out/genfiles.tstamp out/examples.tstamp src/tests/org/owasp/html/*.java
82 javac -g ${JAVAC_FLAGS} \
83 -classpath out/classes:out/genfiles:${TEST_CLASSPATH} \
84 -d out/classes \
mikesamuel2394e9a2013-02-12 22:44:42 +000085 $$((echo $^; find out/genfiles -type f) | tr ' ' '\n' | \
86 egrep '\.java$$')
mikesamuel6d8c2e92011-03-10 22:19:49 +000087 touch out/tests.tstamp
mikesamuel2a41aba2013-02-12 22:32:20 +000088
89out/genfiles.tstamp: out/genfiles/org/owasp/html/AllExamples.java out/genfiles/org/owasp/html/AllTests.java
90 touch out/genfiles.tstamp
91out/genfiles/org/owasp/html/AllTests.java: src/tests/org/owasp/html/*Test.java
92 mkdir -p "$$(dirname $@)"
mikesamuel6f71b092013-02-12 18:41:19 +000093 (echo 'package org.owasp.html;'; \
94 echo 'import junit.framework.Test;'; \
95 echo 'import junit.framework.TestSuite;'; \
96 echo 'public class AllTests {'; \
97 echo ' public static Test suite() {'; \
98 echo ' TestSuite suite = new TestSuite();'; \
99 echo $^ | tr ' ' '\n' | perl -pe \
100 's#^src/tests/# suite.addTestSuite(#; s#\.java$$#.class);#g; \
101 s#/#.#g;'; \
102 echo ' return suite;'; \
103 echo ' }'; \
104 echo '}'; \
105 ) > $@
106
mikesamuel2a41aba2013-02-12 22:32:20 +0000107out/genfiles/org/owasp/html/AllExamples.java: src/main/org/owasp/html/examples/*.java
108 mkdir -p "$$(dirname $@)"
mikesamuel6f71b092013-02-12 18:41:19 +0000109 (echo 'package org.owasp.html;'; \
110 echo 'final class AllExamples {'; \
111 echo ' static final Class<?>[] CLASSES = {'; \
112 echo $^ | tr ' ' '\n' | perl -pe \
113 's#^src/main/# #; s#\.java$$#.class,#g; \
114 s#/#.#g;'; \
115 echo ' };'; \
116 echo '}'; \
117 ) > $@
mikesamuel6d8c2e92011-03-10 22:19:49 +0000118
119runtests: tests
mikesamuel39d10de2014-02-27 21:00:22 +0000120 java ${TURKEYTEST} ${JASSERTS} \
121 -classpath out/classes:src/tests:${TEST_CLASSPATH} \
mikesamuel8e2bb422013-07-17 00:07:10 +0000122 ${TEST_RUNNER} org.owasp.html.AllTests
mikesamuel6f71b092013-02-12 18:41:19 +0000123
124coverage: tests
mikesamuel195fd712013-07-17 16:51:25 +0000125 java ${JASSERTS} -cp tools/emma/lib/emma.jar:lib/guava-libraries/guava.jar:lib/jsr305/jsr305.jar:lib/htmlparser-1.3/htmlparser-1.3.jar:lib/commons-codec-1.4/commons-codec-1.4.jar:benchmark-data \
mikesamuel6f71b092013-02-12 18:41:19 +0000126 -Demma.report.out.file=out/coverage/index.html \
127 -Demma.report.out.encoding=UTF-8 \
128 emmarun \
129 -r html \
mikesamuel2a41aba2013-02-12 22:32:20 +0000130 -cp out/classes:src/tests:lib/junit/junit.jar \
131 -sp src/main:src/tests:out/genfiles \
mikesamuel6f71b092013-02-12 18:41:19 +0000132 -f \
133 -ix '-junit.*' \
134 -ix '-org.junit.*' \
135 -ix '-org.hamcrest.*' \
mikesamuel195fd712013-07-17 16:51:25 +0000136 ${TEST_RUNNER} \
mikesamuel6f71b092013-02-12 18:41:19 +0000137 org.owasp.html.AllTests
mikesamuel4e867902011-03-09 05:21:50 +0000138
mikesamuele8ee9d62011-03-09 19:04:10 +0000139# Runs findbugs to identify problems.
mikesamuel4e867902011-03-09 05:21:50 +0000140findbugs: out/findbugs.txt
mikesamuelc40720d2011-03-10 22:58:05 +0000141 cat $^
mikesamuel4e867902011-03-09 05:21:50 +0000142out/findbugs.txt: out/tests.tstamp
mikesamuel2a41aba2013-02-12 22:32:20 +0000143 find out/classes/org -type d | \
mikesamuel489a0ec2013-02-26 03:37:22 +0000144 xargs tools/findbugs/bin/findbugs -textui -effort:max \
mikesamuelc40720d2011-03-10 22:58:05 +0000145 -auxclasspath ${TEST_CLASSPATH} > $@
manico.james@gmail.com5c702c12011-03-01 08:47:19 +0000146
mikesamuele8ee9d62011-03-09 19:04:10 +0000147# Runs a benchmark that compares performance.
mikesamuel0f3a7562011-03-02 19:03:22 +0000148benchmark: out/tests.tstamp
mikesamuel2a41aba2013-02-12 22:32:20 +0000149 java -cp ${TEST_CLASSPATH}:out/classes \
150 org.owasp.html.Benchmark benchmark-data/Yahoo\!.html
mikesamuel842e0c02011-03-06 21:43:49 +0000151
mikesamuele8ee9d62011-03-09 19:04:10 +0000152# Profiles the benchmark.
mikesamuel842e0c02011-03-06 21:43:49 +0000153profile: out/java.hprof.txt
154out/java.hprof.txt: out/tests.tstamp
mikesamuel2a41aba2013-02-12 22:32:20 +0000155 java -cp ${TEST_CLASSPATH}:out/classes -agentlib:hprof=cpu=times,format=a,file=out/java.hprof.txt,lineno=y,doe=y org.owasp.html.Benchmark benchmark-data/Yahoo\!.html s
mikesamuel4e867902011-03-09 05:21:50 +0000156
mikesamuele8ee9d62011-03-09 19:04:10 +0000157# Builds the documentation.
mikesamuel4e867902011-03-09 05:21:50 +0000158javadoc: out/javadoc.tstamp
mikesamuel04fec672011-03-11 05:10:16 +0000159out/javadoc.tstamp: src/main/org/owasp/html/*.java src/main/org/owasp/html/examples/*.java
mikesamuel4e867902011-03-09 05:21:50 +0000160 mkdir -p out/javadoc
161 javadoc -locale en -d out/javadoc \
mikesamuel058d9f72012-03-26 22:23:08 +0000162 -notimestamp \
163 -charset UTF-8 \
mikesamuel4e867902011-03-09 05:21:50 +0000164 -classpath ${CLASSPATH} \
165 -use -splitIndex \
166 -windowtitle 'OWASP Java HTML Sanitizer' \
167 -doctitle 'OWASP Java HTML Sanitizer' \
mikesamuele8ee9d62011-03-09 19:04:10 +0000168 -header '<a href="http://code.google.com/p/owasp-java-html-sanitizer" target=_top>code.google.com home</a>' \
mikesamuel4e867902011-03-09 05:21:50 +0000169 -J-Xmx250m -nohelp -sourcetab 8 -docencoding UTF-8 -protected \
mikesamuelc40720d2011-03-10 22:58:05 +0000170 -encoding UTF-8 -author -version $^ \
mikesamuel4e867902011-03-09 05:21:50 +0000171 && touch out/javadoc.tstamp
mikesamuelb5c26342011-03-09 18:53:36 +0000172
mikesamuele8ee9d62011-03-09 19:04:10 +0000173# Packages the documentation, and libraries in the distrib directory,
174# and creates a script containing svn commands to commit those changes.
mikesamuelb5c26342011-03-09 18:53:36 +0000175distrib: out/run_me_before_committing_release.sh
176out/run_me_before_committing_release.sh: clean out/staging.tstamp
177 tools/update_tree_in_svn.py out/staging distrib > $@
178 chmod +x $@
179out/staging.tstamp: out/javadoc.tstamp out/classes.tstamp
180 mkdir -p out/staging
181 echo Copying Javadoc
182 rm -rf out/staging/javadoc
183 cp -r out/javadoc out/staging/javadoc
184 echo Suppressing spurious Javadoc diffs
185 for doc_html in $$(find out/staging/javadoc -name \*.html); do \
mikesamuel058d9f72012-03-26 22:23:08 +0000186 perl -i -pe 's/<!-- Generated by javadoc .+?-->//; s/<META NAME="date" CONTENT="[^"]*">//' "$$doc_html"; \
mikesamuelb5c26342011-03-09 18:53:36 +0000187 done
188 echo Linking required jars
189 mkdir -p out/staging/lib
190 for jar in $$(echo ${CLASSPATH} | tr : ' '); do \
191 cp "$$jar" out/staging/lib/; \
192 cp "$$(dirname $$jar)"/COPYING out/staging/lib/"$$(basename $$jar .jar)"-COPYING; \
193 done
194 echo Bundling compiled classes
mikesamuel2a41aba2013-02-12 22:32:20 +0000195 jar cf out/staging/lib/owasp-java-html-sanitizer.jar -C out/classes org
mikesamuel70acc6e2012-11-06 17:24:53 +0000196 echo Bundling sources and docs
mikesamuelb5c26342011-03-09 18:53:36 +0000197 for f in $$(find src/main -name \*.java); do \
198 mkdir -p out/staging/"$$(dirname $$f)"; \
199 cp "$$f" out/staging/"$$f"; \
200 done
mikesamuel70acc6e2012-11-06 17:24:53 +0000201 jar cf out/staging/lib/owasp-java-html-sanitizer-sources.jar -C out/staging/src/main org
202 jar cf out/staging/lib/owasp-java-html-sanitizer-javadoc.jar -C out javadoc
mikesamueld5f0fce2011-03-09 18:58:35 +0000203 rm -rf out/staging/src
204 cp COPYING out/staging/lib/owasp-java-html-sanitizer-COPYING
mikesamuelb5c26342011-03-09 18:53:36 +0000205 touch $@
mikesamuel633821a2011-06-16 04:14:31 +0000206
207# Packages the distrib jars into the maven directory which is a sibling of
208# trunk.
209release: out/run_me_before_committing_maven.sh
210out/run_me_before_committing_maven.sh: distrib
211 tools/cut_release.py > $@
212 chmod +x $@
mikesamuel805c8952012-11-06 16:39:49 +0000213
214download: out/owasp-java-html-sanitizer.zip
215out/zip.tstamp: out/staging.tstamp
216 rm -f out/zip/owasp-java-html-sanitizer
217 mkdir -p out/zip/owasp-java-html-sanitizer
218 cp -r out/staging/lib out/staging/javadoc \
219 out/zip/owasp-java-html-sanitizer/
220 touch $@
221out/owasp-java-html-sanitizer.zip: out/zip.tstamp
222 jar cMf out/owasp-java-html-sanitizer.zip \
223 -C out/zip owasp-java-html-sanitizer