mirror of
https://github.com/NationalSecurityAgency/ghidra
synced 2024-08-28 13:30:21 +00:00
113 lines
4.1 KiB
Groovy
113 lines
4.1 KiB
Groovy
/* ###
|
|
* IP: GHIDRA
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
import groovy.io.FileType;
|
|
|
|
apply plugin:'jacoco'
|
|
|
|
dependencies {
|
|
jacocoAnt 'org.jacoco:org.jacoco.ant:0.8.8'
|
|
jacocoAgent 'org.jacoco:org.jacoco.agent:0.8.8'
|
|
}
|
|
|
|
def String jacocoRootExecPath = "$buildDir/jacoco/jacocoMerge.exec"
|
|
|
|
delete new File(jacocoRootExecPath) // If the merged exec file (output from jacocoMerge) exists,
|
|
// jacocoReport & jacocoBranchReport tasks are skipped and
|
|
// the report is not generated.
|
|
// So always delete the merged file before the determination
|
|
// to skip a task is made.
|
|
|
|
/*********************************************************************************
|
|
* Generate the Jacoco excludes list from file (this will strip out comments and
|
|
* whitespace).
|
|
*
|
|
* This uses 'gradle/support/jacoco.excludes.src.txt' to generate list of
|
|
* class exclusions for the 'jacocoReport' task.
|
|
*
|
|
* Task to generate an aggregate jacoco report from subprojects with
|
|
* Java sourceSets
|
|
*********************************************************************************/
|
|
def String[] generateExcludesList() {
|
|
|
|
File inputFile = new File(rootProject.projectDir, "gradle/support/jacoco.excludes.src.txt")
|
|
|
|
def lines = inputFile.readLines()
|
|
.findAll({ line ->
|
|
!shouldIgnoreLine(line)
|
|
})
|
|
.collect()
|
|
return lines
|
|
}
|
|
|
|
/* An ignorable line is one that is only whitespace or that starts with a comment marker */
|
|
def shouldIgnoreLine(line) {
|
|
if (line.startsWith('#')){
|
|
return true
|
|
}
|
|
|
|
if (line.startsWith("//")) {
|
|
return true
|
|
}
|
|
|
|
if (line.trim().isEmpty()) {
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
List excludesList = generateExcludesList()
|
|
|
|
/*********************************************************************************
|
|
* Task to merge multiple jacoco execution data files into one
|
|
*********************************************************************************/
|
|
task jacocoMerge(type: JacocoMerge) {
|
|
description = 'Task to merge multiple jacoco execution data files into one.'
|
|
destinationFile = new File(jacocoRootExecPath)
|
|
dependsOn { subprojects.findAll { p -> p.plugins.hasPlugin('jacoco') }.test }
|
|
dependsOn { subprojects.findAll { p -> p.plugins.hasPlugin('jacoco') }.integrationTest }
|
|
executionData fileTree(rootDir) {
|
|
include '**/*.exec'
|
|
}
|
|
}
|
|
|
|
/*********************************************************************************
|
|
* Task to generate an aggregate jacoco report from subprojects with
|
|
* Java sourceSets
|
|
*********************************************************************************/
|
|
task jacocoReport(type: JacocoReport, group: 'Coverage reports') {
|
|
description = 'Generates an aggregate Jacoco report from all subprojects'
|
|
dependsOn 'jacocoMerge'
|
|
executionData new File(jacocoRootExecPath)
|
|
|
|
// Setting these source/class dirs MUST be done in the configuration phase (we used
|
|
// to do it in a doFirst block but that was deprecated in later gradle builds). However,
|
|
// we have to delay evaluation of the subprojects (using the '{ }' notation) to wait for
|
|
// some project attributes (eg: 'sourceSets') to be made available.
|
|
additionalSourceDirs files({ subprojects.findAll { p -> p.plugins.hasPlugin('jacoco') }.sourceSets.main.java.srcDirs })
|
|
additionalClassDirs files({ subprojects.findAll { p -> p.plugins.hasPlugin('jacoco') }.sourceSets.main.output }).asFileTree.matching {
|
|
exclude excludesList
|
|
}
|
|
|
|
reports {
|
|
html {
|
|
required
|
|
destination new File(rootDir.absolutePath + "/jacocoReport")
|
|
}
|
|
xml { }
|
|
}
|
|
}
|