aboutsummaryrefslogtreecommitdiffstats
path: root/Makefile
AgeCommit message (Collapse)AuthorFilesLines
2020-09-11build: fix build for Debian 9 and Debian 10Benoît Ganne1-0/+2
Type: fix Change-Id: Ic07d0ae313b32e420ba93693cb75960a86f752a9 Signed-off-by: Benoît Ganne <bganne@cisco.com>
2020-09-02build: Fix 'make build VPP_EXTRA_CMAKE_ARGS=-DVPP_ENABLE_SANITIZE_ADDR=ON' ↵jiangxiaoming1-2/+2
error on Centos 7 Type: fix Signed-off-by: jiangxiaoming <jiangxiaoming@outlook.com> Change-Id: Ic47f5e8627923c951333c70004850b53ed4cab06
2020-08-31af_xdp: AF_XDP input pluginBenoît Ganne1-0/+1
Type: feature Change-Id: I85aa4ad6b68c1aa0e51938002dc691a4b11c545c Signed-off-by: Damjan Marion <damarion@cisco.com> Signed-off-by: Benoît Ganne <bganne@cisco.com>
2020-07-29build: Fix 'make install-deps' errors on aarch64 CentOS 7Jieqiang Wang1-1/+6
On CentOS-7 aarch64, command of 'debuginfo-install -y glibc openssl-libs mbedtls-devel zlib' in 'make install-deps' fails because it tries to install the corresponding *debuginfo* packages from some inaccessible/unmaintained repos on aarch64, e.g., centos-sclo-rh-debuginfo. The error message shows as below. Using 'debuginfo-install --enablerepo=xxx' also fails because it will still enable all the repos including the broken repos on aarch64. Using 'debuginfo-install --disablerepo=xxx' (xxx is the broken repo) works fine but we are not centain about that if VPP user will install additional broken repos on aarch64 or not. So to fix this error, we install all the *debuginfo* packages for 'glibc openssl-libs mbedtls-devel zlib' packages using 'yum install' instead. [root@ ~]# debuginfo-install -y glibc openssl-libs mbedtls-devel zlib Loaded plugins: auto-update-debuginfo, fastestmirror, ovl enabling epel-debuginfo enabling base-debuginfo enabling centos-sclo-rh-debuginfo Loading mirror speeds from cached hostfile epel/aarch64/metalink | 8.2 kB 00:00:00 epel-debuginfo/aarch64/metalink | 8.5 kB 00:00:00 * base: mirror.aktkn.sg * centos-sclo-rh: mirror.aktkn.sg * epel: mirrors.yun-idc.com * epel-debuginfo: mirrors.yun-idc.com * extras: mirror.aktkn.sg * updates: mirror.xtom.com.hk http://debuginfo.centos.org/centos/7/sclo/aarch64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found Trying other mirror. To address this issue please refer to the below wiki article https://wiki.centos.org/yum-errors If above article doesn't help to resolve this issue please use https://bugs.centos.org/. failure: repodata/repomd.xml from centos-sclo-rh-debuginfo: [Errno 256] No more mirrors to try. http://debuginfo.centos.org/centos/7/sclo/aarch64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found Type: fix Change-Id: I017c3b20a167d8035c3ae617b9ad5ae479e52f57 Signed-off-by: Jieqiang Wang <jieqiang.wang@arm.com>
2020-06-15build: fix the build on centos8Yichen Wang1-1/+5
Add missing dependencies and correct the building to support CentOS8 Type: make Change-Id: Ie15b9b1174fa9b6d5ae02bace36ebc77e17d770c Signed-off-by: Yichen Wang <yicwang@cisco.com>
2020-06-04build: add libssl-dev library for ubuntu 20.04Jieqiang Wang1-0/+1
Add the libssl-dev library for ubuntu 20.04 in Makefile. Type: fix Signed-off-by: Jieqiang Wang <jieqiang.wang@arm.com> Change-Id: I4187cb041997e7457734ffdb18bdbec98a051669
2020-05-15misc: fix ubuntu 20.04 python depsDamjan Marion1-7/+7
Type: fix Change-Id: I9cdfbffd6333d090f970422bf047aaa90c1e4c65 Signed-off-by: Damjan Marion <damarion@cisco.com>
2020-05-09vppapigen: api crc checkerOle Troan1-0/+5
crcchecker is a tool for enforcement of the binary API. 1. Production APIs should never change. 2. An API can be deprecated across three release cycles. Release 1: API is marked as deprecated. option deprecated="vyy.mm"; option replaced_by="new_api_2"; Release 2: both old and new APIs are supported Release 3: the deprecated API is deleted. 3. APIs that are experimental / not released are not checked. An API message can be individually marked as in progress, by: option status="in_progress"; In the API definition. The definition of a "production API" is if the major version in the API file is > 0. extras/scripts/crcchecker.py --check-patchset # returns -1 if backwards incompatible extras/scripts/crcchecker.py --dump-manifest extras/scripts/crcchecker.py --git-revision v20.01 <files> extras/scripts/crcchecker.py -- diff <oldfile> <newfile> This patch integrates the tool in "make checkstyle-api". A future patch is required to integrate the tool in the verify job. I.e. this patch does not enable enforcement through Jenkins. Change-Id: I5f13c0976d8a12a58131b3e270f2dc9c00dc7d8c Type: feature Signed-off-by: Ole Troan <ot@cisco.com>
2020-05-08misc: add knob to generate compile_commands.jsonDamjan Marion1-0/+5
Used for lanuguage servers like clangd and ccls Type: improvement Change-Id: I68d534dfa7b8ba3459fbd919d5ffccaa1fa1171e Signed-off-by: Damjan Marion <damarion@cisco.com>
2020-04-30build: rework x86 CPU variantsDamjan Marion1-7/+2
Type: improvement Change-Id: Ief243f88e654e578ef9b8060fcf535b364aececb Signed-off-by: Damjan Marion <damarion@cisco.com>
2020-04-29misc: switch to clang-9Damjan Marion1-1/+1
Type: improvement Change-Id: Iebf77a63c0c19b130a3fbd26b5293304a9fed4c1 Signed-off-by: Damjan Marion <damarion@cisco.com>
2020-03-27build tests: fix 'test-wipe-papi' targetPaul Vinciguerra1-1/+1
Fix transposed terms. Type: fix Change-Id: Ibc3f5d5d9dbd81c9edf09ae5024c3ac4b1939d03 Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2020-03-26build: use gcc-8 as default on ubuntu 18.04Damjan Marion1-0/+6
Type: improvement Change-Id: I34c9e95ad9160436cb62dec7a1a2d0ce94602ab7 Signed-off-by: Damjan Marion <damarion@cisco.com>
2020-03-22vppinfra: fix typo in dlmalloc.cDave Barach1-1/+7
Fix libffi package name for Ubuntu 20.04 Type: fix Signed-off-by: Dave Barach <dave@barachs.net> Change-Id: Idc567717494b4c40c307f20a40d5e10cd26b0a46
2020-03-18build: add snap packaging (experimental)Dave Barach1-1/+17
Type: feature Signed-off-by: Dave Barach <dave@barachs.net> Change-Id: I5a5efde5378f63d89d82d71ae009c7595aaa800c
2020-03-10build: add libssl-dev for ubuntu 16.04 and 18.04Jieqiang Wang1-0/+2
The recent changes to Makefile lead to the lack of libssl-dev dependency for ubuntu 16.04 and 18.04. Add libssl-dev to DEB_DEPENDS variable for corresponding ubuntu version. Type: fix Change-Id: I42e0e4761d5ec377de71b11cccf747c7f55ca337 Signed-off-by: Jieqiang Wang <jieqiang.wang@arm.com>
2020-02-07build: Makefile dep change for ubuntuEd Kern1-3/+5
Alter dep name and location for ubuntu-20 package naming Dropping 14.04 support while keeping 16.04 and 18.04 Dropping python2-dev for ubuntu-20 Type: make Change-Id: I324aa646cdb6e13d39b7a99722857e59906b0843 Signed-off-by: Ed Kern <ejk@cisco.com>
2020-02-05build: Makefile dep changeEd Kern1-3/+3
Alter dep name and location for centos-8 package naming Change-Id: I50eb702d0541b658ea98fd3f190ba0de60c3fc49 Type: make Signed-off-by: Ed Kern <ejk@cisco.com>
2020-01-04misc: fix feature.yamlOle Troan1-5/+3
Add checkfeaturelist validation to checkstyle. Fix two files with errors. Type: docs Change-Id: I81eda0e25b271f2006b4da22efdf7218d52a67d3 Signed-off-by: Ole Troan <ot@cisco.com>
2019-12-20tests: don't prompt to launch gdb for sanity test casePaul Vinciguerra1-0/+2
Type: test Change-Id: I4c54121b76b341381a819cee928c3c2455a83503 Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-12-17build: Add missing package to MakefilePaul Vinciguerra1-2/+6
- add dependency for pip install psutil. See: https://github.com/giampaolo/psutil/blob/master/INSTALL.rst#linux Type: fix Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com> Change-Id: I3a24a9dbfc5093c02e2aedf08ac64f10821693f8
2019-12-17misc: Add CentOS 8 package supportRenato Botelho do Couto1-0/+10
Type: feature Added missing dependencies on RPM spec file and install-dep Ticket: VPP-1800 Signed-off-by: Renato Botelho do Couto <renato@netgate.com> Change-Id: I91d39c94b3f03c213249dff42b264718ef772bdb
2019-12-11docs: Rework the startup configuration sectionJohn DeNisco1-1/+1
Type: docs Signed-off-by: John DeNisco <jdenisco@cisco.com> Change-Id: Ic60aac96a4aeb5532f98dfb85c776bf549c0d660 Signed-off-by: Dave Barach <dave@barachs.net>
2019-12-04build: fix make test with distributed srcDave Wallace1-19/+5
This patch addresses the functionality that is missing for distributed make test source files. In addition it extends the concept of colocating test source code with functional source code (eg. src/vcl/test). It also cleans up deficiencies in the make test makefiles. NOTE: Due to the way sphinx document tools work, all test, all of the make test python code is gathered using soft links into the directory: .../build-root/build-test/src Change summary: - Remove 'make test' help details from main makefile help output to reduce clutter and redundant help output - Move all generated build output to .../build-root/build-test - Move test_vcl.py as first usecase for distributed core feature make test code - Add test-wipe-all target and fix wipe targets to remove all generated files - Fix 'make test-doc' to generate module documentation for all source files - Remove unused targets in test/doc/Makefile - Fix 'make test-shell' - Fix test/ext Makefile to not generate bogus output Type: fix Fixes: a43c93f8554ad7418e31be3791b3fb71232f60ac Change-Id: Icc2ddb81d474081c3ede4548ecd7a0624651f62d Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
2019-11-21build: Update missing packagePaul Vinciguerra1-0/+1
CI jobs are being marked as unstable. 18:02:47 ---> python-tools-install.sh 18:02:47 Listing pip packages 18:02:48 DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning. 18:02:48 Generating Requirements File 18:02:48 The virtual environment was not created successfully because ensurepip is not 18:02:48 available. On Debian/Ubuntu systems, you need to install the python3-venv 18:02:48 package using the following command. 18:02:48 18:02:48 apt-get install python3-venv 18:02:48 18:02:48 You may need to use sudo with that command. After installing the python3-venv 18:02:48 package, recreate your virtual environment. Type: fix Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com> Change-Id: Ifb9e8547bce2310f1ce6d9b70f11ceef6f0a8576
2019-11-15build: fix docs/doxygen targetsDave Wallace1-3/+4
- Add missing dependencies - Fix clean/wipe to remove generated files - Fix doxygen src variable Type: fix Signed-off-by: Dave Wallace <dwallacelf@gmail.com> Change-Id: If6b2797e8af3f2e735759fab5841a0b4576ed7cc
2019-11-15build: make checkstyle-* targets and cleanupDave Wallace1-17/+104
- Add new make targets: checkstyle-commit checkstyle-test (alias test-checkstyle) checkstyle-all test-wipe-papi (papi-wipe deprecated) retest-all retest-all-debug install-deps (alias install-dep) install-ext-dep (alias install-ext-deps) - Fix .PHONY dependencies - Cleanup redundant target commands Type: refactor Change-Id: I08b0ef459d421a09fb929aee5cd6baec329931b7 Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
2019-11-13build: Revert "build: fix make checkstyle"Dave Wallace1-1/+1
This reverts commit 069e2a734cf75f4d151efe49d1efc51bc82cedb2. Reason for revert: The vpp-verify-checkstyle-master build executor now runs 'make install-dep' Type: fix Signed-off-by: Dave Wallace <dwallacelf@gmail.com> Change-Id: I2ab6bee642b7ed631d2aa06203c76c3d0ca01c9e
2019-11-13build: fix make checkstyleFlorin Coras1-1/+1
Type: fix Comment out yamllint for now. Change-Id: Id40a5aef3fa15b2c6e9d7fe6fd6201923593b4cd Signed-off-by: Florin Coras <fcoras@cisco.com>
2019-11-07build: Fix 3rd party CI systems.Paul Vinciguerra1-1/+4
Commit https://gerrit.fd.io/r/#/c/15525/ breaks 3rd party CI jobs. This suggests an alternative solution that supports both use cases. Type: feature Change-Id: I966210cf4594651735e6a8bffa32dd52b4539a13 Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-11-06build: add yaml file linting to make checkstylePaul Vinciguerra1-1/+3
Type: feature fts and trex rely on yaml config files. Verify that they are valid, so comitters can catch errors early. Change-Id: Ide0bb276659119c59bdbbc8b8155e37562a648b8 Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-11-05docs: fix issues with src/scripts/fts.pyPaul Vinciguerra1-6/+17
- packaging issue - yaml deprecation - yaml formatting Type: fix Change-Id: Ia8808cbc83271a3067164f2db2418f071b35607a Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-10-09build: clean up make help outputDave Wallace1-49/+49
This change is designed to help the uninformed find the right way to run extended tests by using the test-all[-debug] targets. 'make test EXTENDED_TESTS=y' fails to build as it has a dependency on 'vom-install' which is conveniently included in test-all[-debug]. - clarify test-all[-debug] description and make test-help description - Also align indentation of make help output Type: style Signed-off-by: Dave Wallace <dwallacelf@gmail.com> Change-Id: Ief54cc8a5af68c052aacb0d660237c5eb63451b5
2019-09-24build: pass 'no-pci' to autgenerated configDamjan Marion1-0/+1
Avoid aggresive hiijack of pci interfaces when 'make run' and 'make run-release' are used and there is no startup.conf present. Type: feature Change-Id: Id653b5f9ac3d2935a40299885e616960e75d4a95 Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-09-18vppapigen: fix tests and run on verifyPaul Vinciguerra1-0/+2
- changes vppapigen to only process an import once. Type: fix Change-Id: Ifcbcfcc69fdfb80d63195a17701762d0c239d7b4 Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com> Signed-off-by: Ole Troan <ot@cisco.com>
2019-09-17build: fix rpm python 3 dependsEd Kern1-1/+1
Type: fix Change-Id: Ie6eaccb27779bb14c0a23764a16cd22f0a72e379 Signed-off-by: Ed Kern <ejk@cisco.com>
2019-07-28build: add option to wipe/rebuild papiPaul Vinciguerra1-0/+3
Previously, the only option was to wipe/rebuild all the test dependencies. Type: make Change-Id: Ia95d6e800f67bef033dcf614dbfa249c3e43159d Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-07-17build: add targets for json api filesPaul Vinciguerra1-0/+8
Type: make Ticket: VPP-1715 Change-Id: I78497d679d9e793b47a06a0c5cb3b12d86b08489 Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-07-16build: separate pkg builds from verify targetDave Wallace1-1/+3
- This patch is required to eliminate the use of .../vpp/extras/vagrant/build.sh by other projects in order to build VPP packages for verification/integration testing. Type: fix Change-Id: I63e08b27b715c0d40b44e2ce7b3e9a7ebf4f514b Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
2019-07-12vom: build VOM package when CI buildsYohanPipereau1-0/+4
Commit 752f5b4302317e2ccfbd1903d31d3e857d719c4d added vom-pkg-{rpm,deb} instructions. This enables CI to package VOM and push it to packagecloud. Change-Id: I647b4ac6ae19d2414529697082cf5a81e724dfe0 Type: make Signed-off-by: YohanPipereau <ypiperea@cisco.com>
2019-06-27tests: pin python dependenciesAloys Augustin1-0/+4
This commit ensures that the tests always run with the exact same version for all the Python dependencies. It uses pip-tools to achieve that. Our top-level dependencies are specified in the requirements.txt file. From this file, pip-tools generates the requirements-{2,3}.txt file, which pins all the versions of all the recursive dependencies, and is used to install the packages in the test virtualenv. To change or add a top-level dependency, update requirements.txt and run make test as usual with python2 and python3. The requirements-{2,3}.txt file will be updated and you can verify that nothing breaks. Then add all requirements* files in your commit. To refresh the python packages (i.e. get new versions of the recursive dependencies, or of the dependencies that are not pinned in requirements.txt), just run: PYTHON=python2.7 make test-refresh-deps PYTHON=python3.6 make test-refresh-deps and this will update the requirements-{2,3}.txt files. Ideally we should run this after each release. Type: make Change-Id: Ic533de3d06ec4019ff38f5231208da6f1025bfc7 Signed-off-by: Aloys Augustin <aloaugus@cisco.com>
2019-06-27build: remove japi-install from MakefileNeale Ranns1-1/+1
Type: fix Change-Id: I63245280a0939d07f495b11005596ffdfe1d85c8 Signed-off-by: Neale Ranns <nranns@cisco.com>
2019-05-31tools: FEATURE.yaml meta-data infrastructureOle Troan1-3/+11
Add tooling for feature metadata configuration files. The main tool is in src/scripts/fts.py make checkfeaturelist to validate against schema. make featurelist to dump all feature lists to stdout. Example feature definition: name: IP in IP tunnelling maintainer: Ole Troan <ot@cisco.com> features: - IPv4/IPv6 over IPv4/IPv6 encapsulation: - Fragmentation and Reassembly - Configurable MTU - Inner to outer Traffic Class / TOS copy - Configurable Traffic Class / TOS - ICMPv4 / ICMPv6 proxying - 6RD (RFC5969): - Border Relay description: "Implements IP{v4,v6} over IP{v4,v6} tunnelling as described in RFC2473. This module also implement the border relay of 6RD (RFC5969)." state: production properties: [API, CLI, STATS, MULTITHREAD] missing: - Tunnel PMTUD - Tracking of FIB state for tunnel state - IPv6 extension headers (Tunnel encapsulation limit option) JSON schema is embedded in fts.py Example markdown: https://github.com/otroan/scratch/blob/master/features.md Change-Id: I903b4ee6b316a9378c259e86dc937092e5d4b7da Type: make Signed-off-by: Ole Troan <ot@cisco.com>
2019-05-29make: git commit templateOle Troan1-0/+1
Add a commit template for tagging of commits with a type. Later tooling can then process the commit log and generate reports of new features etc. Usage: The template is automatically added to the current repository by make install-dep. (git config commit.template .git_commit_template.txt) Type: make Change-Id: I485d61f9852b7390e4f0539d737ab210f7b0723a Signed-off-by: Ole Troan <ot@cisco.com>
2019-05-09add mactime plugin unit / code coverage testsDave Barach1-0/+4
The unit and code coverage tests are boring. The rest of the patch involves test and packet-generator infra cleanups. Teach the "make test-xxx" family of targets to set the api test plugin path correctly, to make "binary-api <api-message-name> <args>" debug CLI commands work correctly in the "make test" environment. Unfortunately involves both the top-level and test Makefiles. Add a minor pg cli feature, a CLI to manually set s->sw_if_index[VLIB_TX]. Consider the case where one configures an interface with both a device-input and an output feature. To test the output feature using the pg, it's necessary to inject packets into the interface output node with both b->sw_if_index[VLIB_TX] and b->sw_if_index[VLIB_RX] set correctly. For example: packet-generator new { name tx limit 15 size 128-128 interface local0 # rx: device input feature not configured on local0 tx-interface loop0 # tx: output node requires b->sw_if_index[VLIB_TX] node loop0-output data { hex 0x01005e7ffffa000dead0000008000102030405060708090a0b0c0d0e0f0102030405 } } Fix a longstanding bug in the packet generator stream setup. Remove kludges which set b->sw_if_index[VLIB_TX] to ~0 [in multiple places] instead of using the stream value s->sw_if_index[VLIB_TX], and setting THAT datum correctly. Change-Id: I1097a18e8db73661ded6b822c1d718f7e5cf36ed Signed-off-by: Dave Barach <dave@barachs.net>
2019-05-08Fix $(SUSE_NAME) in Makefile.Paul Vinciguerra1-3/+3
SUSE_NAME is now lowercase with dashes in place of spaces. grep '^NAME=' /etc/os-release | cut -f2- -d= | sed -e 's/\"//g' | sed -e 's/ /-/' | awk '{print tolower($0)}' opensuse-leap Change-Id: Ie547c2e5684f955529a010d14b9317bbbde4caf6 Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-04-19build: fix fedora dependenciesBenoît Ganne1-2/+2
Update various python dependencies package names. Change-Id: I0f64f988f361adf4705fceaf4f2c147138024b1e Signed-off-by: Benoît Ganne <bganne@cisco.com>
2019-04-05Fix failing centos jobs due to yum replacing python34 with python36.Paul Vinciguerra1-2/+2
vppapigen is failing because the ply library is installed under python34. 09:04:49 Dependencies Resolved 09:04:49 09:04:49 ================================================================================ 09:04:49 Package Arch Version Repository Size 09:04:49 ================================================================================ 09:04:49 Installing: 09:04:49 python36 x86_64 3.6.6-5.el7 epel 66 k 09:04:49 replacing python34.x86_64 3.4.9-2.el7 09:04:49 python36-libs x86_64 3.6.6-5.el7 epel 8.5 M 09:04:49 replacing python34-libs.x86_64 3.4.9-2.el7 ---- 09:07:27 cd /w/workspace/vpp-verify-master-centos7/build-root/build-vpp-native/vpp/vlibmemory && mkdir -p /w/workspace/vpp-verify-master-centos7/build-root/build-vpp-native/vpp/vlibmemory && /w/workspace/vpp-verify-master-centos7/src/tools/vppapigen/vppapigen --includedir /w/workspace/vpp-verify-master-centos7/src --input /w/workspace/vpp-verify-master-centos7/src/vlibmemory/memclnt.api JSON --output /w/workspace/vpp-verify-master-centos7/build-root/build-vpp-native/vpp/vlibmemory/memclnt.api.json 09:07:27 Traceback (most recent call last): 09:07:27 File "/w/workspace/vpp-verify-master-centos7/src/tools/vppapigen/vppapigen", line 4, in <module> 09:07:27 import ply.lex as lex 09:07:27 ModuleNotFoundError: No module named 'ply' Change-Id: Ica3b408991d26262418576cffc848fb2a8cb0224 Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-03-26Add missing OpenSUSE Leap 15.0 build depsBenoît Ganne1-1/+1
Fresh OpenSUSE Leap 15.0 containers are missing build dependencies. Change-Id: I9b62f36c658862d8f32db5547d2176e6f56df4ea Signed-off-by: Benoît Ganne <bganne@cisco.com>
2019-03-22add a "make test-gcov" targetDave Barach1-0/+4
add a line to "make help" Change-Id: I94c9e54832e959f35ee28adc1b37091c1473f687 Signed-off-by: Dave Barach <dave@barachs.net>