blob: da762edc9389243172251e1ac38b108426cbcc82 [file] [log] [blame]
Brian Silverman8fce7482020-01-05 13:18:21 -08001plugins {
2 id 'java'
Austin Schuh812d0d12021-11-04 20:16:48 -07003 id "org.ysb33r.doxygen" version "0.7.0"
Brian Silverman8fce7482020-01-05 13:18:21 -08004}
5
6evaluationDependsOn(':wpiutil')
7evaluationDependsOn(':ntcore')
8evaluationDependsOn(':cscore')
9evaluationDependsOn(':hal')
10evaluationDependsOn(':cameraserver')
Austin Schuh1e69f942020-11-14 15:06:14 -080011evaluationDependsOn(':wpimath')
Brian Silverman8fce7482020-01-05 13:18:21 -080012evaluationDependsOn(':wpilibc')
13evaluationDependsOn(':wpilibj')
14evaluationDependsOn(':wpilibOldCommands')
15evaluationDependsOn(':wpilibNewCommands')
16
17def baseArtifactIdCpp = 'documentation'
18def artifactGroupIdCpp = 'edu.wpi.first.wpilibc'
19def zipBaseNameCpp = '_GROUP_edu_wpi_first_wpilibc_ID_documentation_CLS'
20
21def baseArtifactIdJava = 'documentation'
22def artifactGroupIdJava = 'edu.wpi.first.wpilibj'
23def zipBaseNameJava = '_GROUP_edu_wpi_first_wpilibj_ID_documentation_CLS'
24
25def outputsFolder = file("$project.buildDir/outputs")
26
27def cppProjectZips = []
Austin Schuh812d0d12021-11-04 20:16:48 -070028def cppIncludeRoots = []
Brian Silverman8fce7482020-01-05 13:18:21 -080029
30cppProjectZips.add(project(':hal').cppHeadersZip)
31cppProjectZips.add(project(':wpiutil').cppHeadersZip)
32cppProjectZips.add(project(':ntcore').cppHeadersZip)
33cppProjectZips.add(project(':cscore').cppHeadersZip)
34cppProjectZips.add(project(':cameraserver').cppHeadersZip)
Austin Schuh1e69f942020-11-14 15:06:14 -080035cppProjectZips.add(project(':wpimath').cppHeadersZip)
Brian Silverman8fce7482020-01-05 13:18:21 -080036cppProjectZips.add(project(':wpilibc').cppHeadersZip)
37cppProjectZips.add(project(':wpilibOldCommands').cppHeadersZip)
38cppProjectZips.add(project(':wpilibNewCommands').cppHeadersZip)
39
40doxygen {
Austin Schuh1e69f942020-11-14 15:06:14 -080041 executables {
Austin Schuh812d0d12021-11-04 20:16:48 -070042 doxygen version : '1.9.2',
43 baseURI : 'https://frcmaven.wpi.edu/artifactory/generic-release-mirror/doxygen'
Austin Schuh1e69f942020-11-14 15:06:14 -080044 }
Brian Silverman8fce7482020-01-05 13:18:21 -080045}
46
47doxygen {
48 generate_html true
Austin Schuh812d0d12021-11-04 20:16:48 -070049 html_extra_stylesheet 'theme.css'
Brian Silverman8fce7482020-01-05 13:18:21 -080050
51 cppProjectZips.each {
52 dependsOn it
53 source it.source
Austin Schuh812d0d12021-11-04 20:16:48 -070054 it.ext.includeDirs.each {
55 cppIncludeRoots.add(it.absolutePath)
56 }
Brian Silverman8fce7482020-01-05 13:18:21 -080057 }
58
Austin Schuh812d0d12021-11-04 20:16:48 -070059 if (project.hasProperty('docWarningsAsErrors')) {
60 // C++20 shims
61 exclude 'wpi/ghc/filesystem.hpp'
62 exclude 'wpi/span.h'
Brian Silverman8fce7482020-01-05 13:18:21 -080063
Austin Schuh812d0d12021-11-04 20:16:48 -070064 // Drake
65 exclude 'drake/common/**'
Brian Silverman8fce7482020-01-05 13:18:21 -080066
Austin Schuh812d0d12021-11-04 20:16:48 -070067 // Eigen
68 exclude 'Eigen/**'
69 exclude 'unsupported/**'
70
71 // LLVM
72 exclude 'wpi/AlignOf.h'
73 exclude 'wpi/Chrono.h'
74 exclude 'wpi/Compiler.h'
75 exclude 'wpi/ConvertUTF.h'
76 exclude 'wpi/DenseMap.h'
77 exclude 'wpi/DenseMapInfo.h'
78 exclude 'wpi/Endian.h'
79 exclude 'wpi/EpochTracker.h'
80 exclude 'wpi/Errc.h'
81 exclude 'wpi/Errno.h'
82 exclude 'wpi/ErrorHandling.h'
83 exclude 'wpi/fs.h'
84 exclude 'wpi/FunctionExtras.h'
85 exclude 'wpi/function_ref.h'
86 exclude 'wpi/Hashing.h'
87 exclude 'wpi/iterator.h'
88 exclude 'wpi/iterator_range.h'
89 exclude 'wpi/ManagedStatic.h'
90 exclude 'wpi/MapVector.h'
91 exclude 'wpi/MathExtras.h'
92 exclude 'wpi/MemAlloc.h'
93 exclude 'wpi/PointerIntPair.h'
94 exclude 'wpi/PointerLikeTypeTraits.h'
95 exclude 'wpi/PointerUnion.h'
96 exclude 'wpi/raw_os_ostream.h'
97 exclude 'wpi/raw_ostream.h'
98 exclude 'wpi/SmallPtrSet.h'
99 exclude 'wpi/SmallSet.h'
100 exclude 'wpi/SmallString.h'
101 exclude 'wpi/SmallVector.h'
102 exclude 'wpi/StringExtras.h'
103 exclude 'wpi/StringMap.h'
104 exclude 'wpi/SwapByteOrder.h'
105 exclude 'wpi/type_traits.h'
106 exclude 'wpi/VersionTuple.h'
107 exclude 'wpi/WindowsError.h'
108
109 // fmtlib
110 exclude 'fmt/**'
111
112 // libuv
113 exclude 'uv.h'
114 exclude 'uv/**'
115 exclude 'wpi/uv/**'
116
117 // json
118 exclude 'wpi/json.h'
119
120 // mpack
121 exclude 'wpi/mpack.h'
122
123 // units
124 exclude 'units/**'
125 }
126
127 case_sense_names false
Brian Silverman8fce7482020-01-05 13:18:21 -0800128 extension_mapping 'inc=C++'
Austin Schuh812d0d12021-11-04 20:16:48 -0700129 extract_all true
Brian Silverman8fce7482020-01-05 13:18:21 -0800130 extract_static true
Austin Schuh812d0d12021-11-04 20:16:48 -0700131 full_path_names true
132 generate_html true
133 generate_latex false
134 generate_treeview true
135 html_extra_stylesheet 'theme.css'
136 html_timestamp true
137 javadoc_autobrief true
138 project_name 'WPILibC++'
139 project_logo '../wpiutil/src/main/native/resources/wpilib-128.png'
140 project_number wpilibVersioning.version.get()
141 quiet true
142 recursive true
143 strip_code_comments false
144 strip_from_inc_path cppIncludeRoots as String[]
145 strip_from_path cppIncludeRoots as String[]
146 use_mathjax true
147 warnings false
148 warn_if_incomplete_doc true
149 warn_if_undocumented false
150 warn_no_paramdoc true
151
152 //enable doxygen preprocessor expansion of WPI_DEPRECATED to fix SpeedController docs
153 enable_preprocessing true
154 macro_expansion true
155 expand_only_predef true
156 predefined "WPI_DEPRECATED(x)=[[deprecated(x)]]"
157
158 if (project.hasProperty('docWarningsAsErrors')) {
159 warn_as_error 'FAIL_ON_WARNINGS'
160 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800161}
162
163tasks.register("zipCppDocs", Zip) {
164 archiveBaseName = zipBaseNameCpp
165 destinationDirectory = outputsFolder
166 dependsOn doxygen
167 from ("$buildDir/docs/doxygen/html")
168 into '/'
169}
170
171// Java
172configurations {
173 javaSource {
174 transitive false
175 }
176}
177
178ext {
179 sharedCvConfigs = [:]
180 staticCvConfigs = [:]
181 useJava = true
182 useCpp = false
183 skipDev = true
184 useDocumentation = true
185}
186
187apply from: "${rootDir}/shared/opencv.gradle"
188
189task generateJavaDocs(type: Javadoc) {
Austin Schuh1e69f942020-11-14 15:06:14 -0800190 classpath += project(":wpimath").sourceSets.main.compileClasspath
Brian Silverman8fce7482020-01-05 13:18:21 -0800191 options.links("https://docs.oracle.com/en/java/javase/11/docs/api/")
Austin Schuh812d0d12021-11-04 20:16:48 -0700192 options.addStringOption("tag", "pre:a:Pre-Condition")
193 options.addBooleanOption("Xdoclint:html,missing,reference,syntax", true)
Brian Silverman8fce7482020-01-05 13:18:21 -0800194 options.addBooleanOption('html5', true)
Austin Schuh812d0d12021-11-04 20:16:48 -0700195 options.linkSource(true)
Brian Silverman8fce7482020-01-05 13:18:21 -0800196 dependsOn project(':wpilibj').generateJavaVersion
197 dependsOn project(':hal').generateUsageReporting
Austin Schuh1e69f942020-11-14 15:06:14 -0800198 dependsOn project(':wpimath').generateNat
Brian Silverman8fce7482020-01-05 13:18:21 -0800199 source project(':hal').sourceSets.main.java
200 source project(':wpiutil').sourceSets.main.java
201 source project(':cscore').sourceSets.main.java
202 source project(':ntcore').sourceSets.main.java
Austin Schuh1e69f942020-11-14 15:06:14 -0800203 source project(':wpimath').sourceSets.main.java
Brian Silverman8fce7482020-01-05 13:18:21 -0800204 source project(':wpilibj').sourceSets.main.java
205 source project(':cameraserver').sourceSets.main.java
206 source project(':wpilibOldCommands').sourceSets.main.java
207 source project(':wpilibNewCommands').sourceSets.main.java
208 source configurations.javaSource.collect { zipTree(it) }
209 include '**/*.java'
210 failOnError = true
Brian Silverman8fce7482020-01-05 13:18:21 -0800211
212 title = "WPILib API ${wpilibVersioning.version.get()}"
213 ext.entryPoint = "$destinationDir/index.html"
214
Austin Schuh812d0d12021-11-04 20:16:48 -0700215 if (JavaVersion.current().isJava8Compatible() && project.hasProperty('docWarningsAsErrors')) {
216 // Treat javadoc warnings as errors.
217 //
218 // The second argument '-quiet' is a hack. The one paramater
219 // addStringOption() doesn't work, so we add '-quiet', which is added
220 // anyway by gradle. See https://github.com/gradle/gradle/issues/2354.
221 //
222 // See JDK-8200363 (https://bugs.openjdk.java.net/browse/JDK-8200363)
223 // for information about the nonstandard -Xwerror option. JDK 15+ has
224 // -Werror.
225 options.addStringOption('Xwerror', '-quiet')
226 }
227
Brian Silverman8fce7482020-01-05 13:18:21 -0800228 if (JavaVersion.current().isJava11Compatible()) {
Austin Schuh1e69f942020-11-14 15:06:14 -0800229 if (!JavaVersion.current().isJava12Compatible()) {
230 options.addBooleanOption('-no-module-directories', true)
231 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800232 doLast {
233 // This is a work-around for https://bugs.openjdk.java.net/browse/JDK-8211194. Can be removed once that issue is fixed on JDK's side
234 // Since JDK 11, package-list is missing from javadoc output files and superseded by element-list file, but a lot of external tools still need it
235 // Here we generate this file manually
236 new File(destinationDir, 'package-list').text = new File(destinationDir, 'element-list').text
237 }
238 }
239}
240
241tasks.register("zipJavaDocs", Zip) {
242 archiveBaseName = zipBaseNameJava
243 destinationDirectory = outputsFolder
244 dependsOn generateJavaDocs
245 from ("$buildDir/docs/javadoc")
246 into '/'
247}
248
Austin Schuh1e69f942020-11-14 15:06:14 -0800249tasks.register("zipDocs") {
250 dependsOn zipCppDocs
251 dependsOn zipJavaDocs
252}
Brian Silverman8fce7482020-01-05 13:18:21 -0800253
254apply plugin: 'maven-publish'
255
256publishing {
257 publications {
258 java(MavenPublication) {
259 artifact zipJavaDocs
260
261 artifactId = "${baseArtifactIdJava}"
262 groupId artifactGroupIdJava
263 version wpilibVersioning.version.get()
264 }
265 cpp(MavenPublication) {
266 artifact zipCppDocs
267
268 artifactId = "${baseArtifactIdCpp}"
269 groupId artifactGroupIdCpp
270 version wpilibVersioning.version.get()
271 }
272 }
273}