mikesamuel | 63dba94 | 2012-11-06 16:15:19 +0000 | [diff] [blame] | 1 | default: javadoc runtests findbugs |
| 2 | |
mikesamuel | b54a71c | 2012-09-22 22:48:19 +0000 | [diff] [blame] | 3 | help: |
| 4 | @echo "Usage: make [<target> ...]" |
| 5 | @echo "" |
| 6 | @echo "Targets include:" |
mikesamuel | 2394e9a | 2013-02-12 22:44:42 +0000 | [diff] [blame] | 7 | @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." |
mikesamuel | 8e2bb42 | 2013-07-17 00:07:10 +0000 | [diff] [blame] | 29 | @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" |
mikesamuel | 195fd71 | 2013-07-17 16:51:25 +0000 | [diff] [blame] | 34 | @echo " make NOASSERTS=1 runtests" |
mikesamuel | b54a71c | 2012-09-22 22:48:19 +0000 | [diff] [blame] | 35 | |
mikesamuel | 77740a7 | 2013-07-17 22:12:43 +0000 | [diff] [blame] | 36 | SHELL=/bin/bash |
mikesamuel | 0f3a756 | 2011-03-02 19:03:22 +0000 | [diff] [blame] | 37 | CLASSPATH=lib/guava-libraries/guava.jar:lib/jsr305/jsr305.jar |
mikesamuel | ee7fe14 | 2011-08-02 17:01:39 +0000 | [diff] [blame] | 38 | TEST_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 |
mikesamuel | b530bfd | 2011-11-02 00:33:00 +0000 | [diff] [blame] | 39 | JAVAC_FLAGS=-source 1.5 -target 1.5 -Xlint -encoding UTF-8 |
mikesamuel | 8e2bb42 | 2013-07-17 00:07:10 +0000 | [diff] [blame] | 40 | TEST_RUNNER=junit.textui.TestRunner |
mikesamuel | 195fd71 | 2013-07-17 16:51:25 +0000 | [diff] [blame] | 41 | JASSERTS=-ea |
mikesamuel | 39d10de | 2014-02-27 21:00:22 +0000 | [diff] [blame] | 42 | # 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 |
| 44 | TURKEYTEST=-Duser.counter=TR -Duser.language-tr |
mikesamuel | 3a3d912 | 2011-03-02 16:32:53 +0000 | [diff] [blame] | 45 | |
mikesamuel | 8e2bb42 | 2013-07-17 00:07:10 +0000 | [diff] [blame] | 46 | ifdef VERBOSE |
| 47 | override TEST_RUNNER=org.owasp.html.VerboseTestRunner |
| 48 | endif |
| 49 | |
mikesamuel | 195fd71 | 2013-07-17 16:51:25 +0000 | [diff] [blame] | 50 | ifdef NOASSERTS |
| 51 | override JASSERTS= |
mikesamuel | 8e2bb42 | 2013-07-17 00:07:10 +0000 | [diff] [blame] | 52 | endif |
mikesamuel | 3a3d912 | 2011-03-02 16:32:53 +0000 | [diff] [blame] | 53 | |
mikesamuel | 2a41aba | 2013-02-12 22:32:20 +0000 | [diff] [blame] | 54 | out: |
mikesamuel | 2394e9a | 2013-02-12 22:44:42 +0000 | [diff] [blame] | 55 | mkdir -p out |
mikesamuel | 2a41aba | 2013-02-12 22:32:20 +0000 | [diff] [blame] | 56 | |
| 57 | out/classes: out |
mikesamuel | 2394e9a | 2013-02-12 22:44:42 +0000 | [diff] [blame] | 58 | mkdir -p out/classes |
mikesamuel | 2a41aba | 2013-02-12 22:32:20 +0000 | [diff] [blame] | 59 | |
| 60 | out/genfiles: out |
mikesamuel | 2394e9a | 2013-02-12 22:44:42 +0000 | [diff] [blame] | 61 | mkdir -p out/genfiles |
mikesamuel | 2a41aba | 2013-02-12 22:32:20 +0000 | [diff] [blame] | 62 | |
manico.james@gmail.com | 5c702c1 | 2011-03-01 08:47:19 +0000 | [diff] [blame] | 63 | clean: |
| 64 | rm -rf out |
| 65 | |
mikesamuel | 0f3a756 | 2011-03-02 19:03:22 +0000 | [diff] [blame] | 66 | classes: out/classes.tstamp |
mikesamuel | 2a41aba | 2013-02-12 22:32:20 +0000 | [diff] [blame] | 67 | out/classes.tstamp: out/classes src/main/org/owasp/html/*.java |
| 68 | javac -g ${JAVAC_FLAGS} -classpath ${CLASSPATH} -d out/classes \ |
mikesamuel | c40720d | 2011-03-10 22:58:05 +0000 | [diff] [blame] | 69 | $$(echo $^ | tr ' ' '\n' | egrep '\.java$$') |
| 70 | touch out/classes.tstamp |
mikesamuel | 3a3d912 | 2011-03-02 16:32:53 +0000 | [diff] [blame] | 71 | |
mikesamuel | 04fec67 | 2011-03-11 05:10:16 +0000 | [diff] [blame] | 72 | examples: out/examples.tstamp |
| 73 | out/examples.tstamp: out/classes.tstamp src/main/org/owasp/html/examples/*.java |
mikesamuel | 2a41aba | 2013-02-12 22:32:20 +0000 | [diff] [blame] | 74 | javac -g ${JAVAC_FLAGS} -classpath ${CLASSPATH}:out/classes \ |
| 75 | -d out/classes \ |
mikesamuel | 04fec67 | 2011-03-11 05:10:16 +0000 | [diff] [blame] | 76 | $$(echo $^ | tr ' ' '\n' | egrep '\.java$$') |
| 77 | touch out/examples.tstamp |
| 78 | |
mikesamuel | 3a3d912 | 2011-03-02 16:32:53 +0000 | [diff] [blame] | 79 | # Depends on all java files under tests. |
mikesamuel | 6f71b09 | 2013-02-12 18:41:19 +0000 | [diff] [blame] | 80 | tests: out/tests.tstamp |
mikesamuel | 2a41aba | 2013-02-12 22:32:20 +0000 | [diff] [blame] | 81 | out/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 \ |
mikesamuel | 2394e9a | 2013-02-12 22:44:42 +0000 | [diff] [blame] | 85 | $$((echo $^; find out/genfiles -type f) | tr ' ' '\n' | \ |
| 86 | egrep '\.java$$') |
mikesamuel | 6d8c2e9 | 2011-03-10 22:19:49 +0000 | [diff] [blame] | 87 | touch out/tests.tstamp |
mikesamuel | 2a41aba | 2013-02-12 22:32:20 +0000 | [diff] [blame] | 88 | |
| 89 | out/genfiles.tstamp: out/genfiles/org/owasp/html/AllExamples.java out/genfiles/org/owasp/html/AllTests.java |
| 90 | touch out/genfiles.tstamp |
| 91 | out/genfiles/org/owasp/html/AllTests.java: src/tests/org/owasp/html/*Test.java |
| 92 | mkdir -p "$$(dirname $@)" |
mikesamuel | 6f71b09 | 2013-02-12 18:41:19 +0000 | [diff] [blame] | 93 | (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 | |
mikesamuel | 2a41aba | 2013-02-12 22:32:20 +0000 | [diff] [blame] | 107 | out/genfiles/org/owasp/html/AllExamples.java: src/main/org/owasp/html/examples/*.java |
| 108 | mkdir -p "$$(dirname $@)" |
mikesamuel | 6f71b09 | 2013-02-12 18:41:19 +0000 | [diff] [blame] | 109 | (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 | ) > $@ |
mikesamuel | 6d8c2e9 | 2011-03-10 22:19:49 +0000 | [diff] [blame] | 118 | |
| 119 | runtests: tests |
mikesamuel | 39d10de | 2014-02-27 21:00:22 +0000 | [diff] [blame] | 120 | java ${TURKEYTEST} ${JASSERTS} \ |
| 121 | -classpath out/classes:src/tests:${TEST_CLASSPATH} \ |
mikesamuel | 8e2bb42 | 2013-07-17 00:07:10 +0000 | [diff] [blame] | 122 | ${TEST_RUNNER} org.owasp.html.AllTests |
mikesamuel | 6f71b09 | 2013-02-12 18:41:19 +0000 | [diff] [blame] | 123 | |
| 124 | coverage: tests |
mikesamuel | 195fd71 | 2013-07-17 16:51:25 +0000 | [diff] [blame] | 125 | 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 \ |
mikesamuel | 6f71b09 | 2013-02-12 18:41:19 +0000 | [diff] [blame] | 126 | -Demma.report.out.file=out/coverage/index.html \ |
| 127 | -Demma.report.out.encoding=UTF-8 \ |
| 128 | emmarun \ |
| 129 | -r html \ |
mikesamuel | 2a41aba | 2013-02-12 22:32:20 +0000 | [diff] [blame] | 130 | -cp out/classes:src/tests:lib/junit/junit.jar \ |
| 131 | -sp src/main:src/tests:out/genfiles \ |
mikesamuel | 6f71b09 | 2013-02-12 18:41:19 +0000 | [diff] [blame] | 132 | -f \ |
| 133 | -ix '-junit.*' \ |
| 134 | -ix '-org.junit.*' \ |
| 135 | -ix '-org.hamcrest.*' \ |
mikesamuel | 195fd71 | 2013-07-17 16:51:25 +0000 | [diff] [blame] | 136 | ${TEST_RUNNER} \ |
mikesamuel | 6f71b09 | 2013-02-12 18:41:19 +0000 | [diff] [blame] | 137 | org.owasp.html.AllTests |
mikesamuel | 4e86790 | 2011-03-09 05:21:50 +0000 | [diff] [blame] | 138 | |
mikesamuel | e8ee9d6 | 2011-03-09 19:04:10 +0000 | [diff] [blame] | 139 | # Runs findbugs to identify problems. |
mikesamuel | 4e86790 | 2011-03-09 05:21:50 +0000 | [diff] [blame] | 140 | findbugs: out/findbugs.txt |
mikesamuel | c40720d | 2011-03-10 22:58:05 +0000 | [diff] [blame] | 141 | cat $^ |
mikesamuel | 4e86790 | 2011-03-09 05:21:50 +0000 | [diff] [blame] | 142 | out/findbugs.txt: out/tests.tstamp |
mikesamuel | 2a41aba | 2013-02-12 22:32:20 +0000 | [diff] [blame] | 143 | find out/classes/org -type d | \ |
mikesamuel | 489a0ec | 2013-02-26 03:37:22 +0000 | [diff] [blame] | 144 | xargs tools/findbugs/bin/findbugs -textui -effort:max \ |
mikesamuel | c40720d | 2011-03-10 22:58:05 +0000 | [diff] [blame] | 145 | -auxclasspath ${TEST_CLASSPATH} > $@ |
manico.james@gmail.com | 5c702c1 | 2011-03-01 08:47:19 +0000 | [diff] [blame] | 146 | |
mikesamuel | e8ee9d6 | 2011-03-09 19:04:10 +0000 | [diff] [blame] | 147 | # Runs a benchmark that compares performance. |
mikesamuel | 0f3a756 | 2011-03-02 19:03:22 +0000 | [diff] [blame] | 148 | benchmark: out/tests.tstamp |
mikesamuel | 2a41aba | 2013-02-12 22:32:20 +0000 | [diff] [blame] | 149 | java -cp ${TEST_CLASSPATH}:out/classes \ |
| 150 | org.owasp.html.Benchmark benchmark-data/Yahoo\!.html |
mikesamuel | 842e0c0 | 2011-03-06 21:43:49 +0000 | [diff] [blame] | 151 | |
mikesamuel | e8ee9d6 | 2011-03-09 19:04:10 +0000 | [diff] [blame] | 152 | # Profiles the benchmark. |
mikesamuel | 842e0c0 | 2011-03-06 21:43:49 +0000 | [diff] [blame] | 153 | profile: out/java.hprof.txt |
| 154 | out/java.hprof.txt: out/tests.tstamp |
mikesamuel | 2a41aba | 2013-02-12 22:32:20 +0000 | [diff] [blame] | 155 | 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 |
mikesamuel | 4e86790 | 2011-03-09 05:21:50 +0000 | [diff] [blame] | 156 | |
mikesamuel | e8ee9d6 | 2011-03-09 19:04:10 +0000 | [diff] [blame] | 157 | # Builds the documentation. |
mikesamuel | 4e86790 | 2011-03-09 05:21:50 +0000 | [diff] [blame] | 158 | javadoc: out/javadoc.tstamp |
mikesamuel | 04fec67 | 2011-03-11 05:10:16 +0000 | [diff] [blame] | 159 | out/javadoc.tstamp: src/main/org/owasp/html/*.java src/main/org/owasp/html/examples/*.java |
mikesamuel | 4e86790 | 2011-03-09 05:21:50 +0000 | [diff] [blame] | 160 | mkdir -p out/javadoc |
| 161 | javadoc -locale en -d out/javadoc \ |
mikesamuel | 058d9f7 | 2012-03-26 22:23:08 +0000 | [diff] [blame] | 162 | -notimestamp \ |
| 163 | -charset UTF-8 \ |
mikesamuel | 4e86790 | 2011-03-09 05:21:50 +0000 | [diff] [blame] | 164 | -classpath ${CLASSPATH} \ |
| 165 | -use -splitIndex \ |
| 166 | -windowtitle 'OWASP Java HTML Sanitizer' \ |
| 167 | -doctitle 'OWASP Java HTML Sanitizer' \ |
mikesamuel | e8ee9d6 | 2011-03-09 19:04:10 +0000 | [diff] [blame] | 168 | -header '<a href="http://code.google.com/p/owasp-java-html-sanitizer" target=_top>code.google.com home</a>' \ |
mikesamuel | 4e86790 | 2011-03-09 05:21:50 +0000 | [diff] [blame] | 169 | -J-Xmx250m -nohelp -sourcetab 8 -docencoding UTF-8 -protected \ |
mikesamuel | c40720d | 2011-03-10 22:58:05 +0000 | [diff] [blame] | 170 | -encoding UTF-8 -author -version $^ \ |
mikesamuel | 4e86790 | 2011-03-09 05:21:50 +0000 | [diff] [blame] | 171 | && touch out/javadoc.tstamp |
mikesamuel | b5c2634 | 2011-03-09 18:53:36 +0000 | [diff] [blame] | 172 | |
mikesamuel | e8ee9d6 | 2011-03-09 19:04:10 +0000 | [diff] [blame] | 173 | # Packages the documentation, and libraries in the distrib directory, |
| 174 | # and creates a script containing svn commands to commit those changes. |
mikesamuel | b5c2634 | 2011-03-09 18:53:36 +0000 | [diff] [blame] | 175 | distrib: out/run_me_before_committing_release.sh |
| 176 | out/run_me_before_committing_release.sh: clean out/staging.tstamp |
| 177 | tools/update_tree_in_svn.py out/staging distrib > $@ |
| 178 | chmod +x $@ |
| 179 | out/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 \ |
mikesamuel | 058d9f7 | 2012-03-26 22:23:08 +0000 | [diff] [blame] | 186 | perl -i -pe 's/<!-- Generated by javadoc .+?-->//; s/<META NAME="date" CONTENT="[^"]*">//' "$$doc_html"; \ |
mikesamuel | b5c2634 | 2011-03-09 18:53:36 +0000 | [diff] [blame] | 187 | 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 |
mikesamuel | 2a41aba | 2013-02-12 22:32:20 +0000 | [diff] [blame] | 195 | jar cf out/staging/lib/owasp-java-html-sanitizer.jar -C out/classes org |
mikesamuel | 70acc6e | 2012-11-06 17:24:53 +0000 | [diff] [blame] | 196 | echo Bundling sources and docs |
mikesamuel | b5c2634 | 2011-03-09 18:53:36 +0000 | [diff] [blame] | 197 | for f in $$(find src/main -name \*.java); do \ |
| 198 | mkdir -p out/staging/"$$(dirname $$f)"; \ |
| 199 | cp "$$f" out/staging/"$$f"; \ |
| 200 | done |
mikesamuel | 70acc6e | 2012-11-06 17:24:53 +0000 | [diff] [blame] | 201 | 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 |
mikesamuel | d5f0fce | 2011-03-09 18:58:35 +0000 | [diff] [blame] | 203 | rm -rf out/staging/src |
| 204 | cp COPYING out/staging/lib/owasp-java-html-sanitizer-COPYING |
mikesamuel | b5c2634 | 2011-03-09 18:53:36 +0000 | [diff] [blame] | 205 | touch $@ |
mikesamuel | 633821a | 2011-06-16 04:14:31 +0000 | [diff] [blame] | 206 | |
| 207 | # Packages the distrib jars into the maven directory which is a sibling of |
| 208 | # trunk. |
| 209 | release: out/run_me_before_committing_maven.sh |
| 210 | out/run_me_before_committing_maven.sh: distrib |
| 211 | tools/cut_release.py > $@ |
| 212 | chmod +x $@ |
mikesamuel | 805c895 | 2012-11-06 16:39:49 +0000 | [diff] [blame] | 213 | |
| 214 | download: out/owasp-java-html-sanitizer.zip |
| 215 | out/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 $@ |
| 221 | out/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 |