[build] Add spotless for other files (#3007)

Adds spotless formatting for Gradle, xml, md, and gitignore files.

yml linting is not performed as it requires a dependency on npm.
This commit is contained in:
Austin Shalit
2020-12-30 16:17:20 -08:00
committed by GitHub
parent 8651aa73e8
commit 65b2359b27
39 changed files with 879 additions and 662 deletions

View File

@@ -231,7 +231,7 @@ jobs:
github.ref == 'refs/heads/master' github.ref == 'refs/heads/master'
run: cd combiner && ./gradlew publish -Pallwpilib run: cd combiner && ./gradlew publish -Pallwpilib
env: env:
RUN_AZURE_ARTIFACTORY_RELEASE: 'TRUE' RUN_AZURE_ARTIFACTORY_RELEASE: "TRUE"
ARTIFACTORY_PUBLISH_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} ARTIFACTORY_PUBLISH_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }}
ARTIFACTORY_PUBLISH_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }} ARTIFACTORY_PUBLISH_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
- name: Combine (Release) - name: Combine (Release)
@@ -240,7 +240,7 @@ jobs:
startsWith(github.ref, 'refs/tags/v') startsWith(github.ref, 'refs/tags/v')
run: cd combiner && ./gradlew publish -Pallwpilib -PreleaseRepoPublish run: cd combiner && ./gradlew publish -Pallwpilib -PreleaseRepoPublish
env: env:
RUN_AZURE_ARTIFACTORY_RELEASE: 'TRUE' RUN_AZURE_ARTIFACTORY_RELEASE: "TRUE"
ARTIFACTORY_PUBLISH_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} ARTIFACTORY_PUBLISH_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }}
ARTIFACTORY_PUBLISH_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }} ARTIFACTORY_PUBLISH_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
- uses: actions/upload-artifact@v2 - uses: actions/upload-artifact@v2

View File

@@ -1,27 +1,27 @@
## Publishing Third Party Dependencies ## Publishing Third Party Dependencies
Currently the 3rd party deps are imgui, opencv, and google test Currently the 3rd party deps are imgui, opencv, and google test
For publishing these dependencies, the version needs to be manually updated in the publish.gradle file of their respective repository. For publishing these dependencies, the version needs to be manually updated in the publish.gradle file of their respective repository.
Then, in the azure build for the dependency you want to build for, manually start a pipeline build (As of current, this is the `Run Pipeline` button). Then, in the azure build for the dependency you want to build for, manually start a pipeline build (As of current, this is the `Run Pipeline` button).
A variable needs to be added called `RUN_AZURE_ARTIFACTORY_RELEASE`, with a value of `true`. Then when the pipeline gets started, the final build outputs will be updated to artifactory. A variable needs to be added called `RUN_AZURE_ARTIFACTORY_RELEASE`, with a value of `true`. Then when the pipeline gets started, the final build outputs will be updated to artifactory.
To use newer versions of C++ dependencies, in `shared/config.gradle`, update the version related to the specific dependency. To use newer versions of C++ dependencies, in `shared/config.gradle`, update the version related to the specific dependency.
For Java dependencies, there is likely a file related to the specific dependency in the shared folder. Update the version in there. For Java dependencies, there is likely a file related to the specific dependency in the shared folder. Update the version in there.
Note, changing artifact locations (This includes changing the artifact year currently, I have an issue open to change this) requires updating the `native-utils` plugin Note, changing artifact locations (This includes changing the artifact year currently, I have an issue open to change this) requires updating the `native-utils` plugin
## Publishing allwpilib ## Publishing allwpilib
allwpilib publishes to the development repo on every push to master. To publish a release build, upload a new tag, and a release will automatically be built and published. allwpilib publishes to the development repo on every push to master. To publish a release build, upload a new tag, and a release will automatically be built and published.
## Publishing desktop tools ## Publishing desktop tools
Desktop tools publish to the development repo on every push to master. To publish a release build, upload a new tag, and a release will automatically be built and published. Desktop tools publish to the development repo on every push to master. To publish a release build, upload a new tag, and a release will automatically be built and published.
## Publishing VS Code ## Publishing VS Code
Before publishing, make sure to update the gradlerio version in `vscode-wpilib/resources/gradle/version.txt` Also make sure the gradle wrapper version matches the wrapper required by gradlerio. Before publishing, make sure to update the gradlerio version in `vscode-wpilib/resources/gradle/version.txt` Also make sure the gradle wrapper version matches the wrapper required by gradlerio.
Upon pushing a tag, a release will be built, and the files will be uploaded to the releases on GitHub. For publishing to the marketplace, you need a Microsoft account and to be added as a maintainer. Upon pushing a tag, a release will be built, and the files will be uploaded to the releases on GitHub. For publishing to the marketplace, you need a Microsoft account and to be added as a maintainer.
## Publishing GradleRIO ## Publishing GradleRIO
Before publishing, make sure to update the version in build.gradle. Publishing must happen locally, using the command `./gradlew publishPlugin`. This does require your API key for publishing to be set. Before publishing, make sure to update the version in build.gradle. Publishing must happen locally, using the command `./gradlew publishPlugin`. This does require your API key for publishing to be set.
## Building the installer ## Building the installer
Update the GradleRIO version in gradle.properties, and in the scripts folder in vscode, update the vscode extension. Then push, it will build the installer on azure. Update the GradleRIO version in gradle.properties, and in the scripts folder in vscode, update the vscode extension. Then push, it will build the installer on azure.

View File

@@ -50,7 +50,7 @@ The following build options are available:
## Build Setup ## Build Setup
The WPILib CMake build does not allow in source builds. Because the `build` directory is used by Gradle, we recommend a `buildcmake` directory in the root. This folder is included in the gitignore. The WPILib CMake build does not allow in source builds. Because the `build` directory is used by Gradle, we recommend a `build-cmake` directory in the root. This folder is included in the gitignore.
Once you have a build folder, run CMake configuration in that build directory with the following command. Once you have a build folder, run CMake configuration in that build directory with the following command.

View File

@@ -4,88 +4,88 @@ trigger:
batch: true batch: true
branches: branches:
include: include:
- master - master
stages: stages:
- stage: Build - stage: Build
jobs: jobs:
- job: IntegrationTests - job: IntegrationTests
displayName: Integration Tests displayName: Integration Tests
pool: pool:
vmImage: 'Ubuntu 16.04' vmImage: "Ubuntu 16.04"
container: container:
image: wpilib/roborio-cross-ubuntu:2021-18.04 image: wpilib/roborio-cross-ubuntu:2021-18.04
timeoutInMinutes: 0 timeoutInMinutes: 0
steps: steps:
- task: Gradle@2 - task: Gradle@2
condition: and(succeeded(), not(startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))) condition: and(succeeded(), not(startsWith(variables['Build.SourceBranch'], 'refs/tags/v')))
inputs: inputs:
workingDirectory: '' workingDirectory: ""
gradleWrapperFile: 'gradlew' gradleWrapperFile: "gradlew"
gradleOptions: '-Xmx3072m' gradleOptions: "-Xmx3072m"
publishJUnitResults: false publishJUnitResults: false
testResultsFiles: '**/TEST-*.xml' testResultsFiles: "**/TEST-*.xml"
tasks: 'copyWpilibJIntegrationTestJarToOutput copyWpilibCTestLibrariesToOutput' tasks: "copyWpilibJIntegrationTestJarToOutput copyWpilibCTestLibrariesToOutput"
options: '-Ponlylinuxathena -PbuildServer' options: "-Ponlylinuxathena -PbuildServer"
- task: PublishPipelineArtifact@0 - task: PublishPipelineArtifact@0
inputs: inputs:
artifactName: 'Integration Tests' artifactName: "Integration Tests"
targetPath: 'build/integrationTestFiles' targetPath: "build/integrationTestFiles"
- stage: TestBench - stage: TestBench
displayName: Test Bench displayName: Test Bench
jobs: jobs:
- job: Cpp - job: Cpp
displayName: C++ displayName: C++
pool: RoboRioConnections pool: RoboRioConnections
timeoutInMinutes: 30 timeoutInMinutes: 30
workspace: workspace:
clean: all clean: all
steps: steps:
- task: DownloadPipelineArtifact@0 - task: DownloadPipelineArtifact@0
inputs: inputs:
artifactName: 'Integration Tests' artifactName: "Integration Tests"
targetPath: 'build/integrationTestFiles' targetPath: "build/integrationTestFiles"
- task: ShellScript@2 - task: ShellScript@2
displayName: Run C++ Tests displayName: Run C++ Tests
inputs: inputs:
scriptPath: test-scripts/deploy-and-run-test-on-robot.sh scriptPath: test-scripts/deploy-and-run-test-on-robot.sh
args: 'cpp -A "--gtest_output=xml:/home/admin/testResults/cppreport.xml"' args: 'cpp -A "--gtest_output=xml:/home/admin/testResults/cppreport.xml"'
- task: PublishTestResults@2 - task: PublishTestResults@2
displayName: Publish C++ Test Results displayName: Publish C++ Test Results
inputs: inputs:
testResultsFormat: 'JUnit' testResultsFormat: "JUnit"
testResultsFiles: '*.xml' testResultsFiles: "*.xml"
testRunTitle: 'C++ Test Report' testRunTitle: "C++ Test Report"
searchFolder: '$(System.DefaultWorkingDirectory)/test-reports' searchFolder: "$(System.DefaultWorkingDirectory)/test-reports"
- job: Java - job: Java
pool: RoboRioConnections pool: RoboRioConnections
timeoutInMinutes: 30 timeoutInMinutes: 30
workspace: workspace:
clean: all clean: all
steps: steps:
- task: DownloadPipelineArtifact@0 - task: DownloadPipelineArtifact@0
inputs: inputs:
artifactName: 'Integration Tests' artifactName: "Integration Tests"
targetPath: 'build/integrationTestFiles' targetPath: "build/integrationTestFiles"
- task: ShellScript@2 - task: ShellScript@2
displayName: Run Java Tests displayName: Run Java Tests
inputs: inputs:
scriptPath: test-scripts/deploy-and-run-test-on-robot.sh scriptPath: test-scripts/deploy-and-run-test-on-robot.sh
args: 'java' args: "java"
- task: PublishTestResults@2 - task: PublishTestResults@2
displayName: Publish Java Test Results displayName: Publish Java Test Results
inputs: inputs:
testResultsFormat: 'JUnit' testResultsFormat: "JUnit"
testResultsFiles: '*.xml' testResultsFiles: "*.xml"
testRunTitle: 'Java Test Report' testRunTitle: "Java Test Report"
searchFolder: '$(System.DefaultWorkingDirectory)/test-reports' searchFolder: "$(System.DefaultWorkingDirectory)/test-reports"

