# SPDX-License-Identifier: CC0-1.0 doc_install_dir = get_option('datadir') / 'doc' / 'libcamera-@0@'.format(libcamera_version) # # Doxygen # doxygen = find_program('doxygen', required : get_option('documentation')) dot = find_program('dot', required : get_option('documentation')) if doxygen.found() and dot.found() cdata = configuration_data() cdata.set('VERSION', 'v@0@'.format(libcamera_git_version)) cdata.set('TOP_SRCDIR', meson.project_source_root()) cdata.set('TOP_BUILDDIR', meson.project_build_root()) cdata.set('OUTPUT_DIR', meson.current_build_dir()) cdata.set('WARN_AS_ERROR', get_option('doc_werror') ? 'YES' : 'NO') doxygen_predefined = [] foreach key : config_h.keys() doxygen_predefined += '@0@=@1@'.format(key, config_h.get(key)) endforeach cdata.set('PREDEFINED', ' \\\n\t\t\t '.join(doxygen_predefined)) doxyfile_common = configure_file(input : 'Doxyfile-common.in', output : 'Doxyfile-common', configuration : cdata) doxygen_public_input = [ libcamera_base_public_headers, libcamera_base_public_sources, libcamera_public_headers, libcamera_public_sources, ] doxygen_internal_input = [ libcamera_base_private_headers, libcamera_base_internal_sources, libcamera_internal_headers, libcamera_internal_sources, libcamera_ipa_headers, libcamera_ipa_interfaces, libipa_headers, libipa_sources, ] if is_variable('ipu3_ipa_sources') doxygen_internal_input += [ipu3_ipa_sources] endif # We run doxygen twice - the first run excludes internal API objects as it # is intended to document the public API only. A second run covers all of # the library's objects for libcamera developers. Common configuration is # set in an initially generated Doxyfile, which is then included by the two # final Doxyfiles. # This is the "public" run of doxygen generating an abridged version of the # API's documentation. doxyfile_tmpl = configure_file(input : 'Doxyfile-public.in', output : 'Doxyfile-public.tmpl', configuration : cdata) # The set of public input files stored in the doxygen_public_input array # needs to be set in Doxyfile public. We can't pass them through cdata # cdata, as some of the array members are custom_tgt instances, which # configuration_data.set() doesn't support. Using a separate script invoked # through custom_target(), which supports custom_tgt instances as inputs. doxyfile = custom_target('doxyfile-public', input : [ doxygen_public_input, ], output : 'Doxyfile-public', command : [ 'gen-doxyfile.py', '-o', '@OUTPUT@', doxyfile_tmpl, '@INPUT@', ]) custom_target('doxygen-public', input : [ doxyfile, doxyfile_common, ], output : 'api-html', command : [doxygen, doxyfile], install : true, install_dir : doc_install_dir, install_tag : 'doc') # This is the internal documentation, which hard-codes a list of directories # to parse in its doxyfile. doxyfile = configure_file(input : 'Doxyfile-internal.in', output : 'Doxyfile-internal', configuration : cdata) custom_target('doxygen-internal', input : [ doxyfile, doxyfile_common, doxygen_internal_input, ], output : 'internal-api-html', command : [doxygen, doxyfile], install : true, install_dir : doc_install_dir, install_tag : 'doc-internal') endif # # Sphinx # sphinx = find_program('sphinx-build-3', required : false) if not sphinx.found() sphinx = find_program('sphinx-build', required : get_option('documentation')) endif if sphinx.found() docs_sources = [ 'camera-sensor-model.rst', 'code-of-conduct.rst', 'coding-style.rst', 'conf.py', 'contributing.rst', 'docs.rst', 'environment_variables.rst', 'guides/application-developer.rst', 'guides/introduction.rst', 'guides/ipa.rst', 'guides/pipeline-handler.rst', 'guides/tracing.rst', 'index.rst', 'lens_driver_requirements.rst', 'python-bindings.rst', 'sensor_driver_requirements.rst', 'software-isp-benchmarking.rst', '../README.rst', ] release = 'release=v' + libcamera_git_version custom_target('documentation', command : [sphinx, '-D', release, '-q', '-W', '-b', 'html', meson.current_source_dir(), '@OUTPUT@'], input : docs_sources, output : 'html', build_by_default : true, install : true, install_dir : doc_install_dir, install_tag : 'doc') custom_target('documentation-linkcheck', command : [sphinx, '-W', '-b', 'linkcheck', meson.current_source_dir(), '@OUTPUT@'], build_always_stale : true, input : docs_sources, output : 'linkcheck') endif