4 |
5 |
6 | Page Redirection
7 |
8 |
9 | If you are not redirected automatically, follow the link to the documentation
10 |
11 |
--------------------------------------------------------------------------------
/.github/workflows/githubci.yml:
--------------------------------------------------------------------------------
1 | name: Github Arduino Library CI
2 |
3 | on: [push, pull_request]
4 |
5 | jobs:
6 | build:
7 | runs-on: ubuntu-latest
8 |
9 | steps:
10 | - uses: actions/checkout@v4
11 | - uses: actions/setup-python@v5
12 | with:
13 | python-version: '3.x'
14 | - name: pre-install
15 | run: bash ./actions_install.sh
16 | - name: test platforms
17 | run: |
18 | python3 build_platform.py uno leonardo mega2560 zero esp8266 esp32 pico_rp2040 feather_m4_express feather_rp2350
19 |
20 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: python
2 |
3 | dist: focal
4 |
5 | cache:
6 | directories:
7 | - ~/arduino_ide
8 |
9 | git:
10 | depth: false
11 | quiet: true
12 |
13 |
14 | before_install:
15 | - source $TRAVIS_BUILD_DIR/install.sh
16 |
17 | script:
18 | - build_platform nrf52840
19 | - build_platform esp32
20 | - build_platform uno
21 | - build_platform leonardo
22 | - build_platform zero
23 | - build_platform esp8266
24 | - build_platform m4
25 |
26 | notifications:
27 | email:
28 | on_success: change
29 | on_failure: change
30 |
--------------------------------------------------------------------------------
/assets/doxygen_badge.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/example_actions.yml:
--------------------------------------------------------------------------------
1 | name: Arduino Library CI
2 |
3 | on: [pull_request, push, repository_dispatch]
4 |
5 | jobs:
6 | build:
7 | runs-on: ubuntu-latest
8 |
9 | steps:
10 | - uses: actions/setup-python@v4
11 | with:
12 | python-version: '3.x'
13 | - uses: actions/checkout@v3
14 | - uses: actions/checkout@v3
15 | with:
16 | repository: adafruit/ci-arduino
17 | path: ci
18 |
19 | - name: Install the prerequisites
20 | run: bash ci/actions_install.sh
21 |
22 | - name: Check for correct code formatting with clang-format
23 | run: python3 ci/run-clang-format.py -e "ci/*" -e "bin/*" -r .
24 |
25 | - name: Check for correct documentation with doxygen
26 | env:
27 | GH_REPO_TOKEN: ${{ secrets.GH_REPO_TOKEN }}
28 | PRETTYNAME : "Adafruit Arduino Library"
29 | run: bash ci/doxy_gen_and_deploy.sh
30 |
31 | - name: Test the code on supported platforms
32 | run: python3 ci/build_platform.py main_platforms
33 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Adafruit Industries
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/example_travis.yml:
--------------------------------------------------------------------------------
1 | language: c
2 | sudo: false
3 | cache:
4 | directories:
5 | - ~/arduino_ide
6 | - ~/.arduino15/packages/
7 | git:
8 | depth: false
9 | quiet: true
10 | addons:
11 | apt:
12 | sources:
13 | - llvm-toolchain-trusty-5.0
14 | - key_url: 'http://apt.llvm.org/llvm-snapshot.gpg.key'
15 | packages:
16 | - python3-pip
17 | - python3-wheel
18 | - clang-format-5.0
19 | env:
20 | global:
21 | # - ARDUINO_IDE_VERSION="1.8.10"
22 | - PRETTYNAME="Adafruit FT6206 Arduino Library"
23 | # Optional, will default to "$TRAVIS_BUILD_DIR/Doxyfile"
24 | # - DOXYFILE: $TRAVIS_BUILD_DIR/Doxyfile
25 |
26 | before_install:
27 | - source <(curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/install.sh)
28 | - curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/run-clang-format.py > run-clang-format.py
29 |
30 | install:
31 | - arduino --install-library "Adafruit ILI9341","Adafruit GFX Library"
32 |
33 | script:
34 | - python run-clang-format.py -r .
35 | - build_main_platforms
36 |
37 | # Generate and deploy documentation
38 | after_success:
39 | - source <(curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/library_check.sh)
40 | - source <(curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/doxy_gen_and_deploy.sh)
41 |
--------------------------------------------------------------------------------
/examples/Blink/Blink.ino:
--------------------------------------------------------------------------------
1 | /*
2 | Blink
3 |
4 | Turns an LED on for one second, then off for one second, repeatedly.
5 |
6 | Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
7 | it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
8 | the correct LED pin independent of which board is used.
9 | If you want to know what pin the on-board LED is connected to on your Arduino
10 | model, check the Technical Specs of your board at:
11 | https://www.arduino.cc/en/Main/Products
12 |
13 | modified 8 May 2014
14 | by Scott Fitzgerald
15 | modified 2 Sep 2016
16 | by Arturo Guadalupi
17 | modified 8 Sep 2016
18 | by Colby Newman
19 |
20 | This example code is in the public domain.
21 |
22 | http://www.arduino.cc/en/Tutorial/Blink
23 | */
24 |
25 | // the setup function runs once when you press reset or power the board
26 | void setup() {
27 | // initialize digital pin LED_BUILTIN as an output.
28 | pinMode(LED_BUILTIN, OUTPUT);
29 | }
30 |
31 | // the loop function runs over and over again forever
32 | void loop() {
33 | digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
34 | delay(1000); // wait for a second
35 | digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
36 | delay(1000); // wait for a second
37 | }
38 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | Thank you for creating a pull request to contribute to Adafruit's GitHub code!
2 | Before you open the request please review the following guidelines and tips to
3 | help it be more easily integrated:
4 |
5 | - **Describe the scope of your change--i.e. what the change does and what parts
6 | of the code were modified.** This will help us understand any risks of integrating
7 | the code.
8 |
9 | - **Describe any known limitations with your change.** For example if the change
10 | doesn't apply to a supported platform of the library please mention it.
11 |
12 | - **Please run any tests or examples that can exercise your modified code.** We
13 | strive to not break users of the code and running tests/examples helps with this
14 | process.
15 |
16 | Thank you again for contributing! We will try to test and integrate the change
17 | as soon as we can, but be aware we have many GitHub repositories to manage and
18 | can't immediately respond to every request. There is no need to bump or check in
19 | on a pull request (it will clutter the discussion of the request).
20 |
21 | Also don't be worried if the request is closed or not integrated--sometimes the
22 | priorities of Adafruit's GitHub code (education, ease of use) might not match the
23 | priorities of the pull request. Don't fret, the open source community thrives on
24 | forks and GitHub makes it easy to keep your changes in a forked repo.
25 |
26 | After reviewing the guidelines above you can delete this text from the pull request.
27 |
--------------------------------------------------------------------------------
/actions_install.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -e
4 |
5 | pip3 install clint pyserial setuptools adafruit-nrfutil
6 |
7 | # Only install stuff if it is really missing. This should never be executed,
8 | # as the default image contains clang-format v10, v11 (default) and v12.
9 | # https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-Readme.md#language-and-runtime
10 | if [ ! -f /usr/bin/clang-format ]; then
11 | sudo gem install apt-spy2
12 | sudo apt-spy2 check
13 | sudo apt-spy2 fix --commit
14 |
15 | # after selecting a specific mirror, we need to run 'apt-get update'
16 | sudo apt-get -o Acquire::Retries=3 update
17 |
18 | sudo apt-get -o Acquire::Retries=3 install -y clang-format-8 libllvm8
19 |
20 | sudo ln -s /usr/bin/clang-format-8 /usr/bin/clang-format
21 | fi
22 |
23 | # make all our directories we need for files and libraries
24 | mkdir ${HOME}/.arduino15
25 | mkdir ${HOME}/.arduino15/packages
26 | mkdir ${HOME}/Arduino
27 | mkdir ${HOME}/Arduino/libraries
28 |
29 | # install arduino IDE
30 | export PATH=$PATH:$GITHUB_WORKSPACE/bin
31 | echo $GITHUB_WORKSPACE/bin >> $GITHUB_PATH
32 | curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh
33 | arduino-cli config init > /dev/null
34 | arduino-cli core update-index > /dev/null
35 |
36 | # warn if this library does not have arduino-library tag in its topic
37 | case "$GITHUB_REPOSITORY" in
38 | (*/ci-arduino|*/Adafruit_Learning_System_Guides) ;;
39 | (*)
40 | repo_topics=$(curl -f --request GET --url "https://api.github.com/repos/$GITHUB_REPOSITORY" || echo '{"topics":[]}')
41 | repo_topics=$(echo $repo_topics | jq -r '.topics[]' )
42 | if [[ ! $repo_topics =~ "arduino-library" ]]; then
43 | echo "::warning::arduino-library is not found in this repo topics. Please add this tag in repo About"
44 | fi
45 | esac
46 |
47 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | Thank you for opening an issue on an Adafruit Arduino library repository. To
2 | improve the speed of resolution please review the following guidelines and
3 | common troubleshooting steps below before creating the issue:
4 |
5 | - **Do not use GitHub issues for troubleshooting projects and issues.** Instead use
6 | the forums at http://forums.adafruit.com to ask questions and troubleshoot why
7 | something isn't working as expected. In many cases the problem is a common issue
8 | that you will more quickly receive help from the forum community. GitHub issues
9 | are meant for known defects in the code. If you don't know if there is a defect
10 | in the code then start with troubleshooting on the forum first.
11 |
12 | - **If following a tutorial or guide be sure you didn't miss a step.** Carefully
13 | check all of the steps and commands to run have been followed. Consult the
14 | forum if you're unsure or have questions about steps in a guide/tutorial.
15 |
16 | - **For Arduino projects check these very common issues to ensure they don't apply**:
17 |
18 | - For uploading sketches or communicating with the board make sure you're using
19 | a **USB data cable** and **not** a **USB charge-only cable**. It is sometimes
20 | very hard to tell the difference between a data and charge cable! Try using the
21 | cable with other devices or swapping to another cable to confirm it is not
22 | the problem.
23 |
24 | - **Be sure you are supplying adequate power to the board.** Check the specs of
25 | your board and plug in an external power supply. In many cases just
26 | plugging a board into your computer is not enough to power it and other
27 | peripherals.
28 |
29 | - **Double check all soldering joints and connections.** Flakey connections
30 | cause many mysterious problems. See the [guide to excellent soldering](https://learn.adafruit.com/adafruit-guide-excellent-soldering/tools) for examples of good solder joints.
31 |
32 | - **Ensure you are using an official Arduino or Adafruit board.** We can't
33 | guarantee a clone board will have the same functionality and work as expected
34 | with this code and don't support them.
35 |
36 | If you're sure this issue is a defect in the code and checked the steps above
37 | please fill in the following fields to provide enough troubleshooting information.
38 | You may delete the guideline and text above to just leave the following details:
39 |
40 | - Arduino board: **INSERT ARDUINO BOARD NAME/TYPE HERE**
41 |
42 | - Arduino IDE version (found in Arduino -> About Arduino menu): **INSERT ARDUINO
43 | VERSION HERE**
44 |
45 | - List the steps to reproduce the problem below (if possible attach a sketch or
46 | copy the sketch code in too): **LIST REPRO STEPS BELOW**
47 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Arduino CI Scripts
2 |
3 | This repo contains various scripts and tools related to running continuous integration (CI) checks on Arduino Library Repos. The operations include:
4 |
5 | * checking formatting using [clang-format](https://clang.llvm.org/docs/ClangFormat.html),
6 | * generating documentation from source comments using [Doxygen](https://www.doxygen.nl/), and
7 | * building each example in the library for selected targets.
8 |
9 | There is an associated guide available here:
10 | https://learn.adafruit.com/the-well-automated-arduino-library/
11 |
12 | ## Adding GitHub Actions to Repo
13 |
14 | To run these continuous integration checks on each push, pull-request or [repository dispatch](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#create-a-repository-dispatch-event) using [GitHub actions](https://github.com/features/actions):
15 |
16 | * Create a folder named `.github/worflows` in the root of the repo.
17 | * Copy `example_actions.yml` into the above directory and rename it `githubci.yml`.
18 | * Edit `githubci.yml` and change `PRETTYNAME` to the library repo name. Optionally, delete or comment out steps (using the `#` character), you don't want to include.
19 | * Here's an example: [Adafruit_BME280_Library](https://github.com/adafruit/Adafruit_BME280_Library/blob/master/.github/workflows/githubci.yml)
20 |
21 | ## Controlling Test Behavior
22 |
23 | The `build_platform.py` script is used to test each `.ino` example in the repo for selected build platforms. The [`ALL_PLATFORMS`](ci-arduino/blob/master/build_platform.py#L54) dictionary contains a listing of all available platforms and selected platform groups. By default, `main_platforms` is used. To select a specific platform or group, replace `main_platforms` in [`githubci.yml`](`example_actions.yml`) with the group or platform name.
24 |
25 | Additionally, [UF2 files](https://github.com/microsoft/uf2) of the compiled sketches can be generated for supported platforms.
26 |
27 | ### Fine tuning test selection
28 |
29 | The script behavior can be controlled using special filenames:
30 |
31 | * `.PLATFORM_ID.test.skip` - Skip the specified platform. All others are tested.
32 | * `.PLATFORM_ID.test.only` - Test the specified platform. All others are skipped.
33 | * `.PLATFORM_ID.generate` - Generate UF2 of sketch for specified platform (if supported).
34 |
35 | These are just empty files placed in an example folder. Replace `PLATFORM_ID` in the name with the key from [`ALL_PLATFORMS`](ci-arduino/blob/master/build_platform.py#L54). `metro_m0` from the following line in `build_platform.py`, for example:
36 |
37 | ```python
38 | "metro_m0" : ["adafruit:samd:adafruit_metro_m0", "0x68ed2b88", None],
39 | ```
40 |
41 | You can use several `.PLATFORM_ID.test.skip` or `.PLATFORM_ID.test.only` to exclude or include multiple platforms. For example:
42 |
43 | * To **skip** testing on ESP8266, add a file named `.esp8266.test.skip`
44 | * To test **only** the Arduino UNO, add a file named `.uno.test.only`
45 | * To skip all and test **nothing**, add a file named `.none.test.only`
46 | * To generate UF2s for PyPortal, add a file named `.pyportal.generate`
47 |
48 | ### Dependencies
49 |
50 | Any library dependencies included in the [`library.properties`](https://arduino.github.io/arduino-cli/0.19/library-specification/#libraryproperties-file-format) are automatically installed before the tests are started. To install additional dependencies (e.g., those required for some examples but not the library itself) using [`arduino-cli`](https://arduino.github.io/arduino-cli/0.19/commands/arduino-cli_lib_install/), you could add additional steps to the `githubci.yml` file. For example:
51 |
52 | ```yaml
53 | - name: Set configuration
54 | run: arduino-cli config set library.enable_unsafe_install true
55 |
56 | - name: Install test dependencies
57 | run: arduino-cli lib install --git-url https://github.com/arduino-libraries/Servo --git-url https://github.com/arduino-libraries/Ethernet
58 | ```
59 |
60 | Note: you'll only need to enable the [`enable_unsafe_install`](https://arduino.github.io/arduino-cli/0.32/configuration/#configuration-keys) option if you want to identify libraries using urls. This isn't necessary when using the library name.
61 |
62 | ## Formatting Check with Clang
63 |
64 | The `run-clang-format.py` script is used to run [clang-format](https://clang.llvm.org/docs/ClangFormat.html) and check file formatting.
65 | See [the guide](https://learn.adafruit.com/the-well-automated-arduino-library/formatting-with-clang-format) for details on installing `clang-format` to run formatting locally.
66 | Even a single extra white space can cause the CI to fail on formatting.
67 | You can typically just let clang do its thing and edit files in place using:
68 |
69 | ```
70 | clang-format -i File_To_Format.cpp
71 | ```
72 |
73 | ## Documentation with Doxygen
74 |
75 | The `doxy_gen_and_deploy.sh` script uses [Doxygen](https://www.doxygen.nl/) to generate and deploy documentation
76 | for the library. Any issues, like missing documentation, will cause the CI to fail.
77 | See the [guide](https://learn.adafruit.com/the-well-automated-arduino-library/doxygen) for details on installing and running Doxygen locally. The guide also has some
78 | [tips](https://learn.adafruit.com/the-well-automated-arduino-library/doxygen-tips) on basic usage of Doxygen markup within your code.
79 |
80 | ### Preserving Folders in Documentation Branch
81 |
82 | By default, the documentation deployment script cleans the gh-pages branch before adding new documentation. If you need to preserve certain folders (like custom web interfaces), you can set the `PRESERVE_FOLDERS` environment variable in your workflow:
83 |
84 | ```yaml
85 | - name: doxygen
86 | env:
87 | GH_REPO_TOKEN: ${{ secrets.GH_REPO_TOKEN }}
88 | PRETTYNAME : "My Arduino Library"
89 | PRESERVE_FOLDERS: "webserial,assets"
90 | run: bash ci/doxy_gen_and_deploy.sh
91 | ```
92 |
93 | This will preserve the listed folders (comma-separated) during the documentation generation process.
94 |
--------------------------------------------------------------------------------
/doxy_gen_and_deploy.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | ################################################################################
3 | # Title : doxy_gen_and_deploy.sh
4 | # Date modified : 2018/01/14
5 | # Notes :
6 | __AUTHOR__="Jeroen de Bruijn, modified by ladyada"
7 | # Preconditions:
8 | # - Doxygen configuration file must have the destination directory empty and
9 | # source code directory with a $(TRAVIS_BUILD_DIR) prefix.
10 | # - An gh-pages branch should already exist. See below for mor info on hoe to
11 | # create a gh-pages branch.
12 | #
13 | # Required global variables:
14 | # - TRAVIS_BUILD_NUMBER : The number of the current build.
15 | # - TRAVIS_COMMIT : The commit that the current build is testing.
16 | # - GH_REPO_TOKEN : Secure token to the github repository.
17 | # - TRAVIS_REPO_SLUG : The author/url slug
18 | # Optional global variables:
19 | # - DOXYFILE : The Doxygen configuration file.
20 | # - PRETTYNAME : A string name of the project (for the doxy headers)
21 | # - PRESERVE_FOLDERS : Comma-separated list of folders to preserve during cleanup
22 | #
23 | # For information on how to encrypt variables for Travis CI please go to
24 | # https://docs.travis-ci.com/user/environment-variables/#Encrypted-Variables
25 | # or https://gist.github.com/vidavidorra/7ed6166a46c537d3cbd2
26 | # For information on how to create a clean gh-pages branch from the master
27 | # branch, please go to https://gist.github.com/vidavidorra/846a2fc7dd51f4fe56a0
28 | #
29 | # This script will generate Doxygen documentation and push the documentation to
30 | # the gh-pages branch of a repository
31 | # Before this script is used there should already be a gh-pages branch in the
32 | # repository.
33 | #
34 | ################################################################################
35 |
36 | ################################################################################
37 | ##### Setup this script and get the current gh-pages branch. #####
38 | echo 'Setting up the script...'
39 | # Exit with nonzero exit code if anything fails
40 | set -e
41 |
42 | export IS_PULL=0
43 |
44 | if [[ -z "${TRAVIS_BUILD_DIR}" ]]; then
45 | export BUILD_DIR=${GITHUB_WORKSPACE}
46 | export AUTH=${GITHUB_ACTOR}:${GH_REPO_TOKEN}
47 | export REPO_SLUG=${GITHUB_REPOSITORY}
48 | export COMMIT_SHA1=${GITHUB_SHA}
49 | export BUILD_ID="GitHub Actions run: ${GITHUB_RUN_ID}"
50 | if [ "$GITHUB_EVENT_NAME" == "pull_request" ]; then
51 | export IS_PULL=1
52 | fi
53 | else
54 | export BUILD_DIR=${TRAVIS_BUILD_DIR}
55 | export AUTH=${GH_REPO_TOKEN}
56 | export REPO_SLUG=${TRAVIS_REPO_SLUG}
57 | export COMMIT_SHA1=${TRAVIS_COMMIT}
58 | export BUILD_ID="Travis build: ${TRAVIS_BUILD_NUMBER}"
59 | if [ "${TRAVIS_PULL_REQUEST}" != "false" ]; then
60 | export IS_PULL=1
61 | fi
62 | fi
63 |
64 | cd $BUILD_DIR
65 |
66 | # The default version of doxygen is too old so we'll use a modern version
67 | wget -q https://cdn-learn.adafruit.com/assets/assets/000/067/405/original/doxygen-1.8.13.linux.bin.tar.gz
68 | tar -xf doxygen-1.8.13.linux.bin.tar.gz
69 | mv doxygen-1.8.13/bin/doxygen .
70 | chmod +x doxygen
71 |
72 | # Create a clean working directory for this script.
73 | mkdir code_docs
74 | cd code_docs
75 |
76 | # Get the current gh-pages branch
77 | git clone -b gh-pages https://github.com/${REPO_SLUG}.git
78 | export REPO_NAME=${REPO_SLUG#*/}
79 | cd ${REPO_NAME}
80 |
81 | ##### Configure git.
82 | # Set the push default to simple i.e. push only the current branch.
83 | git config --global push.default simple
84 | # Pretend to be an user called Doxygen CI.
85 | git config user.name "Doxygen CI"
86 | git config user.email "ci-arduino@invalid"
87 |
88 | # Check if PRESERVE_FOLDERS is set and back them up
89 | if [ -n "$PRESERVE_FOLDERS" ]; then
90 | echo "Preserving folders: $PRESERVE_FOLDERS"
91 | mkdir -p /tmp/preserved
92 | # Move preserved folders to temp dir
93 | for folder in ${PRESERVE_FOLDERS//,/ }; do
94 | if [ -d "$folder" ]; then
95 | echo "Backing up folder: $folder"
96 | cp -r "$folder" /tmp/preserved/
97 | fi
98 | done
99 | fi
100 |
101 | # Remove everything currently in the gh-pages branch.
102 | # GitHub is smart enough to know which files have changed and which files have
103 | # stayed the same and will only update the changed files. So the gh-pages branch
104 | # can be safely cleaned, and it is sure that everything pushed later is the new
105 | # documentation.
106 | # If there's no index.html (forwarding stub) grab our default one
107 | shopt -s extglob
108 | if [ ! -f index.html ]; then
109 | rm -rf *
110 | curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/doxy_index.html > index.html
111 | else
112 | # Don't fail if there's no files in the directory, just keep going!
113 | rm -r -- !(index.html) || true
114 | fi
115 |
116 | # Restore preserved folders if they were backed up
117 | if [ -n "$PRESERVE_FOLDERS" ]; then
118 | for folder in ${PRESERVE_FOLDERS//,/ }; do
119 | if [ -d "/tmp/preserved/$folder" ]; then
120 | echo "Restoring folder: $folder"
121 | cp -r "/tmp/preserved/$folder" ./
122 | fi
123 | done
124 | fi
125 |
126 | # Need to create a .nojekyll file to allow filenames starting with an underscore
127 | # to be seen on the gh-pages site. Therefore creating an empty .nojekyll file.
128 | # Presumably this is only needed when the SHORT_NAMES option in Doxygen is set
129 | # to NO, which it is by default. So creating the file just in case.
130 | echo "" > .nojekyll
131 |
132 | ################################################################################
133 | ##### Generate the Doxygen code documentation and log the output. #####
134 | echo 'Generating Doxygen code documentation...'
135 | # Redirect both stderr and stdout to the log file AND the console.
136 |
137 | export DOXYFILE=${BUILD_DIR}/Doxyfile
138 | if [ ! -f ${DOXYFILE} ]; then
139 | echo "Grabbing default Doxyfile"
140 |
141 | curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/Doxyfile.default > ${DOXYFILE}
142 | #sed -i "s/^INPUT .*/INPUT = ..\/../" ${DOXYFILE}
143 |
144 | # If we can, fix up the name
145 | if [ ! -z "$PRETTYNAME" ]; then
146 | sed -i "s/^PROJECT_NAME.*/PROJECT_NAME = \"${PRETTYNAME}\"/" ${DOXYFILE}
147 | fi
148 | fi
149 |
150 | sed -i "s;^HTML_OUTPUT .*;HTML_OUTPUT = code_docs/${REPO_NAME}/html;" ${DOXYFILE}
151 | cd $BUILD_DIR
152 |
153 | if [ ! -z $1 ]
154 | then
155 | # Print out doxygen warnings in red, use specified path (for when everything is in src)
156 | ( cat $DOXYFILE; echo "INPUT=${BUILD_DIR}/$1" ) | ${BUILD_DIR}/doxygen - 2>&1 | tee foo.txt > >(while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done)
157 | else
158 | # Print out doxygen warnings in red, use default path
159 | ${BUILD_DIR}/doxygen $DOXYFILE 2>&1 | tee foo.txt > >(while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done)
160 | fi
161 |
162 | # if any warnings, bail!
163 | if [ -s foo.txt ]; then exit 1 ; fi
164 |
165 | rm foo.txt
166 |
167 | # If we're a pull request, don't push docs to github!
168 | if [ ${IS_PULL} == 1 ]; then
169 | echo "This is a Pull Request, we're done!"
170 | exit 0
171 | else
172 | echo "This is a Commit, Uploading documentation..."
173 | fi
174 |
175 | cd code_docs/${REPO_NAME}
176 |
177 | ################################################################################
178 | ##### Upload the documentation to the gh-pages branch of the repository. #####
179 | # Only upload if Doxygen successfully created the documentation.
180 | # Check this by verifying that the html directory and the file html/index.html
181 | # both exist. This is a good indication that Doxygen did it's work.
182 | if [ -d "html" ] && [ -f "html/index.html" ]; then
183 |
184 | case "$GITHUB_REF_NAME" in
185 | (main|master)
186 | echo 'Uploading documentation to the gh-pages branch...'
187 | # Add everything in this directory (the Doxygen code documentation) to the
188 | # gh-pages branch.
189 | # GitHub is smart enough to know which files have changed and which files have
190 | # stayed the same and will only update the changed files.
191 | echo 'Adding all files'
192 | git add --all
193 |
194 | if [ -n "$(git status --porcelain)" ]; then
195 | echo "Changes to commit"
196 | else
197 | echo "No changes to commit"
198 | exit 0
199 | fi
200 |
201 | # Commit the added files with a title and description containing the Travis CI
202 | # build number and the GitHub commit reference that issued this build.
203 | echo 'Git committing'
204 | git commit \
205 | -m "Deploy docs to GitHub Pages from commit ${COMMIT_SHA1:0:10}" \
206 | -m "Commit: ${COMMIT_SHA1}"$'\n'"${BUILD_ID}"
207 |
208 | # Force push to the remote gh-pages branch.
209 | # The output is redirected to /dev/null to hide any sensitive credential data
210 | # that might otherwise be exposed.
211 | echo 'Git pushing'
212 | git push --force "https://${AUTH}@github.com/${REPO_SLUG}.git" > /dev/null 2>&1
213 | ;;
214 | (*)
215 | echo 'Not the main branch, not pushing documentation'
216 | esac
217 | else
218 | echo '' >&2
219 | echo 'Warning: No documentation (html) files have been found!' >&2
220 | echo 'Warning: Not going to push the documentation to GitHub!' >&2
221 | exit 1
222 | fi
223 |
--------------------------------------------------------------------------------
/run-clang-format.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | """A wrapper script around clang-format, suitable for linting multiple files
3 | and to use for continuous integration.
4 |
5 | This is an alternative API for the clang-format command line.
6 | It runs over multiple files and directories in parallel.
7 | A diff output is produced and a sensible exit code is returned.
8 |
9 | """
10 |
11 | from __future__ import print_function, unicode_literals
12 |
13 | import argparse
14 | import codecs
15 | import difflib
16 | import fnmatch
17 | import io
18 | import multiprocessing
19 | import os
20 | import signal
21 | import subprocess
22 | import sys
23 | import traceback
24 |
25 | from functools import partial
26 |
27 | DEFAULT_EXTENSIONS = 'c,h,C,H,cpp,hpp,cc,hh,c++,h++,cxx,hxx'
28 |
29 |
30 | class ExitStatus:
31 | SUCCESS = 0
32 | DIFF = 1
33 | TROUBLE = 2
34 |
35 |
36 | def list_files(files, recursive=False, extensions=None, exclude=None):
37 | if extensions is None:
38 | extensions = []
39 | if exclude is None:
40 | exclude = []
41 |
42 | out = []
43 | for file in files:
44 | if recursive and os.path.isdir(file):
45 | for dirpath, dnames, fnames in os.walk(file):
46 | fpaths = [os.path.join(dirpath, fname) for fname in fnames]
47 | for pattern in exclude:
48 | # os.walk() supports trimming down the dnames list
49 | # by modifying it in-place,
50 | # to avoid unnecessary directory listings.
51 | dnames[:] = [
52 | x for x in dnames
53 | if
54 | not fnmatch.fnmatch(os.path.join(dirpath, x), pattern)
55 | ]
56 | fpaths = [
57 | x for x in fpaths if not fnmatch.fnmatch(x, pattern)
58 | ]
59 | for f in fpaths:
60 | ext = os.path.splitext(f)[1][1:]
61 | if ext in extensions:
62 | out.append(f)
63 | else:
64 | out.append(file)
65 | return out
66 |
67 |
68 | def make_diff(file, original, reformatted):
69 | return list(
70 | difflib.unified_diff(
71 | original,
72 | reformatted,
73 | fromfile='{}\t(original)'.format(file),
74 | tofile='{}\t(reformatted)'.format(file),
75 | n=3))
76 |
77 |
78 | class DiffError(Exception):
79 | def __init__(self, message, errs=None):
80 | super(DiffError, self).__init__(message)
81 | self.errs = errs or []
82 |
83 |
84 | class UnexpectedError(Exception):
85 | def __init__(self, message, exc=None):
86 | super(UnexpectedError, self).__init__(message)
87 | self.formatted_traceback = traceback.format_exc()
88 | self.exc = exc
89 |
90 |
91 | def run_clang_format_diff_wrapper(args, file):
92 | try:
93 | ret = run_clang_format_diff(args, file)
94 | return ret
95 | except DiffError:
96 | raise
97 | except Exception as e:
98 | raise UnexpectedError('{}: {}: {}'.format(file, e.__class__.__name__,
99 | e), e)
100 |
101 |
102 | def run_clang_format_diff(args, file):
103 | try:
104 | with io.open(file, 'r', encoding='utf-8') as f:
105 | original = f.readlines()
106 | except IOError as exc:
107 | raise DiffError(str(exc))
108 | invocation = [args.clang_format_executable, file]
109 |
110 | # Use of utf-8 to decode the process output.
111 | #
112 | # Hopefully, this is the correct thing to do.
113 | #
114 | # It's done due to the following assumptions (which may be incorrect):
115 | # - clang-format will returns the bytes read from the files as-is,
116 | # without conversion, and it is already assumed that the files use utf-8.
117 | # - if the diagnostics were internationalized, they would use utf-8:
118 | # > Adding Translations to Clang
119 | # >
120 | # > Not possible yet!
121 | # > Diagnostic strings should be written in UTF-8,
122 | # > the client can translate to the relevant code page if needed.
123 | # > Each translation completely replaces the format string
124 | # > for the diagnostic.
125 | # > -- http://clang.llvm.org/docs/InternalsManual.html#internals-diag-translation
126 | #
127 | # It's not pretty, due to Python 2 & 3 compatibility.
128 | encoding_py3 = {}
129 | if sys.version_info[0] >= 3:
130 | encoding_py3['encoding'] = 'utf-8'
131 |
132 | try:
133 | proc = subprocess.Popen(
134 | invocation,
135 | stdout=subprocess.PIPE,
136 | stderr=subprocess.PIPE,
137 | universal_newlines=True,
138 | **encoding_py3)
139 | except OSError as exc:
140 | raise DiffError(str(exc))
141 | proc_stdout = proc.stdout
142 | proc_stderr = proc.stderr
143 | if sys.version_info[0] < 3:
144 | # make the pipes compatible with Python 3,
145 | # reading lines should output unicode
146 | encoding = 'utf-8'
147 | proc_stdout = codecs.getreader(encoding)(proc_stdout)
148 | proc_stderr = codecs.getreader(encoding)(proc_stderr)
149 | # hopefully the stderr pipe won't get full and block the process
150 | outs = list(proc_stdout.readlines())
151 | errs = list(proc_stderr.readlines())
152 | proc.wait()
153 | if proc.returncode:
154 | raise DiffError("clang-format exited with status {}: '{}'".format(
155 | proc.returncode, file), errs)
156 | return make_diff(file, original, outs), errs
157 |
158 |
159 | def bold_red(s):
160 | return '\x1b[1m\x1b[31m' + s + '\x1b[0m'
161 |
162 |
163 | def colorize(diff_lines):
164 | def bold(s):
165 | return '\x1b[1m' + s + '\x1b[0m'
166 |
167 | def cyan(s):
168 | return '\x1b[36m' + s + '\x1b[0m'
169 |
170 | def green(s):
171 | return '\x1b[32m' + s + '\x1b[0m'
172 |
173 | def red(s):
174 | return '\x1b[31m' + s + '\x1b[0m'
175 |
176 | for line in diff_lines:
177 | if line[:4] in ['--- ', '+++ ']:
178 | yield bold(line)
179 | elif line.startswith('@@ '):
180 | yield cyan(line)
181 | elif line.startswith('+'):
182 | yield green(line)
183 | elif line.startswith('-'):
184 | yield red(line)
185 | else:
186 | yield line
187 |
188 |
189 | def print_diff(diff_lines, use_color):
190 | if use_color:
191 | diff_lines = colorize(diff_lines)
192 | if sys.version_info[0] < 3:
193 | sys.stdout.writelines((l.encode('utf-8') for l in diff_lines))
194 | else:
195 | sys.stdout.writelines(diff_lines)
196 |
197 |
198 | def print_trouble(prog, message, use_colors):
199 | error_text = 'error:'
200 | if use_colors:
201 | error_text = bold_red(error_text)
202 | print("{}: {} {}".format(prog, error_text, message), file=sys.stderr)
203 |
204 |
205 | def main():
206 | parser = argparse.ArgumentParser(description=__doc__)
207 | parser.add_argument(
208 | '--clang-format-executable',
209 | metavar='EXECUTABLE',
210 | help='path to the clang-format executable',
211 | default='clang-format')
212 | parser.add_argument(
213 | '--extensions',
214 | help='comma separated list of file extensions (default: {})'.format(
215 | DEFAULT_EXTENSIONS),
216 | default=DEFAULT_EXTENSIONS)
217 | parser.add_argument(
218 | '-r',
219 | '--recursive',
220 | action='store_true',
221 | help='run recursively over directories')
222 | parser.add_argument('files', metavar='file', nargs='+')
223 | parser.add_argument(
224 | '-q',
225 | '--quiet',
226 | action='store_true')
227 | parser.add_argument(
228 | '-j',
229 | metavar='N',
230 | type=int,
231 | default=0,
232 | help='run N clang-format jobs in parallel'
233 | ' (default number of cpus + 1)')
234 | parser.add_argument(
235 | '--color',
236 | default='auto',
237 | choices=['auto', 'always', 'never'],
238 | help='show colored diff (default: auto)')
239 | parser.add_argument(
240 | '-e',
241 | '--exclude',
242 | metavar='PATTERN',
243 | action='append',
244 | default=[],
245 | help='exclude paths matching the given glob-like pattern(s)'
246 | ' from recursive search')
247 |
248 | args = parser.parse_args()
249 |
250 | # use default signal handling, like diff return SIGINT value on ^C
251 | # https://bugs.python.org/issue14229#msg156446
252 | signal.signal(signal.SIGINT, signal.SIG_DFL)
253 | try:
254 | signal.SIGPIPE
255 | except AttributeError:
256 | # compatibility, SIGPIPE does not exist on Windows
257 | pass
258 | else:
259 | signal.signal(signal.SIGPIPE, signal.SIG_DFL)
260 |
261 | colored_stdout = False
262 | colored_stderr = False
263 | if args.color == 'always':
264 | colored_stdout = True
265 | colored_stderr = True
266 | elif args.color == 'auto':
267 | colored_stdout = sys.stdout.isatty()
268 | colored_stderr = sys.stderr.isatty()
269 |
270 | retcode = ExitStatus.SUCCESS
271 | files = list_files(
272 | args.files,
273 | recursive=args.recursive,
274 | exclude=args.exclude,
275 | extensions=args.extensions.split(','))
276 |
277 | if not files:
278 | return
279 |
280 | njobs = args.j
281 | if njobs == 0:
282 | njobs = multiprocessing.cpu_count() + 1
283 | njobs = min(len(files), njobs)
284 |
285 | if njobs == 1:
286 | # execute directly instead of in a pool,
287 | # less overhead, simpler stacktraces
288 | it = (run_clang_format_diff_wrapper(args, file) for file in files)
289 | pool = None
290 | else:
291 | pool = multiprocessing.Pool(njobs)
292 | it = pool.imap_unordered(
293 | partial(run_clang_format_diff_wrapper, args), files)
294 | while True:
295 | try:
296 | outs, errs = next(it)
297 | except StopIteration:
298 | break
299 | except DiffError as e:
300 | print_trouble(parser.prog, str(e), use_colors=colored_stderr)
301 | retcode = ExitStatus.TROUBLE
302 | sys.stderr.writelines(e.errs)
303 | except UnexpectedError as e:
304 | print_trouble(parser.prog, str(e), use_colors=colored_stderr)
305 | sys.stderr.write(e.formatted_traceback)
306 | retcode = ExitStatus.TROUBLE
307 | # stop at the first unexpected error,
308 | # something could be very wrong,
309 | # don't process all files unnecessarily
310 | if pool:
311 | pool.terminate()
312 | break
313 | else:
314 | sys.stderr.writelines(errs)
315 | if outs == []:
316 | continue
317 | if not args.quiet:
318 | print_diff(outs, use_color=colored_stdout)
319 | if retcode == ExitStatus.SUCCESS:
320 | retcode = ExitStatus.DIFF
321 | return retcode
322 |
323 |
324 | if __name__ == '__main__':
325 | sys.exit(main())
326 |
--------------------------------------------------------------------------------
/all_platforms.py:
--------------------------------------------------------------------------------
1 | # board: [ platform, uf2_family, manual core URL]
2 | ALL_PLATFORMS={
3 | # classic Arduino AVR
4 | "uno" : ["arduino:avr:uno", None, None],
5 | "leonardo" : ["arduino:avr:leonardo", None, None],
6 | "mega2560" : ["arduino:avr:mega:cpu=atmega2560", None, None],
7 | # Arduino SAMD
8 | "zero" : ["arduino:samd:arduino_zero_native", "0x68ed2b88", None, None],
9 | "cpx" : ["arduino:samd:adafruit_circuitplayground_m0", "0x68ed2b88", None],
10 | # Arduino MBED GIGA
11 | "giga" : ["arduino:mbed_giga:giga", None, None],
12 | # Espressif
13 | "esp8266" : ["esp8266:esp8266:huzzah:eesz=4M3M,xtal=80", None, None],
14 | "esp32" : ["esp32:esp32:featheresp32:FlashFreq=80", None, None],
15 | "itsybitsy_esp32" : ["esp32:esp32:adafruit_itsybitsy_esp32:FlashFreq=80", None, None],
16 | "feather_esp8266" : ["esp8266:esp8266:huzzah:xtal=80,vt=flash,exception=disabled,stacksmash=disabled,ssl=all,mmu=3232,non32xfer=fast,eesz=4M2M,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=115200", None, None],
17 | "feather_esp32" : ["esp32:esp32:featheresp32:FlashFreq=80", None, None],
18 | "wippersnapper_feather_esp32" : ["esp32:esp32:featheresp32:FlashFreq=80,PartitionScheme=min_spiffs", None, None],
19 | "feather_esp32_v2" : ["esp32:esp32:adafruit_feather_esp32_v2", None, None],
20 | "qtpy_esp32" : ["esp32:esp32:adafruit_qtpy_esp32_pico", None, None],
21 | "sparklemotion_esp32" : ["esp32:esp32:sparklemotion", None, None],
22 | "sparklemotionmini_esp32" : ["esp32:esp32:sparklemotionmini", None, None],
23 | ## ESP32-C3/C6
24 | "feather_esp32c6" : ["esp32:esp32:adafruit_feather_esp32c6:FlashMode=qio", None, None],
25 | "wippersnapper_feather_esp32c6" : ["esp32:esp32:adafruit_feather_esp32c6:CDCOnBoot=cdc,CPUFreq=160,FlashFreq=80,FlashMode=qio,PartitionScheme=min_spiffs", None, None],
26 | "wippersnapper_feather_esp32c6_debug" : ["esp32:esp32:adafruit_feather_esp32c6:CDCOnBoot=cdc,DebugLevel=verbose,CPUFreq=160,FlashFreq=80,FlashMode=qio,PartitionScheme=min_spiffs", None, None],
27 | "qtpy_esp32c3" : ["esp32:esp32:adafruit_qtpy_esp32c3:FlashMode=qio", None, None],
28 | "wippersnapper_qtpy_esp32c3" : ["esp32:esp32:adafruit_qtpy_esp32c3:FlashMode=qio,PartitionScheme=min_spiffs", None, None],
29 | ## ESP32-S2
30 | "magtag" : ["esp32:esp32:adafruit_magtag29_esp32s2", "0xbfdd4eee", None],
31 | "funhouse" : ["esp32:esp32:adafruit_funhouse_esp32s2", "0xbfdd4eee", None],
32 | "funhouse_noota" : ["esp32:esp32:adafruit_funhouse_esp32s2:PartitionScheme=tinyuf2_noota", "0xbfdd4eee", None],
33 | "metroesp32s2" : ["esp32:esp32:adafruit_metro_esp32s2", "0xbfdd4eee", None],
34 | "qtpy_esp32s2" : ["esp32:esp32:adafruit_qtpy_esp32s2", "0xbfdd4eee", None],
35 | "feather_esp32s2" : ["esp32:esp32:adafruit_feather_esp32s2", "0xbfdd4eee", None],
36 | "feather_esp32s2_debug" : ["esp32:esp32:adafruit_feather_esp32s2:DebugLevel=verbose", "0xbfdd4eee", None],
37 | "feather_esp32s2_tft" : ["esp32:esp32:adafruit_feather_esp32s2_tft", "0xbfdd4eee", None],
38 | "feather_esp32s2_tft_debug" : ["esp32:esp32:adafruit_feather_esp32s2_tft:DebugLevel=verbose", "0xbfdd4eee", None],
39 | "feather_esp32s2_reverse_tft" : ["esp32:esp32:adafruit_feather_esp32s2_reversetft", "0xbfdd4eee", None],
40 | ## ESP32-S3
41 | "feather_esp32s3" : ["esp32:esp32:adafruit_feather_esp32s3_nopsram", "0xc47e5767", None],
42 | "feather_esp32s3_debug" : ["esp32:esp32:adafruit_feather_esp32s3_nopsram:DebugLevel=verbose", "0xc47e5767", None],
43 | "feather_esp32s3_4mbflash_2mbpsram" : ["esp32:esp32:adafruit_feather_esp32s3", "0xc47e5767", None],
44 | "feather_esp32s3_4mbflash_2mbpsram_debug" : ["esp32:esp32:adafruit_feather_esp32s3:DebugLevel=verbose", "0xc47e5767", None],
45 | "feather_esp32s3_tft" : ["esp32:esp32:adafruit_feather_esp32s3_tft", "0xc47e5767", None],
46 | "feather_esp32s3_tft_debug" : ["esp32:esp32:adafruit_feather_esp32s3_tft:DebugLevel=verbose", "0xc47e5767", None],
47 | "feather_esp32s3_reverse_tft" : ["esp32:esp32:adafruit_feather_esp32s3_reversetft", "0xc47e5767", None],
48 | "feather_esp32s3_reverse_tft_debug" : ["esp32:esp32:adafruit_feather_esp32s3_reversetft:DebugLevel=verbose", "0xc47e5767", None],
49 | "matrixportal_s3" : ["esp32:esp32:adafruit_matrixportal_esp32s3", "0xc47e5767", None],
50 | "metro_esp32s3" : ["esp32:esp32:adafruit_metro_esp32s3", "0xc47e5767", None],
51 | "pycamera_s3" : ["esp32:esp32:adafruit_camera_esp32s3", "0xc47e5767", None],
52 | "qualia_s3_rgb666" : ["esp32:esp32:adafruit_qualia_s3_rgb666", "0xc47e5767", None],
53 | "qtpy_esp32s3" : ["esp32:esp32:adafruit_qtpy_esp32s3_nopsram", "0xc47e5767", None],
54 | "qtpy_esp32s3_n4r2" : ["esp32:esp32:adafruit_qtpy_esp32s3_n4r2", "0xc47e5767", None],
55 | # ESP32-P4
56 | "esp32p4" : ["esp32:esp32:esp32p4:JTAGAdapter=default,PSRAM=disabled,USBMode=default,CDCOnBoot=cdc,MSCOnBoot=default,DFUOnBoot=default,UploadMode=default,PartitionScheme=default,CPUFreq=360,FlashMode=qio,FlashFreq=80,FlashSize=4M,UploadSpeed=921600,DebugLevel=none,EraseFlash=none", "0x3d308e94", None],
57 | # Adafruit AVR
58 | "trinket_3v" : ["adafruit:avr:trinket3", None, None],
59 | "trinket_5v" : ["adafruit:avr:trinket5", None, None],
60 | "protrinket_3v" : ["adafruit:avr:protrinket3", None, None],
61 | "protrinket_5v" : ["adafruit:avr:protrinket5", None, None],
62 | "gemma" : ["adafruit:avr:gemma", None, None],
63 | "flora" : ["adafruit:avr:flora8", None, None],
64 | "feather32u4" : ["adafruit:avr:feather32u4", None, None],
65 | "cpc" : ["arduino:avr:circuitplay32u4cat", None, None],
66 | # Adafruit SAMD
67 | "gemma_m0" : ["adafruit:samd:adafruit_gemma_m0", "0x68ed2b88", None],
68 | "trinket_m0" : ["adafruit:samd:adafruit_trinket_m0", "0x68ed2b88", None],
69 | "feather_m0_express" : ["adafruit:samd:adafruit_feather_m0_express", "0x68ed2b88", None],
70 | "feather_m0_express_tinyusb" : ["adafruit:samd:adafruit_feather_m0_express:usbstack=tinyusb", "0x68ed2b88", None],
71 | "feather_m4_express" : ["adafruit:samd:adafruit_feather_m4:speed=120", "0x55114460", None],
72 | "feather_m4_express_tinyusb" : ["adafruit:samd:adafruit_feather_m4:speed=120,usbstack=tinyusb", "0x55114460", None],
73 | "feather_m4_can" : ["adafruit:samd:adafruit_feather_m4_can:speed=120", "0x55114460", None],
74 | "feather_m4_can_tinyusb" : ["adafruit:samd:adafruit_feather_m4_can:speed=120,usbstack=tinyusb", "0x55114460", None],
75 | "metro_m0" : ["adafruit:samd:adafruit_metro_m0", "0x68ed2b88", None],
76 | "metro_m0_tinyusb" : ["adafruit:samd:adafruit_metro_m0:usbstack=tinyusb", "0x68ed2b88", None],
77 | "metro_m4" : ["adafruit:samd:adafruit_metro_m4:speed=120", "0x55114460", None],
78 | "metro_m4_tinyusb" : ["adafruit:samd:adafruit_metro_m4:speed=120,usbstack=tinyusb", "0x55114460", None],
79 | "metro_m4_airliftlite" : ["adafruit:samd:adafruit_metro_m4_airliftlite:speed=120", "0x55114460", None],
80 | "metro_m4_airliftlite_tinyusb" : ["adafruit:samd:adafruit_metro_m4_airliftlite:speed=120,usbstack=tinyusb", "0x55114460", None],
81 | "pybadge" : ["adafruit:samd:adafruit_pybadge_m4:speed=120", "0x55114460", None],
82 | "pybadge_tinyusb" : ["adafruit:samd:adafruit_pybadge_m4:speed=120,usbstack=tinyusb", "0x55114460", None],
83 | "pygamer" : ["adafruit:samd:adafruit_pygamer_m4:speed=120", "0x55114460", None],
84 | "pygamer_tinyusb" : ["adafruit:samd:adafruit_pygamer_m4:speed=120,usbstack=tinyusb", "0x55114460", None],
85 | "hallowing_m0" : ["adafruit:samd:adafruit_hallowing", "0x68ed2b88", None],
86 | "hallowing_m4" : ["adafruit:samd:adafruit_hallowing_m4:speed=120", "0x55114460", None],
87 | "hallowing_m4_tinyusb" : ["adafruit:samd:adafruit_hallowing_m4:speed=120,usbstack=tinyusb", "0x55114460", None],
88 | "neotrellis_m4" : ["adafruit:samd:adafruit_trellis_m4:speed=120", "0x55114460", None],
89 | "monster_m4sk" : ["adafruit:samd:adafruit_monster_m4sk:speed=120", "0x55114460", None],
90 | "monster_m4sk_tinyusb" : ["adafruit:samd:adafruit_monster_m4sk:speed=120,usbstack=tinyusb", "0x55114460", None],
91 | "pyportal" : ["adafruit:samd:adafruit_pyportal_m4:speed=120", "0x55114460", None],
92 | "pyportal_tinyusb" : ["adafruit:samd:adafruit_pyportal_m4:speed=120,usbstack=tinyusb", "0x55114460", None],
93 | "pyportal_titano" : ["adafruit:samd:adafruit_pyportal_m4_titano:speed=120", "0x55114460", None],
94 | "pyportal_titano_tinyusb" : ["adafruit:samd:adafruit_pyportal_m4_titano:speed=120,usbstack=tinyusb", "0x55114460", None],
95 | "cpx_ada" : ["adafruit:samd:adafruit_circuitplayground_m0", "0x68ed2b88", None],
96 | "grand_central" : ["adafruit:samd:adafruit_grandcentral_m4:speed=120", "0x55114460", None],
97 | "grand_central_tinyusb" : ["adafruit:samd:adafruit_grandcentral_m4:speed=120,usbstack=tinyusb", "0x55114460", None],
98 | "matrixportal" : ["adafruit:samd:adafruit_matrixportal_m4:speed=120", "0x55114460", None],
99 | "matrixportal_tinyusb" : ["adafruit:samd:adafruit_matrixportal_m4:speed=120,usbstack=tinyusb", "0x55114460", None],
100 | "neotrinkey_m0" : ["adafruit:samd:adafruit_neotrinkey_m0", "0x68ed2b88", None],
101 | "rotarytrinkey_m0" : ["adafruit:samd:adafruit_rotarytrinkey_m0", "0x68ed2b88", None],
102 | "neokeytrinkey_m0" : ["adafruit:samd:adafruit_neokeytrinkey_m0", "0x68ed2b88", None],
103 | "slidetrinkey_m0" : ["adafruit:samd:adafruit_slidetrinkey_m0", "0x68ed2b88", None],
104 | "proxlighttrinkey_m0" : ["adafruit:samd:adafruit_proxlighttrinkey_m0", "0x68ed2b88", None],
105 | "trrstrinkey_m0" : ["adafruit:samd:adafruit_trrstrinkey_m0", "0x68ed2b88", None],
106 | "thumbsticktrinkey_m0" : ["adafruit:samd:adafruit_thumbsticktrinkey_m0", "0x68ed2b88", None],
107 | "sht4xtrinkey_m0" : ["adafruit:samd:adafruit_sht4xtrinkey_m0", "0x68ed2b88", None],
108 | "pixeltrinkey_m0" : ["adafruit:samd:adafruit_pixeltrinkey_m0", "0x68ed2b88", None],
109 | "X_m0" : ["adafruit:samd:adafruit_X_m0", "0x68ed2b88", None],
110 | "qtpy_m0" : ["adafruit:samd:adafruit_qtpy_m0", "0x68ed2b88", None],
111 | "qtpy_m0_tinyusb" : ["adafruit:samd:adafruit_qtpy_m0:usbstack=tinyusb", "0x68ed2b88", None],
112 | # Arduino SAMD
113 | "mkrwifi1010" : ["arduino:samd:mkrwifi1010", "0x8054", None],
114 | "nano_33_iot" : ["arduino:samd:nano_33_iot", "0x8057", None],
115 | # Arduino nRF
116 | "microbit" : ["sandeepmistry:nRF5:BBCmicrobit:softdevice=s110", None, None],
117 | # Adafruit nRF
118 | "nrf52832" : ["adafruit:nrf52:feather52832:softdevice=s132v6,debug=l0", None, None],
119 | "nrf52840" : ["adafruit:nrf52:feather52840:softdevice=s140v6,debug=l0", "0xada52840", None],
120 | "cpb" : ["adafruit:nrf52:cplaynrf52840:softdevice=s140v6,debug=l0", "0xada52840", None],
121 | "clue" : ["adafruit:nrf52:cluenrf52840:softdevice=s140v6,debug=l0", "0xada52840", None],
122 | "ledglasses_nrf52840" : ["adafruit:nrf52:ledglasses_nrf52840:softdevice=s140v6,debug=l0", "0xada52840", None],
123 | # RP2040 & RP2350 (Philhower)
124 | "pico_rp2040" : ["rp2040:rp2040:rpipico:freq=125,flash=2097152_0", "0xe48bff56", None],
125 | "pico_rp2040_tinyusb" : ["rp2040:rp2040:rpipico:flash=2097152_0,freq=120,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56", None],
126 | "pico_rp2040_tinyusb_host" : ["rp2040:rp2040:rpipico:flash=2097152_0,freq=120,dbgport=Disabled,dbglvl=None,usbstack=tinyusb_host", "0xe48bff56", None],
127 | "pico_rp2350" : ["rp2040:rp2040:rpipico2:freq=125,flash=4194304_0", "0xe48bff56", None],
128 | "pico_rp2350_tinyusb" : ["rp2040:rp2040:rpipico2:flash=4194304_0,freq=120,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56", None],
129 | "pico_rp2350_tinyusb_host" : ["rp2040:rp2040:rpipico2:flash=4194304_0,freq=120,dbgport=Disabled,dbglvl=None,usbstack=tinyusb_host", "0xe48bff56", None],
130 | "picow_rp2040" : ["rp2040:rp2040:rpipicow:flash=2097152_0,freq=125", "0xe48bff56", None],
131 | "picow_rp2040_tinyusb" : ["rp2040:rp2040:rpipicow:flash=2097152_131072,freq=120,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56", None],
132 | "feather_rp2040" : ["rp2040:rp2040:adafruit_feather:freq=125,flash=8388608_0", "0xe48bff56", None],
133 | "feather_rp2040_tinyusb" : ["rp2040:rp2040:adafruit_feather:flash=8388608_0,freq=120,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56", None],
134 | "feather_rp2040_adalogger" : ["rp2040:rp2040:adafruit_feather_adalogger:freq=125,flash=8388608_0", "0xe48bff56", None],
135 | "feather_rp2040_adalogger_tinyusb" : ["rp2040:rp2040:adafruit_feather_adalogger:flash=8388608_0,freq=120,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56", None],
136 | "feather_rp2040_rfm" : ["rp2040:rp2040:adafruit_feather_rfm:freq=125,flash=8388608_0", "0xe48bff56", None],
137 | "feather_rp2040_rfm_tinyusb" : ["rp2040:rp2040:adafruit_feather_rfm:flash=8388608_0,freq=120,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56", None],
138 | "feather_rp2040_dvi" : ["rp2040:rp2040:adafruit_feather_dvi:freq=125,flash=8388608_0", "0xe48bff56", None],
139 | "feather_rp2040_dvi_tinyusb" : ["rp2040:rp2040:adafruit_feather_dvi:flash=8388608_0,freq=120,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56", None],
140 | "feather_rp2040_usbhost_tinyusb" : ["rp2040:rp2040:adafruit_feather_usb_host:flash=8388608_0,freq=120,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56", None],
141 | "feather_rp2350" : ["rp2040:rp2040:adafruit_feather_rp2350_hstx:arch=arm,flash=8388608_0,freq=150,dbgport=Disabled,dbglvl=None,usbstack=picosdk", "0xe48bff56", None],
142 | "feather_rp2350_tinyusb" : ["rp2040:rp2040:adafruit_feather_rp2350_hstx:arch=arm,flash=8388608_0,freq=120,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56", None],
143 | "metro_rp2040" : ["rp2040:rp2040:adafruit_metro:flash=16777216_0,freq=200,dbgport=Disabled,dbglvl=None,usbstack=picosdk", "0xe48bff56", None],
144 | "metro_rp2040_tinyusb" : ["rp2040:rp2040:adafruit_metro:flash=16777216_0,freq=200,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56", None],
145 | "metro_rp2350" : ["rp2040:rp2040:adafruit_metro_rp2350:arch=arm,flash=16777216_0,freq=150,dbgport=Disabled,dbglvl=None,usbstack=picosdk", "0xe48bff56", None],
146 | "metro_rp2350_tinyusb" : ["rp2040:rp2040:adafruit_metro_rp2350:arch=arm,flash=16777216_0,freq=120,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56", None],
147 | "qt2040_trinkey" : ["rp2040:rp2040:adafruit_trinkeyrp2040qt:flash=8388608_0,freq=125","0xe48bff56", None],
148 | "qt2040_trinkey_tinyusb" : ["rp2040:rp2040:adafruit_trinkeyrp2040qt:flash=8388608_0,freq=120,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56", None],
149 | "qt_py_rp2040": ["rp2040:rp2040:adafruit_qtpy:freq=125,flash=8388608_0", "0xe48bff56", None],
150 | "qt_py_rp2040_tinyusb": ["rp2040:rp2040:adafruit_qtpy:flash=8388608_0,freq=120,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56", None],
151 | "itsybitsy_rp2040" : ["rp2040:rp2040:adafruit_itsybitsy:freq=125,flash=8388608_524288", "0xe48bff56", None],
152 | "itsybitsy_rp2040_tinyusb" : ["rp2040:rp2040:adafruit_itsybitsy:flash=8388608_524288,freq=120,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56", None],
153 | "floppsy_rp2040" : ["rp2040:rp2040:adafruit_floppsy:freq=125,flash=16777216_14680064", "0xe48bff56", None],
154 | "floppsy_rp2040_tinyusb" : ["rp2040:rp2040:adafruit_floppsy:flash=16777216_14680064,freq=120,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56", None],
155 | "fruit_jam" : ["rp2040:rp2040:adafruit_fruitjam:arch=arm,flash=16777216_0,freq=150,dbgport=Disabled,dbglvl=None,usbstack=picosdk", "0xe48bff56", None],
156 | "fruit_jam_tinyusb" : ["rp2040:rp2040:adafruit_fruitjam:arch=arm,flash=16777216_0,freq=120,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56", None],
157 | # Attiny8xy, 16xy, 32xy (SpenceKonde)
158 | "attiny3217" : ["megaTinyCore:megaavr:atxy7:chip=3217", None, None],
159 | "attiny3216" : ["megaTinyCore:megaavr:atxy6:chip=3216", None, None],
160 | "attiny1617" : ["megaTinyCore:megaavr:atxy7:chip=1617", None, None],
161 | "attiny1616" : ["megaTinyCore:megaavr:atxy6:chip=1616", None, None],
162 | "attiny1607" : ["megaTinyCore:megaavr:atxy7:chip=1607", None, None],
163 | "attiny1606" : ["megaTinyCore:megaavr:atxy6:chip=1606", None, None],
164 | "attiny817" : ["megaTinyCore:megaavr:atxy7:chip=817", None, None],
165 | "attiny816" : ["megaTinyCore:megaavr:atxy6:chip=816", None, None],
166 | "attiny807" : ["megaTinyCore:megaavr:atxy7:chip=807", None, None],
167 | "attiny806" : ["megaTinyCore:megaavr:atxy6:chip=806", None, None],
168 |
169 | # CH32v2 (openwch)
170 | "CH32V20x_EVT": ["WCH:ch32v:CH32V20x_EVT", None, None],
171 |
172 | # groupings
173 | "main_platforms" : ("uno", "leonardo", "mega2560", "zero", "qtpy_m0",
174 | "esp8266", "esp32", "metro_m4", "trinket_m0"),
175 | "arcada_platforms" : ("pybadge", "pygamer", "hallowing_m4",
176 | "cpb", "cpx_ada"),
177 | "wippersnapper_platforms" : ("metro_m4_airliftlite_tinyusb", "pyportal_tinyusb"),
178 | "rp2040_platforms" : ("pico_rp2040", "feather_rp2040", "feather_rp2350")
179 | }
180 |
--------------------------------------------------------------------------------
/install.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | # we need bash 4 for associative arrays
4 | if [ "${BASH_VERSION%%[^0-9]*}" -lt "4" ]; then
5 | echo "BASH VERSION < 4: ${BASH_VERSION}" >&2
6 | exit 1
7 | fi
8 |
9 | # associative array for the platforms that will be verified in build_main_platforms()
10 | # this will be eval'd in the functions below because arrays can't be exported
11 | # Uno is ATmega328, Zero is SAMD21G18, ESP8266, Leonardo is ATmega32u4, M4 is SAMD51, Mega is ATmega2560, ESP32
12 | export MAIN_PLATFORMS='declare -A main_platforms=( [uno]="arduino:avr:uno" [zero]="arduino:samd:arduino_zero_native" [esp8266]="esp8266:esp8266:huzzah:eesz=4M3M,xtal=80" [leonardo]="arduino:avr:leonardo" [m4]="adafruit:samd:adafruit_metro_m4:speed=120" [mega2560]="arduino:avr:mega:cpu=atmega2560" [esp32]="esp32:esp32:featheresp32:FlashFreq=80" )'
13 |
14 | # associative array for other platforms that can be called explicitly in .travis.yml configs
15 | # this will be eval'd in the functions below because arrays can't be exported
16 | export AUX_PLATFORMS='declare -A aux_platforms=( [trinket]="adafruit:avr:trinket5" [gemma]="arduino:avr:gemma" )'
17 |
18 | export CPLAY_PLATFORMS='declare -A cplay_platforms=( [cplayClassic]="arduino:avr:circuitplay32u4cat" [cplayExpress]="arduino:samd:adafruit_circuitplayground_m0" [cplayExpressAda]="adafruit:samd:adafruit_circuitplayground_m0" [cplayBluefruit]="adafruit:nrf52:cplaynrf52840:softdevice=s140v6,debug=l0" )'
19 |
20 | export SAMD_PLATFORMS='declare -A samd_platforms=( [zero]="arduino:samd:arduino_zero_native", [cplayExpress]="arduino:samd:adafruit_circuitplayground_m0", [m4]="adafruit:samd:adafruit_metro_m4:speed=120" )'
21 |
22 | export M4_PLATFORMS='declare -A m4_platforms=( [m4]="adafruit:samd:adafruit_metro_m4:speed=120", [trellis_m4]="adafruit:samd:adafruit_trellis_m4:speed=120", [grand_central_m4]="adafruit:samd:adafruit_grand_central_m4:speed=120" )'
23 |
24 | export ARCADA_PLATFORMS='declare -A arcada_platforms=( [pybadge]="adafruit:samd:adafruit_pybadge_m4:speed=120", [pygamer]="adafruit:samd:adafruit_pygamer_m4:speed=120", [hallowing_m4]="adafruit:samd:adafruit_hallowing_m4:speed=120", [cplayExpressAda]="adafruit:samd:adafruit_circuitplayground_m0" )'
25 |
26 | export IO_PLATFORMS='declare -A io_platforms=( [zero]="arduino:samd:arduino_zero_native", [m4wifi]="adafruit:samd:adafruit_metro_m4_airliftlite:speed=120", [esp8266]="esp8266:esp8266:huzzah:eesz=4M3M,xtal=80" [esp32]="esp32:esp32:featheresp32:FlashFreq=80" )'
27 |
28 | export NRF5X_PLATFORMS='declare -A nrf5x_platforms=( [nrf52840]="adafruit:nrf52:feather52840:softdevice=s140v6,debug=l0")'
29 |
30 | # make display available for arduino CLI
31 | /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_1.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :1 -ac -screen 0 1280x1024x16
32 | sleep 3
33 | export DISPLAY=:1.0
34 |
35 | #This condition is to avoid reruning install when build argument is passed
36 | if [[ $# -eq 0 ]] ; then
37 | # define colors
38 | GRAY='\033[1;30m'; RED='\033[0;31m'; LRED='\033[1;31m'; GREEN='\033[0;32m'; LGREEN='\033[1;32m'; ORANGE='\033[0;33m'; YELLOW='\033[1;33m'; BLUE='\033[0;34m'; LBLUE='\033[1;34m'; PURPLE='\033[0;35m'; LPURPLE='\033[1;35m'; CYAN='\033[0;36m'; LCYAN='\033[1;36m'; LGRAY='\033[0;37m'; WHITE='\033[1;37m';
39 |
40 | echo -e "\n########################################################################";
41 | echo -e "${YELLOW}INSTALLING ARDUINO IDE"
42 | echo "########################################################################";
43 |
44 | # if .travis.yml does not set version
45 | if [ -z $ARDUINO_IDE_VERSION ]; then
46 | export ARDUINO_IDE_VERSION="1.8.11"
47 | echo "NOTE: YOUR .TRAVIS.YML DOES NOT SPECIFY ARDUINO IDE VERSION, USING $ARDUINO_IDE_VERSION"
48 | fi
49 |
50 | # if newer version is requested
51 | if [ ! -f $HOME/arduino_ide/$ARDUINO_IDE_VERSION ] && [ -f $HOME/arduino_ide/arduino ]; then
52 | echo -n "DIFFERENT VERSION OF ARDUINO IDE REQUESTED: "
53 | shopt -s extglob
54 | cd $HOME/arduino_ide/
55 | rm -rf *
56 | if [ $? -ne 0 ]; then echo -e """$RED""\xe2\x9c\x96"; else echo -e """$GREEN""\xe2\x9c\x93"; fi
57 | cd $OLDPWD
58 | fi
59 |
60 | # if not already cached, download and install arduino IDE
61 | echo -n "ARDUINO IDE STATUS: "
62 | if [ ! -f $HOME/arduino_ide/arduino ]; then
63 | echo -n "DOWNLOADING: "
64 | wget --quiet https://downloads.arduino.cc/arduino-$ARDUINO_IDE_VERSION-linux64.tar.xz
65 | if [ $? -ne 0 ]; then echo -e """$RED""\xe2\x9c\x96"; else echo -e """$GREEN""\xe2\x9c\x93"; fi
66 | echo -n "UNPACKING ARDUINO IDE: "
67 | [ ! -d $HOME/arduino_ide/ ] && mkdir $HOME/arduino_ide
68 | tar xf arduino-$ARDUINO_IDE_VERSION-linux64.tar.xz -C $HOME/arduino_ide/ --strip-components=1
69 | if [ $? -ne 0 ]; then echo -e """$RED""\xe2\x9c\x96"; else echo -e """$GREEN""\xe2\x9c\x93"; fi
70 | touch $HOME/arduino_ide/$ARDUINO_IDE_VERSION
71 | else
72 | echo -n "CACHED: "
73 | echo -e """$GREEN""\xe2\x9c\x93"
74 | fi
75 |
76 | # define output directory for .hex files
77 | export ARDUINO_HEX_DIR=arduino_build_$TRAVIS_BUILD_NUMBER
78 |
79 | # link test library folder to the arduino libraries folder
80 | ln -s $TRAVIS_BUILD_DIR $HOME/arduino_ide/libraries/Adafruit_Test_Library
81 |
82 | # add the arduino CLI to our PATH
83 | export PATH="$HOME/arduino_ide:$PATH"
84 |
85 | echo -e "\n########################################################################";
86 | echo -e "${YELLOW}INSTALLING DEPENDENCIES"
87 | echo "########################################################################";
88 |
89 | # install dependancy libraries in library.properties
90 | grep "depends=" $HOME/arduino_ide/libraries/Adafruit_Test_Library/library.properties | sed 's/depends=//' | sed -n 1'p' | tr ',' '\n' | while read word; do arduino --install-library "$word"; done
91 |
92 | # install the zero, esp8266, and adafruit board packages
93 | echo -n "ADD PACKAGE INDEX: "
94 | DEPENDENCY_OUTPUT=$(arduino --pref "boardsmanager.additional.urls=https://adafruit.github.io/arduino-board-index/package_adafruit_index.json,http://arduino.esp8266.com/stable/package_esp8266com_index.json,https://dl.espressif.com/dl/package_esp32_index.json" --save-prefs 2>&1)
95 | if [ $? -ne 0 ]; then echo -e """$RED""\xe2\x9c\x96"; else echo -e """$GREEN""\xe2\x9c\x93"; fi
96 |
97 | # This is a hack, we have to install by hand so lets delete it
98 | echo "Removing ESP32 cache"
99 | rm -rf ~/.arduino15/packages/esp32
100 | echo -n "Current packages list:"
101 | [ -d ~/.arduino15/packages/ ] && ls ~/.arduino15/packages/
102 |
103 | INSTALL_ESP32=$([[ $INSTALL_PLATFORMS == *"esp32"* || -z "$INSTALL_PLATFORMS" ]] && echo 1 || echo 0)
104 | INSTALL_ZERO=$([[ $INSTALL_PLATFORMS == *"zero"* || -z "$INSTALL_PLATFORMS" ]] && echo 1 || echo 0)
105 | INSTALL_ESP8266=$([[ $INSTALL_PLATFORMS == *"esp8266"* || -z "$INSTALL_PLATFORMS" ]] && echo 1 || echo 0)
106 | INSTALL_AVR=$([[ $INSTALL_PLATFORMS == *"avr"* || -z "$INSTALL_PLATFORMS" ]] && echo 1 || echo 0)
107 | INSTALL_SAMD=$([[ $INSTALL_PLATFORMS == *"samd"* || -z "$INSTALL_PLATFORMS" ]] && echo 1 || echo 0)
108 | INSTALL_NRF52=$([[ $INSTALL_PLATFORMS == *"nrf52"* || -z "$INSTALL_PLATFORMS" ]] && echo 1 || echo 0)
109 |
110 | if [[ $INSTALL_ESP32 == 1 ]]; then
111 | echo -n "ESP32: "
112 | pip install pyserial
113 | DEPENDENCY_OUTPUT=$(arduino --install-boards esp32:esp32 2>&1)
114 | if [ $? -ne 0 ]; then echo -e "\xe2\x9c\x96 OR CACHED"; else echo -e """$GREEN""\xe2\x9c\x93"; fi
115 | fi
116 |
117 | if [[ $INSTALL_ZERO == 1 ]]; then
118 | echo -n "ZERO: "
119 | DEPENDENCY_OUTPUT=$(arduino --install-boards arduino:samd 2>&1)
120 | if [ $? -ne 0 ]; then echo -e "\xe2\x9c\x96 OR CACHED"; else echo -e """$GREEN""\xe2\x9c\x93"; fi
121 | fi
122 |
123 | if [[ $INSTALL_ESP8266 == 1 ]]; then
124 | echo -n "ESP8266: "
125 | DEPENDENCY_OUTPUT=$(arduino --install-boards esp8266:esp8266 2>&1)
126 | if [ $? -ne 0 ]; then echo -e "\xe2\x9c\x96 OR CACHED"; else echo -e """$GREEN""\xe2\x9c\x93"; fi
127 | fi
128 |
129 | if [[ $INSTALL_AVR == 1 ]]; then
130 | echo -n "ADAFRUIT AVR: "
131 | DEPENDENCY_OUTPUT=$(arduino --install-boards adafruit:avr 2>&1)
132 | if [ $? -ne 0 ]; then echo -e "\xe2\x9c\x96 OR CACHED"; else echo -e """$GREEN""\xe2\x9c\x93"; fi
133 | fi
134 |
135 | if [[ $INSTALL_SAMD == 1 ]]; then
136 | echo -n "ADAFRUIT SAMD: "
137 | DEPENDENCY_OUTPUT=$(arduino --install-boards adafruit:samd 2>&1)
138 | if [ $? -ne 0 ]; then echo -e "\xe2\x9c\x96 OR CACHED"; else echo -e """$GREEN""\xe2\x9c\x93"; fi
139 | fi
140 |
141 | if [[ $INSTALL_NRF52 == 1 ]]; then
142 | echo -n "ADAFRUIT NRF5X: "
143 | pip install wheel
144 | pip install setuptools
145 | pip install adafruit-nrfutil
146 | pip install pyserial
147 | DEPENDENCY_OUTPUT=$(arduino --install-boards adafruit:nrf52 2>&1)
148 | if [ $? -ne 0 ]; then echo -e "\xe2\x9c\x96 OR CACHED"; else echo -e """$GREEN""\xe2\x9c\x93"; fi
149 | fi
150 |
151 | # install random lib so the arduino IDE grabs a new library index
152 | # see: https://github.com/arduino/Arduino/issues/3535
153 | echo -n "UPDATE LIBRARY INDEX: "
154 | DEPENDENCY_OUTPUT=$(arduino --install-library USBHost > /dev/null 2>&1)
155 | if [ $? -ne 0 ]; then echo -e """$RED""\xe2\x9c\x96"; else echo -e """$GREEN""\xe2\x9c\x93"; fi
156 |
157 | # set the maximal compiler warning level
158 | echo -n "SET BUILD PREFERENCES: "
159 | DEPENDENCY_OUTPUT=$(arduino --pref "compiler.warning_level=all" --save-prefs 2>&1)
160 | if [ $? -ne 0 ]; then echo -e """$RED""\xe2\x9c\x96"; else echo -e """$GREEN""\xe2\x9c\x93"; fi
161 |
162 | # init the json temp var for the current platform
163 | export PLATFORM_JSON=""
164 |
165 | # init test stats counters
166 | export PASS_COUNT=0
167 | export SKIP_COUNT=0
168 | export FAIL_COUNT=0
169 | export PDE_COUNT=0
170 | # close if [[ $# -eq 0 ]] ; then
171 | fi
172 | # build all of the examples for the passed platform
173 | #Sourcing and defining functions
174 | function build_platform()
175 | {
176 |
177 | # arrays can't be exported, so we have to eval
178 | eval $MAIN_PLATFORMS
179 | eval $AUX_PLATFORMS
180 | eval $CPLAY_PLATFORMS
181 | eval $M4_PLATFORMS
182 | eval $ARCADA_PLATFORMS
183 | eval $IO_PLATFORMS
184 | eval $NRF5X_PLATFORMS
185 |
186 | # reset platform json var
187 | PLATFORM_JSON=""
188 |
189 | # expects argument 1 to be the platform key
190 | local platform_key=$1
191 |
192 | # placeholder for platform
193 | local platform=""
194 |
195 | # track the exit code for this platform
196 | local exit_code=0
197 |
198 | # grab all pde and ino example sketches
199 | declare -a examples
200 |
201 | if [ "$PLATFORM_CHECK_ONLY_ON_FILE" = true ]; then
202 | # loop through results and add them to the array
203 | examples=($(
204 | for f in $(find . -type f -iname '*.ino' -o -iname '*.pde'); do
205 | # TODO: distinguish platforms
206 | if [ -e "$(dirname $f)/.$platform_key.test" ]; then
207 | echo "$f"
208 | fi
209 | done
210 | ))
211 | else
212 | # loop through results and add them to the array
213 | examples=($(find $PWD -name "*.pde" -o -name "*.ino"))
214 | fi
215 |
216 | # get the last example in the array
217 | local last="${examples[@]:(-1)}"
218 |
219 | # grab the platform info from array or bail if invalid
220 | if [[ ${main_platforms[$platform_key]} ]]; then
221 | platform=${main_platforms[$platform_key]}
222 | elif [[ ${aux_platforms[$platform_key]} ]]; then
223 | platform=${aux_platforms[$platform_key]}
224 | elif [[ ${cplay_platforms[$platform_key]} ]]; then
225 | platform=${cplay_platforms[$platform_key]}
226 | elif [[ ${m4_platforms[$platform_key]} ]]; then
227 | platform=${m4_platforms[$platform_key]}
228 | elif [[ ${arcada_platforms[$platform_key]} ]]; then
229 | platform=${arcada_platforms[$platform_key]}
230 | elif [[ ${io_platforms[$platform_key]} ]]; then
231 | platform=${io_platforms[$platform_key]}
232 | elif [[ ${nrf5x_platforms[$platform_key]} ]]; then
233 | platform=${nrf5x_platforms[$platform_key]}
234 | else
235 | echo "NON-STANDARD PLATFORM KEY: $platform_key"
236 | platform=$platform_key
237 | fi
238 |
239 | echo -e "\n########################################################################";
240 |
241 | echo -e -n "${YELLOW}SWITCHING TO ${platform_key}: "
242 |
243 | # switch to the requested board.
244 | # we have to avoid reading the exit code of local:
245 | # "when declaring a local variable in a function, the local acts as a command in its own right"
246 | local platform_stdout
247 | platform_stdout=$(arduino --board $platform --save-prefs 2>&1)
248 |
249 | # grab the exit status of the arduino board change
250 | local platform_switch=$?
251 |
252 | # notify if the platform switch failed
253 | if [ $platform_switch -ne 0 ]; then
254 | # heavy X
255 | echo -e """$RED""\xe2\x9c\x96"
256 | echo -e "arduino --board ${platform} --save-prefs 2>&1"
257 | echo $platform_stdout
258 | exit_code=1
259 | else
260 | # heavy checkmark
261 | echo -e """$GREEN""\xe2\x9c\x93"
262 | fi
263 |
264 | echo "########################################################################";
265 |
266 | # loop through example sketches
267 | for example in "${examples[@]}"; do
268 |
269 | # store the full path to the example's sketch directory
270 | local example_dir=$(dirname $example)
271 |
272 | # store the filename for the example without the path
273 | local example_file=$(basename $example)
274 |
275 | # is this the last example in the loop
276 | local last_example=0
277 | if [ "$last" == "$example" ]; then
278 | last_example=1
279 | fi
280 |
281 | echo -n "$example_file: "
282 |
283 | # continue to next example if platform switch failed
284 | if [ $platform_switch -ne 0 ]; then
285 | # heavy X
286 | echo -e """$RED""\xe2\x9c\x96"
287 |
288 | # add json
289 | PLATFORM_JSON="${PLATFORM_JSON}$(json_sketch 0 $example_file $last_example)"
290 |
291 | # increment fails
292 | FAIL_COUNT=$((FAIL_COUNT + 1))
293 |
294 | # mark fail
295 | exit_code=1
296 |
297 | continue
298 |
299 | fi
300 |
301 | # ignore this example if there is an all platform skip
302 | if [[ -f "${example_dir}/.test.skip" ]]; then
303 |
304 | # right arrow
305 | echo -e "\xe2\x9e\x9e"
306 |
307 | # add json
308 | PLATFORM_JSON="${PLATFORM_JSON}$(json_sketch -1 $example_file $last_example)"
309 |
310 | # increment skips
311 | SKIP_COUNT=$((SKIP_COUNT + 1))
312 |
313 | continue
314 |
315 | fi
316 |
317 | # ignore this example if there is a skip file preset for this specific platform
318 | if [[ -f "${example_dir}/.${platform_key}.test.skip" ]]; then
319 |
320 | # right arrow
321 | echo -e "\xe2\x9e\x9e"
322 |
323 | # add json
324 | PLATFORM_JSON="${PLATFORM_JSON}$(json_sketch -1 $example_file $last_example)"
325 |
326 | # increment skips
327 | SKIP_COUNT=$((SKIP_COUNT + 1))
328 |
329 | continue
330 | fi
331 |
332 | # make sure that all examples are .ino files
333 | if [[ $example =~ \.pde$ ]]; then
334 |
335 | # heavy X
336 | echo -e """$RED""\xe2\x9c\x96"
337 |
338 | echo -e "-------------------------- DEBUG OUTPUT --------------------------\n"
339 | echo "${LRED}PDE EXTENSION. PLEASE UPDATE TO INO"
340 | echo -e "\n------------------------------------------------------------------\n"
341 |
342 | # add json
343 | PLATFORM_JSON="${PLATFORM_JSON}$(json_sketch 0 $example_file $last_example)"
344 |
345 | # increment fails
346 | FAIL_COUNT=$((FAIL_COUNT + 1))
347 |
348 | # mark as fail
349 | exit_code=1
350 |
351 | continue
352 |
353 | fi
354 |
355 | # get the sketch name so we can place the generated files in the respective folder
356 | local sketch_filename_with_ending=$(basename -- "$example")
357 | local sketch_filename="${sketch_filename_with_ending%.*}"
358 | local build_path=$ARDUINO_HEX_DIR/$platform_key/$sketch_filename
359 | # verify the example, and save stdout & stderr to a variable
360 | # we have to avoid reading the exit code of local:
361 | # "when declaring a local variable in a function, the local acts as a command in its own right"
362 | local build_stdout
363 | build_stdout=$(arduino --verify --pref build.path=$build_path --preserve-temp-files $example 2>&1)
364 |
365 | # echo output if the build failed
366 | if [ $? -ne 0 ]; then
367 |
368 | # heavy X
369 | echo -e """$RED""\xe2\x9c\x96"
370 |
371 | echo -e "----------------------------- DEBUG OUTPUT -----------------------------\n"
372 | echo "$build_stdout"
373 | echo -e "\n------------------------------------------------------------------------\n"
374 |
375 | # add json
376 | PLATFORM_JSON="${PLATFORM_JSON}$(json_sketch 0 $example_file $last_example)"
377 |
378 | # increment fails
379 | FAIL_COUNT=$((FAIL_COUNT + 1))
380 |
381 | # mark as fail
382 | exit_code=1
383 |
384 | else
385 |
386 | # heavy checkmark
387 | echo -e """$GREEN""\xe2\x9c\x93"
388 |
389 | # add json
390 | PLATFORM_JSON="${PLATFORM_JSON}$(json_sketch 1 "$example_file" $last_example)"
391 |
392 | # increment passes
393 | PASS_COUNT=$((PASS_COUNT + 1))
394 |
395 | fi
396 |
397 | done
398 |
399 | return $exit_code
400 |
401 | }
402 |
403 | # build all examples for every platform in $MAIN_PLATFORMS
404 | function build_main_platforms()
405 | {
406 |
407 | # arrays can't be exported, so we have to eval
408 | eval $MAIN_PLATFORMS
409 |
410 | # track the build status all platforms
411 | local exit_code=0
412 |
413 | # var to hold platforms
414 | local platforms_json=""
415 |
416 | # get the last element in the array
417 | local last="${main_platforms[@]:(-1)}"
418 |
419 | # loop through platforms in main platforms assoc array
420 | for p_key in "${!main_platforms[@]}"; do
421 |
422 | # is this the last platform in the loop
423 | local last_platform=0
424 | if [ "$last" == "${main_platforms[$p_key]}" ]; then
425 | last_platform=1
426 | fi
427 |
428 | # build all examples for this platform
429 | build_platform $p_key
430 |
431 | # check if build failed
432 | if [ $? -ne 0 ]; then
433 | platforms_json="${platforms_json}$(json_platform $p_key 0 "$PLATFORM_JSON" $last_platform)"
434 | exit_code=1
435 | else
436 | platforms_json="${platforms_json}$(json_platform $p_key 1 "$PLATFORM_JSON" $last_platform)"
437 | fi
438 |
439 | done
440 |
441 | # exit code is opposite of json build status
442 | if [ $exit_code -eq 0 ]; then
443 | json_main_platforms 1 "$platforms_json"
444 | else
445 | json_main_platforms 0 "$platforms_json"
446 | fi
447 |
448 | return $exit_code
449 |
450 | }
451 |
452 | # build all examples for every platform in $AUX_PLATFORMS
453 | function build_aux_platforms()
454 | {
455 |
456 | # arrays can't be exported, so we have to eval
457 | eval $AUX_PLATFORMS
458 |
459 | # track the build status all platforms
460 | local exit_code=0
461 |
462 | # var to hold platforms
463 | local platforms_json=""
464 |
465 | # get the last element in the array
466 | local last="${aux_platforms[@]:(-1)}"
467 |
468 | # loop through platforms in main platforms assoc array
469 | for p_key in "${!aux_platforms[@]}"; do
470 |
471 | # is this the last platform in the loop
472 | local last_platform=0
473 | if [ "$last" == "${aux_platforms[$p_key]}" ]; then
474 | last_platform=1
475 | fi
476 |
477 | # build all examples for this platform
478 | build_platform $p_key
479 |
480 | # check if build failed
481 | if [ $? -ne 0 ]; then
482 | platforms_json="${platforms_json}$(json_platform $p_key 0 "$PLATFORM_JSON" $last_platform)"
483 | exit_code=1
484 | else
485 | platforms_json="${platforms_json}$(json_platform $p_key 1 "$PLATFORM_JSON" $last_platform)"
486 | fi
487 |
488 | done
489 |
490 | # exit code is opposite of json build status
491 | if [ $exit_code -eq 0 ]; then
492 | json_main_platforms 1 "$platforms_json"
493 | else
494 | json_main_platforms 0 "$platforms_json"
495 | fi
496 |
497 | return $exit_code
498 |
499 | }
500 | function build_cplay_platforms()
501 | {
502 |
503 | # arrays can't be exported, so we have to eval
504 | eval $CPLAY_PLATFORMS
505 |
506 | # track the build status all platforms
507 | local exit_code=0
508 |
509 | # var to hold platforms
510 | local platforms_json=""
511 |
512 | # get the last element in the array
513 | local last="${cplay_platforms[@]:(-1)}"
514 |
515 | # loop through platforms in main platforms assoc array
516 | for p_key in "${!cplay_platforms[@]}"; do
517 |
518 | # is this the last platform in the loop
519 | local last_platform=0
520 | if [ "$last" == "${cplay_platforms[$p_key]}" ]; then
521 | last_platform=1
522 | fi
523 |
524 | # build all examples for this platform
525 | build_platform $p_key
526 |
527 | # check if build failed
528 | if [ $? -ne 0 ]; then
529 | platforms_json="${platforms_json}$(json_platform $p_key 0 "$PLATFORM_JSON" $last_platform)"
530 | exit_code=1
531 | else
532 | platforms_json="${platforms_json}$(json_platform $p_key 1 "$PLATFORM_JSON" $last_platform)"
533 | fi
534 |
535 | done
536 |
537 | # exit code is opposite of json build status
538 | if [ $exit_code -eq 0 ]; then
539 | json_main_platforms 1 "$platforms_json"
540 | else
541 | json_main_platforms 0 "$platforms_json"
542 | fi
543 |
544 | return $exit_code
545 |
546 | }
547 |
548 | function build_samd_platforms()
549 | {
550 |
551 | # arrays can't be exported, so we have to eval
552 | eval $SAMD_PLATFORMS
553 |
554 | # track the build status all platforms
555 | local exit_code=0
556 |
557 | # var to hold platforms
558 | local platforms_json=""
559 |
560 | # get the last element in the array
561 | local last="${samd_platforms[@]:(-1)}"
562 |
563 | # loop through platforms in main platforms assoc array
564 | for p_key in "${!samd_platforms[@]}"; do
565 |
566 | # is this the last platform in the loop
567 | local last_platform=0
568 | if [ "$last" == "${samd_platforms[$p_key]}" ]; then
569 | last_platform=1
570 | fi
571 |
572 | # build all examples for this platform
573 | build_platform $p_key
574 |
575 | # check if build failed
576 | if [ $? -ne 0 ]; then
577 | platforms_json="${platforms_json}$(json_platform $p_key 0 "$PLATFORM_JSON" $last_platform)"
578 | exit_code=1
579 | else
580 | platforms_json="${platforms_json}$(json_platform $p_key 1 "$PLATFORM_JSON" $last_platform)"
581 | fi
582 |
583 | done
584 |
585 | # exit code is opposite of json build status
586 | if [ $exit_code -eq 0 ]; then
587 | json_main_platforms 1 "$platforms_json"
588 | else
589 | json_main_platforms 0 "$platforms_json"
590 | fi
591 |
592 | return $exit_code
593 |
594 | }
595 |
596 | function build_m4_platforms()
597 | {
598 |
599 | # arrays can't be exported, so we have to eval
600 | eval $M4_PLATFORMS
601 |
602 | # track the build status all platforms
603 | local exit_code=0
604 |
605 | # var to hold platforms
606 | local platforms_json=""
607 |
608 | # get the last element in the array
609 | local last="${m4_platforms[@]:(-1)}"
610 |
611 | # loop through platforms in main platforms assoc array
612 | for p_key in "${!m4_platforms[@]}"; do
613 |
614 | # is this the last platform in the loop
615 | local last_platform=0
616 | if [ "$last" == "${m4_platforms[$p_key]}" ]; then
617 | last_platform=1
618 | fi
619 |
620 | # build all examples for this platform
621 | build_platform $p_key
622 |
623 | # check if build failed
624 | if [ $? -ne 0 ]; then
625 | platforms_json="${platforms_json}$(json_platform $p_key 0 "$PLATFORM_JSON" $last_platform)"
626 | exit_code=1
627 | else
628 | platforms_json="${platforms_json}$(json_platform $p_key 1 "$PLATFORM_JSON" $last_platform)"
629 | fi
630 |
631 | done
632 |
633 | # exit code is opposite of json build status
634 | if [ $exit_code -eq 0 ]; then
635 | json_main_platforms 1 "$platforms_json"
636 | else
637 | json_main_platforms 0 "$platforms_json"
638 | fi
639 |
640 | return $exit_code
641 |
642 | }
643 |
644 | function build_io_platforms()
645 | {
646 |
647 | # arrays can't be exported, so we have to eval
648 | eval $IO_PLATFORMS
649 |
650 | # track the build status all platforms
651 | local exit_code=0
652 |
653 | # var to hold platforms
654 | local platforms_json=""
655 |
656 | # get the last element in the array
657 | local last="${io_platforms[@]:(-1)}"
658 |
659 | # loop through platforms in main platforms assoc array
660 | for p_key in "${!io_platforms[@]}"; do
661 |
662 | # is this the last platform in the loop
663 | local last_platform=0
664 | if [ "$last" == "${io_platforms[$p_key]}" ]; then
665 | last_platform=1
666 | fi
667 |
668 | # build all examples for this platform
669 | build_platform $p_key
670 |
671 | # check if build failed
672 | if [ $? -ne 0 ]; then
673 | platforms_json="${platforms_json}$(json_platform $p_key 0 "$PLATFORM_JSON" $last_platform)"
674 | exit_code=1
675 | else
676 | platforms_json="${platforms_json}$(json_platform $p_key 1 "$PLATFORM_JSON" $last_platform)"
677 | fi
678 |
679 | done
680 |
681 | # exit code is opposite of json build status
682 | if [ $exit_code -eq 0 ]; then
683 | json_main_platforms 1 "$platforms_json"
684 | else
685 | json_main_platforms 0 "$platforms_json"
686 | fi
687 |
688 | return $exit_code
689 |
690 | }
691 |
692 |
693 |
694 | function build_arcada_platforms()
695 | {
696 |
697 | # arrays can't be exported, so we have to eval
698 | eval $ARCADA_PLATFORMS
699 |
700 | # track the build status all platforms
701 | local exit_code=0
702 |
703 | # var to hold platforms
704 | local platforms_json=""
705 |
706 | # get the last element in the array
707 | local last="${arcada_platforms[@]:(-1)}"
708 |
709 | # loop through platforms in main platforms assoc array
710 | for p_key in "${!arcada_platforms[@]}"; do
711 |
712 | # is this the last platform in the loop
713 | local last_platform=0
714 | if [ "$last" == "${arcada_platforms[$p_key]}" ]; then
715 | last_platform=1
716 | fi
717 |
718 | # build all examples for this platform
719 | build_platform $p_key
720 |
721 | # check if build failed
722 | if [ $? -ne 0 ]; then
723 | platforms_json="${platforms_json}$(json_platform $p_key 0 "$PLATFORM_JSON" $last_platform)"
724 | exit_code=1
725 | else
726 | platforms_json="${platforms_json}$(json_platform $p_key 1 "$PLATFORM_JSON" $last_platform)"
727 | fi
728 |
729 | done
730 |
731 | # exit code is opposite of json build status
732 | if [ $exit_code -eq 0 ]; then
733 | json_main_platforms 1 "$platforms_json"
734 | else
735 | json_main_platforms 0 "$platforms_json"
736 | fi
737 |
738 | return $exit_code
739 |
740 | }
741 |
742 |
743 | function build_nrf5x_platforms()
744 | {
745 |
746 | # arrays can't be exported, so we have to eval
747 | eval $NRF5X_PLATFORMS
748 |
749 | # track the build status all platforms
750 | local exit_code=0
751 |
752 | # var to hold platforms
753 | local platforms_json=""
754 |
755 | # get the last element in the array
756 | local last="${nrf5x_platforms[@]:(-1)}"
757 |
758 | # loop through platforms in main platforms assoc array
759 | for p_key in "${!nrf5x_platforms[@]}"; do
760 |
761 | # is this the last platform in the loop
762 | local last_platform=0
763 | if [ "$last" == "${nrf5x_platforms[$p_key]}" ]; then
764 | last_platform=1
765 | fi
766 |
767 | # build all examples for this platform
768 | build_platform $p_key
769 |
770 | # check if build failed
771 | if [ $? -ne 0 ]; then
772 | platforms_json="${platforms_json}$(json_platform $p_key 0 "$PLATFORM_JSON" $last_platform)"
773 | exit_code=1
774 | else
775 | platforms_json="${platforms_json}$(json_platform $p_key 1 "$PLATFORM_JSON" $last_platform)"
776 | fi
777 |
778 | done
779 |
780 | # exit code is opposite of json build status
781 | if [ $exit_code -eq 0 ]; then
782 | json_main_platforms 1 "$platforms_json"
783 | else
784 | json_main_platforms 0 "$platforms_json"
785 | fi
786 |
787 | return $exit_code
788 |
789 | }
790 |
791 |
792 | # generate json string for a sketch
793 | function json_sketch()
794 | {
795 |
796 | # -1: skipped, 0: failed, 1: passed
797 | local status_number=$1
798 |
799 | # the filename of the sketch
800 | local sketch=$2
801 |
802 | # is this the last sketch for this platform? 0: no, 1: yes
803 | local last_sketch=$3
804 |
805 | # echo out the json
806 | echo -n "\"$sketch\": $status_number"
807 |
808 | # echo a comma unless this is the last sketch for the platform
809 | if [ $last_sketch -ne 1 ]; then
810 | echo -n ", "
811 | fi
812 |
813 | }
814 |
815 | # generate json string for a platform
816 | function json_platform()
817 | {
818 |
819 | # the platform key from main platforms or aux platforms
820 | local platform_key=$1
821 |
822 | # 0: failed, 1: passed
823 | local status_number=$2
824 |
825 | # the json string for the verified sketches
826 | local sketch_json=$3
827 |
828 | # is this the last platform we are building? 0: no, 1: yes
829 | local last_platform=$4
830 |
831 | echo -n "\"$platform_key\": { \"status\": $status_number, \"builds\": { $sketch_json } }"
832 |
833 | # echo a comma unless this is the last sketch for the platform
834 | if [ $last_platform -ne 1 ]; then
835 | echo -n ", "
836 | fi
837 |
838 | }
839 |
840 | # generate final json string
841 | function json_main_platforms()
842 | {
843 |
844 | # 0: failed, 1: passed
845 | local status_number=$1
846 |
847 | # the json string for the main platforms
848 | local platforms_json=$2
849 |
850 | local repo=$(git config --get remote.origin.url)
851 |
852 | echo -e "\n||||||||||||||||||||||||||||| JSON STATUS ||||||||||||||||||||||||||||||"
853 |
854 | echo -n "{ \"repo\": \"$repo\", "
855 | echo -n "\"status\": $status_number, "
856 | echo -n "\"passed\": $PASS_COUNT, "
857 | echo -n "\"skipped\": $SKIP_COUNT, "
858 | echo -n "\"failed\": $FAIL_COUNT, "
859 | echo "\"platforms\": { $platforms_json } }"
860 |
861 | echo -e "||||||||||||||||||||||||||||| JSON STATUS ||||||||||||||||||||||||||||||\n"
862 |
863 | }
864 | #If there is an argument
865 | if [[ ! $# -eq 0 ]] ; then
866 | # define output directory for .hex files
867 | export ARDUINO_HEX_DIR=arduino_build_$TRAVIS_BUILD_NUMBER
868 |
869 | # link test library folder to the arduino libraries folder
870 | ln -s $TRAVIS_BUILD_DIR $HOME/arduino_ide/libraries/Adafruit_Test_Library
871 |
872 | # add the arduino CLI to our PATH
873 | export PATH="$HOME/arduino_ide:$PATH"
874 |
875 | "$@"
876 | fi
877 |
--------------------------------------------------------------------------------
/Doxyfile.default:
--------------------------------------------------------------------------------
1 | # Doxyfile 1.8.13
2 |
3 | # This file describes the settings to be used by the documentation system
4 | # doxygen (www.doxygen.org) for a project.
5 | #
6 | # All text after a double hash (##) is considered a comment and is placed in
7 | # front of the TAG it is preceding.
8 | #
9 | # All text after a single hash (#) is considered a comment and will be ignored.
10 | # The format is:
11 | # TAG = value [value, ...]
12 | # For lists, items can also be appended using:
13 | # TAG += value [value, ...]
14 | # Values that contain spaces should be placed between quotes (\" \").
15 |
16 | #---------------------------------------------------------------------------
17 | # Project related configuration options
18 | #---------------------------------------------------------------------------
19 |
20 | # This tag specifies the encoding used for all characters in the config file
21 | # that follow. The default is UTF-8 which is also the encoding used for all text
22 | # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
23 | # built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
24 | # for the list of possible encodings.
25 | # The default value is: UTF-8.
26 |
27 | DOXYFILE_ENCODING = UTF-8
28 |
29 | # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
30 | # double-quotes, unless you are using Doxywizard) that should identify the
31 | # project for which the documentation is generated. This name is used in the
32 | # title of most generated pages and in a few other places.
33 | # The default value is: My Project.
34 |
35 | PROJECT_NAME = "Adafruit Library"
36 |
37 | # The PROJECT_NUMBER tag can be used to enter a project or revision number. This
38 | # could be handy for archiving the generated documentation or if some version
39 | # control system is used.
40 |
41 | PROJECT_NUMBER =
42 |
43 | # Using the PROJECT_BRIEF tag one can provide an optional one line description
44 | # for a project that appears at the top of each page and should give viewer a
45 | # quick idea about the purpose of the project. Keep the description short.
46 |
47 | PROJECT_BRIEF =
48 |
49 | # With the PROJECT_LOGO tag one can specify a logo or an icon that is included
50 | # in the documentation. The maximum height of the logo should not exceed 55
51 | # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
52 | # the logo to the output directory.
53 |
54 | PROJECT_LOGO =
55 |
56 | # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
57 | # into which the generated documentation will be written. If a relative path is
58 | # entered, it will be relative to the location where doxygen was started. If
59 | # left blank the current directory will be used.
60 |
61 | OUTPUT_DIRECTORY =
62 |
63 | # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
64 | # directories (in 2 levels) under the output directory of each output format and
65 | # will distribute the generated files over these directories. Enabling this
66 | # option can be useful when feeding doxygen a huge amount of source files, where
67 | # putting all generated files in the same directory would otherwise causes
68 | # performance problems for the file system.
69 | # The default value is: NO.
70 |
71 | CREATE_SUBDIRS = NO
72 |
73 | # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
74 | # characters to appear in the names of generated files. If set to NO, non-ASCII
75 | # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
76 | # U+3044.
77 | # The default value is: NO.
78 |
79 | ALLOW_UNICODE_NAMES = NO
80 |
81 | # The OUTPUT_LANGUAGE tag is used to specify the language in which all
82 | # documentation generated by doxygen is written. Doxygen will use this
83 | # information to generate all constant output in the proper language.
84 | # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
85 | # Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
86 | # Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
87 | # Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
88 | # Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
89 | # Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
90 | # Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
91 | # Ukrainian and Vietnamese.
92 | # The default value is: English.
93 |
94 | OUTPUT_LANGUAGE = English
95 |
96 | # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
97 | # descriptions after the members that are listed in the file and class
98 | # documentation (similar to Javadoc). Set to NO to disable this.
99 | # The default value is: YES.
100 |
101 | BRIEF_MEMBER_DESC = YES
102 |
103 | # If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
104 | # description of a member or function before the detailed description
105 | #
106 | # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
107 | # brief descriptions will be completely suppressed.
108 | # The default value is: YES.
109 |
110 | REPEAT_BRIEF = YES
111 |
112 | # This tag implements a quasi-intelligent brief description abbreviator that is
113 | # used to form the text in various listings. Each string in this list, if found
114 | # as the leading text of the brief description, will be stripped from the text
115 | # and the result, after processing the whole list, is used as the annotated
116 | # text. Otherwise, the brief description is used as-is. If left blank, the
117 | # following values are used ($name is automatically replaced with the name of
118 | # the entity):The $name class, The $name widget, The $name file, is, provides,
119 | # specifies, contains, represents, a, an and the.
120 |
121 | ABBREVIATE_BRIEF = "The $name class" \
122 | "The $name widget" \
123 | "The $name file" \
124 | is \
125 | provides \
126 | specifies \
127 | contains \
128 | represents \
129 | a \
130 | an \
131 | the
132 |
133 | # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
134 | # doxygen will generate a detailed section even if there is only a brief
135 | # description.
136 | # The default value is: NO.
137 |
138 | ALWAYS_DETAILED_SEC = NO
139 |
140 | # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
141 | # inherited members of a class in the documentation of that class as if those
142 | # members were ordinary class members. Constructors, destructors and assignment
143 | # operators of the base classes will not be shown.
144 | # The default value is: NO.
145 |
146 | INLINE_INHERITED_MEMB = NO
147 |
148 | # If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
149 | # before files name in the file list and in the header files. If set to NO the
150 | # shortest path that makes the file name unique will be used
151 | # The default value is: YES.
152 |
153 | FULL_PATH_NAMES = YES
154 |
155 | # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
156 | # Stripping is only done if one of the specified strings matches the left-hand
157 | # part of the path. The tag can be used to show relative paths in the file list.
158 | # If left blank the directory from which doxygen is run is used as the path to
159 | # strip.
160 | #
161 | # Note that you can specify absolute paths here, but also relative paths, which
162 | # will be relative from the directory where doxygen is started.
163 | # This tag requires that the tag FULL_PATH_NAMES is set to YES.
164 |
165 | STRIP_FROM_PATH =
166 |
167 | # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
168 | # path mentioned in the documentation of a class, which tells the reader which
169 | # header file to include in order to use a class. If left blank only the name of
170 | # the header file containing the class definition is used. Otherwise one should
171 | # specify the list of include paths that are normally passed to the compiler
172 | # using the -I flag.
173 |
174 | STRIP_FROM_INC_PATH =
175 |
176 | # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
177 | # less readable) file names. This can be useful is your file systems doesn't
178 | # support long names like on DOS, Mac, or CD-ROM.
179 | # The default value is: NO.
180 |
181 | SHORT_NAMES = NO
182 |
183 | # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
184 | # first line (until the first dot) of a Javadoc-style comment as the brief
185 | # description. If set to NO, the Javadoc-style will behave just like regular Qt-
186 | # style comments (thus requiring an explicit @brief command for a brief
187 | # description.)
188 | # The default value is: NO.
189 |
190 | JAVADOC_AUTOBRIEF = NO
191 |
192 | # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
193 | # line (until the first dot) of a Qt-style comment as the brief description. If
194 | # set to NO, the Qt-style will behave just like regular Qt-style comments (thus
195 | # requiring an explicit \brief command for a brief description.)
196 | # The default value is: NO.
197 |
198 | QT_AUTOBRIEF = NO
199 |
200 | # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
201 | # multi-line C++ special comment block (i.e. a block of //! or /// comments) as
202 | # a brief description. This used to be the default behavior. The new default is
203 | # to treat a multi-line C++ comment block as a detailed description. Set this
204 | # tag to YES if you prefer the old behavior instead.
205 | #
206 | # Note that setting this tag to YES also means that rational rose comments are
207 | # not recognized any more.
208 | # The default value is: NO.
209 |
210 | MULTILINE_CPP_IS_BRIEF = NO
211 |
212 | # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
213 | # documentation from any documented member that it re-implements.
214 | # The default value is: YES.
215 |
216 | INHERIT_DOCS = YES
217 |
218 | # If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
219 | # page for each member. If set to NO, the documentation of a member will be part
220 | # of the file/class/namespace that contains it.
221 | # The default value is: NO.
222 |
223 | SEPARATE_MEMBER_PAGES = NO
224 |
225 | # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
226 | # uses this value to replace tabs by spaces in code fragments.
227 | # Minimum value: 1, maximum value: 16, default value: 4.
228 |
229 | TAB_SIZE = 4
230 |
231 | # This tag can be used to specify a number of aliases that act as commands in
232 | # the documentation. An alias has the form:
233 | # name=value
234 | # For example adding
235 | # "sideeffect=@par Side Effects:\n"
236 | # will allow you to put the command \sideeffect (or @sideeffect) in the
237 | # documentation, which will result in a user-defined paragraph with heading
238 | # "Side Effects:". You can put \n's in the value part of an alias to insert
239 | # newlines.
240 |
241 | ALIASES =
242 |
243 | # This tag can be used to specify a number of word-keyword mappings (TCL only).
244 | # A mapping has the form "name=value". For example adding "class=itcl::class"
245 | # will allow you to use the command class in the itcl::class meaning.
246 |
247 | TCL_SUBST =
248 |
249 | # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
250 | # only. Doxygen will then generate output that is more tailored for C. For
251 | # instance, some of the names that are used will be different. The list of all
252 | # members will be omitted, etc.
253 | # The default value is: NO.
254 |
255 | OPTIMIZE_OUTPUT_FOR_C = NO
256 |
257 | # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
258 | # Python sources only. Doxygen will then generate output that is more tailored
259 | # for that language. For instance, namespaces will be presented as packages,
260 | # qualified scopes will look different, etc.
261 | # The default value is: NO.
262 |
263 | OPTIMIZE_OUTPUT_JAVA = NO
264 |
265 | # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
266 | # sources. Doxygen will then generate output that is tailored for Fortran.
267 | # The default value is: NO.
268 |
269 | OPTIMIZE_FOR_FORTRAN = NO
270 |
271 | # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
272 | # sources. Doxygen will then generate output that is tailored for VHDL.
273 | # The default value is: NO.
274 |
275 | OPTIMIZE_OUTPUT_VHDL = NO
276 |
277 | # Doxygen selects the parser to use depending on the extension of the files it
278 | # parses. With this tag you can assign which parser to use for a given
279 | # extension. Doxygen has a built-in mapping, but you can override or extend it
280 | # using this tag. The format is ext=language, where ext is a file extension, and
281 | # language is one of the parsers supported by doxygen: IDL, Java, Javascript,
282 | # C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
283 | # FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
284 | # Fortran. In the later case the parser tries to guess whether the code is fixed
285 | # or free formatted code, this is the default for Fortran type files), VHDL. For
286 | # instance to make doxygen treat .inc files as Fortran files (default is PHP),
287 | # and .f files as C (default is Fortran), use: inc=Fortran f=C.
288 | #
289 | # Note: For files without extension you can use no_extension as a placeholder.
290 | #
291 | # Note that for custom extensions you also need to set FILE_PATTERNS otherwise
292 | # the files are not read by doxygen.
293 |
294 | EXTENSION_MAPPING =
295 |
296 | # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
297 | # according to the Markdown format, which allows for more readable
298 | # documentation. See http://daringfireball.net/projects/markdown/ for details.
299 | # The output of markdown processing is further processed by doxygen, so you can
300 | # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
301 | # case of backward compatibilities issues.
302 | # The default value is: YES.
303 |
304 | MARKDOWN_SUPPORT = YES
305 |
306 | # When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
307 | # to that level are automatically included in the table of contents, even if
308 | # they do not have an id attribute.
309 | # Note: This feature currently applies only to Markdown headings.
310 | # Minimum value: 0, maximum value: 99, default value: 0.
311 | # This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
312 |
313 | TOC_INCLUDE_HEADINGS = 0
314 |
315 | # When enabled doxygen tries to link words that correspond to documented
316 | # classes, or namespaces to their corresponding documentation. Such a link can
317 | # be prevented in individual cases by putting a % sign in front of the word or
318 | # globally by setting AUTOLINK_SUPPORT to NO.
319 | # The default value is: YES.
320 |
321 | AUTOLINK_SUPPORT = YES
322 |
323 | # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
324 | # to include (a tag file for) the STL sources as input, then you should set this
325 | # tag to YES in order to let doxygen match functions declarations and
326 | # definitions whose arguments contain STL classes (e.g. func(std::string);
327 | # versus func(std::string) {}). This also make the inheritance and collaboration
328 | # diagrams that involve STL classes more complete and accurate.
329 | # The default value is: NO.
330 |
331 | BUILTIN_STL_SUPPORT = NO
332 |
333 | # If you use Microsoft's C++/CLI language, you should set this option to YES to
334 | # enable parsing support.
335 | # The default value is: NO.
336 |
337 | CPP_CLI_SUPPORT = NO
338 |
339 | # Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
340 | # http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
341 | # will parse them like normal C++ but will assume all classes use public instead
342 | # of private inheritance when no explicit protection keyword is present.
343 | # The default value is: NO.
344 |
345 | SIP_SUPPORT = NO
346 |
347 | # For Microsoft's IDL there are propget and propput attributes to indicate
348 | # getter and setter methods for a property. Setting this option to YES will make
349 | # doxygen to replace the get and set methods by a property in the documentation.
350 | # This will only work if the methods are indeed getting or setting a simple
351 | # type. If this is not the case, or you want to show the methods anyway, you
352 | # should set this option to NO.
353 | # The default value is: YES.
354 |
355 | IDL_PROPERTY_SUPPORT = YES
356 |
357 | # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
358 | # tag is set to YES then doxygen will reuse the documentation of the first
359 | # member in the group (if any) for the other members of the group. By default
360 | # all members of a group must be documented explicitly.
361 | # The default value is: NO.
362 |
363 | DISTRIBUTE_GROUP_DOC = NO
364 |
365 | # If one adds a struct or class to a group and this option is enabled, then also
366 | # any nested class or struct is added to the same group. By default this option
367 | # is disabled and one has to add nested compounds explicitly via \ingroup.
368 | # The default value is: NO.
369 |
370 | GROUP_NESTED_COMPOUNDS = NO
371 |
372 | # Set the SUBGROUPING tag to YES to allow class member groups of the same type
373 | # (for instance a group of public functions) to be put as a subgroup of that
374 | # type (e.g. under the Public Functions section). Set it to NO to prevent
375 | # subgrouping. Alternatively, this can be done per class using the
376 | # \nosubgrouping command.
377 | # The default value is: YES.
378 |
379 | SUBGROUPING = YES
380 |
381 | # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
382 | # are shown inside the group in which they are included (e.g. using \ingroup)
383 | # instead of on a separate page (for HTML and Man pages) or section (for LaTeX
384 | # and RTF).
385 | #
386 | # Note that this feature does not work in combination with
387 | # SEPARATE_MEMBER_PAGES.
388 | # The default value is: NO.
389 |
390 | INLINE_GROUPED_CLASSES = NO
391 |
392 | # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
393 | # with only public data fields or simple typedef fields will be shown inline in
394 | # the documentation of the scope in which they are defined (i.e. file,
395 | # namespace, or group documentation), provided this scope is documented. If set
396 | # to NO, structs, classes, and unions are shown on a separate page (for HTML and
397 | # Man pages) or section (for LaTeX and RTF).
398 | # The default value is: NO.
399 |
400 | INLINE_SIMPLE_STRUCTS = NO
401 |
402 | # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
403 | # enum is documented as struct, union, or enum with the name of the typedef. So
404 | # typedef struct TypeS {} TypeT, will appear in the documentation as a struct
405 | # with name TypeT. When disabled the typedef will appear as a member of a file,
406 | # namespace, or class. And the struct will be named TypeS. This can typically be
407 | # useful for C code in case the coding convention dictates that all compound
408 | # types are typedef'ed and only the typedef is referenced, never the tag name.
409 | # The default value is: NO.
410 |
411 | TYPEDEF_HIDES_STRUCT = NO
412 |
413 | # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
414 | # cache is used to resolve symbols given their name and scope. Since this can be
415 | # an expensive process and often the same symbol appears multiple times in the
416 | # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
417 | # doxygen will become slower. If the cache is too large, memory is wasted. The
418 | # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
419 | # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
420 | # symbols. At the end of a run doxygen will report the cache usage and suggest
421 | # the optimal cache size from a speed point of view.
422 | # Minimum value: 0, maximum value: 9, default value: 0.
423 |
424 | LOOKUP_CACHE_SIZE = 0
425 |
426 | #---------------------------------------------------------------------------
427 | # Build related configuration options
428 | #---------------------------------------------------------------------------
429 |
430 | # If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
431 | # documentation are documented, even if no documentation was available. Private
432 | # class members and static file members will be hidden unless the
433 | # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
434 | # Note: This will also disable the warnings about undocumented members that are
435 | # normally produced when WARNINGS is set to YES.
436 | # The default value is: NO.
437 |
438 | EXTRACT_ALL = NO
439 |
440 | # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
441 | # be included in the documentation.
442 | # The default value is: NO.
443 |
444 | EXTRACT_PRIVATE = NO
445 |
446 | # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
447 | # scope will be included in the documentation.
448 | # The default value is: NO.
449 |
450 | EXTRACT_PACKAGE = NO
451 |
452 | # If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
453 | # included in the documentation.
454 | # The default value is: NO.
455 |
456 | EXTRACT_STATIC = NO
457 |
458 | # If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
459 | # locally in source files will be included in the documentation. If set to NO,
460 | # only classes defined in header files are included. Does not have any effect
461 | # for Java sources.
462 | # The default value is: YES.
463 |
464 | EXTRACT_LOCAL_CLASSES = YES
465 |
466 | # This flag is only useful for Objective-C code. If set to YES, local methods,
467 | # which are defined in the implementation section but not in the interface are
468 | # included in the documentation. If set to NO, only methods in the interface are
469 | # included.
470 | # The default value is: NO.
471 |
472 | EXTRACT_LOCAL_METHODS = NO
473 |
474 | # If this flag is set to YES, the members of anonymous namespaces will be
475 | # extracted and appear in the documentation as a namespace called
476 | # 'anonymous_namespace{file}', where file will be replaced with the base name of
477 | # the file that contains the anonymous namespace. By default anonymous namespace
478 | # are hidden.
479 | # The default value is: NO.
480 |
481 | EXTRACT_ANON_NSPACES = NO
482 |
483 | # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
484 | # undocumented members inside documented classes or files. If set to NO these
485 | # members will be included in the various overviews, but no documentation
486 | # section is generated. This option has no effect if EXTRACT_ALL is enabled.
487 | # The default value is: NO.
488 |
489 | HIDE_UNDOC_MEMBERS = NO
490 |
491 | # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
492 | # undocumented classes that are normally visible in the class hierarchy. If set
493 | # to NO, these classes will be included in the various overviews. This option
494 | # has no effect if EXTRACT_ALL is enabled.
495 | # The default value is: NO.
496 |
497 | HIDE_UNDOC_CLASSES = NO
498 |
499 | # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
500 | # (class|struct|union) declarations. If set to NO, these declarations will be
501 | # included in the documentation.
502 | # The default value is: NO.
503 |
504 | HIDE_FRIEND_COMPOUNDS = NO
505 |
506 | # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
507 | # documentation blocks found inside the body of a function. If set to NO, these
508 | # blocks will be appended to the function's detailed documentation block.
509 | # The default value is: NO.
510 |
511 | HIDE_IN_BODY_DOCS = NO
512 |
513 | # The INTERNAL_DOCS tag determines if documentation that is typed after a
514 | # \internal command is included. If the tag is set to NO then the documentation
515 | # will be excluded. Set it to YES to include the internal documentation.
516 | # The default value is: NO.
517 |
518 | INTERNAL_DOCS = NO
519 |
520 | # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
521 | # names in lower-case letters. If set to YES, upper-case letters are also
522 | # allowed. This is useful if you have classes or files whose names only differ
523 | # in case and if your file system supports case sensitive file names. Windows
524 | # and Mac users are advised to set this option to NO.
525 | # The default value is: system dependent.
526 |
527 | CASE_SENSE_NAMES = NO
528 |
529 | # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
530 | # their full class and namespace scopes in the documentation. If set to YES, the
531 | # scope will be hidden.
532 | # The default value is: NO.
533 |
534 | HIDE_SCOPE_NAMES = NO
535 |
536 | # If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
537 | # append additional text to a page's title, such as Class Reference. If set to
538 | # YES the compound reference will be hidden.
539 | # The default value is: NO.
540 |
541 | HIDE_COMPOUND_REFERENCE= NO
542 |
543 | # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
544 | # the files that are included by a file in the documentation of that file.
545 | # The default value is: YES.
546 |
547 | SHOW_INCLUDE_FILES = YES
548 |
549 | # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
550 | # grouped member an include statement to the documentation, telling the reader
551 | # which file to include in order to use the member.
552 | # The default value is: NO.
553 |
554 | SHOW_GROUPED_MEMB_INC = NO
555 |
556 | # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
557 | # files with double quotes in the documentation rather than with sharp brackets.
558 | # The default value is: NO.
559 |
560 | FORCE_LOCAL_INCLUDES = NO
561 |
562 | # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
563 | # documentation for inline members.
564 | # The default value is: YES.
565 |
566 | INLINE_INFO = YES
567 |
568 | # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
569 | # (detailed) documentation of file and class members alphabetically by member
570 | # name. If set to NO, the members will appear in declaration order.
571 | # The default value is: YES.
572 |
573 | SORT_MEMBER_DOCS = NO
574 |
575 | # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
576 | # descriptions of file, namespace and class members alphabetically by member
577 | # name. If set to NO, the members will appear in declaration order. Note that
578 | # this will also influence the order of the classes in the class list.
579 | # The default value is: NO.
580 |
581 | SORT_BRIEF_DOCS = NO
582 |
583 | # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
584 | # (brief and detailed) documentation of class members so that constructors and
585 | # destructors are listed first. If set to NO the constructors will appear in the
586 | # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
587 | # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
588 | # member documentation.
589 | # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
590 | # detailed member documentation.
591 | # The default value is: NO.
592 |
593 | SORT_MEMBERS_CTORS_1ST = NO
594 |
595 | # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
596 | # of group names into alphabetical order. If set to NO the group names will
597 | # appear in their defined order.
598 | # The default value is: NO.
599 |
600 | SORT_GROUP_NAMES = NO
601 |
602 | # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
603 | # fully-qualified names, including namespaces. If set to NO, the class list will
604 | # be sorted only by class name, not including the namespace part.
605 | # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
606 | # Note: This option applies only to the class list, not to the alphabetical
607 | # list.
608 | # The default value is: NO.
609 |
610 | SORT_BY_SCOPE_NAME = NO
611 |
612 | # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
613 | # type resolution of all parameters of a function it will reject a match between
614 | # the prototype and the implementation of a member function even if there is
615 | # only one candidate or it is obvious which candidate to choose by doing a
616 | # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
617 | # accept a match between prototype and implementation in such cases.
618 | # The default value is: NO.
619 |
620 | STRICT_PROTO_MATCHING = NO
621 |
622 | # The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
623 | # list. This list is created by putting \todo commands in the documentation.
624 | # The default value is: YES.
625 |
626 | GENERATE_TODOLIST = YES
627 |
628 | # The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
629 | # list. This list is created by putting \test commands in the documentation.
630 | # The default value is: YES.
631 |
632 | GENERATE_TESTLIST = YES
633 |
634 | # The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
635 | # list. This list is created by putting \bug commands in the documentation.
636 | # The default value is: YES.
637 |
638 | GENERATE_BUGLIST = YES
639 |
640 | # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
641 | # the deprecated list. This list is created by putting \deprecated commands in
642 | # the documentation.
643 | # The default value is: YES.
644 |
645 | GENERATE_DEPRECATEDLIST= YES
646 |
647 | # The ENABLED_SECTIONS tag can be used to enable conditional documentation
648 | # sections, marked by \if ... \endif and \cond
649 | # ... \endcond blocks.
650 |
651 | ENABLED_SECTIONS =
652 |
653 | # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
654 | # initial value of a variable or macro / define can have for it to appear in the
655 | # documentation. If the initializer consists of more lines than specified here
656 | # it will be hidden. Use a value of 0 to hide initializers completely. The
657 | # appearance of the value of individual variables and macros / defines can be
658 | # controlled using \showinitializer or \hideinitializer command in the
659 | # documentation regardless of this setting.
660 | # Minimum value: 0, maximum value: 10000, default value: 30.
661 |
662 | MAX_INITIALIZER_LINES = 30
663 |
664 | # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
665 | # the bottom of the documentation of classes and structs. If set to YES, the
666 | # list will mention the files that were used to generate the documentation.
667 | # The default value is: YES.
668 |
669 | SHOW_USED_FILES = YES
670 |
671 | # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
672 | # will remove the Files entry from the Quick Index and from the Folder Tree View
673 | # (if specified).
674 | # The default value is: YES.
675 |
676 | SHOW_FILES = YES
677 |
678 | # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
679 | # page. This will remove the Namespaces entry from the Quick Index and from the
680 | # Folder Tree View (if specified).
681 | # The default value is: YES.
682 |
683 | SHOW_NAMESPACES = YES
684 |
685 | # The FILE_VERSION_FILTER tag can be used to specify a program or script that
686 | # doxygen should invoke to get the current version for each file (typically from
687 | # the version control system). Doxygen will invoke the program by executing (via
688 | # popen()) the command command input-file, where command is the value of the
689 | # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
690 | # by doxygen. Whatever the program writes to standard output is used as the file
691 | # version. For an example see the documentation.
692 |
693 | FILE_VERSION_FILTER =
694 |
695 | # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
696 | # by doxygen. The layout file controls the global structure of the generated
697 | # output files in an output format independent way. To create the layout file
698 | # that represents doxygen's defaults, run doxygen with the -l option. You can
699 | # optionally specify a file name after the option, if omitted DoxygenLayout.xml
700 | # will be used as the name of the layout file.
701 | #
702 | # Note that if you run doxygen from a directory containing a file called
703 | # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
704 | # tag is left empty.
705 |
706 | LAYOUT_FILE =
707 |
708 | # The CITE_BIB_FILES tag can be used to specify one or more bib files containing
709 | # the reference definitions. This must be a list of .bib files. The .bib
710 | # extension is automatically appended if omitted. This requires the bibtex tool
711 | # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
712 | # For LaTeX the style of the bibliography can be controlled using
713 | # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
714 | # search path. See also \cite for info how to create references.
715 |
716 | CITE_BIB_FILES =
717 |
718 | #---------------------------------------------------------------------------
719 | # Configuration options related to warning and progress messages
720 | #---------------------------------------------------------------------------
721 |
722 | # The QUIET tag can be used to turn on/off the messages that are generated to
723 | # standard output by doxygen. If QUIET is set to YES this implies that the
724 | # messages are off.
725 | # The default value is: NO.
726 |
727 | QUIET = YES
728 |
729 | # The WARNINGS tag can be used to turn on/off the warning messages that are
730 | # generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
731 | # this implies that the warnings are on.
732 | #
733 | # Tip: Turn warnings on while writing the documentation.
734 | # The default value is: YES.
735 |
736 | WARNINGS = YES
737 |
738 | # If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
739 | # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
740 | # will automatically be disabled.
741 | # The default value is: YES.
742 |
743 | WARN_IF_UNDOCUMENTED = YES
744 |
745 | # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
746 | # potential errors in the documentation, such as not documenting some parameters
747 | # in a documented function, or documenting parameters that don't exist or using
748 | # markup commands wrongly.
749 | # The default value is: YES.
750 |
751 | WARN_IF_DOC_ERROR = YES
752 |
753 | # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
754 | # are documented, but have no documentation for their parameters or return
755 | # value. If set to NO, doxygen will only warn about wrong or incomplete
756 | # parameter documentation, but not about the absence of documentation.
757 | # The default value is: NO.
758 |
759 | WARN_NO_PARAMDOC = YES
760 |
761 | # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
762 | # a warning is encountered.
763 | # The default value is: NO.
764 |
765 | WARN_AS_ERROR = NO
766 |
767 | # The WARN_FORMAT tag determines the format of the warning messages that doxygen
768 | # can produce. The string should contain the $file, $line, and $text tags, which
769 | # will be replaced by the file and line number from which the warning originated
770 | # and the warning text. Optionally the format may contain $version, which will
771 | # be replaced by the version of the file (if it could be obtained via
772 | # FILE_VERSION_FILTER)
773 | # The default value is: $file:$line: $text.
774 |
775 | WARN_FORMAT = "$file:$line: $text"
776 |
777 | # The WARN_LOGFILE tag can be used to specify a file to which warning and error
778 | # messages should be written. If left blank the output is written to standard
779 | # error (stderr).
780 |
781 | WARN_LOGFILE =
782 |
783 | #---------------------------------------------------------------------------
784 | # Configuration options related to the input files
785 | #---------------------------------------------------------------------------
786 |
787 | # The INPUT tag is used to specify the files and/or directories that contain
788 | # documented source files. You may enter file names like myfile.cpp or
789 | # directories like /usr/src/myproject. Separate the files or directories with
790 | # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
791 | # Note: If this tag is empty the current directory is searched.
792 |
793 | INPUT =
794 |
795 | # This tag can be used to specify the character encoding of the source files
796 | # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
797 | # libiconv (or the iconv built into libc) for the transcoding. See the libiconv
798 | # documentation (see: http://www.gnu.org/software/libiconv) for the list of
799 | # possible encodings.
800 | # The default value is: UTF-8.
801 |
802 | INPUT_ENCODING = UTF-8
803 |
804 | # If the value of the INPUT tag contains directories, you can use the
805 | # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
806 | # *.h) to filter out the source-files in the directories.
807 | #
808 | # Note that for custom extensions or not directly supported extensions you also
809 | # need to set EXTENSION_MAPPING for the extension otherwise the files are not
810 | # read by doxygen.
811 | #
812 | # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
813 | # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
814 | # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
815 | # *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
816 | # *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf.
817 |
818 | FILE_PATTERNS = *.c \
819 | *.cc \
820 | *.cxx \
821 | *.cpp \
822 | *.c++ \
823 | *.h \
824 | *.hh \
825 | *.hxx \
826 | *.hpp \
827 | *.h++
828 |
829 | # The RECURSIVE tag can be used to specify whether or not subdirectories should
830 | # be searched for input files as well.
831 | # The default value is: NO.
832 |
833 | RECURSIVE = NO
834 |
835 | # The EXCLUDE tag can be used to specify files and/or directories that should be
836 | # excluded from the INPUT source files. This way you can easily exclude a
837 | # subdirectory from a directory tree whose root is specified with the INPUT tag.
838 | #
839 | # Note that relative paths are relative to the directory from which doxygen is
840 | # run.
841 |
842 | EXCLUDE =
843 |
844 | # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
845 | # directories that are symbolic links (a Unix file system feature) are excluded
846 | # from the input.
847 | # The default value is: NO.
848 |
849 | EXCLUDE_SYMLINKS = NO
850 |
851 | # If the value of the INPUT tag contains directories, you can use the
852 | # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
853 | # certain files from those directories.
854 | #
855 | # Note that the wildcards are matched against the file with absolute path, so to
856 | # exclude all test directories for example use the pattern */test/*
857 |
858 | EXCLUDE_PATTERNS = *.md
859 |
860 | # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
861 | # (namespaces, classes, functions, etc.) that should be excluded from the
862 | # output. The symbol name can be a fully qualified name, a word, or if the
863 | # wildcard * is used, a substring. Examples: ANamespace, AClass,
864 | # AClass::ANamespace, ANamespace::*Test
865 | #
866 | # Note that the wildcards are matched against the file with absolute path, so to
867 | # exclude all test directories use the pattern */test/*
868 |
869 | EXCLUDE_SYMBOLS =
870 |
871 | # The EXAMPLE_PATH tag can be used to specify one or more files or directories
872 | # that contain example code fragments that are included (see the \include
873 | # command).
874 |
875 | EXAMPLE_PATH =
876 |
877 | # If the value of the EXAMPLE_PATH tag contains directories, you can use the
878 | # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
879 | # *.h) to filter out the source-files in the directories. If left blank all
880 | # files are included.
881 |
882 | EXAMPLE_PATTERNS = *
883 |
884 | # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
885 | # searched for input files to be used with the \include or \dontinclude commands
886 | # irrespective of the value of the RECURSIVE tag.
887 | # The default value is: NO.
888 |
889 | EXAMPLE_RECURSIVE = NO
890 |
891 | # The IMAGE_PATH tag can be used to specify one or more files or directories
892 | # that contain images that are to be included in the documentation (see the
893 | # \image command).
894 |
895 | IMAGE_PATH =
896 |
897 | # The INPUT_FILTER tag can be used to specify a program that doxygen should
898 | # invoke to filter for each input file. Doxygen will invoke the filter program
899 | # by executing (via popen()) the command:
900 | #
901 | #
902 | #
903 | # where is the value of the INPUT_FILTER tag, and is the
904 | # name of an input file. Doxygen will then use the output that the filter
905 | # program writes to standard output. If FILTER_PATTERNS is specified, this tag
906 | # will be ignored.
907 | #
908 | # Note that the filter must not add or remove lines; it is applied before the
909 | # code is scanned, but not when the output code is generated. If lines are added
910 | # or removed, the anchors will not be placed correctly.
911 | #
912 | # Note that for custom extensions or not directly supported extensions you also
913 | # need to set EXTENSION_MAPPING for the extension otherwise the files are not
914 | # properly processed by doxygen.
915 |
916 | INPUT_FILTER =
917 |
918 | # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
919 | # basis. Doxygen will compare the file name with each pattern and apply the
920 | # filter if there is a match. The filters are a list of the form: pattern=filter
921 | # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
922 | # filters are used. If the FILTER_PATTERNS tag is empty or if none of the
923 | # patterns match the file name, INPUT_FILTER is applied.
924 | #
925 | # Note that for custom extensions or not directly supported extensions you also
926 | # need to set EXTENSION_MAPPING for the extension otherwise the files are not
927 | # properly processed by doxygen.
928 |
929 | FILTER_PATTERNS =
930 |
931 | # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
932 | # INPUT_FILTER) will also be used to filter the input files that are used for
933 | # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
934 | # The default value is: NO.
935 |
936 | FILTER_SOURCE_FILES = NO
937 |
938 | # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
939 | # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
940 | # it is also possible to disable source filtering for a specific pattern using
941 | # *.ext= (so without naming a filter).
942 | # This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
943 |
944 | FILTER_SOURCE_PATTERNS =
945 |
946 | # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
947 | # is part of the input, its contents will be placed on the main page
948 | # (index.html). This can be useful if you have a project on for instance GitHub
949 | # and want to reuse the introduction page also for the doxygen output.
950 |
951 | USE_MDFILE_AS_MAINPAGE =
952 |
953 | #---------------------------------------------------------------------------
954 | # Configuration options related to source browsing
955 | #---------------------------------------------------------------------------
956 |
957 | # If the SOURCE_BROWSER tag is set to YES then a list of source files will be
958 | # generated. Documented entities will be cross-referenced with these sources.
959 | #
960 | # Note: To get rid of all source code in the generated output, make sure that
961 | # also VERBATIM_HEADERS is set to NO.
962 | # The default value is: NO.
963 |
964 | SOURCE_BROWSER = NO
965 |
966 | # Setting the INLINE_SOURCES tag to YES will include the body of functions,
967 | # classes and enums directly into the documentation.
968 | # The default value is: NO.
969 |
970 | INLINE_SOURCES = NO
971 |
972 | # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
973 | # special comment blocks from generated source code fragments. Normal C, C++ and
974 | # Fortran comments will always remain visible.
975 | # The default value is: YES.
976 |
977 | STRIP_CODE_COMMENTS = YES
978 |
979 | # If the REFERENCED_BY_RELATION tag is set to YES then for each documented
980 | # function all documented functions referencing it will be listed.
981 | # The default value is: NO.
982 |
983 | REFERENCED_BY_RELATION = NO
984 |
985 | # If the REFERENCES_RELATION tag is set to YES then for each documented function
986 | # all documented entities called/used by that function will be listed.
987 | # The default value is: NO.
988 |
989 | REFERENCES_RELATION = NO
990 |
991 | # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
992 | # to YES then the hyperlinks from functions in REFERENCES_RELATION and
993 | # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
994 | # link to the documentation.
995 | # The default value is: YES.
996 |
997 | REFERENCES_LINK_SOURCE = YES
998 |
999 | # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
1000 | # source code will show a tooltip with additional information such as prototype,
1001 | # brief description and links to the definition and documentation. Since this
1002 | # will make the HTML file larger and loading of large files a bit slower, you
1003 | # can opt to disable this feature.
1004 | # The default value is: YES.
1005 | # This tag requires that the tag SOURCE_BROWSER is set to YES.
1006 |
1007 | SOURCE_TOOLTIPS = YES
1008 |
1009 | # If the USE_HTAGS tag is set to YES then the references to source code will
1010 | # point to the HTML generated by the htags(1) tool instead of doxygen built-in
1011 | # source browser. The htags tool is part of GNU's global source tagging system
1012 | # (see http://www.gnu.org/software/global/global.html). You will need version
1013 | # 4.8.6 or higher.
1014 | #
1015 | # To use it do the following:
1016 | # - Install the latest version of global
1017 | # - Enable SOURCE_BROWSER and USE_HTAGS in the config file
1018 | # - Make sure the INPUT points to the root of the source tree
1019 | # - Run doxygen as normal
1020 | #
1021 | # Doxygen will invoke htags (and that will in turn invoke gtags), so these
1022 | # tools must be available from the command line (i.e. in the search path).
1023 | #
1024 | # The result: instead of the source browser generated by doxygen, the links to
1025 | # source code will now point to the output of htags.
1026 | # The default value is: NO.
1027 | # This tag requires that the tag SOURCE_BROWSER is set to YES.
1028 |
1029 | USE_HTAGS = NO
1030 |
1031 | # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
1032 | # verbatim copy of the header file for each class for which an include is
1033 | # specified. Set to NO to disable this.
1034 | # See also: Section \class.
1035 | # The default value is: YES.
1036 |
1037 | VERBATIM_HEADERS = YES
1038 |
1039 | # If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
1040 | # clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
1041 | # cost of reduced performance. This can be particularly helpful with template
1042 | # rich C++ code for which doxygen's built-in parser lacks the necessary type
1043 | # information.
1044 | # Note: The availability of this option depends on whether or not doxygen was
1045 | # generated with the -Duse-libclang=ON option for CMake.
1046 | # The default value is: NO.
1047 |
1048 | CLANG_ASSISTED_PARSING = NO
1049 |
1050 | # If clang assisted parsing is enabled you can provide the compiler with command
1051 | # line options that you would normally use when invoking the compiler. Note that
1052 | # the include paths will already be set by doxygen for the files and directories
1053 | # specified with INPUT and INCLUDE_PATH.
1054 | # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
1055 |
1056 | CLANG_OPTIONS =
1057 |
1058 | #---------------------------------------------------------------------------
1059 | # Configuration options related to the alphabetical class index
1060 | #---------------------------------------------------------------------------
1061 |
1062 | # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
1063 | # compounds will be generated. Enable this if the project contains a lot of
1064 | # classes, structs, unions or interfaces.
1065 | # The default value is: YES.
1066 |
1067 | ALPHABETICAL_INDEX = YES
1068 |
1069 | # The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
1070 | # which the alphabetical index list will be split.
1071 | # Minimum value: 1, maximum value: 20, default value: 5.
1072 | # This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
1073 |
1074 | COLS_IN_ALPHA_INDEX = 5
1075 |
1076 | # In case all classes in a project start with a common prefix, all classes will
1077 | # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
1078 | # can be used to specify a prefix (or a list of prefixes) that should be ignored
1079 | # while generating the index headers.
1080 | # This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
1081 |
1082 | IGNORE_PREFIX =
1083 |
1084 | #---------------------------------------------------------------------------
1085 | # Configuration options related to the HTML output
1086 | #---------------------------------------------------------------------------
1087 |
1088 | # If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
1089 | # The default value is: YES.
1090 |
1091 | GENERATE_HTML = YES
1092 |
1093 | # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
1094 | # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1095 | # it.
1096 | # The default directory is: html.
1097 | # This tag requires that the tag GENERATE_HTML is set to YES.
1098 |
1099 | HTML_OUTPUT = html
1100 |
1101 | # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
1102 | # generated HTML page (for example: .htm, .php, .asp).
1103 | # The default value is: .html.
1104 | # This tag requires that the tag GENERATE_HTML is set to YES.
1105 |
1106 | HTML_FILE_EXTENSION = .html
1107 |
1108 | # The HTML_HEADER tag can be used to specify a user-defined HTML header file for
1109 | # each generated HTML page. If the tag is left blank doxygen will generate a
1110 | # standard header.
1111 | #
1112 | # To get valid HTML the header file that includes any scripts and style sheets
1113 | # that doxygen needs, which is dependent on the configuration options used (e.g.
1114 | # the setting GENERATE_TREEVIEW). It is highly recommended to start with a
1115 | # default header using
1116 | # doxygen -w html new_header.html new_footer.html new_stylesheet.css
1117 | # YourConfigFile
1118 | # and then modify the file new_header.html. See also section "Doxygen usage"
1119 | # for information on how to generate the default header that doxygen normally
1120 | # uses.
1121 | # Note: The header is subject to change so you typically have to regenerate the
1122 | # default header when upgrading to a newer version of doxygen. For a description
1123 | # of the possible markers and block names see the documentation.
1124 | # This tag requires that the tag GENERATE_HTML is set to YES.
1125 |
1126 | HTML_HEADER =
1127 |
1128 | # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
1129 | # generated HTML page. If the tag is left blank doxygen will generate a standard
1130 | # footer. See HTML_HEADER for more information on how to generate a default
1131 | # footer and what special commands can be used inside the footer. See also
1132 | # section "Doxygen usage" for information on how to generate the default footer
1133 | # that doxygen normally uses.
1134 | # This tag requires that the tag GENERATE_HTML is set to YES.
1135 |
1136 | HTML_FOOTER =
1137 |
1138 | # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
1139 | # sheet that is used by each HTML page. It can be used to fine-tune the look of
1140 | # the HTML output. If left blank doxygen will generate a default style sheet.
1141 | # See also section "Doxygen usage" for information on how to generate the style
1142 | # sheet that doxygen normally uses.
1143 | # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
1144 | # it is more robust and this tag (HTML_STYLESHEET) will in the future become
1145 | # obsolete.
1146 | # This tag requires that the tag GENERATE_HTML is set to YES.
1147 |
1148 | HTML_STYLESHEET =
1149 |
1150 | # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
1151 | # cascading style sheets that are included after the standard style sheets
1152 | # created by doxygen. Using this option one can overrule certain style aspects.
1153 | # This is preferred over using HTML_STYLESHEET since it does not replace the
1154 | # standard style sheet and is therefore more robust against future updates.
1155 | # Doxygen will copy the style sheet files to the output directory.
1156 | # Note: The order of the extra style sheet files is of importance (e.g. the last
1157 | # style sheet in the list overrules the setting of the previous ones in the
1158 | # list). For an example see the documentation.
1159 | # This tag requires that the tag GENERATE_HTML is set to YES.
1160 |
1161 | HTML_EXTRA_STYLESHEET =
1162 |
1163 | # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
1164 | # other source files which should be copied to the HTML output directory. Note
1165 | # that these files will be copied to the base HTML output directory. Use the
1166 | # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
1167 | # files. In the HTML_STYLESHEET file, use the file name only. Also note that the
1168 | # files will be copied as-is; there are no commands or markers available.
1169 | # This tag requires that the tag GENERATE_HTML is set to YES.
1170 |
1171 | HTML_EXTRA_FILES =
1172 |
1173 | # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
1174 | # will adjust the colors in the style sheet and background images according to
1175 | # this color. Hue is specified as an angle on a colorwheel, see
1176 | # http://en.wikipedia.org/wiki/Hue for more information. For instance the value
1177 | # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
1178 | # purple, and 360 is red again.
1179 | # Minimum value: 0, maximum value: 359, default value: 220.
1180 | # This tag requires that the tag GENERATE_HTML is set to YES.
1181 |
1182 | HTML_COLORSTYLE_HUE = 220
1183 |
1184 | # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
1185 | # in the HTML output. For a value of 0 the output will use grayscales only. A
1186 | # value of 255 will produce the most vivid colors.
1187 | # Minimum value: 0, maximum value: 255, default value: 100.
1188 | # This tag requires that the tag GENERATE_HTML is set to YES.
1189 |
1190 | HTML_COLORSTYLE_SAT = 100
1191 |
1192 | # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
1193 | # luminance component of the colors in the HTML output. Values below 100
1194 | # gradually make the output lighter, whereas values above 100 make the output
1195 | # darker. The value divided by 100 is the actual gamma applied, so 80 represents
1196 | # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
1197 | # change the gamma.
1198 | # Minimum value: 40, maximum value: 240, default value: 80.
1199 | # This tag requires that the tag GENERATE_HTML is set to YES.
1200 |
1201 | HTML_COLORSTYLE_GAMMA = 80
1202 |
1203 | # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
1204 | # page will contain the date and time when the page was generated. Setting this
1205 | # to YES can help to show when doxygen was last run and thus if the
1206 | # documentation is up to date.
1207 | # The default value is: NO.
1208 | # This tag requires that the tag GENERATE_HTML is set to YES.
1209 |
1210 | HTML_TIMESTAMP = NO
1211 |
1212 | # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
1213 | # documentation will contain sections that can be hidden and shown after the
1214 | # page has loaded.
1215 | # The default value is: NO.
1216 | # This tag requires that the tag GENERATE_HTML is set to YES.
1217 |
1218 | HTML_DYNAMIC_SECTIONS = NO
1219 |
1220 | # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
1221 | # shown in the various tree structured indices initially; the user can expand
1222 | # and collapse entries dynamically later on. Doxygen will expand the tree to
1223 | # such a level that at most the specified number of entries are visible (unless
1224 | # a fully collapsed tree already exceeds this amount). So setting the number of
1225 | # entries 1 will produce a full collapsed tree by default. 0 is a special value
1226 | # representing an infinite number of entries and will result in a full expanded
1227 | # tree by default.
1228 | # Minimum value: 0, maximum value: 9999, default value: 100.
1229 | # This tag requires that the tag GENERATE_HTML is set to YES.
1230 |
1231 | HTML_INDEX_NUM_ENTRIES = 100
1232 |
1233 | # If the GENERATE_DOCSET tag is set to YES, additional index files will be
1234 | # generated that can be used as input for Apple's Xcode 3 integrated development
1235 | # environment (see: http://developer.apple.com/tools/xcode/), introduced with
1236 | # OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
1237 | # Makefile in the HTML output directory. Running make will produce the docset in
1238 | # that directory and running make install will install the docset in
1239 | # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
1240 | # startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
1241 | # for more information.
1242 | # The default value is: NO.
1243 | # This tag requires that the tag GENERATE_HTML is set to YES.
1244 |
1245 | GENERATE_DOCSET = NO
1246 |
1247 | # This tag determines the name of the docset feed. A documentation feed provides
1248 | # an umbrella under which multiple documentation sets from a single provider
1249 | # (such as a company or product suite) can be grouped.
1250 | # The default value is: Doxygen generated docs.
1251 | # This tag requires that the tag GENERATE_DOCSET is set to YES.
1252 |
1253 | DOCSET_FEEDNAME = "Doxygen generated docs"
1254 |
1255 | # This tag specifies a string that should uniquely identify the documentation
1256 | # set bundle. This should be a reverse domain-name style string, e.g.
1257 | # com.mycompany.MyDocSet. Doxygen will append .docset to the name.
1258 | # The default value is: org.doxygen.Project.
1259 | # This tag requires that the tag GENERATE_DOCSET is set to YES.
1260 |
1261 | DOCSET_BUNDLE_ID = org.doxygen.Project
1262 |
1263 | # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
1264 | # the documentation publisher. This should be a reverse domain-name style
1265 | # string, e.g. com.mycompany.MyDocSet.documentation.
1266 | # The default value is: org.doxygen.Publisher.
1267 | # This tag requires that the tag GENERATE_DOCSET is set to YES.
1268 |
1269 | DOCSET_PUBLISHER_ID = org.doxygen.Publisher
1270 |
1271 | # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
1272 | # The default value is: Publisher.
1273 | # This tag requires that the tag GENERATE_DOCSET is set to YES.
1274 |
1275 | DOCSET_PUBLISHER_NAME = Publisher
1276 |
1277 | # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
1278 | # additional HTML index files: index.hhp, index.hhc, and index.hhk. The
1279 | # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
1280 | # (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
1281 | # Windows.
1282 | #
1283 | # The HTML Help Workshop contains a compiler that can convert all HTML output
1284 | # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
1285 | # files are now used as the Windows 98 help format, and will replace the old
1286 | # Windows help format (.hlp) on all Windows platforms in the future. Compressed
1287 | # HTML files also contain an index, a table of contents, and you can search for
1288 | # words in the documentation. The HTML workshop also contains a viewer for
1289 | # compressed HTML files.
1290 | # The default value is: NO.
1291 | # This tag requires that the tag GENERATE_HTML is set to YES.
1292 |
1293 | GENERATE_HTMLHELP = NO
1294 |
1295 | # The CHM_FILE tag can be used to specify the file name of the resulting .chm
1296 | # file. You can add a path in front of the file if the result should not be
1297 | # written to the html output directory.
1298 | # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1299 |
1300 | CHM_FILE =
1301 |
1302 | # The HHC_LOCATION tag can be used to specify the location (absolute path
1303 | # including file name) of the HTML help compiler (hhc.exe). If non-empty,
1304 | # doxygen will try to run the HTML help compiler on the generated index.hhp.
1305 | # The file has to be specified with full path.
1306 | # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1307 |
1308 | HHC_LOCATION =
1309 |
1310 | # The GENERATE_CHI flag controls if a separate .chi index file is generated
1311 | # (YES) or that it should be included in the master .chm file (NO).
1312 | # The default value is: NO.
1313 | # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1314 |
1315 | GENERATE_CHI = NO
1316 |
1317 | # The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
1318 | # and project file content.
1319 | # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1320 |
1321 | CHM_INDEX_ENCODING =
1322 |
1323 | # The BINARY_TOC flag controls whether a binary table of contents is generated
1324 | # (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
1325 | # enables the Previous and Next buttons.
1326 | # The default value is: NO.
1327 | # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1328 |
1329 | BINARY_TOC = NO
1330 |
1331 | # The TOC_EXPAND flag can be set to YES to add extra items for group members to
1332 | # the table of contents of the HTML help documentation and to the tree view.
1333 | # The default value is: NO.
1334 | # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1335 |
1336 | TOC_EXPAND = NO
1337 |
1338 | # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
1339 | # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
1340 | # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
1341 | # (.qch) of the generated HTML documentation.
1342 | # The default value is: NO.
1343 | # This tag requires that the tag GENERATE_HTML is set to YES.
1344 |
1345 | GENERATE_QHP = NO
1346 |
1347 | # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
1348 | # the file name of the resulting .qch file. The path specified is relative to
1349 | # the HTML output folder.
1350 | # This tag requires that the tag GENERATE_QHP is set to YES.
1351 |
1352 | QCH_FILE =
1353 |
1354 | # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
1355 | # Project output. For more information please see Qt Help Project / Namespace
1356 | # (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
1357 | # The default value is: org.doxygen.Project.
1358 | # This tag requires that the tag GENERATE_QHP is set to YES.
1359 |
1360 | QHP_NAMESPACE = org.doxygen.Project
1361 |
1362 | # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
1363 | # Help Project output. For more information please see Qt Help Project / Virtual
1364 | # Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
1365 | # folders).
1366 | # The default value is: doc.
1367 | # This tag requires that the tag GENERATE_QHP is set to YES.
1368 |
1369 | QHP_VIRTUAL_FOLDER = doc
1370 |
1371 | # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
1372 | # filter to add. For more information please see Qt Help Project / Custom
1373 | # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
1374 | # filters).
1375 | # This tag requires that the tag GENERATE_QHP is set to YES.
1376 |
1377 | QHP_CUST_FILTER_NAME =
1378 |
1379 | # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
1380 | # custom filter to add. For more information please see Qt Help Project / Custom
1381 | # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
1382 | # filters).
1383 | # This tag requires that the tag GENERATE_QHP is set to YES.
1384 |
1385 | QHP_CUST_FILTER_ATTRS =
1386 |
1387 | # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
1388 | # project's filter section matches. Qt Help Project / Filter Attributes (see:
1389 | # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
1390 | # This tag requires that the tag GENERATE_QHP is set to YES.
1391 |
1392 | QHP_SECT_FILTER_ATTRS =
1393 |
1394 | # The QHG_LOCATION tag can be used to specify the location of Qt's
1395 | # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
1396 | # generated .qhp file.
1397 | # This tag requires that the tag GENERATE_QHP is set to YES.
1398 |
1399 | QHG_LOCATION =
1400 |
1401 | # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
1402 | # generated, together with the HTML files, they form an Eclipse help plugin. To
1403 | # install this plugin and make it available under the help contents menu in
1404 | # Eclipse, the contents of the directory containing the HTML and XML files needs
1405 | # to be copied into the plugins directory of eclipse. The name of the directory
1406 | # within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
1407 | # After copying Eclipse needs to be restarted before the help appears.
1408 | # The default value is: NO.
1409 | # This tag requires that the tag GENERATE_HTML is set to YES.
1410 |
1411 | GENERATE_ECLIPSEHELP = NO
1412 |
1413 | # A unique identifier for the Eclipse help plugin. When installing the plugin
1414 | # the directory name containing the HTML and XML files should also have this
1415 | # name. Each documentation set should have its own identifier.
1416 | # The default value is: org.doxygen.Project.
1417 | # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
1418 |
1419 | ECLIPSE_DOC_ID = org.doxygen.Project
1420 |
1421 | # If you want full control over the layout of the generated HTML pages it might
1422 | # be necessary to disable the index and replace it with your own. The
1423 | # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
1424 | # of each HTML page. A value of NO enables the index and the value YES disables
1425 | # it. Since the tabs in the index contain the same information as the navigation
1426 | # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
1427 | # The default value is: NO.
1428 | # This tag requires that the tag GENERATE_HTML is set to YES.
1429 |
1430 | DISABLE_INDEX = NO
1431 |
1432 | # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
1433 | # structure should be generated to display hierarchical information. If the tag
1434 | # value is set to YES, a side panel will be generated containing a tree-like
1435 | # index structure (just like the one that is generated for HTML Help). For this
1436 | # to work a browser that supports JavaScript, DHTML, CSS and frames is required
1437 | # (i.e. any modern browser). Windows users are probably better off using the
1438 | # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
1439 | # further fine-tune the look of the index. As an example, the default style
1440 | # sheet generated by doxygen has an example that shows how to put an image at
1441 | # the root of the tree instead of the PROJECT_NAME. Since the tree basically has
1442 | # the same information as the tab index, you could consider setting
1443 | # DISABLE_INDEX to YES when enabling this option.
1444 | # The default value is: NO.
1445 | # This tag requires that the tag GENERATE_HTML is set to YES.
1446 |
1447 | GENERATE_TREEVIEW = NO
1448 |
1449 | # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
1450 | # doxygen will group on one line in the generated HTML documentation.
1451 | #
1452 | # Note that a value of 0 will completely suppress the enum values from appearing
1453 | # in the overview section.
1454 | # Minimum value: 0, maximum value: 20, default value: 4.
1455 | # This tag requires that the tag GENERATE_HTML is set to YES.
1456 |
1457 | ENUM_VALUES_PER_LINE = 4
1458 |
1459 | # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
1460 | # to set the initial width (in pixels) of the frame in which the tree is shown.
1461 | # Minimum value: 0, maximum value: 1500, default value: 250.
1462 | # This tag requires that the tag GENERATE_HTML is set to YES.
1463 |
1464 | TREEVIEW_WIDTH = 250
1465 |
1466 | # If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
1467 | # external symbols imported via tag files in a separate window.
1468 | # The default value is: NO.
1469 | # This tag requires that the tag GENERATE_HTML is set to YES.
1470 |
1471 | EXT_LINKS_IN_WINDOW = NO
1472 |
1473 | # Use this tag to change the font size of LaTeX formulas included as images in
1474 | # the HTML documentation. When you change the font size after a successful
1475 | # doxygen run you need to manually remove any form_*.png images from the HTML
1476 | # output directory to force them to be regenerated.
1477 | # Minimum value: 8, maximum value: 50, default value: 10.
1478 | # This tag requires that the tag GENERATE_HTML is set to YES.
1479 |
1480 | FORMULA_FONTSIZE = 10
1481 |
1482 | # Use the FORMULA_TRANPARENT tag to determine whether or not the images
1483 | # generated for formulas are transparent PNGs. Transparent PNGs are not
1484 | # supported properly for IE 6.0, but are supported on all modern browsers.
1485 | #
1486 | # Note that when changing this option you need to delete any form_*.png files in
1487 | # the HTML output directory before the changes have effect.
1488 | # The default value is: YES.
1489 | # This tag requires that the tag GENERATE_HTML is set to YES.
1490 |
1491 | FORMULA_TRANSPARENT = YES
1492 |
1493 | # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
1494 | # http://www.mathjax.org) which uses client side Javascript for the rendering
1495 | # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
1496 | # installed or if you want to formulas look prettier in the HTML output. When
1497 | # enabled you may also need to install MathJax separately and configure the path
1498 | # to it using the MATHJAX_RELPATH option.
1499 | # The default value is: NO.
1500 | # This tag requires that the tag GENERATE_HTML is set to YES.
1501 |
1502 | USE_MATHJAX = NO
1503 |
1504 | # When MathJax is enabled you can set the default output format to be used for
1505 | # the MathJax output. See the MathJax site (see:
1506 | # http://docs.mathjax.org/en/latest/output.html) for more details.
1507 | # Possible values are: HTML-CSS (which is slower, but has the best
1508 | # compatibility), NativeMML (i.e. MathML) and SVG.
1509 | # The default value is: HTML-CSS.
1510 | # This tag requires that the tag USE_MATHJAX is set to YES.
1511 |
1512 | MATHJAX_FORMAT = HTML-CSS
1513 |
1514 | # When MathJax is enabled you need to specify the location relative to the HTML
1515 | # output directory using the MATHJAX_RELPATH option. The destination directory
1516 | # should contain the MathJax.js script. For instance, if the mathjax directory
1517 | # is located at the same level as the HTML output directory, then
1518 | # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
1519 | # Content Delivery Network so you can quickly see the result without installing
1520 | # MathJax. However, it is strongly recommended to install a local copy of
1521 | # MathJax from http://www.mathjax.org before deployment.
1522 | # The default value is: http://cdn.mathjax.org/mathjax/latest.
1523 | # This tag requires that the tag USE_MATHJAX is set to YES.
1524 |
1525 | MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
1526 |
1527 | # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
1528 | # extension names that should be enabled during MathJax rendering. For example
1529 | # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
1530 | # This tag requires that the tag USE_MATHJAX is set to YES.
1531 |
1532 | MATHJAX_EXTENSIONS =
1533 |
1534 | # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
1535 | # of code that will be used on startup of the MathJax code. See the MathJax site
1536 | # (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
1537 | # example see the documentation.
1538 | # This tag requires that the tag USE_MATHJAX is set to YES.
1539 |
1540 | MATHJAX_CODEFILE =
1541 |
1542 | # When the SEARCHENGINE tag is enabled doxygen will generate a search box for
1543 | # the HTML output. The underlying search engine uses javascript and DHTML and
1544 | # should work on any modern browser. Note that when using HTML help
1545 | # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
1546 | # there is already a search function so this one should typically be disabled.
1547 | # For large projects the javascript based search engine can be slow, then
1548 | # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
1549 | # search using the keyboard; to jump to the search box use + S
1550 | # (what the is depends on the OS and browser, but it is typically
1551 | # , /