1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
###############################################################################
# Top contributors (to current version):
# Hans-Joerg Schurr, Gereon Kremer, Aina Niemetz
#
# This file is part of the cvc5 project.
#
# Copyright (c) 2009-2025 by the authors listed in the file AUTHORS
# in the top-level source directory and their institutional affiliations.
# All rights reserved. See the file COPYING in the top-level source
# directory for licensing information.
# #############################################################################
#
# Build system configuration for java API documentation.
#
add_custom_target(docs-java)
if(BUILD_BINDINGS_JAVA)
find_package(Java REQUIRED)
# put generated doc in a place where sphinx can easily copy from
set(JAVADOC_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/build/api/java)
# used to trigger the rebuild
set(JAVADOC_INDEX_FILE ${JAVADOC_OUTPUT_DIR}/index.html)
# HTML added to javadoc to include Mathjax
# This is fragile with respect to escapes:
# - The LaTeX sequence '$#1$' must be written as '\$$#1$$'.
# - Whitespaces in some places must be omitted, otherwise
# they become ';'.
# - To make LaTeX commands work they need '\\\\'.
set(JAVADOC_MATHJAX [=["
<script>
window.MathJax = {
'loader': {
'load': ['[tex]/ams','[tex]/bussproofs'],
},
'tex': {
'packages': {
'[+]': ['ams','bussproofs'],
},
'macros': {
'xor': '\\\\mathbin{xor}',
'ite': ['#1~\\\\mathbin{?}~#2~\\\\mathbin{:}~#3',3],
'inferrule': ['\\\\begin{prooftree}\\\\AxiomC{\$$#1$$}\\\\UnaryInfC{\$$#2$$}\\\\end{prooftree}',2],
'inferruleSC': ['\\\\begin{prooftree}\\\\AxiomC{\$$#1$$}\\\\RightLabel{~#3}\\\\UnaryInfC{\$$#2$$}\\\\end{prooftree}',3],
}
}
}
</script>
<script type='text/javascript' id='MathJax-script' async src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js'>
</script>
"]=])
string(REPLACE "\n" " " JAVADOC_MATHJAX ${JAVADOC_MATHJAX})
string(REPLACE " " ";" JAVADOC_MATHJAX ${JAVADOC_MATHJAX})
set(Java_DOCLINT -Xdoclint:all)
if(TREAT_WARNING_AS_ERROR)
list(APPEND Java_DOCLINT -Werror)
endif()
get_target_property(CVC5_JAR_FILE cvc5jar JAR_FILE)
add_custom_command(
OUTPUT ${JAVADOC_INDEX_FILE}
COMMAND
${Java_JAVADOC_EXECUTABLE} io.github.cvc5
${Java_DOCLINT}
-Xmaxwarns 1000
-sourcepath ${CMAKE_SOURCE_DIR}/src/api/java/:${CMAKE_BINARY_DIR}/src/api/java/
-d ${JAVADOC_OUTPUT_DIR}
-cp ${CVC5_JAR_FILE}
-tag "api.note:a:Note:"
--allow-script-in-comments
-header ${JAVADOC_MATHJAX}
-notimestamp
-subpackages io.github.cvc5.modes
COMMAND find ${JAVADOC_OUTPUT_DIR} -type f -exec sed -i'orig' 's/<!-- Generated by javadoc [^>]* -->//' {} "\;"
COMMAND find ${SPHINX_GH_OUTPUT_DIR} -name '*orig' -delete
DEPENDS cvc5jar ${CVC5_JAR_FILE}
COMMENT "Generating javadocs"
)
add_custom_target(docs-java-javadoc DEPENDS ${JAVADOC_INDEX_FILE})
# Build cvc5-javadoc.jar to enable IDE tooltips and API documentation
set(JAVADOC_JAR ${CMAKE_CURRENT_BINARY_DIR}/cvc5-javadoc.jar)
add_custom_command(
OUTPUT ${JAVADOC_JAR}
COMMAND ${Java_JAR_EXECUTABLE} cf ${JAVADOC_JAR} -C ${JAVADOC_OUTPUT_DIR} .
DEPENDS ${JAVADOC_INDEX_FILE}
COMMENT "Generating javadoc JAR"
)
add_custom_target(javadoc-jar ALL DEPENDS ${JAVADOC_JAR})
add_dependencies(docs-java docs-java-javadoc javadoc-jar)
endif()
|