| #!/bin/sh |
| |
| ## This is an executable example that runs wpi-many.sh with appropriate |
| ## arguments and environment variables, using a custom typechecker. |
| ## It exercises most of the features of the wpi-many.sh script. |
| ## |
| ## Rather than directly using this script, you should copy it and |
| ## then modify and run your copy. Every line of the script before |
| ## the line that says "There is no need to make changes below this point" |
| ## defines a variable (either an environment variable or a variable |
| ## used as input to wpi-many.sh). You should consider changing each |
| ## of these, to suit your use case. |
| |
| ## Change these to match your system. |
| |
| export JAVA11_HOME=/usr/lib/jvm/java-11-openjdk/ |
| export JAVA8_HOME=/usr/lib/jvm/java-1.8.0-openjdk |
| |
| export ANDROID_HOME=${HOME}/compliance-experiments/fse20/android_home |
| |
| # This directory must contain a copy of the Checker Framework that has |
| # been built from source. |
| export CHECKERFRAMEWORK=${HOME}/jsr308/checker-framework |
| |
| ## Change these to match your experimental setup. |
| |
| export PARENTDIR=${HOME}/compliance-experiments/fse20 |
| checker=org.checkerframework.checker.noliteral.NoLiteralChecker |
| checkername=no-literal |
| repolist=securerandom.list |
| workingdir=$(pwd) |
| timeout=3600 # 60 minutes |
| |
| # The stub files for the checker being used. |
| custom_stubs=${PARENTDIR}/no-literal-checker/no-literal-checker/stubs |
| |
| # The checker classpath. Paste in the result of running ./gradlew -q |
| # printClasspath in the subproject of your custom checker with the |
| # checker implementation. If your custom checker does not define such |
| # a task, you can define it: |
| # |
| # task printClasspath { |
| # doLast { |
| # println sourceSets.main.runtimeClasspath.asPath |
| # } |
| # } |
| # |
| # If you are not using a custom typechecker (i.e. you are using a typechecker built into |
| # the Checker Framework, such as the Nullness Checker), set this variable to the empty string |
| # or comment out this line. |
| checker_classpath='/homes/gws/kelloggm/compliance-experiments/fse20/no-literal-checker/no-literal-checker/build/classes/java/main:/homes/gws/kelloggm/compliance-experiments/fse20/no-literal-checker/no-literal-checker/build/resources/main:/homes/gws/kelloggm/compliance-experiments/fse20/checker-framework/checker/dist/checker.jar:/homes/gws/kelloggm/compliance-experiments/fse20/no-literal-checker/no-literal-qual/build/libs/no-literal-qual.jar:/homes/gws/kelloggm/.gradle/caches/modules-2/files-2.1/com.google.errorprone/javac/9+181-r4173-1/bdf4c0aa7d540ee1f7bf14d47447aea4bbf450c5/javac-9+181-r4173-1.jar:/homes/gws/kelloggm/.gradle/caches/modules-2/files-2.1/org.checkerframework/checker-qual/3.1.1/361404eff7f971a296020d47c928905b3b9c5b5f/checker-qual-3.1.1.jar' |
| |
| # The qualifier classpath. Usually, this is a subset of |
| # checker_classpath that contains just two elements: |
| # * the qual jar for your checker, and |
| # * the version of checker-qual.jar that your qualifiers depend on. |
| # |
| # Like checker_classpath, this is usually generated using the printClasspath |
| # task in the qualifier subproject of your custom checker, if it has one. |
| # |
| # If you are not using a custom typechecker (i.e. you are using a typechecker built into |
| # the Checker Framework, such as the Nullness Checker), set this variable to the empty string |
| ## or comment out this line. |
| qual_classpath='/homes/gws/kelloggm/compliance-experiments/fse20/no-literal-checker/no-literal-qual/build/libs/no-literal-qual.jar:/homes/gws/kelloggm/.gradle/caches/modules-2/files-2.1/org.checkerframework/checker-qual/3.1.1/361404eff7f971a296020d47c928905b3b9c5b5f/checker-qual-3.1.1.jar' |
| |
| ## There is no need to make changes below this point. |
| |
| export JAVA_HOME=${JAVA11_HOME} |
| repolistbase=$(basename "$repolist") |
| |
| # DLJC will fail if these arguments are passed to it with empty values. |
| if [ ! "x${qual_classpath}" = "x" ]; then |
| quals_arg='yes' |
| else |
| quals_arg= |
| fi |
| |
| if [ ! "x${checker_classpath}" = "x" ]; then |
| lib_arg='yes' |
| else |
| lib_arg= |
| fi |
| |
| if [ ! "x${custom_stubs}" = "x" ]; then |
| stubs_arg='yes' |
| fi |
| |
| ## Code starts here. |
| |
| rm -rf "${checkername}-${repolistbase}-results" |
| |
| bash wpi-many.sh -o "${workingdir}/${checkername}-${repolistbase}" \ |
| -i "${PARENTDIR}/${repolist}" \ |
| -t ${timeout} \ |
| -- \ |
| --checker "${checker}" \ |
| ${quals_arg:+--quals "${qual_classpath}"} \ |
| ${lib_arg:+--lib "${checker_classpath}"} \ |
| ${stubs_arg:+--stubs "${custom_stubs}"} |