blob: dd0623973bcfb6376d5cf0822462df5c1b210d6f [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
Austin Schuh75263e32022-02-22 18:05:32 -0800128 extension_mapping 'inc=C++', 'no_extension=C++'
Austin Schuh812d0d12021-11-04 20:16:48 -0700129 extract_all true
Brian Silverman8fce7482020-01-05 13:18:21 -0800130 extract_static true
Austin Schuh75263e32022-02-22 18:05:32 -0800131 file_patterns '*'
Austin Schuh812d0d12021-11-04 20:16:48 -0700132 full_path_names true
133 generate_html true
134 generate_latex false
135 generate_treeview true
136 html_extra_stylesheet 'theme.css'
137 html_timestamp true
138 javadoc_autobrief true
139 project_name 'WPILibC++'
140 project_logo '../wpiutil/src/main/native/resources/wpilib-128.png'
141 project_number wpilibVersioning.version.get()
142 quiet true
143 recursive true
144 strip_code_comments false
145 strip_from_inc_path cppIncludeRoots as String[]
146 strip_from_path cppIncludeRoots as String[]
147 use_mathjax true
148 warnings false
149 warn_if_incomplete_doc true
150 warn_if_undocumented false
151 warn_no_paramdoc true
152
153 //enable doxygen preprocessor expansion of WPI_DEPRECATED to fix SpeedController docs
154 enable_preprocessing true
155 macro_expansion true
156 expand_only_predef true
157 predefined "WPI_DEPRECATED(x)=[[deprecated(x)]]"
158
159 if (project.hasProperty('docWarningsAsErrors')) {
160 warn_as_error 'FAIL_ON_WARNINGS'
161 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800162}
163
164tasks.register("zipCppDocs", Zip) {
165 archiveBaseName = zipBaseNameCpp
166 destinationDirectory = outputsFolder
167 dependsOn doxygen
168 from ("$buildDir/docs/doxygen/html")
169 into '/'
170}
171
172// Java
173configurations {
174 javaSource {
175 transitive false
176 }
177}
178
179ext {
180 sharedCvConfigs = [:]
181 staticCvConfigs = [:]
182 useJava = true
183 useCpp = false
184 skipDev = true
185 useDocumentation = true
186}
187
188apply from: "${rootDir}/shared/opencv.gradle"
189
190task generateJavaDocs(type: Javadoc) {
Austin Schuh1e69f942020-11-14 15:06:14 -0800191 classpath += project(":wpimath").sourceSets.main.compileClasspath
Brian Silverman8fce7482020-01-05 13:18:21 -0800192 options.links("https://docs.oracle.com/en/java/javase/11/docs/api/")
Austin Schuh812d0d12021-11-04 20:16:48 -0700193 options.addStringOption("tag", "pre:a:Pre-Condition")
194 options.addBooleanOption("Xdoclint:html,missing,reference,syntax", true)
Brian Silverman8fce7482020-01-05 13:18:21 -0800195 options.addBooleanOption('html5', true)
Austin Schuh812d0d12021-11-04 20:16:48 -0700196 options.linkSource(true)
Brian Silverman8fce7482020-01-05 13:18:21 -0800197 dependsOn project(':wpilibj').generateJavaVersion
198 dependsOn project(':hal').generateUsageReporting
Austin Schuh1e69f942020-11-14 15:06:14 -0800199 dependsOn project(':wpimath').generateNat
Brian Silverman8fce7482020-01-05 13:18:21 -0800200 source project(':hal').sourceSets.main.java
201 source project(':wpiutil').sourceSets.main.java
202 source project(':cscore').sourceSets.main.java
203 source project(':ntcore').sourceSets.main.java
Austin Schuh1e69f942020-11-14 15:06:14 -0800204 source project(':wpimath').sourceSets.main.java
Brian Silverman8fce7482020-01-05 13:18:21 -0800205 source project(':wpilibj').sourceSets.main.java
206 source project(':cameraserver').sourceSets.main.java
207 source project(':wpilibOldCommands').sourceSets.main.java
208 source project(':wpilibNewCommands').sourceSets.main.java
209 source configurations.javaSource.collect { zipTree(it) }
210 include '**/*.java'
211 failOnError = true
Brian Silverman8fce7482020-01-05 13:18:21 -0800212
213 title = "WPILib API ${wpilibVersioning.version.get()}"
214 ext.entryPoint = "$destinationDir/index.html"
215
Austin Schuh812d0d12021-11-04 20:16:48 -0700216 if (JavaVersion.current().isJava8Compatible() && project.hasProperty('docWarningsAsErrors')) {
217 // Treat javadoc warnings as errors.
218 //
219 // The second argument '-quiet' is a hack. The one paramater
220 // addStringOption() doesn't work, so we add '-quiet', which is added
221 // anyway by gradle. See https://github.com/gradle/gradle/issues/2354.
222 //
223 // See JDK-8200363 (https://bugs.openjdk.java.net/browse/JDK-8200363)
224 // for information about the nonstandard -Xwerror option. JDK 15+ has
225 // -Werror.
226 options.addStringOption('Xwerror', '-quiet')
227 }
228
Brian Silverman8fce7482020-01-05 13:18:21 -0800229 if (JavaVersion.current().isJava11Compatible()) {
Austin Schuh1e69f942020-11-14 15:06:14 -0800230 if (!JavaVersion.current().isJava12Compatible()) {
231 options.addBooleanOption('-no-module-directories', true)
232 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800233 doLast {
234 // 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
235 // 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
236 // Here we generate this file manually
237 new File(destinationDir, 'package-list').text = new File(destinationDir, 'element-list').text
238 }
239 }
240}
241
242tasks.register("zipJavaDocs", Zip) {
243 archiveBaseName = zipBaseNameJava
244 destinationDirectory = outputsFolder
245 dependsOn generateJavaDocs
246 from ("$buildDir/docs/javadoc")
247 into '/'
248}
249
Austin Schuh1e69f942020-11-14 15:06:14 -0800250tasks.register("zipDocs") {
251 dependsOn zipCppDocs
252 dependsOn zipJavaDocs
253}
Brian Silverman8fce7482020-01-05 13:18:21 -0800254
255apply plugin: 'maven-publish'
256
257publishing {
258 publications {
259 java(MavenPublication) {
260 artifact zipJavaDocs
261
262 artifactId = "${baseArtifactIdJava}"
263 groupId artifactGroupIdJava
264 version wpilibVersioning.version.get()
265 }
266 cpp(MavenPublication) {
267 artifact zipCppDocs
268
269 artifactId = "${baseArtifactIdCpp}"
270 groupId artifactGroupIdCpp
271 version wpilibVersioning.version.get()
272 }
273 }
274}