blob: e00e0f3a41c7b5fb591c30e929cd6aa6c03098f1 [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')
16evaluationDependsOn(':wpiutil')
Brian Silverman8fce7482020-01-05 13:18:21 -080017
18def baseArtifactIdCpp = 'documentation'
19def artifactGroupIdCpp = 'edu.wpi.first.wpilibc'
20def zipBaseNameCpp = '_GROUP_edu_wpi_first_wpilibc_ID_documentation_CLS'
21
22def baseArtifactIdJava = 'documentation'
23def artifactGroupIdJava = 'edu.wpi.first.wpilibj'
24def zipBaseNameJava = '_GROUP_edu_wpi_first_wpilibj_ID_documentation_CLS'
25
26def outputsFolder = file("$project.buildDir/outputs")
27
28def cppProjectZips = []
Austin Schuh812d0d12021-11-04 20:16:48 -070029def cppIncludeRoots = []
Brian Silverman8fce7482020-01-05 13:18:21 -080030
James Kuszmaulcf324122023-01-14 14:07:17 -080031cppProjectZips.add(project(':apriltag').cppHeadersZip)
Brian Silverman8fce7482020-01-05 13:18:21 -080032cppProjectZips.add(project(':cameraserver').cppHeadersZip)
James Kuszmaulcf324122023-01-14 14:07:17 -080033cppProjectZips.add(project(':cscore').cppHeadersZip)
34cppProjectZips.add(project(':hal').cppHeadersZip)
35cppProjectZips.add(project(':ntcore').cppHeadersZip)
Brian Silverman8fce7482020-01-05 13:18:21 -080036cppProjectZips.add(project(':wpilibNewCommands').cppHeadersZip)
James Kuszmaulcf324122023-01-14 14:07:17 -080037cppProjectZips.add(project(':wpilibc').cppHeadersZip)
38cppProjectZips.add(project(':wpimath').cppHeadersZip)
39cppProjectZips.add(project(':wpinet').cppHeadersZip)
40cppProjectZips.add(project(':wpiutil').cppHeadersZip)
Brian Silverman8fce7482020-01-05 13:18:21 -080041
42doxygen {
James Kuszmaulcf324122023-01-14 14:07:17 -080043 // Doxygen binaries are only provided for x86_64 platforms
44 // Other platforms will need to provide doxygen via their system
45 // See below maven and https://doxygen.nl/download.html for provided binaries
46
47 String arch = System.getProperty("os.arch");
48 if (arch.equals("x86_64") || arch.equals("amd64")) {
49 executables {
50 doxygen version : '1.9.4',
51 baseURI : 'https://frcmaven.wpi.edu/artifactory/generic-release-mirror/doxygen'
52 }
Austin Schuh1e69f942020-11-14 15:06:14 -080053 }
Brian Silverman8fce7482020-01-05 13:18:21 -080054}
55
56doxygen {
57 generate_html true
Austin Schuh812d0d12021-11-04 20:16:48 -070058 html_extra_stylesheet 'theme.css'
Brian Silverman8fce7482020-01-05 13:18:21 -080059
60 cppProjectZips.each {
61 dependsOn it
62 source it.source
Austin Schuh812d0d12021-11-04 20:16:48 -070063 it.ext.includeDirs.each {
64 cppIncludeRoots.add(it.absolutePath)
65 }
Brian Silverman8fce7482020-01-05 13:18:21 -080066 }
67
Austin Schuh812d0d12021-11-04 20:16:48 -070068 if (project.hasProperty('docWarningsAsErrors')) {
69 // C++20 shims
70 exclude 'wpi/ghc/filesystem.hpp'
Brian Silverman8fce7482020-01-05 13:18:21 -080071
Austin Schuh812d0d12021-11-04 20:16:48 -070072 // Drake
73 exclude 'drake/common/**'
Brian Silverman8fce7482020-01-05 13:18:21 -080074
Austin Schuh812d0d12021-11-04 20:16:48 -070075 // Eigen
76 exclude 'Eigen/**'
77 exclude 'unsupported/**'
78
79 // LLVM
80 exclude 'wpi/AlignOf.h'
81 exclude 'wpi/Chrono.h'
82 exclude 'wpi/Compiler.h'
83 exclude 'wpi/ConvertUTF.h'
84 exclude 'wpi/DenseMap.h'
85 exclude 'wpi/DenseMapInfo.h'
86 exclude 'wpi/Endian.h'
87 exclude 'wpi/EpochTracker.h'
88 exclude 'wpi/Errc.h'
89 exclude 'wpi/Errno.h'
90 exclude 'wpi/ErrorHandling.h'
91 exclude 'wpi/fs.h'
92 exclude 'wpi/FunctionExtras.h'
93 exclude 'wpi/function_ref.h'
94 exclude 'wpi/Hashing.h'
95 exclude 'wpi/iterator.h'
96 exclude 'wpi/iterator_range.h'
97 exclude 'wpi/ManagedStatic.h'
98 exclude 'wpi/MapVector.h'
99 exclude 'wpi/MathExtras.h'
100 exclude 'wpi/MemAlloc.h'
101 exclude 'wpi/PointerIntPair.h'
102 exclude 'wpi/PointerLikeTypeTraits.h'
103 exclude 'wpi/PointerUnion.h'
104 exclude 'wpi/raw_os_ostream.h'
105 exclude 'wpi/raw_ostream.h'
106 exclude 'wpi/SmallPtrSet.h'
107 exclude 'wpi/SmallSet.h'
108 exclude 'wpi/SmallString.h'
109 exclude 'wpi/SmallVector.h'
110 exclude 'wpi/StringExtras.h'
111 exclude 'wpi/StringMap.h'
112 exclude 'wpi/SwapByteOrder.h'
113 exclude 'wpi/type_traits.h'
114 exclude 'wpi/VersionTuple.h'
115 exclude 'wpi/WindowsError.h'
116
117 // fmtlib
118 exclude 'fmt/**'
119
120 // libuv
121 exclude 'uv.h'
122 exclude 'uv/**'
James Kuszmaulcf324122023-01-14 14:07:17 -0800123 exclude 'wpinet/uv/**'
Austin Schuh812d0d12021-11-04 20:16:48 -0700124
125 // json
126 exclude 'wpi/json.h'
127
James Kuszmaulcf324122023-01-14 14:07:17 -0800128 // memory
129 exclude 'wpi/memory/**'
130
Austin Schuh812d0d12021-11-04 20:16:48 -0700131 // mpack
132 exclude 'wpi/mpack.h'
133
134 // units
135 exclude 'units/**'
136 }
137
James Kuszmaulcf324122023-01-14 14:07:17 -0800138 //TODO: building memory docs causes search to break
139 exclude 'wpi/memory/**'
140
141 aliases 'effects=\\par <i>Effects:</i>^^',
142 'notes=\\par <i>Notes:</i>^^',
143 'requires=\\par <i>Requires:</i>^^',
144 'requiredbe=\\par <i>Required Behavior:</i>^^',
145 'concept{2}=<a href=\"md_doc_concepts.html#\1\">\2</a>',
146 'defaultbe=\\par <i>Default Behavior:</i>^^'
Austin Schuh812d0d12021-11-04 20:16:48 -0700147 case_sense_names false
Austin Schuh75263e32022-02-22 18:05:32 -0800148 extension_mapping 'inc=C++', 'no_extension=C++'
Austin Schuh812d0d12021-11-04 20:16:48 -0700149 extract_all true
Brian Silverman8fce7482020-01-05 13:18:21 -0800150 extract_static true
Austin Schuh75263e32022-02-22 18:05:32 -0800151 file_patterns '*'
Austin Schuh812d0d12021-11-04 20:16:48 -0700152 full_path_names true
153 generate_html true
154 generate_latex false
155 generate_treeview true
156 html_extra_stylesheet 'theme.css'
157 html_timestamp true
158 javadoc_autobrief true
159 project_name 'WPILibC++'
160 project_logo '../wpiutil/src/main/native/resources/wpilib-128.png'
161 project_number wpilibVersioning.version.get()
162 quiet true
163 recursive true
164 strip_code_comments false
165 strip_from_inc_path cppIncludeRoots as String[]
166 strip_from_path cppIncludeRoots as String[]
167 use_mathjax true
168 warnings false
169 warn_if_incomplete_doc true
170 warn_if_undocumented false
171 warn_no_paramdoc true
172
James Kuszmaulcf324122023-01-14 14:07:17 -0800173 //enable doxygen preprocessor expansion of WPI_DEPRECATED to fix MotorController docs
Austin Schuh812d0d12021-11-04 20:16:48 -0700174 enable_preprocessing true
175 macro_expansion true
176 expand_only_predef true
177 predefined "WPI_DEPRECATED(x)=[[deprecated(x)]]"
178
179 if (project.hasProperty('docWarningsAsErrors')) {
180 warn_as_error 'FAIL_ON_WARNINGS'
181 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800182}
183
184tasks.register("zipCppDocs", Zip) {
185 archiveBaseName = zipBaseNameCpp
186 destinationDirectory = outputsFolder
187 dependsOn doxygen
188 from ("$buildDir/docs/doxygen/html")
189 into '/'
190}
191
192// Java
193configurations {
194 javaSource {
195 transitive false
196 }
197}
198
199ext {
200 sharedCvConfigs = [:]
201 staticCvConfigs = [:]
202 useJava = true
203 useCpp = false
204 skipDev = true
205 useDocumentation = true
206}
207
208apply from: "${rootDir}/shared/opencv.gradle"
209
210task generateJavaDocs(type: Javadoc) {
Austin Schuh1e69f942020-11-14 15:06:14 -0800211 classpath += project(":wpimath").sourceSets.main.compileClasspath
Brian Silverman8fce7482020-01-05 13:18:21 -0800212 options.links("https://docs.oracle.com/en/java/javase/11/docs/api/")
Austin Schuh812d0d12021-11-04 20:16:48 -0700213 options.addStringOption("tag", "pre:a:Pre-Condition")
214 options.addBooleanOption("Xdoclint:html,missing,reference,syntax", true)
Brian Silverman8fce7482020-01-05 13:18:21 -0800215 options.addBooleanOption('html5', true)
Austin Schuh812d0d12021-11-04 20:16:48 -0700216 options.linkSource(true)
Brian Silverman8fce7482020-01-05 13:18:21 -0800217 dependsOn project(':hal').generateUsageReporting
James Kuszmaulcf324122023-01-14 14:07:17 -0800218 dependsOn project(':ntcore').ntcoreGenerateJavaTypes
219 dependsOn project(':wpilibj').generateJavaVersion
Austin Schuh1e69f942020-11-14 15:06:14 -0800220 dependsOn project(':wpimath').generateNat
James Kuszmaulcf324122023-01-14 14:07:17 -0800221 source project(':apriltag').sourceSets.main.java
Brian Silverman8fce7482020-01-05 13:18:21 -0800222 source project(':cameraserver').sourceSets.main.java
James Kuszmaulcf324122023-01-14 14:07:17 -0800223 source project(':cscore').sourceSets.main.java
224 source project(':hal').sourceSets.main.java
225 source project(':ntcore').sourceSets.main.java
Brian Silverman8fce7482020-01-05 13:18:21 -0800226 source project(':wpilibNewCommands').sourceSets.main.java
James Kuszmaulcf324122023-01-14 14:07:17 -0800227 source project(':wpilibj').sourceSets.main.java
228 source project(':wpimath').sourceSets.main.java
229 source project(':wpinet').sourceSets.main.java
230 source project(':wpiutil').sourceSets.main.java
Brian Silverman8fce7482020-01-05 13:18:21 -0800231 source configurations.javaSource.collect { zipTree(it) }
232 include '**/*.java'
233 failOnError = true
Brian Silverman8fce7482020-01-05 13:18:21 -0800234
235 title = "WPILib API ${wpilibVersioning.version.get()}"
236 ext.entryPoint = "$destinationDir/index.html"
237
Austin Schuh812d0d12021-11-04 20:16:48 -0700238 if (JavaVersion.current().isJava8Compatible() && project.hasProperty('docWarningsAsErrors')) {
239 // Treat javadoc warnings as errors.
240 //
241 // The second argument '-quiet' is a hack. The one paramater
242 // addStringOption() doesn't work, so we add '-quiet', which is added
243 // anyway by gradle. See https://github.com/gradle/gradle/issues/2354.
244 //
245 // See JDK-8200363 (https://bugs.openjdk.java.net/browse/JDK-8200363)
246 // for information about the nonstandard -Xwerror option. JDK 15+ has
247 // -Werror.
248 options.addStringOption('Xwerror', '-quiet')
249 }
250
Brian Silverman8fce7482020-01-05 13:18:21 -0800251 if (JavaVersion.current().isJava11Compatible()) {
Austin Schuh1e69f942020-11-14 15:06:14 -0800252 if (!JavaVersion.current().isJava12Compatible()) {
253 options.addBooleanOption('-no-module-directories', true)
254 }
Brian Silverman8fce7482020-01-05 13:18:21 -0800255 doLast {
256 // 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
257 // 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
258 // Here we generate this file manually
259 new File(destinationDir, 'package-list').text = new File(destinationDir, 'element-list').text
260 }
261 }
262}
263
264tasks.register("zipJavaDocs", Zip) {
265 archiveBaseName = zipBaseNameJava
266 destinationDirectory = outputsFolder
267 dependsOn generateJavaDocs
268 from ("$buildDir/docs/javadoc")
269 into '/'
270}
271
Austin Schuh1e69f942020-11-14 15:06:14 -0800272tasks.register("zipDocs") {
273 dependsOn zipCppDocs
274 dependsOn zipJavaDocs
275}
Brian Silverman8fce7482020-01-05 13:18:21 -0800276
277apply plugin: 'maven-publish'
278
279publishing {
280 publications {
281 java(MavenPublication) {
282 artifact zipJavaDocs
283
284 artifactId = "${baseArtifactIdJava}"
285 groupId artifactGroupIdJava
286 version wpilibVersioning.version.get()
287 }
288 cpp(MavenPublication) {
289 artifact zipCppDocs
290
291 artifactId = "${baseArtifactIdCpp}"
292 groupId artifactGroupIdCpp
293 version wpilibVersioning.version.get()
294 }
295 }
296}