pax_global_header00006660000000000000000000000064151225620040014507gustar00rootroot0000000000000052 comment=84429b47943d789389fbde17c06b82efb197d04e wireplumber-0.5.13-84429b47943d789389fbde17c06b82efb197d04e/000077500000000000000000000000001512256200400214705ustar00rootroot00000000000000wireplumber-0.5.13-84429b47943d789389fbde17c06b82efb197d04e/.editorconfig000066400000000000000000000003361512256200400241470ustar00rootroot00000000000000root = true [*] indent_style = space indent_size = 2 charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [Makefile] indent_style = tab indent_size = 8 [*.py] indent_style = space indent_size = 4 wireplumber-0.5.13-84429b47943d789389fbde17c06b82efb197d04e/.gitignore000066400000000000000000000000631512256200400234570ustar00rootroot00000000000000build/ subprojects/lua-* subprojects/packagecache/ wireplumber-0.5.13-84429b47943d789389fbde17c06b82efb197d04e/.gitlab-ci.yml000066400000000000000000000234531512256200400241330ustar00rootroot00000000000000# Create merge request pipelines for open merge requests, branch pipelines # otherwise. This allows MRs for new users to run CI, and prevents duplicate # pipelines for branches with open MRs. workflow: rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS when: never - if: $CI_COMMIT_BRANCH stages: - container - build - analysis - pages variables: FDO_UPSTREAM_REPO: 'pipewire/wireplumber' # change to build against a different tag or branch of pipewire PIPEWIRE_HEAD: 'master' # ci-templates as of Feb 14th 2025 .templates_sha: &templates_sha ef5e4669b7500834a17ffe9277e15fbb6d977fff include: - project: 'freedesktop/ci-templates' ref: *templates_sha file: '/templates/fedora.yml' - project: 'freedesktop/ci-templates' ref: *templates_sha file: '/templates/ubuntu.yml' - project: 'freedesktop/ci-templates' ref: *templates_sha file: '/templates/alpine.yml' .fedora: variables: # Update this tag when you want to trigger a rebuild FDO_DISTRIBUTION_TAG: '2025-03-05.1' FDO_DISTRIBUTION_VERSION: '41' # findutils: used by the .build script below # dbus-devel: required by pipewire # dbus-daemon: required by GDBus unit tests # pip, doxygen: required for documentation # ShellCheck, diffutils: required by the CI FDO_DISTRIBUTION_PACKAGES: >- findutils gcc gcc-c++ git meson glib2-devel gobject-introspection-devel dbus-devel dbus-daemon python3-pip doxygen ShellCheck diffutils # install Sphinx and Breathe to generate documentation # also install glib2-doc (required to make documentation links to GLib work) # manually, to remove the 'tsflags=nodocs' flag that is enabled by default # in the fedora docker image FDO_DISTRIBUTION_EXEC: >- pip3 install lxml Sphinx sphinx-rtd-theme breathe ; dnf -y install glib2-doc --setopt='tsflags=' .ubuntu: variables: # Update this tag when you want to trigger a rebuild FDO_DISTRIBUTION_TAG: '2023-06-16.1' FDO_DISTRIBUTION_VERSION: '22.04' FDO_DISTRIBUTION_PACKAGES: >- debhelper-compat findutils git meson ninja-build pkg-config python3-pip dbus libdbus-1-dev libglib2.0-dev liblua5.3-dev libgirepository1.0-dev doxygen python3-lxml .alpine: variables: # Update this tag when you want to trigger a rebuild FDO_DISTRIBUTION_TAG: '2025-03-05.1' FDO_DISTRIBUTION_VERSION: '3.21' FDO_DISTRIBUTION_PACKAGES: >- dbus dbus-dev doxygen elogind-dev findutils g++ gcc git glib-dev gobject-introspection-dev lua5.4-dev meson py3-lxml samurai .coverity: variables: FDO_REPO_SUFFIX: 'coverity' FDO_BASE_IMAGE: registry.freedesktop.org/$FDO_UPSTREAM_REPO/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG FDO_DISTRIBUTION_PACKAGES: >- curl FDO_DISTRIBUTION_EXEC: >- mkdir -p /opt ; cd /opt ; curl -o /tmp/cov-analysis-linux64.tgz https://scan.coverity.com/download/cxx/linux64 --form project=$COVERITY_SCAN_PROJECT_NAME --form token=$COVERITY_SCAN_TOKEN ; tar xf /tmp/cov-analysis-linux64.tgz ; mv cov-analysis-linux64-* coverity ; rm /tmp/cov-analysis-linux64.tgz .rules_on_success_except_coverity: rules: - if: $COVERITY when: never - when: on_success .rules_only_on_coverity: rules: - if: $COVERITY .rules_only_on_mr_and_branch: rules: - if: $COVERITY when: never - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH != "master" .build: before_script: # setup the environment - export BUILD_ID="$CI_JOB_ID" - export PREFIX="$PWD/prefix-$BUILD_ID" - export PW_BUILD_DIR="$PWD/build-pipewire-$BUILD_ID" - | if [ -n "$FDO_CI_CONCURRENT" ]; then NINJA_ARGS="-j$FDO_CI_CONCURRENT $NINJA_ARGS" export NINJA_ARGS fi # Build pipewire # Fedora also ships that, but without the test plugins that we need... - git clone --depth=1 --branch="$PIPEWIRE_HEAD" https://gitlab.freedesktop.org/pipewire/pipewire.git # Set build options based on PipeWire version - | case "$PIPEWIRE_HEAD" in 1.0|1.2|1.4) export PIPEWIRE_BUILD_OPTIONS="-Dsystemd=disabled" ;; *) export PIPEWIRE_BUILD_OPTIONS="-Dlibsystemd=disabled" ;; esac - meson "$PW_BUILD_DIR" pipewire --prefix="$PREFIX" $PIPEWIRE_BUILD_OPTIONS -Dpipewire-alsa=disabled -Dpipewire-jack=disabled -Dalsa=disabled -Dv4l2=disabled -Djack=disabled -Dbluez5=disabled -Dvulkan=disabled -Dgstreamer=disabled -Ddocs=disabled -Dman=disabled -Dexamples=disabled -Dpw-cat=disabled -Dsdl2=disabled -Dsndfile=disabled -Dlibpulse=disabled -Davahi=disabled -Decho-cancel-webrtc=disabled -Dsession-managers=[] -Dvideotestsrc=enabled -Daudiotestsrc=enabled -Dtest=enabled - ninja $NINJA_ARGS -C "$PW_BUILD_DIR" install # misc environment only for wireplumber - export WP_BUILD_DIR="$PWD/build-wireplumber-$BUILD_ID" - export PKG_CONFIG_PATH="$(dirname $(find "$PREFIX" -name 'libpipewire-*.pc')):$PKG_CONFIG_PATH" script: # Build wireplumber - meson "$WP_BUILD_DIR" . --prefix="$PREFIX" $BUILD_OPTIONS - cd "$WP_BUILD_DIR" - ninja $NINJA_ARGS - ninja $NINJA_ARGS test - ninja $NINJA_ARGS install artifacts: name: wireplumber-$CI_COMMIT_SHA when: always paths: - build-*/meson-logs - prefix-* container_fedora: extends: - .rules_on_success_except_coverity - .fedora - .fdo.container-build@fedora stage: container variables: GIT_STRATEGY: none container_ubuntu: extends: - .rules_only_on_mr_and_branch - .ubuntu - .fdo.container-build@ubuntu stage: container variables: GIT_STRATEGY: none container_alpine: extends: - .rules_only_on_mr_and_branch - .alpine - .fdo.container-build@alpine stage: container variables: GIT_STRATEGY: none container_coverity: extends: - .rules_only_on_coverity - .fedora - .coverity - .fdo.container-build@fedora stage: container variables: GIT_STRATEGY: none build_on_fedora_with_docs: extends: - .rules_on_success_except_coverity - .fedora - .fdo.distribution-image@fedora - .build stage: build variables: BUILD_OPTIONS: -Dintrospection=enabled -Ddoc=enabled -Dsystem-lua=false build_on_fedora_no_docs: extends: - .rules_only_on_mr_and_branch - .fedora - .fdo.distribution-image@fedora - .build stage: build variables: BUILD_OPTIONS: -Dintrospection=enabled -Ddoc=disabled -Dsystem-lua=false parallel: matrix: - PIPEWIRE_HEAD: ['master', '1.4', '1.2', '1.0'] build_on_ubuntu_with_gir: extends: - .rules_only_on_mr_and_branch - .ubuntu - .fdo.distribution-image@ubuntu - .build stage: build variables: BUILD_OPTIONS: -Dintrospection=enabled -Ddoc=disabled -Dsystem-lua=true build_on_ubuntu_no_gir: extends: - .rules_only_on_mr_and_branch - .ubuntu - .fdo.distribution-image@ubuntu - .build stage: build variables: BUILD_OPTIONS: -Dintrospection=disabled -Ddoc=disabled -Dsystem-lua=true build_on_alpine: extends: - .rules_only_on_mr_and_branch - .alpine - .fdo.distribution-image@alpine - .build stage: build variables: BUILD_OPTIONS: -Dintrospection=enabled -Ddoc=disabled -Dsystem-lua=true -Delogind=disabled build_with_coverity: extends: - .rules_only_on_coverity - .fedora - .coverity - .fdo.suffixed-image@fedora - .build stage: analysis script: - export PATH=/opt/coverity/bin:$PATH - meson "$WP_BUILD_DIR" . --prefix="$PREFIX" -Dintrospection=disabled -Ddoc=disabled - cov-configure --config coverity_conf.xml --comptype gcc --compiler cc --template --xml-option=append_arg@C:--ppp_translator --xml-option=append_arg@C:"replace/GLIB_(DEPRECATED|AVAILABLE)_ENUMERATOR_IN_\d_\d\d(_FOR\(\w+\)|)\s+=/ =" - cov-build --dir cov-int --config coverity_conf.xml ninja $NINJA_ARGS -C "$WP_BUILD_DIR" - tar caf wireplumber.tar.gz cov-int - curl https://scan.coverity.com/builds?project=$COVERITY_SCAN_PROJECT_NAME --form token=$COVERITY_SCAN_TOKEN --form email=$GITLAB_USER_EMAIL --form file=@wireplumber.tar.gz --form version="`git describe --tags`" --form description="`git describe --tags` / $CI_COMMIT_TITLE / $CI_COMMIT_REF_NAME:$CI_PIPELINE_ID " artifacts: name: wireplumber-coverity-$CI_COMMIT_SHA when: always paths: - build-*/meson-logs - cov-int/build-log.txt shellcheck: extends: - .fedora - .fdo.distribution-image@fedora stage: analysis script: - shellcheck $(git grep -l "#\!/.*bin/.*sh") rules: - if: $COVERITY when: never - if: $CI_PIPELINE_SOURCE == "merge_request_event" changes: - "**/*.sh" - if: $CI_COMMIT_BRANCH != "master" changes: - "**/*.sh" linguas_check: extends: - .fedora - .fdo.distribution-image@fedora stage: analysis script: - cd po - cat LINGUAS | sort > LINGUAS.sorted - ls *.po | sed s/.po//g | sort > LINGUAS.new - diff -u LINGUAS.sorted LINGUAS.new - rm -f LINGUAS.* rules: - if: $COVERITY when: never - if: $CI_PIPELINE_SOURCE == "merge_request_event" changes: - po/* - if: $CI_COMMIT_BRANCH != "master" changes: - po/* pages: stage: pages dependencies: - build_on_fedora_with_docs script: - mkdir public - cp -R prefix-*/share/doc/wireplumber/html/* public/ artifacts: paths: - public rules: - if: $COVERITY when: never - if: $CI_COMMIT_BRANCH == "master" wireplumber-0.5.13-84429b47943d789389fbde17c06b82efb197d04e/AGENTS.md000066400000000000000000000037501512256200400230000ustar00rootroot00000000000000## Building and Testing - To compile the project: `meson compile -C build` (compiles everything, no target needed) - To run tests: `meson test -C build` - The build artifacts always live in a directory called `build` or `builddir`. If `build` doesn't exist, use `-C builddir` in the meson commands. ## Git Workflow - Main branch: `master` - Always create feature branches for new work - Use descriptive commit messages following project conventions - Reference GitLab MR/issue numbers in commits where applicable - Never commit build artifacts or temporary files - Use `glab` CLI tool for GitLab interactions (MRs, issues, etc.) ## Making a release - Each release always consists of an entry in NEWS.rst, at the top of the file, which describes the changes between the previous release and the current one. In addition, each release is given a unique version number, which is present: 1. on the section header of that NEWS.rst entry 2. in the project() command in meson.build 3. on the commit message of the commit that introduces the above 2 changes 4. on the git tag that marks the above commit - In order to make a release: - Begin by analyzing the git history and the merged MRs from GitLab between the previous release and today. GitLab MRs that are relevant always have the new release's version number set as a "milestone" - Create a new entry in NEWS.rst describing the changes, in a similar style and format as the previous entries. Consolidate the changes to larger work items and also reference the relevant gitlab MR that corresponds to each change and/or the gitlab issues that were addressed by each change. - Make sure to move the "Past releases" section header up, so that the only 2 top-level sections are the new release section and the "Past releases" section. - Edit meson.build to change the project version to the new release number - Do not commit anything to git. Let the user review the changes and commit manually. wireplumber-0.5.13-84429b47943d789389fbde17c06b82efb197d04e/LICENSE000066400000000000000000000021061512256200400224740ustar00rootroot00000000000000Copyright © 2019-2021 Collabora Ltd. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. wireplumber-0.5.13-84429b47943d789389fbde17c06b82efb197d04e/Makefile000066400000000000000000000006561512256200400231370ustar00rootroot00000000000000WIREPLUMBER_DEBUG ?= 3 all: ninja -C build install: ninja -C build install uninstall: ninja -C build uninstall clean: ninja -C build clean run: all WIREPLUMBER_DEBUG=$(WIREPLUMBER_DEBUG) \ ./wp-uninstalled.sh $(DBG) wireplumber test: meson test -C build test_valgrind: meson test -C build --setup=valgrind gdb: $(MAKE) run DBG=gdb valgrind: G_SLICE=always-malloc \ $(MAKE) run DBG="valgrind --leak-check=full" wireplumber-0.5.13-84429b47943d789389fbde17c06b82efb197d04e/NEWS.rst000066400000000000000000002013651512256200400230050ustar00rootroot00000000000000WirePlumber 0.5.13 ~~~~~~~~~~~~~~~~~~ Additions & Enhancements: - Added internal filter graph support for audio nodes, allowing users to create audio preprocessing and postprocessing chains without exposing filters to applications, useful for software DSP (!743) - Added new Lua Properties API that significantly improves performance by avoiding constant serialization between WpProperties and Lua tables, resulting in approximately 40% faster node linking (!757) - Added WpIterator Lua API for more efficient parameter enumeration (!746) - Added bash completions for wpctl command (!762) - Added script to find suitable volume control when using role-based policy, allowing volume sliders to automatically adjust the volume of the currently active role (e.g., ringing, call, media) (!711) - Added experimental HDMI channel detection setting to use HDMI ELD information for channel configuration (!749) - Enhanced role-based policy to allow setting preferred target sinks for media role loopbacks via ``policy.role-based.preferred-target`` (!754) - Enhanced Bluetooth profile autoswitch logic to be more robust and handle saved profiles correctly, including support for loopback sink nodes (!739) - Enhanced ALSA monitor to include ``alsa.*`` device properties on nodes for rule matching (!761) - Optimized stream node linking for common cases to reduce latency when new audio/video streams are added (!760) - Improved event dispatcher performance by using hash table registration for event hooks, eliminating performance degradation as more hooks are registered (!765) - Increased audio headroom for VMware and VirtualBox virtual machines (!756) - Added setting to prevent restoring "Off" profiles via ``session.dont-restore-off-profile`` property (!753) - Added support for 128 audio channels when compiled with a recent version of PipeWire (pipewire#4995; CI checks in !768) Fixes: - Fixed memory leaks and issues in the modem manager module (!770, !764) - Fixed MPRIS module incorrectly treating GHashTable as GObject (!759) - Fixed warning messages when process files in ``/proc//*`` don't exist, particularly when processes are removed quickly (#816, !717) - Fixed MONO audio configuration to only apply to device sink nodes, allowing multi-channel mixing in the graph (!769) - Fixed event dispatcher hook registration and removal to avoid spurious errors (!747) - Improved logging for standard-link activation failures (!744) - Simplified event-hook interest matching for better performance (!758) Past releases ~~~~~~~~~~~~~ WirePlumber 0.5.12 .................. Additions & Enhancements: - Added mono audio configuration support via ``node.features.audio.mono`` setting that can be changed at runtime with wpctl (!721) - Added automatic muting of ALSA devices when a running node is removed, helping prevent loud audio on speakers when headsets are unplugged (!734) - Added notifications API module for sending system notifications (!734) - Added comprehensive wpctl man page and documentation (!735, #825) - Enhanced object interest handling for PipeWire properties on session items (!738) Fixes: - Fixed race condition during shutdown in the permissions portal module that could cause crashes in GDBus signal handling (!748) - Added device validity check in state-routes handling to prevent issues when devices are removed during async operations (!737, #844) - Fixed Log.critical undefined function error in device-info-cache (!733) - Improved device hook documentation and configuration (!736) WirePlumber 0.5.11 .................. Additions & Enhancements: - Added modem manager module for tracking voice call status and voice call device profile selection hooks to improve phone call audio routing on mobile devices (!722, !729, #819) - Added MPRIS media player pause functionality that automatically pauses media playback when the audio target (e.g. headphones) is removed (!699, #764) - Added support for human-readable names and localization of settings in ``wireplumber.conf`` with ``wpctl`` displaying localized setting descriptions (!712) - Improved default node selection logic to use both session and route priorities when nodes have equal session priorities (!720) - Increased USB device priority in the ALSA monitor (!719) Fixes: - Fixed multiple Lua runtime issues including type confusion bugs, stack overflow prevention, and SPA POD array/choice builders (!723, !728) - Fixed proxy object lifecycle management by properly clearing the OWNED_BY_PROXY flag when proxies are destroyed to prevent dangling pointers (!732) - Fixed state-routes handling to prevent saving unavailable routes and eliminate race conditions during profile switching (!730, #762) - Fixed some memory leaks in the script tester and the settings iterator (!727, !726) - Fixed a potential crash caused by module-loopback destroying itself when the pipewire connection is closed (#812) - Fixed profile saving behavior in ``wpctl set-profile`` command (#808) - Fixed GObject introspection closure annotation WirePlumber 0.5.10 .................. Fixed a critical crash in ``linking-utils.haveAvailableRoutes`` that was introduced accidentally in 0.5.9 and caused loss of audio output on affected systems (#797, #799, #800, !713) WirePlumber 0.5.9 ................. Additions & Enhancements: - Added a new audio node grouping functionality using an external command line tool (!646) - The libcamera monitor now supports devices that are not associated with device ids (!701) - The wireplumber user systemd service is now associated with dbus.service to avoid strange warnings when dbus exits (!702) - Added "SYSLOG_IDENTIFIER", "SYSLOG_FACILITY", "SYSLOG_PID" and "TID" to log messages that are sent to the journal (!709) Fixes: - Fixed a crash of ``wpctl set-default`` on 32-bit architectures (#773) - Fixed a crash when a configuration component had no 'provides' field (#771) - Reduced the log level of some messages that didn't need to be as high (!695) - Fixed another nil reference issue in the alsa.lua monitor script (!704) - Fixed name deduplication of v4l2 and libcamera devices (!705) - Fixed an issue with wpctl not being able to save settings sometimes (!708, #749) WirePlumber 0.5.8 ................. Additions & Enhancements: - Added support for handling UCM SplitPCM nodes in the ALSA monitor, which allows native PipeWire channel remapping using loopbacks for devices that use this feature (!685) - Introduced new functions to mark WpSpaDevice child objects as pending. This allows properly associating asynchronously created loopback nodes with their parent WpSpaDevice without losing ObjectConfig events (!687, !689) - Improved the node name deduplication logic in the ALSA monitor to prevent node names with .2, .3, etc appended to them in some more cases (!688) - Added a new script to populate ``session.services``. This is a step towards implementing detection of features that PipeWire can service (!686) Fixes: - Fixed an issue that was causing duplicate Bluetooth SCO (HSP/HFP) source nodes to be shown in UIs (#701, !683) - In the BlueZ monitor, marked the source loopback node as non-virtual, addressing how it appears on UIs (#729) - Disabled stream-restore for device loopback nodes to prevent unwanted property changes (!691) - Fixed ``wp_lua_log_topic_copy()`` to correctly copy topic names (#757) - Updated script tests to handle differences in object identifiers (``object.serial`` vs ``node.id``), ensuring proper test behavior (#761) WirePlumber 0.5.7 ................. Highlights: - Fixed an issue that would cause random profile switching when an application was trying to capture from non-Bluetooth devices (#715, #634, !669) - Fixed an issue that would cause strange profile selection issues [choices not being remembered or unavailable routes being selected] (#734) - Added a timer that delays switching Bluetooth headsets to the HSP/HFP profile, avoiding needless rapid switching when an application is trying to probe device capabilities instead of actually capturing audio (!664) - Improved libcamera/v4l2 device deduplication logic to work with more complex devices (!674, !675, #689, #708) Fixes: - Fixed two memory leaks in module-mixer-api and module-dbus-connection (!672, !673) - Fixed a crash that could occur in module-reserve-device (!680, #742) - Fixed an issue that would cause the warning "[string "alsa.lua"]:182: attempt to concatenate a nil value (local 'node_name')" to appear in the logs when an ALSA device was busy, breaking node name deduplication (!681) - Fixed an issue that could make find-preferred-profile.lua crash instead of properly applying profile priority rules (#751) WirePlumber 0.5.6 ................. Additions: - Implemented before/after dependencies for components, to ensure correct load order in custom configurations (#600) - Implemented profile inheritance in the configuration file. This allows profiles to inherit all the feature specifications of other profiles, which is useful to avoid copying long lists of features just to make small changes - Added multi-instance configuration profiles, tested and documented them - Added a ``main-systemwide`` profile, which is now the default for instances started via the system-wide systemd service and disables features that depend on the user session (#608) - Added a ``wp_core_connect_fd`` method, which allows making a connection to PipeWire via an existing open socket (useful for portal-based connections) Fixes: - The Bluetooth auto-switch script now uses the common event source object managers, which should improve its stability (!663) - Fix an issue where switching between Bluetooth profiles would temporarily link active audio streams to the internal speakers (!655) WirePlumber 0.5.5 ................. Highlights: - Hotfix release to address crashes in the Bluetooth HSP/HFP autoswitch functionality that were side-effects of some changes that were part of the role-based linking policy (#682) Improvements: - wpctl will now properly show a '*' in front of sink filters when they are selected as the default sink (!660) WirePlumber 0.5.4 ................. Highlights: - Refactored the role-based linking policy (previously known also as "endpoints" or "virtual items" policy) to blend in with the standard desktop policy. It is now possible use role-based sinks alongside standard desktop audio operations and they will only be used for streams that have a "media.role" defined. It is also possible to force streams to have a media.role, using a setting. Other features include: blending with smart filters in the graph and allowing hardware DSP nodes to be also used easily instead of requiring software loopbacks for all roles. (#610, !649) Improvements: - Filters that are not declared as smart will now behave again as normal application streams, instead of being treated sometimes differently (!657) Fixes: - Fixed an issue that would cause WirePlumber to crash at startup if an empty configuration file was present in one of the search paths (#671) - Fixed Bluetooth profile auto-switching when a filter is permanently linked to the Bluetooth source (!650) - Fixed an issue in the software-dsp script that would cause DSP filters to stay around and cause issues after their device node was destroyed (!651) - Fixed an issue in the autoswitch-bluetooth-profile script that could cause an infinite loop of switching between profiles (!652, #617) - Fixed a rare issue that could cause WirePlumber to crash when dealing with a device object that didn't have the "device.name" property set (#674) WirePlumber 0.5.3 ................. Fixes: - Fixed a long standing issue that would cause many device nodes to have inconsistent naming, with a '.N' suffix (where N is a number >= 2) being appended at seemingly random times (#500) - Fixed an issue that would cause unavailable device profiles to be selected if they were previously stored in the state file, sometimes requiring users to manually remove the state file to get things working again (#613) - Fixed an occasional crash that could sometimes be triggered by hovering the volume icon on the KDE taskbar, and possibly other similar actions (#628, !644) - Fixed camera device deduplication logic when the same device is available through both V4L2 and libcamera, and the libcamera one groups multiple V4L2 devices together (#623, !636) - Fixed applying the default volume on streams that have no volume previously stored in the state file (#655) - Fixed an issue that would prevent some camera nodes - in some cases - from being destroyed when the camera device is removed (#640) - Fixed an issue that would cause video stream nodes to be linked with audio smart filters, if smart audio filters were configured (!647) - Fixed an issue that would cause WP to re-activate device profiles even though they were already active (!639) - Configuration files in standard JSON format (starting with a '{', among other things) are now correctly parsed (#633) - Fixed overriding non-container values when merging JSON objects (#653) - Functions marked with WP_PRIVATE_API are now also marked as non-introspectable in the gobject-introspection metadata (#599) Improvements: - Logging on the systemd journal now includes the log topic and also the log level and location directly on the message string when the log level is high enough, which is useful for gathering additional context in logs submitted by users (!640) - Added a video-only profile in wireplumber.conf, for systems where only camera & screensharing are to be used (#652) - Improved seat state monitoring so that Bluetooth devices are only enabled when the user is active on a local seat, instead of allowing remote users as well (!641) - Improved how main filter nodes are detected for the smart filters (!642) - Added Lua method to merge JSON containers (!637) WirePlumber 0.5.2 ................. Highlights: - Added support for loading configuration files other than the default wireplumber.conf within Lua scripts (!629) - Added support for loading single-section configuration files, without fragments (!629) - Updated the node.software-dsp script to be able to load filter-chain graphs from external configuration files, which is needed for Asahi Linux audio DSP configuration (!629) Fixes: - Fixed destroying camera nodes when the camera device is removed (#627, !631) - Fixed an issue with Bluetooth BAP device set naming (!632) - Fixed an issue caused by the pipewire event loop not being "entered" as expected (!634, #638) - A false positive warning about no modules being loaded is now suppressed when using libpipewire >= 1.0.5 (#620) - Default nodes can now be selected using priority.driver when priority.session is not set (#642) Changes: - The library version is now generated following pipewire's versioning scheme: libwireplumber-0.5.so.0.5.2 becomes libwireplumber-0.5.so.0.0502.0 (!633) WirePlumber 0.5.1 ................. Highlights: - Added a guide documenting how to migrate configuration from 0.4 to 0.5, also available online at: https://pipewire.pages.freedesktop.org/wireplumber/daemon/configuration/migration.html If you are packaging WirePlumber for a distribution, please consider informing users about this. Fixes: - Fixed an odd issue where microphones would stop being usable when a Bluetooth headset was connected in the HSP/HFP profile (#598, !620) - Fixed an issue where it was not possible to store the volume/mute state of system notifications (#604) - Fixed a rare crash that could occur when a node was destroyed while the 'select-target' event was still being processed (!621) - Fixed deleting all the persistent settings via ``wpctl --delete`` (!622) - Fixed using Bluetooth autoswitch with A2DP profiles that have an input route (!624) - Fixed sending an error to clients when linking fails due to a format mismatch (!625) Additions: - Added a check that prints a verbose warning when old-style 0.4.x Lua configuration files are found in the system. (#611) - The "policy-dsp" script, used in Asahi Linux to provide a software DSP for Apple Sillicon devices, has now been ported to 0.5 properly and documented (#619, !627) WirePlumber 0.5.0 ................. Changes: - Bumped the minimum required version of PipeWire to 1.0.2, because we make use of the 'api.bluez5.internal' property of the BlueZ monitor (!613) - Improved the naming of Bluetooth nodes when the auto-switching loopback node is present (!614) - Updated the documentation on "settings", the Bluetooth monitor, the Access configuration, the file search locations and added a document on how to modify the configuration file (#595, !616) Fixes: - Fixed checking for available routes when selecting the default node (!609) - Fixed an issue that was causing an infinite loop storing routes in the state file (!610) - Fixed the interpretation of boolean values in the alsa monitor rules (#586, !611) - Fixes a Lua crash when we have 2 smart filters, one with a target and one without (!612) - Fixed an issue where the default nodes would not be updated when the currently selected default node became unavailable (#588, !615) - Fixed an issue that would cause the Props (volume, mute, etc) of loopbacks and other filter nodes to not be restored at startup (#577, !617) - Fixed how some constants were represented in the gobject-introspection file, mostly by converting them from defines to enums (#540, #591) - Fixed an issue using WirePlumber headers in other projects due to redefinition of G_LOG_DOMAIN (#571) WirePlumber 0.4.90 .................. This is the first release candidate (RC1) of WirePlumber 0.5.0. Highlights: - The configuration system has been changed back to load files from the WirePlumber configuration directories, such as ``/etc/wireplumber`` and ``$XDG_CONFIG_HOME/wireplumber``, unlike in the pre-releases. This was done because issues were observed with installations that use a different prefix for pipewire and wireplumber. If you had a ``wireplumber.conf`` file in ``/etc/pipewire`` or ``$XDG_CONFIG_HOME/pipewire``, you should move it to ``/etc/wireplumber`` or ``$XDG_CONFIG_HOME/wireplumber`` respectively (!601) - The internal base directories lookup system now also respects the ``XDG_CONFIG_DIRS`` and ``XDG_DATA_DIRS`` environment variables, and their default values as per the XDG spec, so it is possible to install configuration files also in places like ``/etc/xdg/wireplumber`` and override system-wide data paths (!601) - ``wpctl`` now has a ``settings`` subcommand to show, change and delete settings at runtime. This comes with changes in the ``WpSettings`` system to validate settings using a schema that is defined in the configuration file. The schema is also exported on a metadata object, so it is available to any client that wants to expose WirePlumber settings (!599, !600) - The ``WpConf`` API has changed to not be a singleton and support opening arbitrary config files. The main config file now needs to be opened prior to creating a ``WpCore`` and passed to the core using a property. The core uses that without letting the underlying ``pw_context`` open and read the default ``client.conf``. The core also closes the ``WpConf`` after all components are loaded, which means all the config loading is done early at startup. Finally, ``WpConf`` loads all sections lazily, keeping the underlying files memory mapped until it is closed and merging them on demand (!601, !606) WirePlumber 0.4.82 .................. This is a second pre-release of WirePlumber 0.5.0, made available for testing purposes. This is not API/ABI stable yet and there is still pending work to do before the final 0.5.0 release, both in the codebase and the documentation. Highlights: - Bluetooth auto-switching is now implemented with a virtual source node. When an application links to it, the actual device switches to the HSP/HFP profile to provide the real audio stream. This is a more robust solution that works with more applications and is more user-friendly than the previous application whitelist approach - Added support for dynamic log level changes via the PipeWire ``settings`` metadata. Also added support for log level patterns in the configuration file - The "persistent" (i.e. stored) settings approach has changed to use two different metadata objects: ``sm-settings`` and ``persistent-sm-settings``. Changes in the former are applied in the current session but not stored, while changes in the latter are stored and restored at startup. Some work was also done to expose a ``wpctl`` interface to read and change these settings, but more is underway - Several WirePlumber-specific node properties that used to be called ``target.*`` have been renamed to ``node.*`` to match the PipeWire convention of ``node.dont-reconnect``. These are also now fully documented Other changes: - Many documentation updates - Added support for SNAP container permissions - Fixed multiple issues related to restoring the Route parameter of devices, which includes volume state (#551) - Smart filters can now be targetted by specific streams directly when the ``filter.smart.targetable`` property is set (#554) - Ported the mechanism to override device profile priorities in the configuration, which is used to re-prioritize Bluetooth codecs - WpSettings is no longer a singleton class and there is a built-in component to preload an instance of it WirePlumber 0.4.81 .................. This is a preliminary release of WirePlumber 0.5.0, which is made available for testing purposes. Please test it and report feedback (merge requests are also welcome ;) ). This is not API/ABI stable yet and there is still pending work to do before the final 0.5.0 release, both in the codebase and the documentation. Highlights: - Lua scripts have been refactored to use the new event dispatcher API, which allows them to be split into multiple small fragments that react to events in a specified order. This allows scripts to be more modular and easier to maintain, as well as more predictable in terms of execution order. - The configuration system has been refactored to use a single SPA-JSON file, like PipeWire does, with support for fragments that can override options. This file is also now loaded using PipeWire's configuration API, which effectively means that the file is now loaded from the PipeWire configuration directories, such as ``/etc/pipewire`` and ``$XDG_CONFIG_HOME/pipewire``. - The configuration system now has the concept of profiles, which are groups of components that can be loaded together, with the ability to mark certain components as optional. This allows having multiple configurations that can be loaded using the same configuration file. Optional components also allow loading the same profile gracefully on different setups, where some components may not be available (ex, loading of the session D-Bus plugin on a system-wide PipeWire setup now does not fail). - Many configuration options are now exposed in the ``sm-settings`` metadata, which allows changing them at runtime. This can be leveraged in the future to implement configuration tools that can modify WirePlumber's behaviour dynamically, without restarting. - A new "filters" system has been implemented, which allows specifying chains of "filter" nodes to be dynamically linked in-between streams and devices. This is achieved with certain properties and metadata that can be set on the filter nodes themselves. - The default linking policy now reads some more ``target.*`` properties from nodes, which allows fine-tuning some aspects of their linking behaviour, such as whether they are allowed to be re-linked or whether an error should be sent to the client if they cannot be linked. - Some state files have been renamed and some have changed format to use JSON for storing complex values, such as arrays. This may cause some of the old state to be lost on upgrade, as there is no transition path implemented. - The libcamera and V4L2 monitors have a "device deduplication" logic built-in, which means that for each physical camera device, only one node will be created, either from libcamera or V4L2, depending on which one is considered better for the device. This is mainly to avoid having multiple nodes for the same camera device, which can cause confusion when looking at the list of available cameras in applications. WirePlumber 0.4.17 .................. Fixes: - Fixed a reference counting issue in the object managers that could cause crashes due to memory corruption (#534) - Fixed an issue with filters linking to wrong targets, often with two sets of links (#536) - Fixed a crash in the endpoints policy that would show up when log messages were enabled at level 3 or higher WirePlumber 0.4.16 .................. Additions: - Added a new "sm-objects" script that allows loading objects on demand via metadata entries that describe the object to load; this can be used to load pipewire modules, such as filters or network sources/sinks, on demand - Added a mechanism to override device profile priorities in the configuration, mainly as a way to re-prioritize Bluetooth codecs, but this also can be used for other devices - Added a mechanism in the endpoints policy to allow connecting filters between a certain endpoint's virtual sink and the device sink; this is specifically intended to allow plugging a filter-chain to act as equalizer on the Multimedia endpoint - Added wp_core_get_own_bound_id() method in WpCore Changes: - PipeWire 0.3.68 is now required - policy-dsp now has the ability to hide hardware nodes behind the DSP sink to prevent hardware misuse or damage - JSON parsing in Lua now allows keys inside objects to be without quotes - Added optional argument in the Lua JSON parse() method to limit recursions, making it possible to partially parse a JSON object - It is now possible to pass ``nil`` in Lua object constructors that expect an optional properties object; previously, omitting the argument was the only way to skip the properties - The endpoints policy now marks the endpoint nodes as "passive" instead of marking their links, adjusting for the behavior change in PipeWire 0.3.68 - Removed the "passive" property from si-standard-link, since only nodes are marked as passive now Fixes: - Fixed the ``wpctl clear-default`` command to completely clear all the default nodes state instead of only the last set default - Reduced the amount of globals that initially match the interest in the object manager - Used an idle callback instead of pw_core_sync() in the object manager to expose tmp globals WirePlumber 0.4.15 .................. Additions: - A new "DSP policy" module has been added; its purpose is to automatically load a filter-chain when a certain hardware device is present, so that audio always goes through this software DSP before reaching the device. This is mainly to support Apple M1/M2 devices, which require a software DSP to be always present - WpImplModule now supports loading module arguments directly from a SPA-JSON config file; this is mainly to support DSP configuration for Apple M1/M2 and will likely be reworked for 0.5 - Added support for automatically combining Bluetooth LE Audio device sets (e.g. pairs of earbuds) (!500) - Added command line options in ``wpctl`` to display device/node names and nicknames instead of descriptions - Added zsh completions file for ``wpctl`` - The device profile selection policy now respects the ``device.profile`` property if it is set on the device; this is useful to hand-pick a profile based on static configuration rules (alsa_monitor.rules) Changes/Fixes: - Linking policy now sends an error to the client before destroying the node, if it determines that the node cannot be linked to any target; this fixes error reporting on the client side - Fixed a crash in suspend-node that could happen when destroying virtual sinks that were loaded from another process such as pw-loopback (#467) - Virtual machine default period size has been bumped to 1024 (#507) - Updated bluez5 default configuration, using ``bluez5.roles`` instead of ``bluez5.headset-roles`` now (!498) - Disabled Bluetooth autoconnect by default (!514) - Removed ``RestrictNamespaces`` option from the systemd services in order to allow libcamera to load sandboxed IPA modules (#466) - Fixed a JSON encoding bug with empty strings (#471) - Lua code can now parse strings without quotes from SPA-JSON - Added some missing `\since` annotations and made them show up in the generated gobject-introspection file, to help bindings generators WirePlumber 0.4.14 .................. Additions: - Added support for managing Bluetooth-MIDI, complimenting the parts that were merged in PipeWire recently (!453) - Added a default volume configuration option for streams whose volume has never been saved before; that allows starting new streams at a lower volume than 100% by default, if desired (!480) - Added support for managing link errors and propagating them to the client(s) involved. This allows better error handling on the application side in case a format cannot be negotiated - useful in video streams (see !484, pipewire#2935) - snd_aloop devices are now described as being "Loopback" devices (pipewire#2214) - ALSA nodes in the pro audio profile now get increased graph priority, so that they are more likely to become the driver in the graph - Added support for disabling libcamera nodes & devices with ``node.disabled`` and ``device.disabled``, like it works for ALSA and V4L2 (#418) WirePlumber 0.4.13 .................. Additions: - Added bluetooth SCO (HSP/HFP) hardware offload support, together with an example script that enables this functionality on the PinePhone - Encoded audio (mp3, aac, etc...) can now be passed through, if this mode is supported by both the application and the device - The v4l2 monitor now also respects the ``node.disabled`` and ``device.disabled`` properties inside rules - Added "Firefox Developer Edition" to the list of apps that are allowed to trigger a bluetooth profile auto-switch (#381) - Added support in the portal access script to allow newly plugged cameras to be immediately visible to the portal apps Fixes: - Worked around an issue that would prevent streams from properly linking when using effects software like EasyEffects and JamesDSP (!450) - Fixed destroying pavucontrol-qt monitor streams after the node that was being monitored is destroyed (#388) - Fixed a crash in the alsa.lua monitor that could happen when a disabled device was removed and re-added (#361) - Fixed a rare crash in the metadata object (#382) - Fixed a bug where a restored node target would override the node target set by the application on the node's properties (#335) Packaging: - Added build options to compile wireplumber's library, daemon and tools independently - Added a build option to disable unit tests that require the dbus daemon - Stopped using fakesink/fakesrc in the unit tests to be able to run them on default pipewire installations. Compiling the spa ``test`` plugin is no longer necessary - Added pkg-config and header information in the gir file WirePlumber 0.4.12 .................. Changes: - WirePlumber now maintains a stack of previously configured default nodes and prioritizes to one of those when the actively configured default node becomes unavailable, before calculating the next default using priorities (see !396) - Updated bluetooth scripts to support the name changes that happened in PipeWire 0.3.59 and also support the experimental Bluetooth LE functionality - Changed the naming of bluetooth nodes to not include the profile in it; this allows maintaining existing links when switching between a2dp and hfp - The default volume for new outputs has changed to be 40% in cubic scale (= -24 dB) instead of linear (= 74% cubic / -8 dB) that it was before - The default volume for new inputs has changed to be 100% rather than following the default for outputs - Added ``--version`` flag on the wireplumber executable (#317) - Added ``--limit`` flag on ``wpctl set-volume`` to limit the higher volume that can be set (useful when incrementing volume with a keyboard shortcut that calls into wpctl) - The properties of the alsa midi node can now be set in the config files Fixes: - Fixed a crash in lua code that would happen when running in a VM (#303) - Fixed a crash that would happen when re-connecting to D-Bus (#305) - Fixed a mistake in the code that would cause device reservation not to work properly - Fixed ``wpctl clear-default`` to accept 0 as a valid setting ID - Fixed the logic of choosing the best profile after the active profile of a device becomes unavailable (#329) - Fixed a regression that would cause PulseAudio "corked" streams to not properly link and cause busy loops - Fixed an issue parsing spa-json objects that have a nested object as the value of their last property WirePlumber 0.4.11 .................. Changes: - The libcamera monitor is now enabled by default, so if the libcamera source is enabled in PipeWire, cameras discovered with the libcamera API will be available out of the box. This is safe to use alongside V4L2, as long as the user does not try to use the same camera over different APIs at the same time - Libcamera and V4L2 nodes now get assigned a ``priority.session`` number; V4L2 nodes get a higher priority by default, so the default camera is going to be /dev/video0 over V4L2, unless changed with ``wpctl`` - Libcamera nodes now get a user-friendly description based on their location (ex. built-in front camera). Additionally, V4L2 nodes now have a "(V4L2)" string appended to their description in order to be distinguished from the libcamera ones - 50-alsa-config.lua now has a section where you can set properties that will only be applied if WirePlumber is running in a virtual machine. By default it now sets ``api.alsa.period-size = 256`` and ``api.alsa.headroom = 8192`` (#162, #134) Fixes: - The "enabled" properties in the config files are now "true" by default when they are not defined. This fixes backwards compatibility with older configuration files (#254) - Fixed device name deduplication in the alsa monitor, when device reservation is enabled (#241) - Reverted a previous fix that makes it possible again to get a glitch when changing default nodes while also changing the profile (GNOME Settings). The fix was causing other problems and the issue will be addressed differently in the future (#279) - Fixed an issue that would prevent applications from being moved to a recently plugged USB headset (#293) - Fixed an issue where wireplumber would automatically link control ports, if they are enabled, to audio ports, effectively breaking audio (#294) - The policy now always considers the profile of a device that was previously selected by the user, if it is available, when deciding which profile to activate (#179). This may break certain use cases (see !360) - A few documentation fixes Tools: - wpctl now has a ``get-volume`` command for easier scripting of volume controls - wpctl now supports relative steps and percentage-based steps in ``set-volume`` - wpctl now also prints link states - wpctl can now ``inspect`` metadata objects without showing critical warnings Library: - A new WpDBus API was added to maintain a single D-Bus connection among modules that need one - WpCore now has a method to get the virtual machine type, if WirePlumber is running in a virtual machine - WpSpaDevice now has a ``wp_spa_device_new_managed_object_iterator()`` method - WpSpaJson now has a ``wp_spa_json_to_string()`` method that returns a newly allocated string with the correct size of the string token - WpLink now has a ``WP_LINK_FEATURE_ESTABLISHED`` that allows the caller to wait until the link is in the PAUSED or ACTIVE state. This transparently now enables watching links for negotiation or allocation errors and failing gracefully instead of keeping dead link objects around (#294) Misc: - The Lua subproject was bumped to version 5.4.4 WirePlumber 0.4.10 .................. Changes: - Added i18n support to be able to translate some user-visible strings - wpctl now supports using ``@DEFAULT_{AUDIO_,VIDEO_,}{SINK,SOURCE}@`` as ID, almost like pactl. Additionally, it supports a ``--pid`` flag for changing volume and mute state by specifying a process ID, applying the state to all nodes of a specific client process - The Lua engine now supports loading Lua libraries. These can be placed either in the standard Lua libraries path or in the "lib" subdirectory of WirePlumber's "scripts" directory and can be loaded with ``require()`` - The Lua engine's sandbox has been relaxed to allow more functionality in scripts (the debug & coroutine libraries and some other previously disabled functions) - Lua scripts are now wrapped in special WpPlugin objects, allowing them to load asynchronously and declare when they have finished their loading - Added a new script that provides the same functionality as module-fallback-sink from PipeWire, but also takes endpoints into account and can be customized more easily. Disabled by default for now to avoid conflicts Policy: - Added an optional experimental feature that allows filter-like streams (like echo-cancel or filter-node) to match the channel layout of the device they connect to, on both sides of the filter; that means that if, for instance, a sink has 6 channels and the echo-cancel's source stream is linked to that sink, then the virtual sink presented by echo-cancel will also be configured to the same 6 channels layout. This feature needs to be explicitly enabled in the configuration ("filter.forward-format") - filter-like streams (filter-chain and such) no longer follow the default sink when it changes, like in PulseAudio Fixes: - The suspend-node script now also suspends nodes that go into the "error" state, allowing them to recover from errors without having to restart WirePlumber - Fixed a crash in mixer-api when setting volume with channelVolumes (#250) - logind module now watches only for user state changes, avoiding errors when machined is not running Misc: - The configuration files now have comments mentioning which options need to be disabled in order to run WirePlumber without D-Bus - The configuration files now have properties to enable/disable the monitors and other sections, so that it is possible to disable them by dropping in a file that just sets the relevant property to false - ``setlocale()`` is now called directly instead of relying on ``pw_init()`` - WpSpaJson received some fixes and is now used internally to parse configuration files - More applications were added to the bluetooth auto-switch apps whitelist WirePlumber 0.4.9 ................. Fixes: - restore-stream no longer crashes if properties for it are not present in the config (#190) - spa-json no longer crashes on non-x86 architectures - Fixed a potential crash in the bluetooth auto-switch module (#193) - Fixed a race condition that would cause Zoom desktop audio sharing to fail (#197) - Surround sound in some games is now exposed properly (pipewire#876) - Fixed a race condition that would cause the default source & sink to not be set at startup - policy-node now supports the 'target.object' key on streams and metadata - Multiple fixes in policy-node that make the logic in some cases behave more like PulseAudio (regarding nodes with the dont-reconnect property and regarding following the default source/sink) - Fixed a bug with parsing unquoted strings in spa-json Misc: - The policy now supports configuring "persistent" device profiles. If a device is *manually* set to one of these profiles, then it will not be auto-switched to another profile automatically under any circumstances (#138, #204) - The device-activation module was re-written in lua - Brave, Edge, Vivaldi and Telegram were added in the bluetooth auto-switch applications list - ALSA nodes now use the PCM name to populate node.nick, which is useful at least on HDA cards using UCM, where all outputs (analog, hdmi, etc) are exposesd as nodes on a single profile - An icon name is now set on the properties of bluetooth devices WirePlumber 0.4.8 ................. Highlights: - Added bluetooth profile auto-switching support. Bluetooth headsets will now automatically switch to the HSP/HFP profile when making a call and go back to the A2DP profile after the call ends (#90) - Added an option (enabled by default) to auto-switch to echo-cancel virtual device nodes when the echo-cancel module is loaded in pipewire-pulse, if there is no other configured default node Fixes: - Fixed a regression that prevented nodes from being selected as default when using the pro-audio profile (#163) - Fixed a regression that caused encoded audio streams to stall (#178) - Fixed restoring bluetooth device profiles Library: - A new WpSpaJson API was added as a front-end to spa-json. This is also exposed to Lua, so that Lua scripts can natively parse and write data in the spa-json format Misc: - wpctl can now list the configured default sources and sinks and has a new command that allows clearing those configured defaults, so that wireplumber goes back to choosing the default nodes based on node priorities - The restore-stream script now has its own configuration file in main.lua.d/40-stream-defaults.lua and has independent options for restoring properties and target nodes - The restore-stream script now supports rule-based configuration to disable restoring volume properties and/or target nodes for specific streams, useful for applications that misbehave when we restore those (see #169) - policy-endpoint now assigns the "Default" role to any stream that does not have a role, so that it can be linked to a pre-configured endpoint - The route-settings-api module was dropped in favor of dealing with json natively in Lua, now that the API exists WirePlumber 0.4.7 ................. Fixes: - Fixed a regression in 0.4.6 that caused the selection of the default audio sources and sinks to be delayed until some event, which effectively caused losing audio output in many circumstances (#148, #150, #151, #153) - Fixed a regression in 0.4.6 that caused the echo-cancellation pipewire module (and possibly others) to not work - A default sink or source is now not selected if there is no available route for it (#145) - Fixed an issue where some clients would wait for a bit while seeking (#146) - Fixed audio capture in the endpoints-based policy - Fixed an issue that would cause certain lua scripts to error out with older configuration files (#158) WirePlumber 0.4.6 ................. Changes: - Fixed a lot of race condition bugs that would cause strange crashes or many log messages being printed when streaming clients would connect and disconnect very fast (#128, #78, ...) - Improved the logic for selecting a default target device (#74) - Fixed switching to headphones when the wired headphones are plugged in (#98) - Fixed an issue where ``udevadm trigger`` would break wireplumber (#93) - Fixed an issue where switching profiles of a device could kill client nodes - Fixed briefly switching output to a secondary device when switching device profiles (#85) - Fixed ``wpctl status`` showing default device selections when dealing with module-loopback virtual sinks and sources (#130) - WirePlumber now ignores hidden files from the config directory (#104) - Fixed an interoperability issue with jackdbus (pipewire#1846) - Fixed an issue where pulseaudio tcp clients would not have permissions to connect to PipeWire (pipewire#1863) - Fixed a crash in the journald logger with NULL debug messages (#124) - Enabled real-time priority for the bluetooth nodes to run in RT (#132) - Made the default stream volume configurable - Scripts are now also looked up in $XDG_CONFIG_HOME/wireplumber/scripts - Updated documentation on configuring WirePlumber and fixed some more documentation issues (#68) - Added support for using strings as log level selectors in WIREPLUMBER_DEBUG WirePlumber 0.4.5 ................. Fixes: - Fixed a crash that could happen after a node linking error (#76) - Fixed a bug that would cause capture streams to link to monitor ports of loopback nodes instead of linking to their capture ports - Fixed a needless wait that would happen on applications using the pipewire ALSA plugin (#92) - Fixed an issue that would cause endless rescan loops in policy-node and could potentially also cause other strange behaviors in case pavucontrol or another monitoring utility was open while the policy was rescanning (#77) - Fixed the endpoints-based policy that broke in recent versions and improved its codebase to share more code and be more in-line with policy-node - The semicolon character is now escaped properly in state files (#82) - When a player requests encoded audio passthrough, the policy now prefers linking to a device that supports that instead of trying to link to the default device and potentially failing (#75) - Miscellaneous robustness fixes in policy-node API: - Added WpFactory, a binding for pw_factory proxies. This allows object managers to query factories that are loaded in the pipewire daemon - The file-monitor-api plugin can now watch files for changes in addition to directories WirePlumber 0.4.4 ................. Highlights: - Implemented linking nodes in passthrough mode, which enables encoded iec958 / dsd audio passthrough - Streams are now sent an error if it was not possible to link them to a target (#63) - When linking nodes where at least one of them has an unpositioned channel layout, the other one is not reconfigured to match the channel layout; it is instead linked with a best effort port matching logic - Output route switches automatically to the latest one that has become available (#69) - Policy now respects the 'node.exclusive' and 'node.passive' properties - Many other minor policy fixes for a smoother desktop usage experience API: - Fixed an issue with the ``LocalModule()`` constructor not accepting ``nil`` as well as the properties table properly - Added ``WpClient.send_error()``, ``WpSpaPod.fixate()`` and ``WpSpaPod.filter()`` (both in C and Lua) Misc: - Bumped meson version requirement to 0.56 to be able to use ``meson.project_{source,build}_root()`` and ease integration with pipewire's build system as a subproject - wireplumber.service is now an alias to pipewire-session-manager.service - Loading the logind module no longer fails if it was not found on the system; there is only a message printed in the output - The logind module can now be compiled with elogind (#71) - Improvements in wp-uninstalled.sh, mostly to ease its integration with pipewire's build system when wireplumber is build as a subproject - The format of audio nodes is now selected using the same algorithm as in media-session - Fixed a nasty segfault that appeared in 0.4.3 due to a typo (#72) - Fixed a re-entrancy issue in the wplua runtime (#73) WirePlumber 0.4.3 ................. Fixes: - Implemented logind integration to start the bluez monitor only on the WirePlumber instance that is running on the active seat; this fixes a bunch of startup warnings and the disappearance of HSP/HFP nodes after login (#54) - WirePlumber is now launched with GIO_USE_VFS=local to avoid strange D-Bus interference when the user session is restarted, which previously resulted in WirePlumber being terminated with SIGTERM and never recovering (#48) - WirePlumber now survives a restart of the D-Bus service, reconnecting to the bus and reclaiming the bus services that it needs (#55) - Implemented route-settings metadata, which fixes storing volume for the "System Sounds" in GNOME (#51) - Monitor sources can now be selected as the default source (#60) - Refactored some policy logic to allow linking to monitors; the policy now also respects "stream.capture.sink" property of streams which declares that the stream wants to be linked to a monitor (#66) - Policy now cleans up 'target.node' metadata so that streams get to follow the default source/sink again after the default was changed to match the stream's currently configured target (#65) - Fixed configuring virtual sources (#57) - Device monitors now do not crash if a SPA plugin is missing; instead, they print a warning to help users identify what they need to install (!214) - Fixed certain "proxy activation failed" warnings (#44) - iec958 codec configuration is now saved and restored properly (!228) - Fixed some logging issues with the latest version of pipewire (!227, !232) - Policy now respects the "node.link-group" property, which fixes issues with filter-chain and other virtual sources & sinks (#47) - Access policy now grants full permissions to flatpak "Manager" apps (#59) Policy: - Added support for 'no-dsp' mode, which allows streaming audio using the format of the device instead of the standard float 32-bit planar format (!225) Library: - WpImplMetadata is now implemented using pw_impl_metadata instead of using its own implementation (#52) - Added support for custom object property IDs in WpSpaPod (#53) Misc: - Added a script to load the libcamera monitor (!231) - Added option to disable building unit tests (!209) - WirePlumber will now fail to start with a warning if pipewire-media-session is also running in the system (#56) - The bluez monitor configuration was updated to match the latest one in pipewire-media-session (!224) WirePlumber 0.4.2 ................. Highlights: - Requires PipeWire 0.3.32 or later at runtime - Configuration files are now installed in $PREFIX/share/wireplumber, along with scripts, following the paradigm of PipeWire - State files are now stored in $XDG_STATE_HOME instead of $XDG_CONFIG_HOME - Added new ``file-monitor-api`` module, which allows Lua scripts to watch the filesystem for changes, using inotify - Added monitor for MIDI devices - Added a ``system-lua-version`` meson option that allows distributors to choose which Lua version to build against (``auto``, ``5.3`` or ``5.4``) - wpipc has been removed and split out to a separate project, https://git.automotivelinux.org/src/pipewire-ic-ipc/ Library: - A new ``WpImplModule`` class has been added; this allows loading a PipeWire module in the WirePlumber process space, keeping a handle that can be used to unload that module later. This is useful for loading filters, network sources/sinks, etc... - State files can now store keys that contain certain GKeyFile-reserved characters, such as ``[``, ``]``, ``=`` and space; this fixes storing stream volume state for streams using PipeWire's ALSA compatibility PCM plugin - ``WpProperties`` now uses a boxed ``WpPropertiesItem`` type in its iterators so that these iterators can be used with g-i bindings - Added API to lookup configuration and script files from multiple places in the filesystem Lua: - A ``LocalModule`` API has been added to reflect the functionality offered by ``WpImplModule`` in C - The ``Node`` API now has a complete set of methods to reflect the methods of ``WpNode`` - Added ``Port.get_direction()`` - Added ``not-equals`` to the possible constraint verbs - ``Debug.dump_table`` now sorts keys before printing the table Misc: - Tests no longer accidentally create files in $HOME; all transient files that are used for testing are now created in the build directory, except for sockets which are created in ``/tmp`` due to the 108-character limitation in socket paths - Tests that require optional SPA plugins are now skipped if those SPA plugins are not installed - Added a nice summary output at the end of meson configuration - Documented the Lua ObjectManager / Interest / Constraint APIs - Fixed some memory leaks WirePlumber 0.4.1 ................. Bug fix release to go with PipeWire 0.3.31. Please update to this version if you are using PipeWire >= 0.3.31. Highlights: - WirePlumber now supports Lua 5.4. You may compile it either with Lua 5.3 or 5.4, without any changes in behavior. The internal Lua subproject has also been upgraded to Lua 5.4, so any builds with ``-Dsystem-lua=false`` will use Lua 5.4 by default Fixes: - Fixed filtering of pw_metadata objects, which broke with PipeWire 0.3.31 - Fixed a potential livelock condition in si-audio-adapter/endpoint where the code would wait forever for a node's ports to appear in the graph - Fixed granting access to camera device nodes in flatpak clients connecting through the camera portal - Fixed a lot of issues found by the coverity static analyzer - Fixed certain race conditions in the wpipc library - Fixed compilation with GCC older than v8.1 Scripts: - Added a policy script that matches nodes to specific devices based on the "media.role" of the nodes and the "device.intended-roles" of the devices Build system: - Bumped GLib requirement to 2.62, as the code was already using 2.62 API - Added support for building WirePlumber as a PipeWire subproject - Doxygen version requirement has been relaxed to accept v1.8 - The CI now also verifies that the build works on Ubuntu 20.04 LTS and tries multiple builds with different build options WirePlumber 0.4.0 ................. This is the first stable release of the 0.4.x series, which is expected to be an API & ABI stable release series to go along with PipeWire 0.3.x. It is a fundamental goal of this series to maintain compatibility with pipewire-media-session, making WirePlumber suitable for a desktop PulseAudio & JACK replacement setup, while supporting other setups as well (ex. automotive) by making use of its brand new Lua scripting engine, which allows making customizations easily. Highlights: - Re-implemented the default-routes module in lua, using the same logic as the one that pipewire-media-session uses. This fixes a number of issues related to volume controls on alsa devices. - Implemented a restore-stream lua script, based on the restore-stream module from media-session. This allows storing stream volumes and targets and restoring them when the stream re-connects - Added support for handling dont-remix streams and streams that are not autoconnected. Fixes ``pw-cat -p --target=0`` and the gnome-control-center channel test - Device names are now sanitized in the same way as in pipewire-media-session - Disabled endpoints in the default configuration. Using endpoints does not provide the best experience on desktop systems yet - Fixed a regression introduced in 0.3.96 that would not allow streams to be relinked on their endpoints after having been corked by the policy Library: - Some API methods were changed to adhere to the programming practices followed elsewhere in the codebase and to be future-proof. Also added paddings on public structures so that from this point on, the 0.4.x series is going to be API & ABI stable - lua: added WpState and wp_metadata_set() bindings and improved WpObject.activate() to report errors - ObjectManager: added support for declaring interest on all kinds of properties of global objects. Previously it was only possible to declare interest on pipewire global properties Misc: - daemon & wpexec: changed the exit codes to follow the standardized codes defined in sysexits.h - wpexec now forces the log level to be >= 1 so that lua runtime errors can be printed on the terminal - Fixed issues with gobject-introspection data that were introduced by the switch to doxygen - Fixed a build issue where wp-gtkdoc.h would not be generated in time for the gobject-introspection target to build - Added a valgrind test setup in meson, use with ``meson test --setup=valgrind`` - Many memory leak and stability fixes - Updated more documentation pages WirePlumber 0.3.96 .................. Second pre-release (RC2) of WirePlumber 0.4.0. Highlights: - The policy now configures streams for channel upmixing/downmixing - Some issues in the policy have been fixed, related to: - plugging a new higher priority device while audio is playing - pavucontrol creating links to other stream nodes for level monitoring - some race condition that could happen at startup - Proxy object errors are now handled; this fixes memory leaks of invalid links and generally makes things more robust - The systemd service units now conflict with pipewire-media-session.service - Session & EndpointLink objects have been removed from the API; these were not in use after recent refactoring, so they have been removed in order to avoid carrying them in the ABI - The documentation system has switched to use *Doxygen* & *Sphinx*; some documentation has also been updated and some Lua API documentation has been introduced WirePlumber 0.3.95 .................. First pre-release (RC1) of WirePlumber 0.4.0. Highlights: - Lua scripting engine. All the session management logic is now scripted and there is also the ability to run scripts standalone with ``wpexec`` (see tests/examples). - Compatibility with the latest PipeWire (0.3.26+ required). Also, most features and behavioral logic of pipewire-media-session 0.3.26 are available, making WirePlumber suitable for a desktop PulseAudio & JACK replacement setup. - Compatibility with embedded system policies, like the one on AGL, has been restored and is fully configurable. - The design of endpoints has been simplified. We now associate endpoints with use cases (roles) instead of physical devices. This removes the need for "endpoint stream" objects, allows more logic to be scripted in lua and makes the graph simpler. It is also possible to run without endpoints at all, matching the behavior of pipewire-media-session and pulseaudio. - Configuration is now done using a pipewire-style json .conf file plus lua files. Most of the options go in the lua files, while pipewire context properties, spa_libs and pipewire modules are configured in the json file. - Systemd unit files have been added and are the recommended way to run wireplumber. Templated unit files are also available, which allow running multiple instances of wireplumber with a specific configuration each. WirePlumber 0.3.0 ................. The desktop-ready release! Changes since 0.2.96: - Changed how the device endpoints & nodes are named to make them look better in JACK graph tools, such as qjackctl. JACK tools use the ':' character as a separator to distinguish the node name from the port name (since there are no actual nodes in JACK) and having ':' in our node names made the graph look strange in JACK - Fixed an issue with parsing wireplumber.conf that could cause out-of-bounds memory access - Fixed some pw_proxy object leaks that would show up in the log - Fixed more issues with unlinking the stream volume (si-convert) node from the ALSA sink node and suspending the both; This now also works with PipeWire 0.3.5 and 0.3.6, so it is possible to use these PipeWire versions with WirePlumber without disabling streams on audio sinks. WirePlumber 0.2.96 .................. Second pre-release (RC2) of WirePlumber 0.3.0 Changes since 0.2.95: - Quite some work went into fixing bugs related to the ``ReserveDevice1`` D-Bus API. It is now possible to start a JACK server before or after WirePlumber and WirePlumber will automatically stop using the device that JACK opens, while at the same time it will enable the special "JACK device" that allows PipeWire to interface with JACK - Fixed a number of issues that did not previously allow using the spa bluez5 device with WirePlumber. Now it is possible to at least use the A2DP sink (output to bluetooth speakers) without major issues - On the API level, ``WpCore`` was changed to allow having multiple instances that share the same ``pw_context``. This is useful to have multiple connections to PipeWire, while sharing the context infrastructure - ``WpCore`` also gained support for retrieving server info & properties and ``wpctl status`` now also prints info about the server & all clients - ``module-monitor`` was modified to allow loading multiple monitor instances with one instance of the module itself - Audio nodes are now configured with the sample rate that is defined globally in ``pipewire.conf`` with ``set-prop default.clock.rate `` - Policy now respects the ``node.autoconnect`` property; additionally, it is now possible to specify endpoint ids in the ``node.target`` property of nodes (so endpoint ids are accepted in the ``PIPEWIRE_NODE`` environment variable, and in the ``path`` property of the pipewire gstreamer elements) - Fixed an issue where links between the si-convert audioconvert nodes and the actual device nodes would stay active forever; they are now declared as "passive" links, which allows the nodes to suspend. This requires changes to PipeWire that were commited after 0.3.6; when using WirePlumber with 0.3.5 or 0.3.6, it is recommended to disable streams on audio sinks by commenting out the ``streams = "audio-sink.streams"`` lines in the .endpoint configuration files - ``wireplumber.conf`` now accepts comments to be present inside blocks and at the end of valid configuration lines - Improved documentation and restructured the default configuration to be more readable and sensible - Fixed issues that prevented using WirePlumber with GLib < 2.60; 2.58 is now the actual minimum requirement WirePlumber 0.2.95 .................. First pre-release of WirePlumber 0.3.0. This is the first release that targets desktop use-cases. It aims to be fully compatible with ``pipewire-media-session``, while at the same time it adds a couple of features that ``pipewire-media-session`` lacks, such as: - It makes use of session, endpoint and endpoint-stream objects to orchestrate the graph - It is configurable: - It supports configuration of endpoints, so that their properties (such as their name) can be overriden - It also supports declaring priorities on endpoints, so that there are sane defaults on the first start - It supports partial configuration of linking policy - It supports creating static node and device objects at startup, also driven by configuration files - It has the concept of session default endpoints, which can be changed with ``wpctl`` and are stored in XDG_CONFIG_DIR, so the user may change at runtime the target device of new links in a persistent way - It supports volume & mute controls on audio endpoints, which can be set with ``wpctl`` - Last but not least, it is extensible Also note that this release currently breaks compatibility with AGL, since the policy management engine received a major refactoring to enable more use-cases, and has been focusing on desktop support ever since. Policy features specific to AGL and other embedded systems are expected to come back in a 0.3.x point release. WirePlumber 0.2.0 ................. As shipped in AGL Itchy Icefish 9.0.0 and Happy Halibut 8.0.5 WirePlumber 0.1.2 ................. As shipped in AGL Happy Halibut 8.0.2 WirePlumber 0.1.1 ................. As shipped in AGL Happy Halibut 8.0.1 WirePlumber 0.1.0 ................. First release of WirePlumber, as shipped in AGL Happy Halibut 8.0.0 wireplumber-0.5.13-84429b47943d789389fbde17c06b82efb197d04e/README.rst000066400000000000000000000025041512256200400231600ustar00rootroot00000000000000WirePlumber =========== .. image:: https://gitlab.freedesktop.org/pipewire/wireplumber/badges/master/pipeline.svg :alt: Pipeline status .. image:: https://scan.coverity.com/projects/21488/badge.svg :alt: Coverity Scan Build Status .. image:: https://img.shields.io/badge/license-MIT-green :alt: License .. image:: https://img.shields.io/badge/dynamic/json?color=informational&label=tag&query=%24%5B0%5D.name&url=https%3A%2F%2Fgitlab.freedesktop.org%2Fapi%2Fv4%2Fprojects%2F2941%2Frepository%2Ftags :alt: Tag WirePlumber is a modular session / policy manager for `PipeWire `_ and a GObject-based high-level library that wraps PipeWire's API, providing convenience for writing the daemon's modules as well as external tools for managing PipeWire. The WirePlumber daemon implements the session & policy management service. It follows a modular design, having plugins that implement the actual management functionality. The WirePlumber Library provides API that allows you to extend the WirePlumber daemon, to write management or status tools for PipeWire (apps that don't do actual media streaming) and to write custom session managers for embedded devices. Documentation ------------- The latest version of the documentation is available online `here `_ wireplumber-0.5.13-84429b47943d789389fbde17c06b82efb197d04e/docs/000077500000000000000000000000001512256200400224205ustar00rootroot00000000000000wireplumber-0.5.13-84429b47943d789389fbde17c06b82efb197d04e/docs/Doxyfile.in000066400000000000000000003272241512256200400245450ustar00rootroot00000000000000# Doxyfile 1.9.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. # # All text after a single hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the configuration # file that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # https://www.gnu.org/software/libiconv/ for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the # project for which the documentation is generated. This name is used in the # title of most generated pages and in a few other places. # The default value is: My Project. PROJECT_NAME = WirePlumber # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. PROJECT_NUMBER = # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = @OUTPUT_DIR@ # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and # will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes # performance problems for the file system. # The default value is: NO. CREATE_SUBDIRS = NO # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode # U+3044. # The default value is: NO. ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, # Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), # Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, # Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, # Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, # Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, # Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. # The default value is: YES. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found # as the leading text of the brief description, will be stripped from the text # and the result, after processing the whole list, is used as the annotated # text. Otherwise, the brief description is used as-is. If left blank, the # following values are used ($name is automatically replaced with the name of # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. # The default value is: NO. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. FULL_PATH_NAMES = YES # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which # header file to include in order to use a class. If left blank only the name of # the header file containing the class definition is used. Otherwise one should # specify the list of include paths that are normally passed to the compiler # using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the # first line (until the first dot) of a Javadoc-style comment as the brief # description. If set to NO, the Javadoc-style will behave just like regular Qt- # style comments (thus requiring an explicit @brief command for a brief # description.) # The default value is: NO. JAVADOC_AUTOBRIEF = NO # If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line # such as # /*************** # as being the beginning of a Javadoc-style comment "banner". If set to NO, the # Javadoc-style will behave just like regular comments and it will not be # interpreted by doxygen. # The default value is: NO. JAVADOC_BANNER = NO # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus # requiring an explicit \brief command for a brief description.) # The default value is: NO. QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this # tag to YES if you prefer the old behavior instead. # # Note that setting this tag to YES also means that rational rose comments are # not recognized any more. # The default value is: NO. MULTILINE_CPP_IS_BRIEF = NO # By default Python docstrings are displayed as preformatted text and doxygen's # special commands cannot be used. By setting PYTHON_DOCSTRING to NO the # doxygen's special commands can be used and the contents of the docstring # documentation blocks is shown as doxygen documentation. # The default value is: YES. PYTHON_DOCSTRING = YES # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new # page for each member. If set to NO, the documentation of a member will be part # of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: # name=value # For example adding # "sideeffect=@par Side Effects:\n" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines (in the resulting output). You can put ^^ in the value part of an # alias to insert a newline as if a physical newline was in the original file. # When you need a literal { or } or , in the value part of an alias you have to # escape them by means of a backslash (\), this can lead to conflicts with the # commands \{ and \} for these it is advised to use the version @{ and @} or use # a double escape (\\{ and \\}) ALIASES = \ "rst=\verbatim embed:rst:leading-asterisk" \ "endrst=\endverbatim" \ "gsignals=\b GObject \b Signals" \ "gproperties=\b GObject \b Properties" \ "gproperty{4}=
\1

