File: CMakeLists.txt

package info (click to toggle)
siconos 4.3.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 82,496 kB
  • sloc: cpp: 159,693; ansic: 108,665; fortran: 33,248; python: 20,709; xml: 1,244; sh: 385; makefile: 226
file content (187 lines) | stat: -rw-r--r-- 7,844 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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# ============================================================
# Prepare  config to generate siconos documentation :
#
# - automatic doxygen documentation, from source code
# - sphinx documentation for manuals
# 
# ============================================================
include(FindPythonModule)
include(FindSphinxModule)

# Devel option : generate pure doxygen doc (no sphinx), extracting all and with graphs.
option(USE_DEVEL_DOXYGEN "Build doxygen (html, latex ...) doc, extracting all. Devel purpose. Default = OFF" OFF)


# -- Doc config --
# Name and create build path for documentation
set(DOC_ROOT_DIR ${CMAKE_BINARY_DIR}/docs/build CACHE INTERNAL "Root path to generated documentation.")
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/build/html)
# -- Gendoctools install --
# gendoctools is installed in binary dir as a python package
# used to generate docstrings, rst files and so on.
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/gendoctools/__init__.py.in ${CMAKE_BINARY_DIR}/share/gendoctools/__init__.py @ONLY)
file(GLOB files_py RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/gendoctools/*.py)
foreach(fname IN LISTS files_py)
  configure_file (
    "${CMAKE_CURRENT_SOURCE_DIR}/${fname}"
    "${CMAKE_BINARY_DIR}/share/${fname}" COPYONLY)
endforeach()
if(WITH_DOXY2SWIG)
  configure_file(${CMAKE_SOURCE_DIR}/externals/swig/doxy2swig.py ${CMAKE_BINARY_DIR}/share/gendoctools/doxy2swig.py COPYONLY)
endif()

# configure_file(${CMAKE_CURRENT_SOURCE_DIR}/replace_py_escape.sh ${CMAKE_BINARY_DIR}/share/replace_py_escape.sh COPYONLY)

#  ====== doxygen documentation setup ======
# This setup is required if one at least of
# the following is needed:
# - doxygen warnings (see WITH_DOXYGEN_WARNINGS)
# - python docstrings from doxygen (xml) (see WITH_DOXY2SWIG)
# - doxygen documentation generated from source files (see WITH_DOCUMENTATION)
if(USE_DOXYGEN)

  # Search doxygen and set config
  find_package(Doxygen REQUIRED)
  # Output path for doxygen documentation
  if(NOT DOXYGEN_OUTPUT)
    set(DOXYGEN_OUTPUT ${DOC_ROOT_DIR}/doxygen CACHE INTERNAL "Path to doxygen outputs.")
  endif()
  file(MAKE_DIRECTORY ${DOXYGEN_OUTPUT}/man)
  
  # --- Config files and their options. --
  # --> a lot for doxygen warnings (from doxy_warnings.config.in)
  # --> one for documentation (html and xml to sphinx) (from doxy.config.in)

  # == set configuration file for doxygen warnings ==
  #  - Results in binary_dir/doxygen_warnings
  #  - input config from config/doxy_warnings.config
  #  - only xml output.
  if(WITH_DOXYGEN_WARNINGS)
    file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/doxygen_warnings)
    file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/doxygen_warnings/man)
    file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/doxygen_warnings/xml)
    set(DOXY_WARNINGS_CONFIG ${CMAKE_CURRENT_SOURCE_DIR}/config/doxy_warnings.config.in CACHE INTERNAL "config file for doxygen warnings output.")
    # All the configure process will be done for each component
    # thanks to 'include(doxygen_warnings)'. See LibraryProjectSetup.

    # A target to filter out doxygen warnings : remove empty files and concatenate the others.
    # call python function from gendoctools (filter_doxygen_warnings_files).
    add_custom_target(filter_warnings
      COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=${CMAKE_BINARY_DIR}/share ${PYTHON_EXECUTABLE} -c
      "from gendoctools.filters import filter_doxygen_warnings_files as f; f('${CMAKE_BINARY_DIR}/doxygen_warnings', 'SUMMARY.warnings')"
      VERBATIM
      COMMENT "Filter doxygen warnings (result : SUMMARY.warnings)."
      DEPENDS ${last_component} # No warnings if siconos has not been compiled. Should we remove this dep ? 
      )
  endif()
endif()

  
#  ====== Create a Target to generate documentation ======
if(WITH_DOCUMENTATION)

  # --- Search dependencies required to build documentation ---
  message("--------------------------------------------------")
  message("------ Start global setup for documentation ------\n")
  if(Python3_VERSION VERSION_LESS 3.6)
    message(FATAL_ERROR "Python >= 3.6 is required to generate documentation.")
  endif()
  find_python_module(breathe REQUIRED)
  find_python_module(sphinx REQUIRED)
  find_sphinx_module(sphinxcontrib bibtex REQUIRED)

  # Sphinx theme for documentation
  find_python_module(sphinx_bootstrap_theme REQUIRED)

  # --- copy/conf sphinx files into build directory ---

  # main page
  configure_file (
    "${CMAKE_CURRENT_SOURCE_DIR}/sphinx/index.rst.in"
    "${CMAKE_CURRENT_BINARY_DIR}/sphinx/index.rst" @ONLY)

  # siconos biblio
  configure_file (
    "${CMAKE_CURRENT_SOURCE_DIR}/sphinx/siconos.bib"
    "${CMAKE_CURRENT_BINARY_DIR}/sphinx/siconos.bib" COPYONLY)

  # List and copy all rst files from source dir to binary dir
  file(GLOB_RECURSE files_rst RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/sphinx
    ${CMAKE_CURRENT_SOURCE_DIR}/sphinx/*.rst)
  foreach(filepath IN LISTS files_rst)
    #get_filename_component(filename ${filepath} NAME)
    
    configure_file (
      "${CMAKE_CURRENT_SOURCE_DIR}/sphinx/${filepath}"
      "${CMAKE_CURRENT_BINARY_DIR}/sphinx/${filepath}" COPYONLY)
  endforeach()
  
  # css
  configure_file (
    "${CMAKE_CURRENT_SOURCE_DIR}/sphinx/_static/biblio.css"
    "${CMAKE_CURRENT_BINARY_DIR}/sphinx/_static/biblio.css" COPYONLY)

  # !! conf.py.in must be copied later, after doxygen setup !!
  # Done during finalize_doc call.
  
  # --- Build a target for sphinx ---
  # --> use make html or make latex ... to build documentation.
  set(SPHINX_EXECUTABLE sphinx-build)
  set(SPHINX_LOG_FILE ${CMAKE_BINARY_DIR}/docs/sphinx_warnings.log)    
  set(SPHINX_PARAMETERS
    -w ${SPHINX_LOG_FILE}
    -b html # html output
    -d build/doctrees # path to doctree files
    ${CMAKE_CURRENT_BINARY_DIR}/sphinx  # path to rst source
    )

  # - Target to copy figures required by sphinx from source to binary dir -
  #  make copy-sphinx-figures
  add_custom_target(copy-sphinx-figures
    COMMAND cmake -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/sphinx/figures ${CMAKE_CURRENT_BINARY_DIR}/sphinx/figures
    )

  # -- Target to generate rst files from sources (C/C++/python) --
  #  1. creates rst files in a breathe-ready format from xml outputs of doxygen run on C/C++ headers
  #  2. creates rst files from 'autodoc' outputs, docstrings, or others python doc. things.
  add_custom_target(rst_api
    COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=${CMAKE_BINARY_DIR}/share ${PYTHON_EXECUTABLE} -c
    "from gendoctools.generate_api import build_rst_api as f; f('${CMAKE_CURRENT_BINARY_DIR}/sphinx')"
    VERBATIM
    COMMENT "Create main rst files for C/C++ and python API.")
  
  # -- To build html doc : make html --
  add_custom_target(html
    COMMAND ${SPHINX_EXECUTABLE} ${SPHINX_PARAMETERS} 2> errors.txt ${CMAKE_CURRENT_BINARY_DIR}/build/html
    VERBATIM
    DEPENDS copy-sphinx-figures rst_api
    )

  # post command to make html : filter sphinx warnings to a log file.
  add_custom_command(TARGET html POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=${CMAKE_BINARY_DIR}/share ${PYTHON_EXECUTABLE} -c
    "from gendoctools.filters import filter_sphinx_warnings as f; f('${SPHINX_LOG_FILE}')"
    VERBATIM
    COMMENT "Filtering sphinx logfile into ${SPHINX_LOG_FILE}.")
  
  add_custom_command(TARGET html POST_BUILD
    COMMENT "Done. Sphinx doc has been generated in ${DOC_ROOT_DIR}/html")
  
  # -- To build latex doc : make latex -- 
  set(SPHINX_LATEX_PARAMETERS
    -b latex # latex output
    -d build/doctrees # path to doctree files
    ${CMAKE_CURRENT_BINARY_DIR}/sphinx  # path to rst source
    )
  
  add_custom_target(latex
    COMMAND ${SPHINX_EXECUTABLE} ${SPHINX_LATEX_PARAMETERS}
    ${CMAKE_CURRENT_BINARY_DIR}/build/latex
    )

  add_custom_target(doc DEPENDS html)

  message("------ End global setup for documentation ------\n")


endif()