Fixing a bug: java LinkedList needs removeFirst(), not getFirst() to get and remove...
[jpf-core.git] / build.gradle
index 2f9b7f325b86f9ae9bf3aa8c06db7cbc96e13241..26ff9ba74b6d0990113f8bc4660cd9943672547b 100644 (file)
@@ -7,58 +7,217 @@ repositories {
     mavenCentral()
 }
 
+buildscript {
+    repositories {
+       maven {
+            url "https://plugins.gradle.org/m2/"
+        }
+    }
+    dependencies {
+        classpath "gradle.plugin.com.palantir.gradle.gitversion:gradle-git-version:0.11.0"
+    }
+}
+
 dependencies {
     testImplementation "junit:junit:4.12"
 }
 
-sourceSets {
-    annotations {
-        java.srcDirs = ["src/annotations"]
-        java.outputDir = file("${buildDir}/annotations")
+apply plugin: "com.palantir.git-version"
+version gitVersion()
+def gitDetails = versionDetails()
+
+ext.manifestCommonAttrbutes = manifest {
+    attributes(
+        "Built-By": System.getProperty("user.name"),
+        "Implementation-Vendor": "NASA Ames Research Center",
+        "Specification-Version": gitDetails.lastTag,
+        "Implementation-Version": gitDetails.gitHashFull
+    )
+}
+
+apply from: "gradle/ide-support.gradle"
+apply from: "gradle/distribution.gradle"
+apply from: "gradle/source-sets.gradle"
+apply from: "gradle/build-resources.gradle"
+
+task compile {
+    group = "JPF Build"
+    description = "Compiles all JPF core sources."
+
+    // These are automatic generated tasks from the Java Gradle Plugin.
+    // Gradle is able to infer the order of the source sets
+    // due to the compileClasspath attribute
+    dependsOn compileTestJava
+    dependsOn compileExamplesJava
+}
+
+task createJpfClassesJar(type: Jar) {
+    archiveName = "jpf-classes.jar"
+    destinationDir = file("${buildDir}")
+
+    group = "JPF Jars"
+    description = "Creates the ${archiveName} file."
+
+    dependsOn compile
+    dependsOn copyResources
+
+    from sourceSets.classes.java.outputDir
+    from sourceSets.annotations.java.outputDir
+    from(sourceSets.main.java.outputDir) {
+        include "gov/nasa/jpf/JPFShell.class"
+        include "gov/nasa/jpf/vm/Verify.class"
+        include "gov/nasa/jpf/util/TypeRef.class"
+        include "gov/nasa/jpf/util/test/TestJPF.class"
+        include "gov/nasa/jpf/util/test/TestMultiProcessJPF.class"
+        include "gov/nasa/jpf/util/test/TestJPFHelper.class"
     }
-    main {
-        java.srcDirs = ["src/main"]
-        java.outputDir = file("${buildDir}/main")
-        compileClasspath += sourceSets.annotations.output
+}
+
+task createJpfJar(type: Jar) {
+    archiveName = "jpf.jar"
+    destinationDir = file("${buildDir}")
+
+    group = "JPF Jars"
+    description = "Creates the ${archiveName} file."
+
+    dependsOn compile
+    dependsOn copyResources
+
+    from sourceSets.main.java.outputDir
+    from sourceSets.peers.java.outputDir
+    from sourceSets.annotations.java.outputDir
+    from(sourceSets.classes.java.outputDir) {
+        include "org/junit/*.class"
     }
-    examples {
-        java.srcDirs = ["src/examples"]
-        java.outputDir = file("${buildDir}/examples")
-        compileClasspath += sourceSets.main.output
+
+    manifest {
+        attributes "Implementation-Title": "Java Pathfinder core system"
+        from manifestCommonAttrbutes
     }
-    classes {
-        java.srcDirs = ["src/classes"]
-        java.outputDir = file("${buildDir}/classes")
-        compileClasspath += sourceSets.main.output + sourceSets.annotations.output
+}
+
+task createAnnotationsJar(type: Jar) {
+    archiveName = "jpf-annotations.jar"
+    destinationDir = file("${buildDir}")
+
+    group = "JPF Jars"
+    description = "Creates the ${archiveName} file."
+
+    dependsOn compile
+    dependsOn copyResources
+
+    from sourceSets.annotations.java.outputDir
+}
+
+task createClassloaderSpecificTestsJar(type: Jar) {
+    archiveName = "classloader_specific_tests.jar"
+    destinationDir = file("${buildDir}")
+
+    group = "JPF Jars"
+    description = "Creates the ${archiveName} file."
+
+    dependsOn compile
+    dependsOn copyResources
+
+    from(sourceSets.test.java.outputDir) {
+        include "classloader_specific_tests/*.class"
+    }
+}
+
+task createRunJpfJar(type: Jar) {
+    archiveName = "RunJPF.jar"
+    destinationDir = file("${buildDir}")
+
+    description = "Creates the ${archiveName} file."
+    group = "JPF Jars"
+
+    dependsOn compile
+    dependsOn copyResources
+
+    from(sourceSets.main.java.outputDir) {
+        include "gov/nasa/jpf/tool/Run.class"
+        include "gov/nasa/jpf/tool/RunJPF.class"
+        include "gov/nasa/jpf/Config.class"
+        include "gov/nasa/jpf/ConfigChangeListener.class"
+        include "gov/nasa/jpf/Config\$MissingRequiredKeyException.class"
+        include "gov/nasa/jpf/JPFClassLoader.class"
+        include "gov/nasa/jpf/JPFShell.class"
+        include "gov/nasa/jpf/JPFException.class"
+        include "gov/nasa/jpf/JPFConfigException.class"
+        include "gov/nasa/jpf/JPFTargetException.class"
+        include "gov/nasa/jpf/util/JPFSiteUtils.class"
+        include "gov/nasa/jpf/util/FileUtils.class"
+        include "gov/nasa/jpf/util/StringMatcher.class"
+        include "gov/nasa/jpf/util/Pair.class"
     }
-    peers {
-        java.srcDirs = ["src/peers"]
-        java.outputDir = file("${buildDir}/peers")
-        compileClasspath += sourceSets.main.output + sourceSets.annotations.output
+    manifest {
+        attributes(
+            "Implementation-Title": "Java Pathfinder core launch system",
+            "Main-Class": "gov.nasa.jpf.tool.RunJPF"
+        )
+        from manifestCommonAttrbutes
     }
-    test {
-        java.srcDirs = ["src/tests"]
-        java.outputDir = file("${buildDir}/tests")
-        compileClasspath += sourceSets.annotations.output + sourceSets.classes.output + sourceSets.peers.output
+}
+
+task createRunTestJar(type: Jar) {
+    archiveName = "RunTest.jar"
+    destinationDir = file("${buildDir}")
+
+    description = "Creates the ${archiveName} file."
+    group = "JPF Jars"
+
+    dependsOn compile
+    dependsOn copyResources
+
+    from(sourceSets.main.java.outputDir) {
+        include "gov/nasa/jpf/tool/Run.class"
+        include "gov/nasa/jpf/tool/RunTest.class"
+        include "gov/nasa/jpf/tool/RunTest\$Failed.class"
+        include "gov/nasa/jpf/Config.class"
+        include "gov/nasa/jpf/ConfigChangeListener.class"
+        include "gov/nasa/jpf/Config\$MissingRequiredKeyException.class"
+        include "gov/nasa/jpf/JPFClassLoader.class"
+        include "gov/nasa/jpf/JPFException.class"
+        include "gov/nasa/jpf/JPFConfigException.class"
+        include "gov/nasa/jpf/util/JPFSiteUtils.class"
+        include "gov/nasa/jpf/util/FileUtils.class"
+        include "gov/nasa/jpf/util/StringMatcher.class"
+        include "gov/nasa/jpf/util/DevNullPrintStream.class"
+    }
+    manifest {
+        attributes(
+            "Implementation-Title": "Java Pathfinder test launch system",
+            "Main-Class": "gov.nasa.jpf.tool.RunTest"
+        )
+        from manifestCommonAttrbutes
     }
 }
 
+task buildJars {
+    group = "JPF Build"
+    description = "Generates all core JPF jar files."
+
+    dependsOn createClassloaderSpecificTestsJar
+    dependsOn createAnnotationsJar
+    dependsOn createJpfClassesJar
+    dependsOn createJpfJar
+    dependsOn createRunJpfJar
+    dependsOn createRunTestJar
+}
+
 test {
-    enableAssertions = true
-    forkEvery = 1
+    description = "Runs core regression tests."
 
+    dependsOn buildJars
+
+    forkEvery = 1
+    enableAssertions = true
     maxHeapSize = "1024m"
 
     include "**/*Test.class"
     exclude "**/SplitInputStreamTest.class"
     exclude "**/JPF_*.class"
 
-    // XXX Tests temporarily ignored because they are not fully supported in the Gradle build yet
-    new File("failing-tests.txt").eachLine { failedTestClass ->
-        def ignoredPath = "**/" + failedTestClass.replace(".", "/") + ".class"
-        exclude ignoredPath
-    }
-
     testLogging {
         events "passed", "skipped", "failed"
     }
@@ -77,14 +236,4 @@ test {
     }
 }
 
-task compile {
-    group = "JPF Build"
-    description = "Compile all JPF core sources"
-
-    // These are automatic generated tasks from the Java Gradle Plugin.
-    // Gradle is able to infer the ordering of the source source sets
-    // due to the compileClasspath attribute
-    dependsOn compileTestJava, compileExamplesJava
-}
-
-defaultTasks "compile"
+defaultTasks "buildJars"