\4

`\2``\3`
" # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all # members will be omitted, etc. # The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored # for that language. For instance, namespaces will be presented as packages, # qualified scopes will look different, etc. # The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for VHDL. # The default value is: NO. OPTIMIZE_OUTPUT_VHDL = NO # Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice # sources only. Doxygen will then generate output that is more tailored for that # language. For instance, namespaces will be presented as modules, types will be # separated into more groups, etc. # The default value is: NO. OPTIMIZE_OUTPUT_SLICE = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, JavaScript, # Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL, # Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the # default for Fortran type files). For instance to make doxygen treat .inc files # as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. When specifying no_extension you should add # * to the FILE_PATTERNS. # # Note see also the list of default file extension mappings. EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See https://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. MARKDOWN_SUPPORT = YES # When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up # to that level are automatically included in the table of contents, even if # they do not have an id attribute. # Note: This feature currently applies only to Markdown headings. # Minimum value: 0, maximum value: 99, default value: 5. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. TOC_INCLUDE_HEADINGS = 5 # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or # globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); # versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. # The default value is: NO. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: # https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make # doxygen to replace the get and set methods by a property in the documentation. # This will only work if the methods are indeed getting or setting a simple # type. If this is not the case, or you want to show the methods anyway, you # should set this option to NO. # The default value is: YES. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = NO # If one adds a struct or class to a group and this option is enabled, then also # any nested class or struct is added to the same group. By default this option # is disabled and one has to add nested compounds explicitly via \ingroup. # The default value is: NO. GROUP_NESTED_COMPOUNDS = NO # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent # subgrouping. Alternatively, this can be done per class using the # \nosubgrouping command. # The default value is: YES. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) # instead of on a separate page (for HTML and Man pages) or section (for LaTeX # and RTF). # # Note that this feature does not work in combination with # SEPARATE_MEMBER_PAGES. # The default value is: NO. INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # with only public data fields or simple typedef fields will be shown inline in # the documentation of the scope in which they are defined (i.e. file, # namespace, or group documentation), provided this scope is documented. If set # to NO, structs, classes, and unions are shown on a separate page (for HTML and # Man pages) or section (for LaTeX and RTF). # The default value is: NO. INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically be # useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. # The default value is: NO. TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small # doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 # symbols. At the end of a run doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 # The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use # during processing. When set to 0 doxygen will based this on the number of # cores available in the system. You can set it explicitly to a value larger # than 0 to get more control over the balance between CPU load and processing # speed. At this moment only the input processing can be done using multiple # threads. Since this is still an experimental feature the default is set to 1, # which efficively disables parallel processing. Please report any issues you # encounter. Generating dot graphs in parallel is controlled by the # DOT_NUM_THREADS setting. # Minimum value: 0, maximum value: 32, default value: 1. NUM_PROC_THREADS = 1 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. # Note: This will also disable the warnings about undocumented members that are # normally produced when WARNINGS is set to YES. # The default value is: NO. EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = NO # If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual # methods of a class will be included in the documentation. # The default value is: NO. EXTRACT_PRIV_VIRTUAL = NO # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES, all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined # locally in source files will be included in the documentation. If set to NO, # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = NO # This flag is only useful for Objective-C code. If set to YES, local methods, # which are defined in the implementation section but not in the interface are # included in the documentation. If set to NO, only methods in the interface are # included. # The default value is: NO. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base name of # the file that contains the anonymous namespace. By default anonymous namespace # are hidden. # The default value is: NO. EXTRACT_ANON_NSPACES = NO # If this flag is set to YES, the name of an unnamed parameter in a declaration # will be determined by the corresponding definition. By default unnamed # parameters remain unnamed in the output. # The default value is: YES. RESOLVE_UNNAMED_PARAMS = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_MEMBERS = YES # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option # has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = YES # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # declarations. If set to NO, these declarations will be included in the # documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any # documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. INTERNAL_DOCS = NO # With the correct setting of option CASE_SENSE_NAMES doxygen will better be # able to match the capabilities of the underlying filesystem. In case the # filesystem is case sensitive (i.e. it supports files in the same directory # whose names only differ in casing), the option must be set to YES to properly # deal with such files in case they appear in the input. For filesystems that # are not case sensitive the option should be be set to NO to properly deal with # output files written for symbols that only differ in casing, such as for two # classes, one named CLASS and the other named Class, and to also support # references to files without having to specify the exact matching casing. On # Windows (including Cygwin) and MacOS, users should typically set this option # to NO, whereas on Linux or other Unix flavors it should typically be set to # YES. # The default value is: system dependent. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO # If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will # append additional text to a page's title, such as Class Reference. If set to # YES the compound reference will be hidden. # The default value is: NO. HIDE_COMPOUND_REFERENCE= NO # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. SHOW_INCLUDE_FILES = NO # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader # which file to include in order to use the member. # The default value is: NO. SHOW_GROUPED_MEMB_INC = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief # member documentation. # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting # detailed member documentation. # The default value is: NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will # be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the alphabetical # list. # The default value is: NO. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between # the prototype and the implementation of a member function even if there is # only one candidate or it is obvious which candidate to choose by doing a # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still # accept a match between prototype and implementation in such cases. # The default value is: NO. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo # list. This list is created by putting \todo commands in the documentation. # The default value is: YES. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test # list. This list is created by putting \test commands in the documentation. # The default value is: YES. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if ... \endif and \cond # ... \endcond blocks. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the # documentation. If the initializer consists of more lines than specified here # it will be hidden. Use a value of 0 to hide initializers completely. The # appearance of the value of individual variables and macros / defines can be # controlled using \showinitializer or \hideinitializer command in the # documentation regardless of this setting. # Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at # the bottom of the documentation of classes and structs. If set to YES, the # list will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command command input-file, where command is the value of the # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml # will be used as the name of the layout file. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool # to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated to # standard output by doxygen. If QUIET is set to YES this implies that the # messages are off. # The default value is: NO. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error (stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. # The default value is: YES. WARNINGS = YES # If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some parameters # in a documented function, or documenting parameters that don't exist or using # markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO, doxygen will only warn about wrong or incomplete # parameter documentation, but not about the absence of documentation. If # EXTRACT_ALL is set to YES then this flag will automatically be disabled. # The default value is: NO. WARN_NO_PARAMDOC = NO # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when # a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS # then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but # at the end of the doxygen process doxygen will return with a non-zero status. # Possible values are: NO, YES and FAIL_ON_WARNINGS. # The default value is: NO. WARN_AS_ERROR = NO # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard # error (stderr). WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. INPUT = @INPUT@ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: # https://www.gnu.org/software/libiconv/) for the list of possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # # Note the list of default checked file patterns might differ from the list of # default file extension mappings. # # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, # *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), # *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, *.vhdl, # *.ucf, *.qsf and *.ice. FILE_PATTERNS = # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. EXAMPLE_PATTERNS = * # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or directories # that contain images that are to be included in the documentation (see the # \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: # # # # where is the value of the INPUT_FILTER tag, and is the # name of an input file. Doxygen will then use the output that the filter # program writes to standard output. If FILTER_PATTERNS is specified, this tag # will be ignored. # # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: pattern=filter # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and # it is also possible to disable source filtering for a specific pattern using # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will be # generated. Documented entities will be cross-referenced with these sources. # # Note: To get rid of all source code in the generated output, make sure that # also VERBATIM_HEADERS is set to NO. # The default value is: NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. # The default value is: NO. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # entity all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. REFERENCES_LINK_SOURCE = YES # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the # source code will show a tooltip with additional information such as prototype, # brief description and links to the definition and documentation. Since this # will make the HTML file larger and loading of large files a bit slower, you # can opt to disable this feature. # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system # (see https://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global # - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). # # The result: instead of the source browser generated by doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a # verbatim copy of the header file for each class for which an include is # specified. Set to NO to disable this. # See also: Section \class. # The default value is: YES. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all # compounds will be generated. Enable this if the project contains a lot of # classes, structs, unions or interfaces. # The default value is: YES. ALPHABETICAL_INDEX = YES # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored # while generating the index headers. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = NO # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). # The default value is: .html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank doxygen will generate a # standard header. # # To get valid HTML the header file that includes any scripts and style sheets # that doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a # default header using # doxygen -w html new_header.html new_footer.html new_stylesheet.css # YourConfigFile # and then modify the file new_header.html. See also section "Doxygen usage" # for information on how to generate the default header that doxygen normally # uses. # Note: The header is subject to change so you typically have to regenerate the # default header when upgrading to a newer version of doxygen. For a description # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard # footer. See HTML_HEADER for more information on how to generate a default # footer and what special commands can be used inside the footer. See also # section "Doxygen usage" for information on how to generate the default footer # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of # the HTML output. If left blank doxygen will generate a default style sheet. # See also section "Doxygen usage" for information on how to generate the style # sheet that doxygen normally uses. # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as # it is more robust and this tag (HTML_STYLESHEET) will in the future become # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefore more robust against future updates. # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the # list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that the # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see # https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use grayscales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 # gradually make the output lighter, whereas values above 100 make the output # darker. The value divided by 100 is the actual gamma applied, so 80 represents # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not # change the gamma. # Minimum value: 40, maximum value: 240, default value: 80. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via JavaScript. If disabled, the navigation index will # consists of multiple levels of tabs that are statically embedded in every HTML # page. Disable this option to support browsers that do not have JavaScript, # like the Qt help browser. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_MENUS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = NO # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to # such a level that at most the specified number of entries are visible (unless # a fully collapsed tree already exceeds this amount). So setting the number of # entries 1 will produce a full collapsed tree by default. 0 is a special value # representing an infinite number of entries and will result in a full expanded # tree by default. # Minimum value: 0, maximum value: 9999, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development # environment (see: # https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To # create a documentation set, doxygen will generate a Makefile in the HTML # output directory. Running make will produce the docset in that directory and # running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy # genXcode/_index.html for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_DOCSET = NO # This tag determines the name of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # The default value is: Doxygen generated docs. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_BUNDLE_ID = org.doxygen.Project # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # (see: # https://www.microsoft.com/en-us/download/details.aspx?id=21138) on Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old # Windows help format (.hlp) on all Windows platforms in the future. Compressed # HTML files also contain an index, a table of contents, and you can search for # words in the documentation. The HTML workshop also contains a viewer for # compressed HTML files. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO # The CHM_FILE tag can be used to specify the file name of the resulting .chm # file. You can add a path in front of the file if the result should not be # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler (hhc.exe). If non-empty, # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated # (YES) or that it should be included in the main .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO # The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated # (YES) or a normal table of contents (NO) in the .chm file. Furthermore it # enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members to # the table of contents of the HTML help documentation and to the tree view. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # (.qch) of the generated HTML documentation. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace # (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual # Folders (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom # Filters (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom # Filters (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location (absolute path # including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to # run qhelpgenerator on the generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To # install this plugin and make it available under the help contents menu in # Eclipse, the contents of the directory containing the HTML and XML files needs # to be copied into the plugins directory of eclipse. The name of the directory # within the plugins directory should be the same as the ECLIPSE_DOC_ID value. # After copying Eclipse needs to be restarted before the help appears. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO # A unique identifier for the Eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have this # name. Each documentation set should have its own identifier. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.doxygen.Project # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top # of each HTML page. A value of NO enables the index and the value YES disables # it. Since the tabs in the index contain the same information as the navigation # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag # value is set to YES, a side panel will be generated containing a tree-like # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can # further fine-tune the look of the index. As an example, the default style # sheet generated by doxygen has an example that shows how to put an image at # the root of the tree instead of the PROJECT_NAME. Since the tree basically has # the same information as the tab index, you could consider setting # DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 # If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO # If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg # tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see # https://inkscape.org) to generate formulas as SVG images instead of PNGs for # the HTML output. These images will generally look nicer at scaled resolutions. # Possible values are: png (the default) and svg (looks nicer but requires the # pdf2svg or inkscape tool). # The default value is: png. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FORMULA_FORMAT = png # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML # output directory to force them to be regenerated. # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands # to create new LaTeX commands to be used in formulas as building blocks. See # the section "Including formulas" for details. FORMULA_MACROFILE = # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # https://www.mathjax.org) which uses client side JavaScript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. USE_MATHJAX = NO # When MathJax is enabled you can set the default output format to be used for # the MathJax output. See the MathJax site (see: # http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. # Possible values are: HTML-CSS (which is slower, but has the best # compatibility), NativeMML (i.e. MathML) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_FORMAT = HTML-CSS # When MathJax is enabled you need to specify the location relative to the HTML # output directory using the MATHJAX_RELPATH option. The destination directory # should contain the MathJax.js script. For instance, if the mathjax directory # is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from https://www.mathjax.org before deployment. # The default value is: https://cdn.jsdelivr.net/npm/mathjax@2. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site # (see: # http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. # For large projects the javascript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use + S # (what the is depends on the OS and browser, but it is typically # , /