blob: 1d6e65ae209853789bd645397cb72c8595502afb [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
James Kuszmaulcf324122023-01-14 14:07:17 -08006evaluationDependsOn(':apriltag')
7evaluationDependsOn(':cameraserver')
Brian Silverman8fce7482020-01-05 13:18:21 -08008evaluationDependsOn(':cscore')
9evaluationDependsOn(':hal')
James Kuszmaulcf324122023-01-14 14:07:17 -080010evaluationDependsOn(':ntcore')
11evaluationDependsOn(':wpilibNewCommands')
Brian Silverman8fce7482020-01-05 13:18:21 -080012evaluationDependsOn(':wpilibc')
13evaluationDependsOn(':wpilibj')
James Kuszmaulcf324122023-01-14 14:07:17 -080014evaluationDependsOn(':wpimath')
15evaluationDependsOn(':wpinet')
James Kuszmaulb13e13f2023-11-22 20:44:04 -080016evaluationDependsOn(':wpiunits')
James Kuszmaulcf324122023-01-14 14:07:17 -080017evaluationDependsOn(':wpiutil')
Brian Silverman8fce7482020-01-05 13:18:21 -080018
19def baseArtifactIdCpp = 'documentation'
20def artifactGroupIdCpp = 'edu.wpi.first.wpilibc'
21def zipBaseNameCpp = '_GROUP_edu_wpi_first_wpilibc_ID_documentation_CLS'
22
23def baseArtifactIdJava = 'documentation'
24def artifactGroupIdJava = 'edu.wpi.first.wpilibj'
25def zipBaseNameJava = '_GROUP_edu_wpi_first_wpilibj_ID_documentation_CLS'
26
27def outputsFolder = file("$project.buildDir/outputs")
28
29def cppProjectZips = []
Austin Schuh812d0d12021-11-04 20:16:48 -070030def cppIncludeRoots = []
Brian Silverman8fce7482020-01-05 13:18:21 -080031
James Kuszmaulcf324122023-01-14 14:07:17 -080032cppProjectZips.add(project(':apriltag').cppHeadersZip)
Brian Silverman8fce7482020-01-05 13:18:21 -080033cppProjectZips.add(project(':cameraserver').cppHeadersZip)
James Kuszmaulcf324122023-01-14 14:07:17 -080034cppProjectZips.add(project(':cscore').cppHeadersZip)
35cppProjectZips.add(project(':hal').cppHeadersZip)
36cppProjectZips.add(project(':ntcore').cppHeadersZip)
Brian Silverman8fce7482020-01-05 13:18:21 -080037cppProjectZips.add(project(':wpilibNewCommands').cppHeadersZip)
James Kuszmaulcf324122023-01-14 14:07:17 -080038cppProjectZips.add(project(':wpilibc').cppHeadersZip)
39cppProjectZips.add(project(':wpimath').cppHeadersZip)
40cppProjectZips.add(project(':wpinet').cppHeadersZip)
41cppProjectZips.add(project(':wpiutil').cppHeadersZip)
Brian Silverman8fce7482020-01-05 13:18:21 -080042
43doxygen {
James Kuszmaulcf324122023-01-14 14:07:17 -080044 // Doxygen binaries are only provided for x86_64 platforms
45 // Other platforms will need to provide doxygen via their system
46 // See below maven and https://doxygen.nl/download.html for provided binaries
47
48 String arch = System.getProperty("os.arch");
49 if (arch.equals("x86_64") || arch.equals("amd64")) {
50 executables {
51 doxygen version : '1.9.4',
52 baseURI : 'https://frcmaven.wpi.edu/artifactory/generic-release-mirror/doxygen'
53 }
Austin Schuh1e69f942020-11-14 15:06:14 -080054 }
Brian Silverman8fce7482020-01-05 13:18:21 -080055}
56
57doxygen {
58 generate_html true
Austin Schuh812d0d12021-11-04 20:16:48 -070059 html_extra_stylesheet 'theme.css'
Brian Silverman8fce7482020-01-05 13:18:21 -080060
61 cppProjectZips.each {
62 dependsOn it
63 source it.source
Austin Schuh812d0d12021-11-04 20:16:48 -070064 it.ext.includeDirs.each {
65 cppIncludeRoots.add(it.absolutePath)
66 }
Brian Silverman8fce7482020-01-05 13:18:21 -080067 }
James Kuszmaulb13e13f2023-11-22 20:44:04 -080068 cppIncludeRoots << '../ntcore/build/generated/main/native/include/'
Brian Silverman8fce7482020-01-05 13:18:21 -080069
Austin Schuh812d0d12021-11-04 20:16:48 -070070 if (project.hasProperty('docWarningsAsErrors')) {
Austin Schuh812d0d12021-11-04 20:16:48 -070071 // Eigen
72 exclude 'Eigen/**'
73 exclude 'unsupported/**'
74
75 // LLVM
76 exclude 'wpi/AlignOf.h'
James Kuszmaulb13e13f2023-11-22 20:44:04 -080077 exclude 'wpi/Casting.h'
Austin Schuh812d0d12021-11-04 20:16:48 -070078 exclude 'wpi/Chrono.h'
79 exclude 'wpi/Compiler.h'
80 exclude 'wpi/ConvertUTF.h'
81 exclude 'wpi/DenseMap.h'
82 exclude 'wpi/DenseMapInfo.h'
83 exclude 'wpi/Endian.h'
84 exclude 'wpi/EpochTracker.h'
85 exclude 'wpi/Errc.h'
86 exclude 'wpi/Errno.h'
87 exclude 'wpi/ErrorHandling.h'
James Kuszmaulb13e13f2023-11-22 20:44:04 -080088 exclude 'wpi/bit.h'
Austin Schuh812d0d12021-11-04 20:16:48 -070089 exclude 'wpi/fs.h'
90 exclude 'wpi/FunctionExtras.h'
91 exclude 'wpi/function_ref.h'
92 exclude 'wpi/Hashing.h'
93 exclude 'wpi/iterator.h'
94 exclude 'wpi/iterator_range.h'
95 exclude 'wpi/ManagedStatic.h'
96 exclude 'wpi/MapVector.h'
97 exclude 'wpi/MathExtras.h'
98 exclude 'wpi/MemAlloc.h'
99 exclude 'wpi/PointerIntPair.h'
100 exclude 'wpi/PointerLikeTypeTraits.h'
101 exclude 'wpi/PointerUnion.h'
102 exclude 'wpi/raw_os_ostream.h'
103 exclude 'wpi/raw_ostream.h'
104 exclude 'wpi/SmallPtrSet.h'
105 exclude 'wpi/SmallSet.h'
106 exclude 'wpi/SmallString.h'
107 exclude 'wpi/SmallVector.h'
108 exclude 'wpi/StringExtras.h'
109 exclude 'wpi/StringMap.h'
110 exclude 'wpi/SwapByteOrder.h'
111 exclude 'wpi/type_traits.h'
112 exclude 'wpi/VersionTuple.h'
113 exclude 'wpi/WindowsError.h'
114
115 // fmtlib
116 exclude 'fmt/**'
117
118 // libuv
119 exclude 'uv.h'
120 exclude 'uv/**'
James Kuszmaulcf324122023-01-14 14:07:17 -0800121 exclude 'wpinet/uv/**'
Austin Schuh812d0d12021-11-04 20:16:48 -0700122
123 // json
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800124 exclude 'wpi/adl_serializer.h'
125 exclude 'wpi/byte_container_with_subtype.h'
126 exclude 'wpi/detail/**'
Austin Schuh812d0d12021-11-04 20:16:48 -0700127 exclude 'wpi/json.h'
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800128 exclude 'wpi/json_fwd.h'
129 exclude 'wpi/ordered_map.h'
130 exclude 'wpi/thirdparty/**'
Austin Schuh812d0d12021-11-04 20:16:48 -0700131
James Kuszmaulcf324122023-01-14 14:07:17 -0800132 // memory
133 exclude 'wpi/memory/**'
134
Austin Schuh812d0d12021-11-04 20:16:48 -0700135 // mpack
136 exclude 'wpi/mpack.h'
137
138 // units
139 exclude 'units/**'
140 }
141
James Kuszmaulcf324122023-01-14 14:07:17 -0800142 //TODO: building memory docs causes search to break
143 exclude 'wpi/memory/**'
144
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800145 exclude '*.pb.h'
146
Maxwell Henderson80bec322024-01-09 15:48:44 -0800147 // Save space by excluding protobuf and eigen
148 exclude 'Eigen/**'
149 exclude 'google/protobuf/**'
150
James Kuszmaulcf324122023-01-14 14:07:17 -0800151 aliases 'effects=\\par <i>Effects:</i>^^',
152 'notes=\\par <i>Notes:</i>^^',
153 'requires=\\par <i>Requires:</i>^^',
154 'requiredbe=\\par <i>Required Behavior:</i>^^',
155 'concept{2}=<a href=\"md_doc_concepts.html#\1\">\2</a>',
156 'defaultbe=\\par <i>Default Behavior:</i>^^'
Austin Schuh812d0d12021-11-04 20:16:48 -0700157 case_sense_names false
Austin Schuh75263e32022-02-22 18:05:32 -0800158 extension_mapping 'inc=C++', 'no_extension=C++'
Austin Schuh812d0d12021-11-04 20:16:48 -0700159 extract_all true
Brian Silverman8fce7482020-01-05 13:18:21 -0800160 extract_static true
Austin Schuh75263e32022-02-22 18:05:32 -0800161 file_patterns '*'
Austin Schuh812d0d12021-11-04 20:16:48 -0700162 full_path_names true
163 generate_html true
164 generate_latex false
165 generate_treeview true
166 html_extra_stylesheet 'theme.css'
167 html_timestamp true
168 javadoc_autobrief true
169 project_name 'WPILibC++'
170 project_logo '../wpiutil/src/main/native/resources/wpilib-128.png'
171 project_number wpilibVersioning.version.get()
172 quiet true
173 recursive true
174 strip_code_comments false
175 strip_from_inc_path cppIncludeRoots as String[]
176 strip_from_path cppIncludeRoots as String[]
177 use_mathjax true
178 warnings false
179 warn_if_incomplete_doc true
180 warn_if_undocumented false
181 warn_no_paramdoc true
182
James Kuszmaulcf324122023-01-14 14:07:17 -0800183 //enable doxygen preprocessor expansion of WPI_DEPRECATED to fix MotorController docs
Austin Schuh812d0d12021-11-04 20:16:48 -0700184 enable_preprocessing true
185 macro_expansion true
186 expand_only_predef true
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800187 predefined "WPI_DEPRECATED(x)=[[deprecated(x)]]\"\\\n" +
188 "\"__cplusplus\"\\\n" +
189 "\"HAL_ENUM(name)=enum name : int32_t"
Austin Schuh812d0d12021-11-04 20:16:48 -0700190
191 if (project.hasProperty('docWarningsAsErrors')) {
192 warn_as_error 'FAIL_ON_WARNINGS'
193 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800194}
195
196tasks.register("zipCppDocs", Zip) {
197 archiveBaseName = zipBaseNameCpp
198 destinationDirectory = outputsFolder
199 dependsOn doxygen
200 from ("$buildDir/docs/doxygen/html")
201 into '/'
202}
203
204// Java
205configurations {
206 javaSource {
207 transitive false
208 }
209}
210
Brian Silverman8fce7482020-01-05 13:18:21 -0800211task generateJavaDocs(type: Javadoc) {
Maxwell Henderson80bec322024-01-09 15:48:44 -0800212 classpath += project(":wpilibj").sourceSets.main.compileClasspath
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800213 options.links("https://docs.oracle.com/en/java/javase/17/docs/api/")
Maxwell Henderson80bec322024-01-09 15:48:44 -0800214 options.links("https://docs.opencv.org/4.x/javadoc/")
Austin Schuh812d0d12021-11-04 20:16:48 -0700215 options.addStringOption("tag", "pre:a:Pre-Condition")
Maxwell Henderson80bec322024-01-09 15:48:44 -0800216 options.addBooleanOption("Xdoclint/package:-edu.wpi.first.math.proto," +
217 "-edu.wpi.first.math.controller.proto," +
218 "-edu.wpi.first.math.controller.struct," +
219 "-edu.wpi.first.math.geometry.proto," +
220 "-edu.wpi.first.math.geometry.struct," +
221 "-edu.wpi.first.math.kinematics.proto," +
222 "-edu.wpi.first.math.kinematics.struct," +
223 "-edu.wpi.first.math.system.plant.proto," +
224 "-edu.wpi.first.math.system.plant.struct," +
225 "-edu.wpi.first.math.trajectory.proto", true)
Austin Schuh812d0d12021-11-04 20:16:48 -0700226 options.addBooleanOption("Xdoclint:html,missing,reference,syntax", true)
Brian Silverman8fce7482020-01-05 13:18:21 -0800227 options.addBooleanOption('html5', true)
Austin Schuh812d0d12021-11-04 20:16:48 -0700228 options.linkSource(true)
James Kuszmaulcf324122023-01-14 14:07:17 -0800229 dependsOn project(':wpilibj').generateJavaVersion
James Kuszmaulcf324122023-01-14 14:07:17 -0800230 source project(':apriltag').sourceSets.main.java
Brian Silverman8fce7482020-01-05 13:18:21 -0800231 source project(':cameraserver').sourceSets.main.java
James Kuszmaulcf324122023-01-14 14:07:17 -0800232 source project(':cscore').sourceSets.main.java
233 source project(':hal').sourceSets.main.java
234 source project(':ntcore').sourceSets.main.java
Brian Silverman8fce7482020-01-05 13:18:21 -0800235 source project(':wpilibNewCommands').sourceSets.main.java
James Kuszmaulcf324122023-01-14 14:07:17 -0800236 source project(':wpilibj').sourceSets.main.java
237 source project(':wpimath').sourceSets.main.java
238 source project(':wpinet').sourceSets.main.java
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800239 source project(':wpiunits').sourceSets.main.java
James Kuszmaulcf324122023-01-14 14:07:17 -0800240 source project(':wpiutil').sourceSets.main.java
Brian Silverman8fce7482020-01-05 13:18:21 -0800241 source configurations.javaSource.collect { zipTree(it) }
242 include '**/*.java'
243 failOnError = true
Brian Silverman8fce7482020-01-05 13:18:21 -0800244
245 title = "WPILib API ${wpilibVersioning.version.get()}"
246 ext.entryPoint = "$destinationDir/index.html"
247
Austin Schuh812d0d12021-11-04 20:16:48 -0700248 if (JavaVersion.current().isJava8Compatible() && project.hasProperty('docWarningsAsErrors')) {
249 // Treat javadoc warnings as errors.
250 //
James Kuszmaulb13e13f2023-11-22 20:44:04 -0800251 // The second argument '-quiet' is a hack. The one parameter
Austin Schuh812d0d12021-11-04 20:16:48 -0700252 // addStringOption() doesn't work, so we add '-quiet', which is added
253 // anyway by gradle. See https://github.com/gradle/gradle/issues/2354.
254 //
255 // See JDK-8200363 (https://bugs.openjdk.java.net/browse/JDK-8200363)
256 // for information about the nonstandard -Xwerror option. JDK 15+ has
257 // -Werror.
258 options.addStringOption('Xwerror', '-quiet')
259 }
260
Brian Silverman8fce7482020-01-05 13:18:21 -0800261 if (JavaVersion.current().isJava11Compatible()) {
Austin Schuh1e69f942020-11-14 15:06:14 -0800262 if (!JavaVersion.current().isJava12Compatible()) {
263 options.addBooleanOption('-no-module-directories', true)
264 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800265 doLast {
266 // 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
267 // 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
268 // Here we generate this file manually
269 new File(destinationDir, 'package-list').text = new File(destinationDir, 'element-list').text
270 }
271 }
272}
273
274tasks.register("zipJavaDocs", Zip) {
275 archiveBaseName = zipBaseNameJava
276 destinationDirectory = outputsFolder
277 dependsOn generateJavaDocs
278 from ("$buildDir/docs/javadoc")
279 into '/'
280}
281
Austin Schuh1e69f942020-11-14 15:06:14 -0800282tasks.register("zipDocs") {
283 dependsOn zipCppDocs
284 dependsOn zipJavaDocs
285}
Brian Silverman8fce7482020-01-05 13:18:21 -0800286
287apply plugin: 'maven-publish'
288
289publishing {
290 publications {
291 java(MavenPublication) {
292 artifact zipJavaDocs
293
294 artifactId = "${baseArtifactIdJava}"
295 groupId artifactGroupIdJava
296 version wpilibVersioning.version.get()
297 }
298 cpp(MavenPublication) {
299 artifact zipCppDocs
300
301 artifactId = "${baseArtifactIdCpp}"
302 groupId artifactGroupIdCpp
303 version wpilibVersioning.version.get()
304 }
305 }
306}