View File

@@ -118,8 +118,12 @@ subprojects {
String path = task.getLinkedFile().getAsFile().get().getAbsolutePath() String path = task.getLinkedFile().getAsFile().get().getAbsolutePath()
exec { exec {
workingDir rootDir workingDir rootDir
def args = ["sh", "-c", "codesign --force --strict --timestamp --options=runtime " + def args = [
"--verbose -s ${project.findProperty("developerID")} ${path}"] "sh",
"-c",
"codesign --force --strict --timestamp --options=runtime " +
"--verbose -s ${project.findProperty("developerID")} ${path}"
]
commandLine args commandLine args
} }
} }
@@ -136,13 +140,42 @@ spotless {
java { java {
target fileTree('.') { target fileTree('.') {
include '**/*.java' include '**/*.java'
exclude '**/manualTests/**', '**/build*/**' exclude '**/build/**', '**/build-*/**'
} }
googleJavaFormat() googleJavaFormat()
removeUnusedImports() removeUnusedImports()
trimTrailingWhitespace() trimTrailingWhitespace()
endWithNewline() endWithNewline()
} }
groovyGradle {
target fileTree('.') {
include '**/*.gradle'
exclude '**/build/**', '**/build-*/**'
}
greclipse()
indentWithSpaces(4)
trimTrailingWhitespace()
endWithNewline()
}
format 'xml', {
target fileTree('.') {
include '**/*.xml'
exclude '**/build/**', '**/build-*/**'
}
eclipseWtp('xml')
trimTrailingWhitespace()
indentWithSpaces(2)
endWithNewline()
}
format 'misc', {
target fileTree('.') {
include '**/*.md', '**/.gitignore'
exclude '**/build/**', '**/build-*/**'
}
trimTrailingWhitespace()
indentWithSpaces(2)
endWithNewline()
}
} }
wrapper { wrapper {

View File

@@ -20,9 +20,9 @@ dependencies {
ext { ext {
sharedCvConfigs = [cameraserver : [], sharedCvConfigs = [cameraserver : [],
cameraserverBase: [], cameraserverBase: [],
cameraserverDev : [], cameraserverDev : [],
cameraserverTest: []] cameraserverTest: []]
staticCvConfigs = [:] staticCvConfigs = [:]
useJava = true useJava = true
useCpp = true useCpp = true
@@ -32,14 +32,32 @@ apply from: "${rootDir}/shared/opencv.gradle"
nativeUtils.exportsConfigs { nativeUtils.exportsConfigs {
cameraserver { cameraserver {
x86ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', x86ExcludeSymbols = [
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AV_System_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CT??_R0?AVexception',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_CT??_R0?AVfailure',
x64ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', '_CT??_R0?AVruntime_error',
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AVsystem_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CTA5?AVfailure',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
x64ExcludeSymbols = [
'_CT??_R0?AV_System_error',
'_CT??_R0?AVexception',
'_CT??_R0?AVfailure',
'_CT??_R0?AVruntime_error',
'_CT??_R0?AVsystem_error',
'_CTA5?AVfailure',
'_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
} }
} }

View File

@@ -52,10 +52,10 @@ model {
} }
} }
binaries.all { binary -> binaries.all { binary ->
lib project: ':cameraserver', library: 'cameraserver', linkage: 'static' lib project: ':cameraserver', library: 'cameraserver', linkage: 'static'
lib project: ':ntcore', library: 'ntcore', linkage: 'static' lib project: ':ntcore', library: 'ntcore', linkage: 'static'
lib project: ':cscore', library: 'cscore', linkage: 'static' lib project: ':cscore', library: 'cscore', linkage: 'static'
lib project: ':wpiutil', library: 'wpiutil', linkage: 'static' lib project: ':wpiutil', library: 'wpiutil', linkage: 'static'
} }
} }
} }

View File

