File: CMakeLists.txt

package info (click to toggle)
cvc5 1.3.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 87,260 kB
  • sloc: cpp: 383,850; java: 12,207; python: 12,090; sh: 5,679; ansic: 4,729; lisp: 763; perl: 208; makefile: 38
file content (97 lines) | stat: -rw-r--r-- 3,535 bytes parent folder | download
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()