@@ -60,12 +60,12 @@ model {
ext { ext {
sharedCvConfigs = [cscore : [], sharedCvConfigs = [cscore : [],
cscoreBase: [], cscoreBase: [],
cscoreDev : [], cscoreDev : [],
cscoreTest: [], cscoreTest: [],
cscoreJNIShared: []] cscoreJNIShared: []]
staticCvConfigs = [cscoreJNI: [], staticCvConfigs = [cscoreJNI: [],
cscoreJNICvStatic: []] cscoreJNICvStatic: []]
useJava = true useJava = true
useCpp = true useCpp = true
cvStaticBuild = true cvStaticBuild = true
@@ -127,27 +127,45 @@ def examplesMap = [:];
File examplesTree = file("$projectDir/examples") File examplesTree = file("$projectDir/examples")
examplesTree.list(new FilenameFilter() { examplesTree.list(new FilenameFilter() {
@Override @Override
public boolean accept(File current, String name) { public boolean accept(File current, String name) {
return new File(current, name).isDirectory(); return new File(current, name).isDirectory();
} }
}).each { }).each {
sharedCvConfigs.put(it, []) sharedCvConfigs.put(it, [])
examplesMap.put(it, []) examplesMap.put(it, [])
} }
apply from: "${rootDir}/shared/opencv.gradle" apply from: "${rootDir}/shared/opencv.gradle"
nativeUtils.exportsConfigs { nativeUtils.exportsConfigs {
cscore { cscore {
x86ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', x86ExcludeSymbols = [
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AV_System_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CT??_R0?AVexception',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_CT??_R0?AVfailure',
x64ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', '_CT??_R0?AVruntime_error',
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AVsystem_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CTA5?AVfailure',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
x64ExcludeSymbols = [
'_CT??_R0?AV_System_error',
'_CT??_R0?AVexception',
'_CT??_R0?AVfailure',
'_CT??_R0?AVruntime_error',
'_CT??_R0?AVsystem_error',
'_CTA5?AVfailure',
'_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
} }
cscoreJNI { cscoreJNI {
x86SymbolFilter = { symbols -> x86SymbolFilter = { symbols ->

View File

@@ -39,7 +39,7 @@ cppProjectZips.add(project(':wpilibNewCommands').cppHeadersZip)
doxygen { doxygen {
executables { executables {
doxygen version : '1.8.18', doxygen version : '1.8.18',
baseURI : 'https://frcmaven.wpi.edu/artifactory/generic-release-mirror/doxygen' baseURI : 'https://frcmaven.wpi.edu/artifactory/generic-release-mirror/doxygen'
} }
} }

View File

@@ -30,14 +30,32 @@ if (!project.hasProperty('onlylinuxathena') && !project.hasProperty('onlylinuxra
nativeUtils.exportsConfigs { nativeUtils.exportsConfigs {
glass { glass {
x86ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', x86ExcludeSymbols = [
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AV_System_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CT??_R0?AVexception',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_CT??_R0?AVfailure',
x64ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', '_CT??_R0?AVruntime_error',
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AVsystem_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CTA5?AVfailure',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
x64ExcludeSymbols = [
'_CT??_R0?AV_System_error',
'_CT??_R0?AVexception',
'_CT??_R0?AVfailure',
'_CT??_R0?AVruntime_error',
'_CT??_R0?AVsystem_error',
'_CTA5?AVfailure',
'_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
} }
} }

View File

@@ -29,10 +29,14 @@ model {
// Get path to binary. // Get path to binary.
exec { exec {
workingDir rootDir workingDir rootDir
def args = ["sh", "-c", "codesign --force --strict --deep " + def args = [
"--timestamp --options=runtime " + "sh",
"--verbose -s ${project.findProperty("developerID")} " + "-c",
"$project.buildDir/outputs/bundles/Glass.app/"] "codesign --force --strict --deep " +
"--timestamp --options=runtime " +
"--verbose -s ${project.findProperty("developerID")} " +
"$project.buildDir/outputs/bundles/Glass.app/"
]
commandLine args commandLine args
} }
} }

View File

@@ -129,14 +129,32 @@ cppHeadersZip {
nativeUtils.exportsConfigs { nativeUtils.exportsConfigs {
hal { hal {
x86ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', x86ExcludeSymbols = [
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AV_System_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CT??_R0?AVexception',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_CT??_R0?AVfailure',
x64ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', '_CT??_R0?AVruntime_error',
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AVsystem_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CTA5?AVfailure',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
x64ExcludeSymbols = [
'_CT??_R0?AV_System_error',
'_CT??_R0?AVexception',
'_CT??_R0?AVfailure',
'_CT??_R0?AVruntime_error',
'_CT??_R0?AVsystem_error',
'_CTA5?AVfailure',
'_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
} }
halJNI { halJNI {
x86SymbolFilter = { symbols -> x86SymbolFilter = { symbols ->
@@ -152,9 +170,9 @@ model {
binaries { binaries {
all { all {
if (!(it instanceof NativeBinarySpec)) return if (!(it instanceof NativeBinarySpec)) return
if (it.component.name != 'hal' && it.component.name != 'halBase') return if (it.component.name != 'hal' && it.component.name != 'halBase') return
if (it.targetPlatform.name != nativeUtils.wpi.platforms.roborio) return if (it.targetPlatform.name != nativeUtils.wpi.platforms.roborio) return
nativeUtils.useRequiredLibrary(it, 'netcomm_shared', 'chipobject_shared', 'visa_shared') nativeUtils.useRequiredLibrary(it, 'netcomm_shared', 'chipobject_shared', 'visa_shared')
} }
} }
} }

View File

@@ -1,91 +1,91 @@
import org.gradle.nativeplatform.toolchain.internal.msvcpp.VisualStudioLocator import org.gradle.nativeplatform.toolchain.internal.msvcpp.VisualStudioLocator
import org.gradle.internal.os.OperatingSystem import org.gradle.internal.os.OperatingSystem
import org.gradle.util.VersionNumber import org.gradle.util.VersionNumber
plugins { plugins {
id 'cpp' id 'cpp'
id 'maven-publish' id 'maven-publish'
} }
if (OperatingSystem.current().isWindows()) { if (OperatingSystem.current().isWindows()) {
def outputsFolder = file("$buildDir/outputs") def outputsFolder = file("$buildDir/outputs")
def baseArtifactId = 'runtime' def baseArtifactId = 'runtime'
def artifactGroupId = "edu.wpi.first.msvc" def artifactGroupId = "edu.wpi.first.msvc"
def zipBaseName = "_GROUP_edu_wpi_first_msvc_ID_runtime_CLS" def zipBaseName = "_GROUP_edu_wpi_first_msvc_ID_runtime_CLS"
def vsLocator = gradle.services.get(VisualStudioLocator) def vsLocator = gradle.services.get(VisualStudioLocator)
def vsLocation = vsLocator.locateAllComponents().first() def vsLocation = vsLocator.locateAllComponents().first()
def visualCppVersion = vsLocation.visualCpp.version def visualCppVersion = vsLocation.visualCpp.version
def vsDirectory = vsLocation.visualStudioDir def vsDirectory = vsLocation.visualStudioDir
def runtimeLocation = file("$vsDirectory\\VC\\Redist\\MSVC") def runtimeLocation = file("$vsDirectory\\VC\\Redist\\MSVC")
def runtimeVerNumber = null def runtimeVerNumber = null
runtimeLocation.eachFile { runtimeLocation.eachFile {
def verNumber = VersionNumber.parse(it.name) def verNumber = VersionNumber.parse(it.name)
if (verNumber.major == visualCppVersion.major && verNumber.minor == visualCppVersion.minor) { if (verNumber.major == visualCppVersion.major && verNumber.minor == visualCppVersion.minor) {
runtimeVerNumber = verNumber runtimeVerNumber = verNumber
} }
} }
if (runtimeVerNumber != null) { if (runtimeVerNumber != null) {
runtimeLocation = file("$runtimeLocation\\$runtimeVerNumber") runtimeLocation = file("$runtimeLocation\\$runtimeVerNumber")
def x86Folder = null def x86Folder = null
file("$runtimeLocation\\x86").eachFile { file("$runtimeLocation\\x86").eachFile {
if (it.name.endsWith('.CRT')) { if (it.name.endsWith('.CRT')) {
x86Folder = it x86Folder = it
} }
} }
def x64Folder = null def x64Folder = null
file("$runtimeLocation\\x64").eachFile { file("$runtimeLocation\\x64").eachFile {
if (it.name.endsWith('.CRT')) { if (it.name.endsWith('.CRT')) {
x64Folder = it x64Folder = it
} }
} }
def x86ZipTask = tasks.create('x86RuntimeZip', Zip) { def x86ZipTask = tasks.create('x86RuntimeZip', Zip) {
destinationDirectory = outputsFolder destinationDirectory = outputsFolder
archiveBaseName = zipBaseName archiveBaseName = zipBaseName
classifier = 'x86' classifier = 'x86'
from x86Folder from x86Folder
} }
def x64ZipTask = tasks.create('x64RuntimeZip', Zip) { def x64ZipTask = tasks.create('x64RuntimeZip', Zip) {
destinationDirectory = outputsFolder destinationDirectory = outputsFolder
archiveBaseName = zipBaseName archiveBaseName = zipBaseName
classifier = 'x64' classifier = 'x64'
from x64Folder from x64Folder
} }
addTaskToCopyAllOutputs(x86ZipTask) addTaskToCopyAllOutputs(x86ZipTask)
addTaskToCopyAllOutputs(x64ZipTask) addTaskToCopyAllOutputs(x64ZipTask)
build.dependsOn x86ZipTask build.dependsOn x86ZipTask
build.dependsOn x64ZipTask build.dependsOn x64ZipTask
publishing { publishing {
publications { publications {
runtime(MavenPublication) { runtime(MavenPublication) {
artifact x86ZipTask artifact x86ZipTask
artifact x64ZipTask artifact x64ZipTask
artifactId = "${baseArtifactId}" artifactId = "${baseArtifactId}"
groupId artifactGroupId groupId artifactGroupId
version wpilibVersioning.version.get() version wpilibVersioning.version.get()
} }
} }
} }
} }
} }

View File

@@ -77,7 +77,6 @@ deploy {
postdeploy << { ctx -> postdeploy << { ctx ->
ctx.execute('chmod +x myRobotCpp') ctx.execute('chmod +x myRobotCpp')
} }
} }
nativeArtifact('myRobotCppStatic') { nativeArtifact('myRobotCppStatic') {
@@ -136,9 +135,7 @@ dependencies {
implementation project(':wpilibNewCommands') implementation project(':wpilibNewCommands')
} }
def simProjects = [ def simProjects = ['halsim_gui']
'halsim_gui'
]
model { model {
components { components {

View File

@@ -7,14 +7,32 @@ apply from: "${rootDir}/shared/jni/setupBuild.gradle"
nativeUtils.exportsConfigs { nativeUtils.exportsConfigs {
ntcore { ntcore {
x86ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', x86ExcludeSymbols = [
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AV_System_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CT??_R0?AVexception',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_CT??_R0?AVfailure',
x64ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', '_CT??_R0?AVruntime_error',
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AVsystem_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CTA5?AVfailure',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
x64ExcludeSymbols = [
'_CT??_R0?AV_System_error',
'_CT??_R0?AVexception',
'_CT??_R0?AVfailure',
'_CT??_R0?AVruntime_error',
'_CT??_R0?AVsystem_error',
'_CTA5?AVfailure',
'_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
} }
ntcoreJNI { ntcoreJNI {
x86SymbolFilter = { symbols -> x86SymbolFilter = { symbols ->

View File

@@ -18,10 +18,13 @@ public class Client {
NetworkTable.setPort(10000); NetworkTable.setPort(10000);
NetworkTable.setClientMode(); NetworkTable.setClientMode();
NetworkTable nt = NetworkTable.getTable(""); NetworkTable nt = NetworkTable.getTable("");
try { Thread.sleep(2000); } catch (InterruptedException e) {} try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
try { try {
System.out.println("Got foo: " + nt.getNumber("foo")); System.out.println("Got foo: " + nt.getNumber("foo"));
} catch(TableKeyNotDefinedException ex) { } catch (TableKeyNotDefinedException ex) {
} }
nt.putBoolean("bar", false); nt.putBoolean("bar", false);
nt.setFlags("bar", NetworkTable.PERSISTENT); nt.setFlags("bar", NetworkTable.PERSISTENT);
@@ -38,6 +41,9 @@ public class Client {
strs[0] = "Hello"; strs[0] = "Hello";
strs[1] = "World"; strs[1] = "World";
nt.putStringArray("strarray", strs); nt.putStringArray("strarray", strs);
try { Thread.sleep(10000); } catch (InterruptedException e) {} try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
} }
} }

View File

@@ -18,13 +18,19 @@ public class Server {
NetworkTable.setPort(10000); NetworkTable.setPort(10000);
NetworkTable.setServerMode(); NetworkTable.setServerMode();
NetworkTable nt = NetworkTable.getTable(""); NetworkTable nt = NetworkTable.getTable("");
try { Thread.sleep(1000); } catch (InterruptedException e) {} try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
nt.putNumber("foo", 0.5); nt.putNumber("foo", 0.5);
nt.setFlags("foo", NetworkTable.PERSISTENT); nt.setFlags("foo", NetworkTable.PERSISTENT);
nt.putNumber("foo2", 0.5); nt.putNumber("foo2", 0.5);
nt.putNumber("foo2", 0.7); nt.putNumber("foo2", 0.7);
nt.putNumber("foo2", 0.6); nt.putNumber("foo2", 0.6);
nt.putNumber("foo2", 0.5); nt.putNumber("foo2", 0.5);
try { Thread.sleep(10000); } catch (InterruptedException e) {} try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
} }
} }

View File

@@ -5,16 +5,16 @@ nativeUtils.withRoboRIO()
nativeUtils.withRaspbian() nativeUtils.withRaspbian()
nativeUtils.withBionic() nativeUtils.withBionic()
nativeUtils { nativeUtils {
wpi { wpi {
configureDependencies { configureDependencies {
wpiVersion = "-1" wpiVersion = "-1"
niLibVersion = "2020.10.1" niLibVersion = "2020.10.1"
opencvVersion = "3.4.7-5" opencvVersion = "3.4.7-5"
googleTestVersion = "1.9.0-5-437e100-1" googleTestVersion = "1.9.0-5-437e100-1"
imguiVersion = "1.76-10" imguiVersion = "1.76-10"
wpimathVersion = "-1" wpimathVersion = "-1"
}
} }
}
} }
nativeUtils.wpi.addWarnings() nativeUtils.wpi.addWarnings()
@@ -26,7 +26,7 @@ nativeUtils.enableSourceLink()
nativeUtils.platformConfigs.each { nativeUtils.platformConfigs.each {
if (it.name.contains('windows')) return if (it.name.contains('windows')) return
it.linker.args << '-Wl,-rpath,\'$ORIGIN\'' it.linker.args << '-Wl,-rpath,\'$ORIGIN\''
if (it.name == 'osxx86-64') { if (it.name == 'osxx86-64') {
it.linker.args << "-headerpad_max_install_names" it.linker.args << "-headerpad_max_install_names"
} }
@@ -99,7 +99,7 @@ ext.createComponentZipTasks = { components, names, base, type, project, func ->
if (it in NativeLibrarySpec && stringNames.contains(it.name)) { if (it in NativeLibrarySpec && stringNames.contains(it.name)) {
it.binaries.each { it.binaries.each {
if (!it.buildable) return if (!it.buildable) return
def target = nativeUtils.getPublishClassifier(it) def target = nativeUtils.getPublishClassifier(it)
if (configMap.containsKey(target)) { if (configMap.containsKey(target)) {
configMap.get(target).add(it) configMap.get(target).add(it)
} else { } else {

View File

@@ -1,21 +1,21 @@
model { model {
tasks { tasks {
def ts = $.testSuites def ts = $.testSuites
project.tasks.register('testDesktopCpp') { testTask-> project.tasks.register('testDesktopCpp') { testTask->
def systemArch = getCurrentArch() def systemArch = getCurrentArch()
def found = false def found = false
ts.each { ts.each {
if (it in GoogleTestTestSuiteSpec && it.name == "${nativeName}Test") { if (it in GoogleTestTestSuiteSpec && it.name == "${nativeName}Test") {
it.binaries.each { it.binaries.each {
if (found) return if (found) return
def arch = it.targetPlatform.name def arch = it.targetPlatform.name
if (arch == systemArch && it.buildType.name == 'debug') { if (arch == systemArch && it.buildType.name == 'debug') {
testTask.dependsOn it.tasks.run testTask.dependsOn it.tasks.run
found = true found = true
} }
} }
} }
} }
} }
} }
} }

View File

@@ -1,3 +1,3 @@
tasks.register('testDesktopJava') { tasks.register('testDesktopJava') {
dependsOn test dependsOn test
} }

View File

@@ -65,7 +65,10 @@ addTaskToCopyAllOutputs(cppHeadersZip)
model { model {
publishing { publishing {
def taskList = createComponentZipTasks($.components, [nativeName, "${nativeName}JNIShared"], zipBaseName, Zip, project, includeStandardZipFormat) def taskList = createComponentZipTasks($.components, [
nativeName,
"${nativeName}JNIShared"
], zipBaseName, Zip, project, includeStandardZipFormat)
def jniTaskList = createComponentZipTasks($.components, ["${nativeName}JNI"], jniBaseName, Jar, project, { task, value -> def jniTaskList = createComponentZipTasks($.components, ["${nativeName}JNI"], jniBaseName, Jar, project, { task, value ->
value.each { binary -> value.each { binary ->

View File

@@ -117,7 +117,6 @@ model {
} }
include '**/*.h' include '**/*.h'
} }
} }
} }
binaries.all { binaries.all {

View File

@@ -13,7 +13,7 @@ ext.createGenerateResourcesTask = { name, prefix, namespace, project ->
generatedOutputDir.mkdirs() generatedOutputDir.mkdirs()
inputDir.eachFile { inputFile -> inputDir.eachFile { inputFile ->
if (inputFile.name.startsWith('.')) return if (inputFile.name.startsWith('.')) return
def fileBytes = inputFile.bytes def fileBytes = inputFile.bytes
def outputFile = file("$generatedOutputDir/${inputFile.name}.cpp") def outputFile = file("$generatedOutputDir/${inputFile.name}.cpp")
def funcName = "GetResource_" + inputFile.name.replaceAll('[^a-zA-Z0-9]', '_') def funcName = "GetResource_" + inputFile.name.replaceAll('[^a-zA-Z0-9]', '_')
outputFile.withWriter { out -> outputFile.withWriter { out ->

View File

@@ -56,7 +56,6 @@ model {
cpp.lib library: "${component.name}", linkage: "static" cpp.lib library: "${component.name}", linkage: "static"
} }
} }
} }
/* TODO: Finish writing the test case */ /* TODO: Finish writing the test case */
@@ -97,7 +96,7 @@ model {
// project(':gmock').addGmockToLinker(it) // project(':gmock').addGmockToLinker(it)
//} //}
//else { //else {
buildable = false buildable = false
//} //}
} }
} }

View File

@@ -13,11 +13,9 @@ ext.skiplinuxraspbian = true
apply from: "${rootDir}/shared/config.gradle" apply from: "${rootDir}/shared/config.gradle"
/* Use a sort of poor man's autoconf to find the protobuf development /* Use a sort of poor man's autoconf to find the protobuf development
files; on Debian, those are supplied by libprotobuf-dev. files; on Debian, those are supplied by libprotobuf-dev.
This should get skipped on Windows.
This should get skipped on Windows. TODO: Add Windows support for the simulation code */
TODO: Add Windows support for the simulation code */
def protobuf_version = "" def protobuf_version = ""
try { try {
@@ -41,14 +39,14 @@ tasks.whenTaskAdded { task ->
} }
dependencies { dependencies {
implementation "com.google.protobuf:protobuf-java:${protobuf_version}" implementation "com.google.protobuf:protobuf-java:${protobuf_version}"
implementation "com.google.protobuf:protoc:${protobuf_version}" implementation "com.google.protobuf:protoc:${protobuf_version}"
} }
/* There is a nice gradle plugin for protobuf, and the protoc tool /* There is a nice gradle plugin for protobuf, and the protoc tool
is included; using it simplifies our build process. is included; using it simplifies our build process.
The trick is that we have to use the same version as the system The trick is that we have to use the same version as the system
copy of libprotobuf-dev */ copy of libprotobuf-dev */
protobuf { protobuf {
protoc { protoc {
artifact = "com.google.protobuf:protoc:${protobuf_version}" artifact = "com.google.protobuf:protoc:${protobuf_version}"

View File

@@ -35,7 +35,6 @@ def gz_msgs_project = project(":simulation:gz_msgs")
if (!gz_msgs_project.hasProperty('skip_gz_msgs') && !project.hasProperty('skip_frc_plugins')) { if (!gz_msgs_project.hasProperty('skip_gz_msgs') && !project.hasProperty('skip_frc_plugins')) {
apply from: "${rootDir}/shared/plugins/setupBuild.gradle" apply from: "${rootDir}/shared/plugins/setupBuild.gradle"
} }
model { model {

View File

@@ -28,7 +28,6 @@ if (!project.hasProperty('onlylinuxathena')) {
} }
lib project: ":simulation:halsim_ws_core", library: "halsim_ws_core", linkage: "static" lib project: ":simulation:halsim_ws_core", library: "halsim_ws_core", linkage: "static"
} }
} }
} }

View File

@@ -41,7 +41,6 @@ if (!project.hasProperty('onlylinuxathena')) {
binaries.all { binaries.all {
project(':hal').addHalDependency(it, 'shared') project(':hal').addHalDependency(it, 'shared')
lib project: ':wpiutil', library: 'wpiutil', linkage: 'shared' lib project: ':wpiutil', library: 'wpiutil', linkage: 'shared'
} }
appendDebugPathToBinaries(binaries) appendDebugPathToBinaries(binaries)
} }

View File

@@ -63,7 +63,6 @@ model {
} }
} }
} }
} }
tasks.withType(RunTestExecutable) { tasks.withType(RunTestExecutable) {

View File

@@ -2,90 +2,77 @@
<!DOCTYPE <!DOCTYPE
module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd"> "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<!-- <!-- Checkstyle configuration that checks the Google coding conventions from
Checkstyle configuration that checks the Google coding conventions from Google Java Style Google Java Style that can be found at https://google.github.io/styleguide/javaguide.html.
that can be found at https://google.github.io/styleguide/javaguide.html. Checkstyle is very configurable. Be sure to read the documentation at http://checkstyle.sf.net
(or in your downloaded distribution). To completely disable a check, just
Checkstyle is very configurable. Be sure to read the documentation at comment it out or delete it from the file. Authors: Max Vetrenko, Ruslan
http://checkstyle.sf.net (or in your downloaded distribution). Diachenko, Roman Ivanov. -->
To completely disable a check, just comment it out or delete it from the file.
Authors: Max Vetrenko, Ruslan Diachenko, Roman Ivanov.
-->
<module name="Checker"> <module name="Checker">
<property name="charset" <property name="charset" value="UTF-8" />
value="UTF-8" /> <property name="severity" value="error" />
<property name="severity"
value="error" />
<module name="SuppressionFilter"> <module name="SuppressionFilter">
<property name="file" <property name="file" value="${config_loc}/suppressions.xml" />
value="${config_loc}/suppressions.xml" />
</module> </module>
<property name="fileExtensions" <property name="fileExtensions" value="java, properties, xml" />
value="java, properties, xml" /> <!-- Checks for whitespace -->
<!-- Checks for whitespace -->
<!-- See http://checkstyle.sf.net/config_whitespace.html --> <!-- See http://checkstyle.sf.net/config_whitespace.html -->
<module name="FileTabCharacter"> <module name="FileTabCharacter">
<property name="eachLine" <property name="eachLine" value="true" />
value="true" />
</module> </module>
<module name="LineLength"> <module name="LineLength">
<property name="fileExtensions" value="java"/> <property name="fileExtensions" value="java" />
<property name="max" value="100"/> <property name="max" value="100" />
<property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/> <property name="ignorePattern"
value="^package.*|^import.*|a href|href|http://|https://|ftp://" />
</module> </module>
<module name="NewlineAtEndOfFile" /> <module name="NewlineAtEndOfFile" />
<module name="SuppressWarningsFilter" /> <module name="SuppressWarningsFilter" />
<module name="TreeWalker"> <module name="TreeWalker">
<module name="SuppressionCommentFilter"> <module name="SuppressionCommentFilter">
<property name="offCommentFormat" value="CHECKSTYLE.OFF\: ([\w\|]+)"/> <property name="offCommentFormat"
<property name="onCommentFormat" value="CHECKSTYLE.ON\: ([\w\|]+)"/> value="CHECKSTYLE.OFF\: ([\w\|]+)" />
<property name="checkFormat" value="$1"/> <property name="onCommentFormat"
value="CHECKSTYLE.ON\: ([\w\|]+)" />
<property name="checkFormat" value="$1" />
</module> </module>
<module name="SuppressWarningsHolder" /> <module name="SuppressWarningsHolder" />
<module name="OuterTypeFilename" /> <module name="OuterTypeFilename" />
<module name="IllegalTokenText"> <module name="IllegalTokenText">
<property name="tokens" <property name="tokens" value="STRING_LITERAL, CHAR_LITERAL" />
value="STRING_LITERAL, CHAR_LITERAL" />
<property name="format" <property name="format"
value="\\u00(08|09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)" /> value="\\u00(08|09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)" />
<property name="message" <property name="message"
value="Avoid using corresponding octal or Unicode escape." /> value="Avoid using corresponding octal or Unicode escape." />
</module> </module>
<module name="IllegalTokenText"> <module name="IllegalTokenText">
<property name="tokens" <property name="tokens" value="NUM_INT,NUM_LONG" />
value="NUM_INT,NUM_LONG"/> <property name="format" value="^0[^lx]" />
<property name="format" <property name="ignoreCase" value="true" />
value="^0[^lx]"/>
<property name="ignoreCase"
value="true"/>
<property name="message" <property name="message"
value="Forbid leading zeros in an integer literal, other than zero and a hex literal." /> value="Forbid leading zeros in an integer literal, other than zero and a hex literal." />
</module> </module>
<module name="IllegalTokenText"> <module name="IllegalTokenText">
<property name="tokens" <property name="tokens" value="NUM_DOUBLE,NUM_FLOAT" />
value="NUM_DOUBLE,NUM_FLOAT"/> <property name="format" value="(^\.|\.$)" />
<property name="format" <property name="ignoreCase" value="true" />
value="(^\.|\.$)"/>
<property name="ignoreCase"
value="true"/>
<property name="message" <property name="message"
value="Must use leading and trailing zero in floating point numbers." /> value="Must use leading and trailing zero in floating point numbers." />
</module> </module>
<module name="AvoidEscapedUnicodeCharacters"> <module name="AvoidEscapedUnicodeCharacters">
<property name="allowEscapesForControlCharacters" <property name="allowEscapesForControlCharacters"
value="true" /> value="true" />
<property name="allowByTailComment" <property name="allowByTailComment" value="true" />
value="true" /> <property name="allowNonPrintableEscapes" value="true" />
<property name="allowNonPrintableEscapes"
value="true" />
</module> </module>
<module name="CustomImportOrder"> <module name="CustomImportOrder">
<property name="sortImportsInGroupAlphabetically" value="true"/> <property name="sortImportsInGroupAlphabetically"
<property name="separateLineBetweenGroups" value="true"/> value="true" />
<property name="customImportOrderRules" value="STATIC###THIRD_PARTY_PACKAGE"/> <property name="separateLineBetweenGroups" value="true" />
<property name="tokens" value="IMPORT, STATIC_IMPORT, PACKAGE_DEF"/> <property name="customImportOrderRules"
value="STATIC###THIRD_PARTY_PACKAGE" />
<property name="tokens"
value="IMPORT, STATIC_IMPORT, PACKAGE_DEF" />
</module> </module>
<module name="AvoidStarImport" /> <module name="AvoidStarImport" />
<module name="RedundantImport" /> <module name="RedundantImport" />
@@ -93,59 +80,59 @@ module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
<module name="OneTopLevelClass" /> <module name="OneTopLevelClass" />
<module name="NoLineWrap" /> <module name="NoLineWrap" />
<module name="EmptyBlock"> <module name="EmptyBlock">
<property name="option" <property name="option" value="TEXT" />
value="TEXT" />
<property name="tokens" <property name="tokens"
value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH" /> value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH" />
</module> </module>
<module name="NeedBraces" /> <module name="NeedBraces" />
<module name="LeftCurly"> <module name="LeftCurly">
<property name="tokens" <property name="tokens"
value="ANNOTATION_DEF, CLASS_DEF, CTOR_DEF, ENUM_CONSTANT_DEF, ENUM_DEF, value="ANNOTATION_DEF, CLASS_DEF, CTOR_DEF, ENUM_CONSTANT_DEF, ENUM_DEF,
INTERFACE_DEF, LAMBDA, LITERAL_CATCH, LITERAL_DEFAULT, INTERFACE_DEF, LAMBDA, LITERAL_CATCH, LITERAL_DEFAULT,
LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF,
LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, METHOD_DEF, LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, METHOD_DEF,
OBJBLOCK, STATIC_INIT, RECORD_DEF, COMPACT_CTOR_DEF"/> OBJBLOCK, STATIC_INIT, RECORD_DEF, COMPACT_CTOR_DEF" />
</module> </module>
<module name="RightCurly"> <module name="RightCurly">
<property name="id" value="RightCurlySame"/> <property name="id" value="RightCurlySame" />
<property name="tokens" <property name="tokens"
value="LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, value="LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE,
LITERAL_DO"/> LITERAL_DO" />
</module> </module>
<module name="RightCurly"> <module name="RightCurly">
<property name="id" value="RightCurlyAlone"/> <property name="id" value="RightCurlyAlone" />
<property name="option" value="alone"/> <property name="option" value="alone" />
<property name="tokens" <property name="tokens"
value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT, value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT,
INSTANCE_INIT, ANNOTATION_DEF, ENUM_DEF, INTERFACE_DEF, RECORD_DEF, INSTANCE_INIT, ANNOTATION_DEF, ENUM_DEF, INTERFACE_DEF, RECORD_DEF,
COMPACT_CTOR_DEF"/> COMPACT_CTOR_DEF" />
</module> </module>
<module name="SuppressionXpathSingleFilter"> <module name="SuppressionXpathSingleFilter">
<!-- suppresion is required till https://github.com/checkstyle/checkstyle/issues/7541 --> <!-- suppresion is required till https://github.com/checkstyle/checkstyle/issues/7541 -->
<property name="id" value="RightCurlyAlone"/> <property name="id" value="RightCurlyAlone" />
<property name="query" value="//RCURLY[parent::SLIST[count(./*)=1] <property name="query"
or preceding-sibling::*[last()][self::LCURLY]]"/> value="//RCURLY[parent::SLIST[count(./*)=1]
or preceding-sibling::*[last()][self::LCURLY]]" />
</module> </module>
<module name="WhitespaceAround"> <module name="WhitespaceAround">
<property name="allowEmptyConstructors" value="true"/> <property name="allowEmptyConstructors" value="true" />
<property name="allowEmptyLambdas" value="true"/> <property name="allowEmptyLambdas" value="true" />
<property name="allowEmptyMethods" value="true"/> <property name="allowEmptyMethods" value="true" />
<property name="allowEmptyTypes" value="true"/> <property name="allowEmptyTypes" value="true" />
<property name="allowEmptyLoops" value="true"/> <property name="allowEmptyLoops" value="true" />
<property name="ignoreEnhancedForColon" value="false"/> <property name="ignoreEnhancedForColon" value="false" />
<property name="tokens" <property name="tokens"
value="ASSIGN, BAND, BAND_ASSIGN, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, value="ASSIGN, BAND, BAND_ASSIGN, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR,
BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, DO_WHILE, EQUAL, GE, GT, LAMBDA, LAND, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, DO_WHILE, EQUAL, GE, GT, LAMBDA, LAND,
LCURLY, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LCURLY, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY,
LITERAL_FOR, LITERAL_IF, LITERAL_RETURN, LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN, LITERAL_SWITCH, LITERAL_SYNCHRONIZED,
LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN, LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN,
NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION, RCURLY, SL, SLIST, SL_ASSIGN, SR, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION, RCURLY, SL, SLIST, SL_ASSIGN, SR,
SR_ASSIGN, STAR, STAR_ASSIGN, LITERAL_ASSERT, TYPE_EXTENSION_AND"/> SR_ASSIGN, STAR, STAR_ASSIGN, LITERAL_ASSERT, TYPE_EXTENSION_AND" />
<message key="ws.notFollowed" <message key="ws.notFollowed"
value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks may only be represented as '{}' when not part of a multi-block statement (4.1.3)"/> value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks may only be represented as '{}' when not part of a multi-block statement (4.1.3)" />
<message key="ws.notPreceded" <message key="ws.notPreceded"
value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/> value="WhitespaceAround: ''{0}'' is not preceded with whitespace." />
</module> </module>
<module name="WhitespaceAfter" /> <module name="WhitespaceAfter" />
<module name="OneStatementPerLine" /> <module name="OneStatementPerLine" />
@@ -161,163 +148,150 @@ module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
<module name="ModifierOrder" /> <module name="ModifierOrder" />
<module name="RedundantModifier" /> <module name="RedundantModifier" />
<module name="EmptyLineSeparator"> <module name="EmptyLineSeparator">
<property name="allowNoEmptyLineBetweenFields" <property name="allowNoEmptyLineBetweenFields" value="true" />
value="true" />
</module> </module>
<module name="SeparatorWrap"> <module name="SeparatorWrap">
<property name="tokens" <property name="tokens" value="DOT" />
value="DOT" /> <property name="option" value="nl" />
<property name="option"
value="nl" />
</module> </module>
<module name="SeparatorWrap"> <module name="SeparatorWrap">
<property name="tokens" <property name="tokens" value="COMMA" />
value="COMMA" /> <property name="option" value="EOL" />
<property name="option"
value="EOL" />
</module> </module>
<module name="PackageName"> <module name="PackageName">
<property name="format" <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$" />
value="^[a-z]+(\.[a-z][a-z0-9]*)*$" />
<message key="name.invalidPattern" <message key="name.invalidPattern"
value="Package name ''{0}'' must match pattern ''{1}''." /> value="Package name ''{0}'' must match pattern ''{1}''." />
</module> </module>
<module name="TypeName"> <module name="TypeName">
<message key="name.invalidPattern" <message key="name.invalidPattern"
value="Type name ''{0}'' must match pattern ''{1}''." /> value="Type name ''{0}'' must match pattern ''{1}''." />
</module> </module>
<module name="MemberName"> <module name="MemberName">
<property name="format" <property name="format"
value="^(m_[a-z]([a-zA-Z0-9]*)|value)$" /> value="^(m_[a-z]([a-zA-Z0-9]*)|value)$" />
<message key="name.invalidPattern" <message key="name.invalidPattern"
value="Member name ''{0}'' must match pattern ''{1}''." /> value="Member name ''{0}'' must match pattern ''{1}''." />
</module> </module>
<module name="ParameterName"> <module name="ParameterName">
<property name="format" <property name="format"
value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$" /> value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$" />
<message key="name.invalidPattern" <message key="name.invalidPattern"
value="Parameter name ''{0}'' must match pattern ''{1}''." /> value="Parameter name ''{0}'' must match pattern ''{1}''." />
</module> </module>
<module name="LambdaParameterName"> <module name="LambdaParameterName">
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/> <property name="format"
<message key="name.invalidPattern" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$" />
value="Lambda parameter name ''{0}'' must match pattern ''{1}''."/> <message key="name.invalidPattern"
value="Lambda parameter name ''{0}'' must match pattern ''{1}''." />
</module> </module>
<module name="CatchParameterName"> <module name="CatchParameterName">
<property name="format" <property name="format"
value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$" /> value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$" />
<message key="name.invalidPattern" <message key="name.invalidPattern"
value="Catch parameter name ''{0}'' must match pattern ''{1}''." /> value="Catch parameter name ''{0}'' must match pattern ''{1}''." />
</module> </module>
<module name="LocalVariableName"> <module name="LocalVariableName">
<property name="tokens" <property name="tokens" value="VARIABLE_DEF" />
value="VARIABLE_DEF" />
<property name="format" <property name="format"
value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$" /> value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$" />
<property name="allowOneCharVarInForLoop" <property name="allowOneCharVarInForLoop" value="true" />
value="true" />
<message key="name.invalidPattern" <message key="name.invalidPattern"
value="Local variable name ''{0}'' must match pattern ''{1}''." /> value="Local variable name ''{0}'' must match pattern ''{1}''." />
</module> </module>
<module name="ClassTypeParameterName"> <module name="ClassTypeParameterName">
<property name="format" <property name="format"
value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)" /> value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)" />
<message key="name.invalidPattern" <message key="name.invalidPattern"
value="Class type name ''{0}'' must match pattern ''{1}''." /> value="Class type name ''{0}'' must match pattern ''{1}''." />
</module> </module>
<module name="MethodTypeParameterName"> <module name="MethodTypeParameterName">
<property name="format" <property name="format"
value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)" /> value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)" />
<message key="name.invalidPattern" <message key="name.invalidPattern"
value="Method type name ''{0}'' must match pattern ''{1}''." /> value="Method type name ''{0}'' must match pattern ''{1}''." />
</module> </module>
<module name="InterfaceTypeParameterName"> <module name="InterfaceTypeParameterName">
<property name="format" <property name="format"
value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)" /> value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)" />
<message key="name.invalidPattern" <message key="name.invalidPattern"
value="Interface type name ''{0}'' must match pattern ''{1}''." /> value="Interface type name ''{0}'' must match pattern ''{1}''." />
</module> </module>
<module name="NoFinalizer" /> <module name="NoFinalizer" />
<module name="GenericWhitespace"> <module name="GenericWhitespace">
<message key="ws.followed" <message key="ws.followed"
value="GenericWhitespace ''{0}'' is followed by whitespace." /> value="GenericWhitespace ''{0}'' is followed by whitespace." />
<message key="ws.preceded" <message key="ws.preceded"
value="GenericWhitespace ''{0}'' is preceded with whitespace." /> value="GenericWhitespace ''{0}'' is preceded with whitespace." />
<message key="ws.illegalFollow" <message key="ws.illegalFollow"
value="GenericWhitespace ''{0}'' should followed by whitespace." /> value="GenericWhitespace ''{0}'' should followed by whitespace." />
<message key="ws.notPreceded" <message key="ws.notPreceded"
value="GenericWhitespace ''{0}'' is not preceded with whitespace." /> value="GenericWhitespace ''{0}'' is not preceded with whitespace." />
</module> </module>
<module name="AbbreviationAsWordInName"> <module name="AbbreviationAsWordInName">
<property name="ignoreFinal" <property name="ignoreFinal" value="false" />
value="false" /> <property name="allowedAbbreviationLength" value="4" />
<property name="allowedAbbreviationLength"
value="4" />
</module> </module>
<module name="OverloadMethodsDeclarationOrder" /> <module name="OverloadMethodsDeclarationOrder" />
<module name="VariableDeclarationUsageDistance" /> <module name="VariableDeclarationUsageDistance" />
<module name="MethodParamPad" /> <module name="MethodParamPad" />
<module name="TypecastParenPad" /> <module name="TypecastParenPad" />
<module name="OperatorWrap"> <module name="OperatorWrap">
<property name="option" <property name="option" value="NL" />
value="NL" />
<property name="tokens" <property name="tokens"
value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR, LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR " /> value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR, LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR " />
</module> </module>
<module name="AnnotationLocation"> <module name="AnnotationLocation">
<property name="tokens" <property name="tokens"
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF" /> value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF" />
</module> </module>
<module name="AnnotationLocation"> <module name="AnnotationLocation">
<property name="tokens" <property name="tokens" value="VARIABLE_DEF" />
value="VARIABLE_DEF" />
<property name="allowSamelineMultipleAnnotations" <property name="allowSamelineMultipleAnnotations"
value="true" /> value="true" />
</module> </module>
<module name="MissingOverride" /> <module name="MissingOverride" />
<module name="NonEmptyAtclauseDescription" /> <module name="NonEmptyAtclauseDescription" />
<module name="JavadocTagContinuationIndentation" /> <module name="JavadocTagContinuationIndentation" />
<module name="SummaryJavadoc"> <module name="SummaryJavadoc">
<property name="forbiddenSummaryFragments" <property name="forbiddenSummaryFragments"
value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )" /> value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )" />
</module> </module>
<module name="JavadocParagraph" /> <module name="JavadocParagraph" />
<module name="AtclauseOrder"> <module name="AtclauseOrder">
<property name="tagOrder" <property name="tagOrder"
value="@param, @return, @throws, @deprecated" /> value="@param, @return, @throws, @deprecated" />
<property name="target" <property name="target"
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF" /> value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF" />
</module> </module>
<module name="JavadocMethod"> <module name="JavadocMethod">
<property name="scope" value="public"/> <property name="scope" value="public" />
<property name="allowMissingParamTags" value="true"/> <property name="allowMissingParamTags" value="true" />
<property name="allowMissingReturnTag" value="true"/> <property name="allowMissingReturnTag" value="true" />
<property name="allowedAnnotations" value="Override, Test"/> <property name="allowedAnnotations" value="Override, Test" />
<property name="tokens" value="METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF, COMPACT_CTOR_DEF"/> <property name="tokens"
value="METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF, COMPACT_CTOR_DEF" />
</module> </module>
<module name="MissingJavadocMethod"> <module name="MissingJavadocMethod">
<property name="scope" value="public"/> <property name="scope" value="public" />
<property name="minLineCount" value="2"/> <property name="minLineCount" value="2" />
<property name="allowedAnnotations" value="Override, Test"/> <property name="allowedAnnotations" value="Override, Test" />
<property name="tokens" value="METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF, <property name="tokens"
COMPACT_CTOR_DEF"/> value="METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF,
COMPACT_CTOR_DEF" />
</module> </module>
<module name="MethodName"> <module name="MethodName">
<property name="format" <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$" />
value="^[a-z][a-z0-9][a-zA-Z0-9_]*$" />
<message key="name.invalidPattern" <message key="name.invalidPattern"
value="Method name ''{0}'' must match pattern ''{1}''." /> value="Method name ''{0}'' must match pattern ''{1}''." />
</module> </module>
<!-- https://github.com/checkstyle/checkstyle/issues/4052 --> <!-- https://github.com/checkstyle/checkstyle/issues/4052 -->
<!-- <module name="SingleLineJavadoc"> <!-- <module name="SingleLineJavadoc"> <property name="ignoreInlineTags"
<property name="ignoreInlineTags" value="false" /> </module> -->
value="false" />
</module> -->
<module name="EmptyCatchBlock"> <module name="EmptyCatchBlock">
<property name="exceptionVariableName" <property name="exceptionVariableName" value="expected" />
value="expected" />
</module> </module>
<module name="CommentsIndentation" /> <module name="CommentsIndentation" />
<module name="PackageDeclaration"/> <module name="PackageDeclaration" />
</module> </module>
</module> </module>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<ruleset name="WPILibRuleset" <ruleset name="WPILibRuleset"
xmlns="http://pmd.sourceforge.net/ruleset/2.0.0" xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"> xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
<description>PMD Ruleset for WPILib</description> <description>PMD Ruleset for WPILib</description>
@@ -28,7 +28,7 @@
<rule ref="category/java/bestpractices.xml/UnusedPrivateMethod"> <rule ref="category/java/bestpractices.xml/UnusedPrivateMethod">
<properties> <properties>
<property name="violationSuppressRegex" <property name="violationSuppressRegex"
value=".*'.*Arguments\(\)'.*" /> value=".*'.*Arguments\(\)'.*" />
</properties> </properties>
</rule> </rule>
@@ -67,19 +67,17 @@
<exclude name="AvoidUsingShortType" /> <exclude name="AvoidUsingShortType" />
</rule> </rule>
<rule name="UnnecessaryCastRule" <rule name="UnnecessaryCastRule" language="java"
language="java" message="Avoid unnecessary casts"
message="Avoid unnecessary casts" class="net.sourceforge.pmd.lang.java.rule.migrating.UnnecessaryCastRule"
class="net.sourceforge.pmd.lang.java.rule.migrating.UnnecessaryCastRule" externalInfoUrl="https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/migrating/UnnecessaryCastRule.java" />
externalInfoUrl="https://github.com/pmd/pmd/blob/master/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/migrating/UnnecessaryCastRule.java" />
<!-- Custom Rules --> <!-- Custom Rules -->
<rule name="UseRequireNonNull" <rule name="UseRequireNonNull"
message="Use Objects.requireNonNull() instead of throwing a NullPointerException yourself." message="Use Objects.requireNonNull() instead of throwing a NullPointerException yourself."
language="java" language="java" class="net.sourceforge.pmd.lang.rule.XPathRule">
class="net.sourceforge.pmd.lang.rule.XPathRule">
<description>Use Objects.requireNonNull() instead of throwing a <description>Use Objects.requireNonNull() instead of throwing a
NullPointerException yourself.</description> NullPointerException yourself.</description>
<properties> <properties>
<property name="xpath"> <property name="xpath">
<value> <value>

View File

@@ -4,11 +4,10 @@ suppressions PUBLIC "-//Puppy Crawl//DTD Suppressions 1.1//EN"
"http://www.puppycrawl.com/dtds/suppressions_1_1.dtd"> "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
<suppressions> <suppressions>
<suppress files=".*sim.*" <suppress files=".*sim.*"
checks="(LineLength|EmptyLineSeparator|ParameterName|ImportOrder|AbbreviationAsWordInName|JavadocMethod|NoFinalizer)" /> checks="(LineLength|EmptyLineSeparator|ParameterName|ImportOrder|AbbreviationAsWordInName|JavadocMethod|NoFinalizer)" />
<suppress files=".*test.*" <suppress files=".*test.*" checks="MissingJavadocMethod" />
checks="MissingJavadocMethod" />
<suppress files=".*wpilibjIntegrationTests.*" <suppress files=".*wpilibjIntegrationTests.*"
checks="MissingJavadocMethod" /> checks="MissingJavadocMethod" />
<suppress files=".*JNI.*" <suppress files=".*JNI.*"
checks="(LineLength|EmptyLineSeparator|ParameterName|MissingJavadocMethod)" /> checks="(LineLength|EmptyLineSeparator|ParameterName|MissingJavadocMethod)" />
</suppressions> </suppressions>

View File

@@ -17,14 +17,32 @@ if (!project.hasProperty('onlylinuxathena') && !project.hasProperty('onlylinuxra
nativeUtils.exportsConfigs { nativeUtils.exportsConfigs {
wpigui { wpigui {
x86ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', x86ExcludeSymbols = [
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AV_System_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CT??_R0?AVexception',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_CT??_R0?AVfailure',
x64ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', '_CT??_R0?AVruntime_error',
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AVsystem_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CTA5?AVfailure',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
x64ExcludeSymbols = [
'_CT??_R0?AV_System_error',
'_CT??_R0?AVexception',
'_CT??_R0?AVfailure',
'_CT??_R0?AVruntime_error',
'_CT??_R0?AVsystem_error',
'_CTA5?AVfailure',
'_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
} }
} }

View File

@@ -1,99 +1,117 @@
ext { ext {
nativeName = 'wpilibNewCommands' nativeName = 'wpilibNewCommands'
devMain = 'edu.wpi.first.wpilibj.commands.DevMain' devMain = 'edu.wpi.first.wpilibj.commands.DevMain'
} }
evaluationDependsOn(':ntcore') evaluationDependsOn(':ntcore')
evaluationDependsOn(':cscore') evaluationDependsOn(':cscore')
evaluationDependsOn(':hal') evaluationDependsOn(':hal')
evaluationDependsOn(':wpimath') evaluationDependsOn(':wpimath')
evaluationDependsOn(':wpilibc') evaluationDependsOn(':wpilibc')
evaluationDependsOn(':cameraserver') evaluationDependsOn(':cameraserver')
evaluationDependsOn(':wpilibj') evaluationDependsOn(':wpilibj')
apply from: "${rootDir}/shared/javacpp/setupBuild.gradle" apply from: "${rootDir}/shared/javacpp/setupBuild.gradle"
dependencies { dependencies {
implementation project(':wpiutil') implementation project(':wpiutil')
implementation project(':ntcore') implementation project(':ntcore')
implementation project(':cscore') implementation project(':cscore')
implementation project(':hal') implementation project(':hal')
implementation project(':wpimath') implementation project(':wpimath')
implementation project(':wpilibj') implementation project(':wpilibj')
devImplementation project(':wpiutil') devImplementation project(':wpiutil')
devImplementation project(':ntcore') devImplementation project(':ntcore')
devImplementation project(':cscore') devImplementation project(':cscore')
devImplementation project(':hal') devImplementation project(':hal')
devImplementation project(':wpimath') devImplementation project(':wpimath')
devImplementation project(':wpilibj') devImplementation project(':wpilibj')
testImplementation 'com.google.guava:guava:19.0' testImplementation 'com.google.guava:guava:19.0'
testImplementation 'org.mockito:mockito-core:2.27.0' testImplementation 'org.mockito:mockito-core:2.27.0'
} }
nativeUtils.exportsConfigs { nativeUtils.exportsConfigs {
wpilibNewCommands { wpilibNewCommands {
x86ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', x86ExcludeSymbols = [
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AV_System_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CT??_R0?AVexception',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_CT??_R0?AVfailure',
x64ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', '_CT??_R0?AVruntime_error',
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AVsystem_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CTA5?AVfailure',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_TI5?AVfailure',
} '_CT??_R0?AVout_of_range',
} '_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
model { '_CT??_R0?AVbad_cast'
components {} ]
binaries { x64ExcludeSymbols = [
all { '_CT??_R0?AV_System_error',
if (!it.buildable || !(it instanceof NativeBinarySpec)) { '_CT??_R0?AVexception',
return '_CT??_R0?AVfailure',
} '_CT??_R0?AVruntime_error',
lib project: ':wpilibc', library: 'wpilibc', linkage: 'shared' '_CT??_R0?AVsystem_error',
lib project: ':ntcore', library: 'ntcore', linkage: 'shared' '_CTA5?AVfailure',
project(':hal').addHalDependency(it, 'shared') '_TI5?AVfailure',
lib project: ':wpiutil', library: 'wpiutil', linkage: 'shared' '_CT??_R0?AVout_of_range',
lib project: ':wpimath', library: 'wpimath', linkage: 'shared' '_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
if (it.component.name == "${nativeName}Dev") { '_CT??_R0?AVbad_cast'
lib project: ':ntcore', library: 'ntcoreJNIShared', linkage: 'shared' ]
project(':hal').addHalJniDependency(it) }
} }
if (it instanceof GoogleTestTestSuiteBinarySpec) { model {
nativeUtils.useRequiredLibrary(it, 'opencv_shared') components {}
lib project: ':cscore', library: 'cscore', linkage: 'shared' binaries {
} all {
if ((it instanceof NativeExecutableBinarySpec || it instanceof GoogleTestTestSuiteBinarySpec) && it.targetPlatform.name == nativeUtils.wpi.platforms.roborio) { if (!it.buildable || !(it instanceof NativeBinarySpec)) {
nativeUtils.useRequiredLibrary(it, 'netcomm_shared', 'chipobject_shared', 'visa_shared', 'ni_runtime_shared') return
} }
} lib project: ':wpilibc', library: 'wpilibc', linkage: 'shared'
} lib project: ':ntcore', library: 'ntcore', linkage: 'shared'
tasks { project(':hal').addHalDependency(it, 'shared')
def c = $.components lib project: ':wpiutil', library: 'wpiutil', linkage: 'shared'
def found = false lib project: ':wpimath', library: 'wpimath', linkage: 'shared'
def systemArch = getCurrentArch()
c.each { if (it.component.name == "${nativeName}Dev") {
if (it in NativeExecutableSpec && it.name == "${nativeName}Dev") { lib project: ':ntcore', library: 'ntcoreJNIShared', linkage: 'shared'
it.binaries.each { project(':hal').addHalJniDependency(it)
if (!found) { }
def arch = it.targetPlatform.name
if (arch == systemArch) { if (it instanceof GoogleTestTestSuiteBinarySpec) {
def filePath = it.tasks.install.installDirectory.get().toString() + File.separatorChar + 'lib' nativeUtils.useRequiredLibrary(it, 'opencv_shared')
lib project: ':cscore', library: 'cscore', linkage: 'shared'
found = true }
} if ((it instanceof NativeExecutableBinarySpec || it instanceof GoogleTestTestSuiteBinarySpec) && it.targetPlatform.name == nativeUtils.wpi.platforms.roborio) {
} nativeUtils.useRequiredLibrary(it, 'netcomm_shared', 'chipobject_shared', 'visa_shared', 'ni_runtime_shared')
} }
} }
} }
} tasks {
} def c = $.components
def found = false
test { def systemArch = getCurrentArch()
testLogging { c.each {
outputs.upToDateWhen {false} if (it in NativeExecutableSpec && it.name == "${nativeName}Dev") {
showStandardStreams = true it.binaries.each {
} if (!found) {
} def arch = it.targetPlatform.name
if (arch == systemArch) {
def filePath = it.tasks.install.installDirectory.get().toString() + File.separatorChar + 'lib'
found = true
}
}
}
}
}
}
}
test {
testLogging {
outputs.upToDateWhen {false}
showStandardStreams = true
}
}

View File

@@ -30,14 +30,32 @@ dependencies {
nativeUtils.exportsConfigs { nativeUtils.exportsConfigs {
wpilibOldCommands { wpilibOldCommands {
x86ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', x86ExcludeSymbols = [
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AV_System_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CT??_R0?AVexception',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_CT??_R0?AVfailure',
x64ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', '_CT??_R0?AVruntime_error',
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AVsystem_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CTA5?AVfailure',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
x64ExcludeSymbols = [
'_CT??_R0?AV_System_error',
'_CT??_R0?AVexception',
'_CT??_R0?AVfailure',
'_CT??_R0?AVruntime_error',
'_CT??_R0?AVsystem_error',
'_CTA5?AVfailure',
'_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
} }
} }
@@ -55,8 +73,8 @@ model {
lib project: ':wpimath', library: 'wpimath', linkage: 'shared' lib project: ':wpimath', library: 'wpimath', linkage: 'shared'
if (it.component.name == "${nativeName}Dev") { if (it.component.name == "${nativeName}Dev") {
lib project: ':ntcore', library: 'ntcoreJNIShared', linkage: 'shared' lib project: ':ntcore', library: 'ntcoreJNIShared', linkage: 'shared'
project(':hal').addHalJniDependency(it) project(':hal').addHalJniDependency(it)
} }
if (it instanceof GoogleTestTestSuiteBinarySpec) { if (it instanceof GoogleTestTestSuiteBinarySpec) {

View File

@@ -62,14 +62,32 @@ apply from: "${rootDir}/shared/googletest.gradle"
nativeUtils.exportsConfigs { nativeUtils.exportsConfigs {
wpilibc { wpilibc {
x86ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', x86ExcludeSymbols = [
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AV_System_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CT??_R0?AVexception',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_CT??_R0?AVfailure',
x64ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', '_CT??_R0?AVruntime_error',
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AVsystem_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CTA5?AVfailure',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
x64ExcludeSymbols = [
'_CT??_R0?AV_System_error',
'_CT??_R0?AVexception',
'_CT??_R0?AVfailure',
'_CT??_R0?AVruntime_error',
'_CT??_R0?AVsystem_error',
'_CTA5?AVfailure',
'_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
} }
} }
@@ -79,7 +97,10 @@ model {
sources { sources {
cpp { cpp {
source { source {
srcDirs = ['src/main/native/cpp', "$buildDir/generated/cpp"] srcDirs = [
'src/main/native/cpp',
"$buildDir/generated/cpp"
]
include '**/*.cpp' include '**/*.cpp'
} }
exportedHeaders { exportedHeaders {

View File

@@ -17,22 +17,22 @@ ext.templatesMap = [:]
File examplesTree = file("$projectDir/src/main/cpp/examples") File examplesTree = file("$projectDir/src/main/cpp/examples")
examplesTree.list(new FilenameFilter() { examplesTree.list(new FilenameFilter() {
@Override @Override
public boolean accept(File current, String name) { public boolean accept(File current, String name) {
return new File(current, name).isDirectory(); return new File(current, name).isDirectory();
} }
}).each { }).each {
examplesMap.put(it, []) examplesMap.put(it, [])
} }
File templatesTree = file("$projectDir/src/main/cpp/templates") File templatesTree = file("$projectDir/src/main/cpp/templates")
templatesTree.list(new FilenameFilter() { templatesTree.list(new FilenameFilter() {
@Override @Override
public boolean accept(File current, String name) { public boolean accept(File current, String name) {
return new File(current, name).isDirectory(); return new File(current, name).isDirectory();
} }
}).each { }).each {
templatesMap.put(it, []) templatesMap.put(it, [])
} }
nativeUtils.platformConfigs.named(nativeUtils.wpi.platforms.roborio).configure { nativeUtils.platformConfigs.named(nativeUtils.wpi.platforms.roborio).configure {
cppCompiler.args.remove('-Wno-error=deprecated-declarations') cppCompiler.args.remove('-Wno-error=deprecated-declarations')

View File

@@ -12,14 +12,32 @@ apply from: "${rootDir}/shared/jni/setupBuild.gradle"
nativeUtils.exportsConfigs { nativeUtils.exportsConfigs {
wpimath { wpimath {
x86ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', x86ExcludeSymbols = [
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AV_System_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CT??_R0?AVexception',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_CT??_R0?AVfailure',
x64ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', '_CT??_R0?AVruntime_error',
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AVsystem_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CTA5?AVfailure',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
x64ExcludeSymbols = [
'_CT??_R0?AV_System_error',
'_CT??_R0?AVexception',
'_CT??_R0?AVfailure',
'_CT??_R0?AVruntime_error',
'_CT??_R0?AVsystem_error',
'_CTA5?AVfailure',
'_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
} }
} }

View File

@@ -146,26 +146,44 @@ ext {
def examplesMap = [:]; def examplesMap = [:];
file("$projectDir/examples").list(new FilenameFilter() { file("$projectDir/examples").list(new FilenameFilter() {
@Override @Override
public boolean accept(File current, String name) { public boolean accept(File current, String name) {
return new File(current, name).isDirectory(); return new File(current, name).isDirectory();
} }
}).each { }).each {
examplesMap.put(it, []) examplesMap.put(it, [])
} }
apply from: "${rootDir}/shared/jni/setupBuild.gradle" apply from: "${rootDir}/shared/jni/setupBuild.gradle"
nativeUtils.exportsConfigs { nativeUtils.exportsConfigs {
wpiutil { wpiutil {
x86ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', x86ExcludeSymbols = [
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AV_System_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CT??_R0?AVexception',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_CT??_R0?AVfailure',
x64ExcludeSymbols = ['_CT??_R0?AV_System_error', '_CT??_R0?AVexception', '_CT??_R0?AVfailure', '_CT??_R0?AVruntime_error',
'_CT??_R0?AVruntime_error', '_CT??_R0?AVsystem_error', '_CTA5?AVfailure', '_CT??_R0?AVsystem_error',
'_TI5?AVfailure', '_CT??_R0?AVout_of_range', '_CTA3?AVout_of_range', '_CTA5?AVfailure',
'_TI3?AVout_of_range', '_CT??_R0?AVbad_cast'] '_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
x64ExcludeSymbols = [
'_CT??_R0?AV_System_error',
'_CT??_R0?AVexception',
'_CT??_R0?AVfailure',
'_CT??_R0?AVruntime_error',
'_CT??_R0?AVsystem_error',
'_CTA5?AVfailure',
'_TI5?AVfailure',
'_CT??_R0?AVout_of_range',
'_CTA3?AVout_of_range',
'_TI3?AVout_of_range',
'_CT??_R0?AVbad_cast'
]
} }
} }
@@ -210,7 +228,9 @@ model {
sources { sources {
cpp { cpp {
source { source {
srcDirs = ['src/netconsoleServer/native/cpp'] srcDirs = [
'src/netconsoleServer/native/cpp'
]
includes = ['**/*.cpp'] includes = ['**/*.cpp']
} }
} }
@@ -227,7 +247,9 @@ model {
sources { sources {
cpp { cpp {
source { source {
srcDirs = ['src/netconsoleTee/native/cpp'] srcDirs = [
'src/netconsoleTee/native/cpp'
]
includes = ['**/*.cpp'] includes = ['**/*.cpp']
} }
} }