Repository: AcademySoftwareFoundation/aswf-docker (language: python)

Issue:
Add GTest to OpenVDB images
Hi all, 

VDB switch _some_ of its unit tests over to gtest a while ago with the minimum supported gtest version being ~~1.8.X~~ 1.10.X. It would be great if this could be added to the openvdb images.

Thanks!




Discussion / hints:

Fix patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a8aa7a57..caa1582d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,55 @@
 
 All notable changes to this project will be documented in this file.
 
+## 2021-11-20
+
+* Updated 2022 Packages:
+  * CMake 3.22.0 (from 3.20.5)
+  * GTest 1.11.0 (new)
+  * OpenImageIO 2.3.9.1 (from 2.3.7.2)
+  * OpenEXR 3.1.3 (from 3.1.1)
+  * OpenVDB 9.0.0 (from 8.1.0)
+  * OpenShadingLanguage 1.11.16.0 (from 1.11.15.0)
+  * OpenTimelineIO 0.14 (from 0.13)
+  * Pybind11 2.8.1 (from 2.6.2)
+  * USD 21.11 (from 21.05)
+* Added GoogleTest (gtest):
+  * vfx2019: 1.8.1
+  * vfx2020: 1.10.0
+  * vfx2021: 1.11.0
+  * vfx2022: 1.11.0
+* New [Conan](https://conan.io) base packages:
+  * All base packages are already available [here](https://linuxfoundation.jfrog.io/ui/packages) with recipes [here](packages/conan/recipes).
+  * Easily installed using a command such as `conan install clang/13.0.0@aswftesting/ci_common1 -g deploy`
+  * Or with a `conanfile.txt` such as this:
+
+```ini
+[generators]
+cmake_find_package_multi
+virtualenv
+[requires]
+boost/latest@aswf/vfx2021
+cmake/latest@aswf/vfx2021
+cppunit/latest@aswf/vfx2021
+glew/latest@aswf/vfx2021
+glfw/latest@aswf/vfx2021
+gtest/latest@aswf/vfx2021
+log4cplus/latest@aswf/vfx2021
+pybind11/latest@aswf/vfx2021
+python/latest@aswf/vfx2021
+tbb/latest@aswf/vfx2021
+```
+
+### New CI Images
+
+* `aswf/ci-base:2019.9`, `aswf/ci-base:2020.9`, `aswf/ci-base:2021.6`, `aswf/ci-base:2022.2`
+* `aswf/ci-baseqt:2019.2`, `aswf/baseqt:2020.2`, `aswf/baseqt:2021.3`, `aswf/baseqt:2022.2`
+* `aswf/ci-ocio:2022.2`
+* `aswf/ci-usd:2022.2`
+* `aswf/ci-osl:2022-clang10.9`, `aswf/ci-osl:2022-clang11.9`, `aswf/ci-osl:2022-clang12.0`, `aswf/ci-osl:2022-clang13.0`
+* `aswf/ci-openvdb:2022-clang10.9`, `aswf/ci-openvdb:2022-clang11.9`, `aswf/ci-openvdb:2022-clang12.0`, `aswf/ci-openvdb:2022-clang13.0`
+* `aswf/ci-vfxall:2022-clang10.9`, `aswf/ci-vfxall:2022-clang11.9`, `aswf/ci-vfxall:2022-clang12.0`, `aswf/ci-vfxall:2022-clang13.0`
+
 ## 2021-09-04
 
 * Updated 2022 Packages:
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 80993d47..5c829310 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -272,6 +272,43 @@ Any non-trivial change to the Docker images should be followed by incrementing
 the corresponding image version. We use MAJOR.MINOR versioning for all images.
 Versioning is further explained in the [README](README.md#version) file.
 
+### Building Conan Packages
+
+This repository contains 2 ways of building packages, Docker packages (`aswf/ci-package-*` images) and Conan packages.
+
+The Docker packages are being phased out as Conan offers a lot more flexibility when building options and variants of packages, with great cross-platform support.
+
+The [Conan](https://conan.io) [Reference Documentation](https://docs.conan.io/en/latest/reference.html) is a great way to discover and learn all about the Conan package manager.
+
+The AcademySoftwareFoundation has an [Artifactory](https://linuxfoundation.jfrog.io/ui/packages) server which hosts all `aswf` Conan packages.
+Credentials of the artifactory server are maintained by the Linux Foundation and are not known by the ASWF crew, new packages get uploaded via GitHub organisation secrets.
+
+#### Getting started
+
+Use the existing recipes as an example, and borrow from the MIT-licensed
+[Conan Center Index](https://github.com/conan-io/conan-center-index/tree/master/recipes).
+
+Follow the great instructions there:
+[Conan Center Index - How to add Packages](https://github.com/conan-io/conan-center-index/blob/master/docs/how_to_add_packages.md),
+but ignore the `config.yml` instructions as the aswfdocker `versions.yaml` already
+takes care of listing all the maintained package versions.
+
+Then ensure the ASWF-specific settings are added in the `conanfile.py` such as `python`.
+
+To test locally, use the `aswfdocker build` command with the `--use-conan` argument.
+The `--keep-source` and `--keep-build` can help when iterating on the build recipe to
+avoid re-downloading the source, and even keep the previous build artifact.
+All regular aswfdocker commands and options work the same with conan or docker packages.
+
+#### Docker-only Packages
+
+If a package has no Conan recipe folder its conan package will be skipped at release time.
+
+#### Conan-only Packages
+
+If a package can only be built using Conan its name must be added to the `conan_only` list
+at the end of the `versions.yaml` file, see `gtest` as an example.
+
 ## Releasing new Docker Images
 
 The [CHANGELOG.md](CHANGELOG.md) file needs to be updated with the date of the change
diff --git a/ci-base/Dockerfile b/ci-base/Dockerfile
index 5b7d7551..b76257c5 100644
--- a/ci-base/Dockerfile
+++ b/ci-base/Dockerfile
@@ -1,3 +1,4 @@
+# syntax=docker/dockerfile:1.3-labs
 # Copyright (c) Contributors to the aswf-docker Project. All rights reserved.
 # SPDX-License-Identifier: Apache-2.0
 
@@ -8,7 +9,6 @@ ARG ASWF_PKG_ORG
 ARG CI_COMMON_VERSION
 ARG ASWF_CLANG_MAJOR_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_VFXPLATFORM_VERSION
 
@@ -18,7 +18,9 @@ ARG ASWF_CMAKE_VERSION
 ARG ASWF_CPPUNIT_VERSION
 ARG ASWF_GLEW_VERSION
 ARG ASWF_GLFW_VERSION
+ARG ASWF_GTEST_VERSION
 ARG ASWF_LOG4CPLUS_VERSION
+ARG ASWF_PYBIND11_VERSION
 ARG ASWF_PYTHON_VERSION
 ARG ASWF_TBB_VERSION
 ARG ASWF_NUMPY_VERSION
@@ -33,6 +35,7 @@ FROM ${ASWF_PKG_ORG}/ci-package-cppunit:$ASWF_VFXPLATFORM_VERSION-$ASWF_CPPUNIT_
 FROM ${ASWF_PKG_ORG}/ci-package-glew:$ASWF_VFXPLATFORM_VERSION-$ASWF_GLEW_VERSION as ci-package-glew
 FROM ${ASWF_PKG_ORG}/ci-package-glfw:$ASWF_VFXPLATFORM_VERSION-$ASWF_GLFW_VERSION as ci-package-glfw
 FROM ${ASWF_PKG_ORG}/ci-package-log4cplus:$ASWF_VFXPLATFORM_VERSION-$ASWF_LOG4CPLUS_VERSION as ci-package-log4cplus
+FROM ${ASWF_PKG_ORG}/ci-package-pybind11:$ASWF_VFXPLATFORM_VERSION-$ASWF_PYBIND11_VERSION as ci-package-pybind11
 FROM ${ASWF_PKG_ORG}/ci-package-python:$ASWF_VFXPLATFORM_VERSION-$ASWF_PYTHON_VERSION as ci-package-python
 FROM ${ASWF_PKG_ORG}/ci-package-tbb:$ASWF_VFXPLATFORM_VERSION-$ASWF_TBB_VERSION as ci-package-tbb
 FROM ${ASWF_ORG}/ci-common:${CI_COMMON_VERSION}-clang${ASWF_CLANG_MAJOR_VERSION} as ci-base
@@ -43,14 +46,15 @@ ARG ASWF_PKG_ORG
 ARG ASWF_VERSION
 ARG CI_COMMON_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_BOOST_VERSION
 ARG ASWF_CMAKE_VERSION
 ARG ASWF_CPPUNIT_VERSION
 ARG ASWF_GLEW_VERSION
 ARG ASWF_GLFW_VERSION
+ARG ASWF_GTEST_VERSION
 ARG ASWF_LOG4CPLUS_VERSION
+ARG ASWF_PYBIND11_VERSION
 ARG ASWF_PYTHON_VERSION
 ARG ASWF_TBB_VERSION
 ARG ASWF_NUMPY_VERSION
@@ -76,7 +80,9 @@ LABEL io.aswf.docker.versions.cmake="$ASWF_CMAKE_VERSION"
 LABEL io.aswf.docker.versions.cppunit="$ASWF_CPPUNIT_VERSION"
 LABEL io.aswf.docker.versions.glew="$ASWF_GLEW_VERSION"
 LABEL io.aswf.docker.versions.glfw="$ASWF_GLFW_VERSION"
+LABEL io.aswf.docker.versions.gtest="$ASWF_GTEST_VERSION"
 LABEL io.aswf.docker.versions.log4cplus="$ASWF_LOG4CPLUS_VERSION"
+LABEL io.aswf.docker.versions.pybind11="$ASWF_PYBIND11_VERSION"
 LABEL io.aswf.docker.versions.python="$ASWF_PYTHON_VERSION"
 LABEL io.aswf.docker.versions.tbb="$ASWF_TBB_VERSION"
 LABEL io.aswf.docker.versions.numpy="$ASWF_NUMPY_VERSION"
@@ -94,7 +100,9 @@ ENV ASWF_CMAKE_VERSION=$ASWF_CMAKE_VERSION
 ENV ASWF_CPPUNIT_VERSION=$ASWF_CPPUNIT_VERSION
 ENV ASWF_GLEW_VERSION=$ASWF_GLEW_VERSION
 ENV ASWF_GLFW_VERSION=$ASWF_GLFW_VERSION
+ENV ASWF_GTEST_VERSION=$ASWF_GTEST_VERSION
 ENV ASWF_LOG4CPLUS_VERSION=$ASWF_LOG4CPLUS_VERSION
+ENV ASWF_PYBIND11_VERSION=$ASWF_PYBIND11_VERSION
 ENV ASWF_PYTHON_VERSION=$ASWF_PYTHON_VERSION
 ENV ASWF_TBB_VERSION=$ASWF_TBB_VERSION
 ENV ASWF_NUMPY_VERSION=$ASWF_NUMPY_VERSION
@@ -109,6 +117,7 @@ COPY --from=ci-package-cppunit /. /usr/local/
 COPY --from=ci-package-glew /. /usr/local/
 COPY --from=ci-package-glfw /. /usr/local/
 COPY --from=ci-package-log4cplus /. /usr/local/
+COPY --from=ci-package-pybind11 /. /usr/local/
 COPY --from=ci-package-python /. /usr/local/
 COPY --from=ci-package-tbb /. /usr/local/
 COPY ci-base/README.md ci-base/image.yaml /usr/local/aswf/
@@ -120,21 +129,27 @@ ENV PYTHONPATH=/usr/local/lib/python${ASWF_PYTHON_MAJOR_MINOR_VERSION}/site-pack
 RUN conan config set general.default_profile=vfx${ASWF_VFXPLATFORM_VERSION}
 
 
+
+# conan-only packages
+COPY <<EOF /usr/local/conanfile.txt
+[generators]
+[imports]
+., * -> .
+[requires]
 # Uncomment to use Conan packages instead of Docker ones
-# 
-# RUN cd /usr/local/ && \
-#     echo $'[generators]\n\
-# cmake\n\
-# [imports]\n\
-# ., * -> .\n\
-# [requires]\n' >> /usr/local/conanfile.txt && \
-# #     echo "boost/${ASWF_BOOST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "cppunit/${ASWF_CPPUNIT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "glew/${ASWF_GLEW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "glfw/${ASWF_GLFW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "log4cplus/${ASWF_LOG4CPLUS_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "tbb/${ASWF_TBB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     conan install . && \
-#     rm -rf ${CONAN_USER_DATA_FOLDER}/*
\ No newline at end of file
+# boost/${ASWF_BOOST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# cppunit/${ASWF_CPPUNIT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# glew/${ASWF_GLEW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# glfw/${ASWF_GLFW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+gtest/${ASWF_GTEST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# log4cplus/${ASWF_LOG4CPLUS_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# pybind11/${ASWF_PYBIND11_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# tbb/${ASWF_TBB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+EOF
+
+RUN <<EOF
+cd /usr/local/
+conan install .
+EOF
\ No newline at end of file
diff --git a/ci-base/README.md b/ci-base/README.md
index cb8ae761..60d45af4 100644
--- a/ci-base/README.md
+++ b/ci-base/README.md
@@ -17,7 +17,7 @@ Contains: Python, TBB, Boost and other base libraries
 
 [Docker Image Source](https://github.com/AcademySoftwareFoundation/aswf-docker/blob/master/ci-base/Dockerfile)
 
-## [aswf/ci-base:2019.8](https://hub.docker.com/r/aswf/ci-base/tags?page=1&name=2019.8)
+## [aswf/ci-base:2019.9](https://hub.docker.com/r/aswf/ci-base/tags?page=1&name=2019.9)
 
 Contains:
 * boost-1.66.0
@@ -25,13 +25,15 @@ Contains:
 * cppunit-1.14.0
 * glew-2.1.0
 * glfw-3.1.2
+* gtest-1.8.1
 * log4cplus-1.1.2
+* pybind11-2.4.3
 * python-2.7.15
 * tbb-2018
 * numpy-1.14
 * vfxplatform-2019
 
-## [aswf/ci-base:2020.8](https://hub.docker.com/r/aswf/ci-base/tags?page=1&name=2020.8)
+## [aswf/ci-base:2020.9](https://hub.docker.com/r/aswf/ci-base/tags?page=1&name=2020.9)
 
 Contains:
 * boost-1.70.0
@@ -39,13 +41,15 @@ Contains:
 * cppunit-1.15.1
 * glew-2.1.0
 * glfw-3.1.2
+* gtest-1.10.0
 * log4cplus-1.1.2
+* pybind11-2.4.3
 * python-3.7.3
 * tbb-2019_U6
 * numpy-1.16
 * vfxplatform-2020
 
-## [aswf/ci-base:2021.5](https://hub.docker.com/r/aswf/ci-base/tags?page=1&name=2021.5)
+## [aswf/ci-base:2021.6](https://hub.docker.com/r/aswf/ci-base/tags?page=1&name=2021.6)
 
 Contains:
 * boost-1.73.0
@@ -53,21 +57,25 @@ Contains:
 * cppunit-1.15.1
 * glew-2.1.0
 * glfw-3.1.2
+* gtest-1.11.0
 * log4cplus-1.1.2
+* pybind11-2.6.2
 * python-3.7.9
 * tbb-2020_U2
 * numpy-1.19
 * vfxplatform-2021
 
-## [aswf/ci-base:2022.1](https://hub.docker.com/r/aswf/ci-base/tags?page=1&name=2022.1)
+## [aswf/ci-base:2022.2](https://hub.docker.com/r/aswf/ci-base/tags?page=1&name=2022.2)
 
 Contains:
 * boost-1.76.0
-* cmake-3.20.5
+* cmake-3.22.0
 * cppunit-1.15.1
 * glew-2.1.0
 * glfw-3.1.2
+* gtest-1.11.0
 * log4cplus-1.1.2
+* pybind11-2.8.1
 * python-3.9.7
 * tbb-2020_U3
 * numpy-1.20
diff --git a/ci-base/image.yaml b/ci-base/image.yaml
index 5d824e42..2ca31a83 100644
--- a/ci-base/image.yaml
+++ b/ci-base/image.yaml
@@ -8,7 +8,9 @@ packages:
   - cppunit
   - glew
   - glfw
+  - gtest
   - log4cplus
+  - pybind11
   - python
   - tbb
 implicit_packages:
diff --git a/ci-baseqt/Dockerfile b/ci-baseqt/Dockerfile
index e78d7705..7f91291d 100644
--- a/ci-baseqt/Dockerfile
+++ b/ci-baseqt/Dockerfile
@@ -1,3 +1,4 @@
+# syntax=docker/dockerfile:1.3-labs
 # Copyright (c) Contributors to the aswf-docker Project. All rights reserved.
 # SPDX-License-Identifier: Apache-2.0
 
@@ -8,7 +9,6 @@ ARG ASWF_PKG_ORG
 ARG CI_COMMON_VERSION
 ARG ASWF_CLANG_MAJOR_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_VFXPLATFORM_VERSION
 
@@ -47,7 +47,6 @@ ARG ASWF_PKG_ORG
 ARG ASWF_VERSION
 ARG CI_COMMON_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_BOOST_VERSION
 ARG ASWF_CMAKE_VERSION
@@ -132,23 +131,27 @@ ENV PYTHONPATH=/usr/local/lib/python${ASWF_PYTHON_MAJOR_MINOR_VERSION}/site-pack
 RUN conan config set general.default_profile=vfx${ASWF_VFXPLATFORM_VERSION}
 
 
+
+# conan-only packages
+COPY <<EOF /usr/local/conanfile.txt
+[generators]
+[imports]
+., * -> .
+[requires]
 # Uncomment to use Conan packages instead of Docker ones
-# 
-# RUN cd /usr/local/ && \
-#     echo $'[generators]\n\
-# cmake\n\
-# [imports]\n\
-# ., * -> .\n\
-# [requires]\n' >> /usr/local/conanfile.txt && \
-# #     echo "boost/${ASWF_BOOST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "cppunit/${ASWF_CPPUNIT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "glew/${ASWF_GLEW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "glfw/${ASWF_GLFW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "log4cplus/${ASWF_LOG4CPLUS_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "tbb/${ASWF_TBB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "qt/${ASWF_QT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "pyside/${ASWF_PYSIDE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     conan install . && \
-#     rm -rf ${CONAN_USER_DATA_FOLDER}/*
\ No newline at end of file
+# boost/${ASWF_BOOST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# cppunit/${ASWF_CPPUNIT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# glew/${ASWF_GLEW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# glfw/${ASWF_GLFW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# log4cplus/${ASWF_LOG4CPLUS_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# tbb/${ASWF_TBB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# qt/${ASWF_QT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# pyside/${ASWF_PYSIDE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+EOF
+
+RUN <<EOF
+cd /usr/local/
+conan install .
+EOF
\ No newline at end of file
diff --git a/ci-baseqt/README.md b/ci-baseqt/README.md
index aae916f5..411fdb98 100644
--- a/ci-baseqt/README.md
+++ b/ci-baseqt/README.md
@@ -17,7 +17,7 @@ Contains: Python, TBB, Boost, Qt, PySide and other base libraries
 
 [Docker Image Source](https://github.com/AcademySoftwareFoundation/aswf-docker/blob/master/ci-baseqt/Dockerfile)
 
-## [aswf/ci-baseqt:2019.1](https://hub.docker.com/r/aswf/ci-baseqt/tags?page=1&name=2019.1)
+## [aswf/ci-baseqt:2019.2](https://hub.docker.com/r/aswf/ci-baseqt/tags?page=1&name=2019.2)
 
 Contains:
 * boost-1.66.0
@@ -33,7 +33,7 @@ Contains:
 * numpy-1.14
 * vfxplatform-2019
 
-## [aswf/ci-baseqt:2020.1](https://hub.docker.com/r/aswf/ci-baseqt/tags?page=1&name=2020.1)
+## [aswf/ci-baseqt:2020.2](https://hub.docker.com/r/aswf/ci-baseqt/tags?page=1&name=2020.2)
 
 Contains:
 * boost-1.70.0
@@ -49,7 +49,7 @@ Contains:
 * numpy-1.16
 * vfxplatform-2020
 
-## [aswf/ci-baseqt:2021.2](https://hub.docker.com/r/aswf/ci-baseqt/tags?page=1&name=2021.2)
+## [aswf/ci-baseqt:2021.3](https://hub.docker.com/r/aswf/ci-baseqt/tags?page=1&name=2021.3)
 
 Contains:
 * boost-1.73.0
@@ -65,11 +65,11 @@ Contains:
 * numpy-1.19
 * vfxplatform-2021
 
-## [aswf/ci-baseqt:2022.1](https://hub.docker.com/r/aswf/ci-baseqt/tags?page=1&name=2022.1)
+## [aswf/ci-baseqt:2022.2](https://hub.docker.com/r/aswf/ci-baseqt/tags?page=1&name=2022.2)
 
 Contains:
 * boost-1.76.0
-* cmake-3.20.5
+* cmake-3.22.0
 * cppunit-1.15.1
 * glew-2.1.0
 * glfw-3.1.2
diff --git a/ci-common/Dockerfile b/ci-common/Dockerfile
index 005a771c..06b1710e 100644
--- a/ci-common/Dockerfile
+++ b/ci-common/Dockerfile
@@ -1,3 +1,4 @@
+# syntax=docker/dockerfile:1.3-labs
 # Copyright (c) Contributors to the aswf-docker Project. All rights reserved.
 # SPDX-License-Identifier: Apache-2.0
 
@@ -8,7 +9,6 @@ ARG ASWF_PKG_ORG
 ARG CI_COMMON_VERSION
 ARG ASWF_CLANG_MAJOR_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 
 ARG ASWF_CLANG_VERSION
@@ -32,7 +32,6 @@ ARG ASWF_PKG_ORG
 ARG ASWF_VERSION
 ARG CI_COMMON_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_CLANG_VERSION
 ARG ASWF_NINJA_VERSION
@@ -130,15 +129,19 @@ ENV CONAN_USER_HOME=/opt/conan_home
 RUN conan config set general.default_profile=ci_common${CI_COMMON_VERSION}
 
 
+
+# conan-only packages
+COPY <<EOF /usr/local/conanfile.txt
+[generators]
+[imports]
+., * -> .
+[requires]
 # Uncomment to use Conan packages instead of Docker ones
-# 
-# RUN cd /usr/local/ && \
-#     echo $'[generators]\n\
-# cmake\n\
-# [imports]\n\
-# ., * -> .\n\
-# [requires]\n' >> /usr/local/conanfile.txt && \
-# #     echo "clang/${ASWF_CLANG_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "ninja/${ASWF_NINJA_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     conan install . && \
-#     rm -rf ${CONAN_USER_DATA_FOLDER}/*
\ No newline at end of file
+# clang/${ASWF_CLANG_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# ninja/${ASWF_NINJA_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+EOF
+
+RUN <<EOF
+cd /usr/local/
+conan install .
+EOF
\ No newline at end of file
diff --git a/ci-ocio/Dockerfile b/ci-ocio/Dockerfile
index 3b0d5c38..e690f9b3 100644
--- a/ci-ocio/Dockerfile
+++ b/ci-ocio/Dockerfile
@@ -1,3 +1,4 @@
+# syntax=docker/dockerfile:1.3-labs
 # Copyright (c) Contributors to the aswf-docker Project. All rights reserved.
 # SPDX-License-Identifier: Apache-2.0
 
@@ -8,7 +9,6 @@ ARG ASWF_PKG_ORG
 ARG CI_COMMON_VERSION
 ARG ASWF_CLANG_MAJOR_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_VFXPLATFORM_VERSION
 
@@ -55,7 +55,6 @@ ARG ASWF_PKG_ORG
 ARG ASWF_VERSION
 ARG CI_COMMON_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_PYTHON_VERSION
 ARG ASWF_PYBIND11_VERSION
@@ -157,27 +156,31 @@ ENV PYTHONPATH=/usr/local/lib/python${ASWF_PYTHON_MAJOR_MINOR_VERSION}/site-pack
 RUN conan config set general.default_profile=vfx${ASWF_VFXPLATFORM_VERSION}
 
 
+
+# conan-only packages
+COPY <<EOF /usr/local/conanfile.txt
+[generators]
+[imports]
+., * -> .
+[requires]
 # Uncomment to use Conan packages instead of Docker ones
-# 
-# RUN cd /usr/local/ && \
-#     echo $'[generators]\n\
-# cmake\n\
-# [imports]\n\
-# ., * -> .\n\
-# [requires]\n' >> /usr/local/conanfile.txt && \
-# #     echo "python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "pybind11/${ASWF_PYBIND11_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "tbb/${ASWF_TBB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "boost/${ASWF_BOOST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "glew/${ASWF_GLEW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "glfw/${ASWF_GLFW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "imath/${ASWF_IMATH_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "openexr/${ASWF_OPENEXR_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "oiio/${ASWF_OIIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "blosc/${ASWF_BLOSC_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "partio/${ASWF_PARTIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "openvdb/${ASWF_OPENVDB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "osl/${ASWF_OSL_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     conan install . && \
-#     rm -rf ${CONAN_USER_DATA_FOLDER}/*
\ No newline at end of file
+# python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# pybind11/${ASWF_PYBIND11_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# tbb/${ASWF_TBB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# boost/${ASWF_BOOST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# glew/${ASWF_GLEW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# glfw/${ASWF_GLFW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# imath/${ASWF_IMATH_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# openexr/${ASWF_OPENEXR_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# oiio/${ASWF_OIIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# blosc/${ASWF_BLOSC_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# partio/${ASWF_PARTIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# openvdb/${ASWF_OPENVDB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# osl/${ASWF_OSL_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+EOF
+
+RUN <<EOF
+cd /usr/local/
+conan install .
+EOF
\ No newline at end of file
diff --git a/ci-ocio/README.md b/ci-ocio/README.md
index dc19cc31..cfb133a3 100644
--- a/ci-ocio/README.md
+++ b/ci-ocio/README.md
@@ -78,23 +78,23 @@ Contains:
 * numpy-1.19
 * vfxplatform-2021
 
-## [aswf/ci-ocio:2022.1](https://hub.docker.com/r/aswf/ci-ocio/tags?page=1&name=2022.1)
+## [aswf/ci-ocio:2022.2](https://hub.docker.com/r/aswf/ci-ocio/tags?page=1&name=2022.2)
 
 Contains:
 * python-3.9.7
-* pybind11-2.6.2
+* pybind11-2.8.1
 * tbb-2020_U3
 * boost-1.76.0
 * glew-2.1.0
 * glfw-3.1.2
-* cmake-3.20.5
+* cmake-3.22.0
 * imath-3.1.3
-* openexr-3.1.1
-* oiio-2.3.7.2
+* openexr-3.1.3
+* oiio-2.3.9.1
 * blosc-1.5.0
 * partio-1.14.0
-* openvdb-8.1.0
-* osl-1.11.15.0
+* openvdb-9.0.0
+* osl-1.11.16.0
 * numpy-1.20
 * vfxplatform-2022
 
diff --git a/ci-opencue/Dockerfile b/ci-opencue/Dockerfile
index 4e9aed80..28b13d6d 100644
--- a/ci-opencue/Dockerfile
+++ b/ci-opencue/Dockerfile
@@ -1,3 +1,4 @@
+# syntax=docker/dockerfile:1.3-labs
 # Copyright (c) Contributors to the aswf-docker Project. All rights reserved.
 # SPDX-License-Identifier: Apache-2.0
 
@@ -8,7 +9,6 @@ ARG ASWF_PKG_ORG
 ARG CI_COMMON_VERSION
 ARG ASWF_CLANG_MAJOR_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_VFXPLATFORM_VERSION
 
@@ -31,7 +31,6 @@ ARG ASWF_PKG_ORG
 ARG ASWF_VERSION
 ARG CI_COMMON_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_PYTHON_VERSION
 ARG ASWF_CMAKE_VERSION
@@ -91,15 +90,19 @@ ENV PYTHONPATH=/usr/local/lib/python${ASWF_PYTHON_MAJOR_MINOR_VERSION}/site-pack
 RUN conan config set general.default_profile=vfx${ASWF_VFXPLATFORM_VERSION}
 
 
+
+# conan-only packages
+COPY <<EOF /usr/local/conanfile.txt
+[generators]
+[imports]
+., * -> .
+[requires]
 # Uncomment to use Conan packages instead of Docker ones
-# 
-# RUN cd /usr/local/ && \
-#     echo $'[generators]\n\
-# cmake\n\
-# [imports]\n\
-# ., * -> .\n\
-# [requires]\n' >> /usr/local/conanfile.txt && \
-# #     echo "python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     conan install . && \
-#     rm -rf ${CONAN_USER_DATA_FOLDER}/*
\ No newline at end of file
+# python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+EOF
+
+RUN <<EOF
+cd /usr/local/
+conan install .
+EOF
\ No newline at end of file
diff --git a/ci-opencue/README.md b/ci-opencue/README.md
index 968e7b83..541f7896 100644
--- a/ci-opencue/README.md
+++ b/ci-opencue/README.md
@@ -46,7 +46,7 @@ Contains:
 
 Contains:
 * python-3.9.7
-* cmake-3.20.5
+* cmake-3.22.0
 * numpy-1.20
 * vfxplatform-2022
 
diff --git a/ci-openexr/Dockerfile b/ci-openexr/Dockerfile
index dd5199e6..e2d1ec5b 100644
--- a/ci-openexr/Dockerfile
+++ b/ci-openexr/Dockerfile
@@ -1,3 +1,4 @@
+# syntax=docker/dockerfile:1.3-labs
 # Copyright (c) Contributors to the aswf-docker Project. All rights reserved.
 # SPDX-License-Identifier: Apache-2.0
 
@@ -8,7 +9,6 @@ ARG ASWF_PKG_ORG
 ARG CI_COMMON_VERSION
 ARG ASWF_CLANG_MAJOR_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_VFXPLATFORM_VERSION
 
@@ -33,7 +33,6 @@ ARG ASWF_PKG_ORG
 ARG ASWF_VERSION
 ARG CI_COMMON_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_PYTHON_VERSION
 ARG ASWF_BOOST_VERSION
@@ -91,16 +90,20 @@ ENV PYTHONPATH=/usr/local/lib/python${ASWF_PYTHON_MAJOR_MINOR_VERSION}/site-pack
 RUN conan config set general.default_profile=vfx${ASWF_VFXPLATFORM_VERSION}
 
 
+
+# conan-only packages
+COPY <<EOF /usr/local/conanfile.txt
+[generators]
+[imports]
+., * -> .
+[requires]
 # Uncomment to use Conan packages instead of Docker ones
-# 
-# RUN cd /usr/local/ && \
-#     echo $'[generators]\n\
-# cmake\n\
-# [imports]\n\
-# ., * -> .\n\
-# [requires]\n' >> /usr/local/conanfile.txt && \
-# #     echo "python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "boost/${ASWF_BOOST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     conan install . && \
-#     rm -rf ${CONAN_USER_DATA_FOLDER}/*
\ No newline at end of file
+# python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# boost/${ASWF_BOOST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+EOF
+
+RUN <<EOF
+cd /usr/local/
+conan install .
+EOF
\ No newline at end of file
diff --git a/ci-openexr/README.md b/ci-openexr/README.md
index b41dd637..2ed29eda 100644
--- a/ci-openexr/README.md
+++ b/ci-openexr/README.md
@@ -50,7 +50,7 @@ Contains:
 Contains:
 * python-3.9.7
 * boost-1.76.0
-* cmake-3.20.5
+* cmake-3.22.0
 * numpy-1.20
 * vfxplatform-2022
 
diff --git a/ci-openvdb/Dockerfile b/ci-openvdb/Dockerfile
index cd4646d2..fc2d754e 100644
--- a/ci-openvdb/Dockerfile
+++ b/ci-openvdb/Dockerfile
@@ -1,3 +1,4 @@
+# syntax=docker/dockerfile:1.3-labs
 # Copyright (c) Contributors to the aswf-docker Project. All rights reserved.
 # SPDX-License-Identifier: Apache-2.0
 
@@ -8,13 +9,13 @@ ARG ASWF_PKG_ORG
 ARG CI_COMMON_VERSION
 ARG ASWF_CLANG_MAJOR_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_VFXPLATFORM_VERSION
 
 
 ARG ASWF_BOOST_VERSION
 ARG ASWF_CMAKE_VERSION
+ARG ASWF_GTEST_VERSION
 ARG ASWF_CPPUNIT_VERSION
 ARG ASWF_GLFW_VERSION
 ARG ASWF_PYTHON_VERSION
@@ -45,10 +46,10 @@ ARG ASWF_PKG_ORG
 ARG ASWF_VERSION
 ARG CI_COMMON_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_BOOST_VERSION
 ARG ASWF_CMAKE_VERSION
+ARG ASWF_GTEST_VERSION
 ARG ASWF_CPPUNIT_VERSION
 ARG ASWF_GLFW_VERSION
 ARG ASWF_PYTHON_VERSION
@@ -77,6 +78,7 @@ LABEL com.vfxplatform.version="${ASWF_VFXPLATFORM_VERSION}"
 
 LABEL io.aswf.docker.versions.boost="$ASWF_BOOST_VERSION"
 LABEL io.aswf.docker.versions.cmake="$ASWF_CMAKE_VERSION"
+LABEL io.aswf.docker.versions.gtest="$ASWF_GTEST_VERSION"
 LABEL io.aswf.docker.versions.cppunit="$ASWF_CPPUNIT_VERSION"
 LABEL io.aswf.docker.versions.glfw="$ASWF_GLFW_VERSION"
 LABEL io.aswf.docker.versions.python="$ASWF_PYTHON_VERSION"
@@ -96,6 +98,7 @@ ENV ASWF_VFXPLATFORM_VERSION=${ASWF_VFXPLATFORM_VERSION}
 
 ENV ASWF_BOOST_VERSION=$ASWF_BOOST_VERSION
 ENV ASWF_CMAKE_VERSION=$ASWF_CMAKE_VERSION
+ENV ASWF_GTEST_VERSION=$ASWF_GTEST_VERSION
 ENV ASWF_CPPUNIT_VERSION=$ASWF_CPPUNIT_VERSION
 ENV ASWF_GLFW_VERSION=$ASWF_GLFW_VERSION
 ENV ASWF_PYTHON_VERSION=$ASWF_PYTHON_VERSION
@@ -127,22 +130,27 @@ ENV PYTHONPATH=/usr/local/lib/python${ASWF_PYTHON_MAJOR_MINOR_VERSION}/site-pack
 RUN conan config set general.default_profile=vfx${ASWF_VFXPLATFORM_VERSION}
 
 
+
+# conan-only packages
+COPY <<EOF /usr/local/conanfile.txt
+[generators]
+[imports]
+., * -> .
+[requires]
 # Uncomment to use Conan packages instead of Docker ones
-# 
-# RUN cd /usr/local/ && \
-#     echo $'[generators]\n\
-# cmake\n\
-# [imports]\n\
-# ., * -> .\n\
-# [requires]\n' >> /usr/local/conanfile.txt && \
-# #     echo "boost/${ASWF_BOOST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "cppunit/${ASWF_CPPUNIT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "glfw/${ASWF_GLFW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "tbb/${ASWF_TBB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "imath/${ASWF_IMATH_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "openexr/${ASWF_OPENEXR_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "blosc/${ASWF_BLOSC_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     conan install . && \
-#     rm -rf ${CONAN_USER_DATA_FOLDER}/*
\ No newline at end of file
+# boost/${ASWF_BOOST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+gtest/${ASWF_GTEST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# cppunit/${ASWF_CPPUNIT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# glfw/${ASWF_GLFW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# tbb/${ASWF_TBB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# imath/${ASWF_IMATH_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# openexr/${ASWF_OPENEXR_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# blosc/${ASWF_BLOSC_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+EOF
+
+RUN <<EOF
+cd /usr/local/
+conan install .
+EOF
\ No newline at end of file
diff --git a/ci-openvdb/README.md b/ci-openvdb/README.md
index 93d98fce..7061b352 100644
--- a/ci-openvdb/README.md
+++ b/ci-openvdb/README.md
@@ -23,6 +23,7 @@ Warning: this image does *not* contain OpenVDB itself as it is used to *build* O
 Contains:
 * boost-1.66.0
 * cmake-3.12.4
+* gtest-1.8.1
 * cppunit-1.14.0
 * glfw-3.1.2
 * python-2.7.15
@@ -38,6 +39,7 @@ Contains:
 Contains:
 * boost-1.66.0
 * cmake-3.12.4
+* gtest-1.8.1
 * cppunit-1.14.0
 * glfw-3.1.2
 * python-2.7.15
@@ -53,6 +55,7 @@ Contains:
 Contains:
 * boost-1.66.0
 * cmake-3.12.4
+* gtest-1.8.1
 * cppunit-1.14.0
 * glfw-3.1.2
 * python-2.7.15
@@ -68,6 +71,7 @@ Contains:
 Contains:
 * boost-1.66.0
 * cmake-3.12.4
+* gtest-1.8.1
 * cppunit-1.14.0
 * glfw-3.1.2
 * python-2.7.15
@@ -83,6 +87,7 @@ Contains:
 Contains:
 * boost-1.70.0
 * cmake-3.18.4
+* gtest-1.10.0
 * cppunit-1.15.1
 * glfw-3.1.2
 * python-3.7.3
@@ -98,6 +103,7 @@ Contains:
 Contains:
 * boost-1.73.0
 * cmake-3.19.3
+* gtest-1.11.0
 * cppunit-1.15.1
 * glfw-3.1.2
 * python-3.7.9
@@ -108,32 +114,66 @@ Contains:
 * numpy-1.19
 * vfxplatform-2021
 
-## [aswf/ci-openvdb:2022-clang10.8](https://hub.docker.com/r/aswf/ci-openvdb/tags?page=1&name=2022-clang10.8)
+## [aswf/ci-openvdb:2022-clang10.9](https://hub.docker.com/r/aswf/ci-openvdb/tags?page=1&name=2022-clang10.9)
 
 Contains:
 * boost-1.76.0
-* cmake-3.20.5
+* cmake-3.22.0
+* gtest-1.11.0
 * cppunit-1.15.1
 * glfw-3.1.2
 * python-3.9.7
 * tbb-2020_U3
 * imath-3.1.3
-* openexr-3.1.1
+* openexr-3.1.3
 * blosc-1.5.0
 * numpy-1.20
 * vfxplatform-2022
 
-## [aswf/ci-openvdb:2022-clang11.8](https://hub.docker.com/r/aswf/ci-openvdb/tags?page=1&name=2022-clang11.8)
+## [aswf/ci-openvdb:2022-clang11.9](https://hub.docker.com/r/aswf/ci-openvdb/tags?page=1&name=2022-clang11.9)
 
 Contains:
 * boost-1.76.0
-* cmake-3.20.5
+* cmake-3.22.0
+* gtest-1.11.0
 * cppunit-1.15.1
 * glfw-3.1.2
 * python-3.9.7
 * tbb-2020_U3
 * imath-3.1.3
-* openexr-3.1.1
+* openexr-3.1.3
+* blosc-1.5.0
+* numpy-1.20
+* vfxplatform-2022
+
+## [aswf/ci-openvdb:2022-clang12.0](https://hub.docker.com/r/aswf/ci-openvdb/tags?page=1&name=2022-clang12.0)
+
+Contains:
+* boost-1.76.0
+* cmake-3.22.0
+* gtest-1.11.0
+* cppunit-1.15.1
+* glfw-3.1.2
+* python-3.9.7
+* tbb-2020_U3
+* imath-3.1.3
+* openexr-3.1.3
+* blosc-1.5.0
+* numpy-1.20
+* vfxplatform-2022
+
+## [aswf/ci-openvdb:2022-clang13.0](https://hub.docker.com/r/aswf/ci-openvdb/tags?page=1&name=2022-clang13.0)
+
+Contains:
+* boost-1.76.0
+* cmake-3.22.0
+* gtest-1.11.0
+* cppunit-1.15.1
+* glfw-3.1.2
+* python-3.9.7
+* tbb-2020_U3
+* imath-3.1.3
+* openexr-3.1.3
 * blosc-1.5.0
 * numpy-1.20
 * vfxplatform-2022
diff --git a/ci-openvdb/image.yaml b/ci-openvdb/image.yaml
index 431fc014..9dc4055e 100644
--- a/ci-openvdb/image.yaml
+++ b/ci-openvdb/image.yaml
@@ -6,6 +6,7 @@ description: |
 packages:
   - boost
   - cmake
+  - gtest
   - cppunit
   - glfw
   - python
diff --git a/ci-osl/Dockerfile b/ci-osl/Dockerfile
index 505919f5..2cb51fc9 100644
--- a/ci-osl/Dockerfile
+++ b/ci-osl/Dockerfile
@@ -1,3 +1,4 @@
+# syntax=docker/dockerfile:1.3-labs
 # Copyright (c) Contributors to the aswf-docker Project. All rights reserved.
 # SPDX-License-Identifier: Apache-2.0
 
@@ -8,7 +9,6 @@ ARG ASWF_PKG_ORG
 ARG CI_COMMON_VERSION
 ARG ASWF_CLANG_MAJOR_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_VFXPLATFORM_VERSION
 
@@ -51,7 +51,6 @@ ARG ASWF_PKG_ORG
 ARG ASWF_VERSION
 ARG CI_COMMON_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_BOOST_VERSION
 ARG ASWF_CMAKE_VERSION
@@ -145,25 +144,29 @@ ENV PYTHONPATH=/usr/local/lib/python${ASWF_PYTHON_MAJOR_MINOR_VERSION}/site-pack
 RUN conan config set general.default_profile=vfx${ASWF_VFXPLATFORM_VERSION}
 
 
+
+# conan-only packages
+COPY <<EOF /usr/local/conanfile.txt
+[generators]
+[imports]
+., * -> .
+[requires]
 # Uncomment to use Conan packages instead of Docker ones
-# 
-# RUN cd /usr/local/ && \
-#     echo $'[generators]\n\
-# cmake\n\
-# [imports]\n\
-# ., * -> .\n\
-# [requires]\n' >> /usr/local/conanfile.txt && \
-# #     echo "boost/${ASWF_BOOST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "qt/${ASWF_QT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "imath/${ASWF_IMATH_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "openexr/${ASWF_OPENEXR_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "oiio/${ASWF_OIIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "ocio/${ASWF_OCIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "partio/${ASWF_PARTIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "tbb/${ASWF_TBB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "blosc/${ASWF_BLOSC_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "openvdb/${ASWF_OPENVDB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     conan install . && \
-#     rm -rf ${CONAN_USER_DATA_FOLDER}/*
\ No newline at end of file
+# boost/${ASWF_BOOST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# qt/${ASWF_QT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# imath/${ASWF_IMATH_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# openexr/${ASWF_OPENEXR_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# oiio/${ASWF_OIIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# ocio/${ASWF_OCIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# partio/${ASWF_PARTIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# tbb/${ASWF_TBB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# blosc/${ASWF_BLOSC_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# openvdb/${ASWF_OPENVDB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+EOF
+
+RUN <<EOF
+cd /usr/local/
+conan install .
+EOF
\ No newline at end of file
diff --git a/ci-osl/README.md b/ci-osl/README.md
index c69825ef..7d22ce1c 100644
--- a/ci-osl/README.md
+++ b/ci-osl/README.md
@@ -162,39 +162,75 @@ Contains:
 * numpy-1.19
 * vfxplatform-2021
 
-## [aswf/ci-osl:2022-clang10.8](https://hub.docker.com/r/aswf/ci-osl/tags?page=1&name=2022-clang10.8)
+## [aswf/ci-osl:2022-clang10.9](https://hub.docker.com/r/aswf/ci-osl/tags?page=1&name=2022-clang10.9)
 
 Contains:
 * boost-1.76.0
-* cmake-3.20.5
+* cmake-3.22.0
 * python-3.9.7
 * qt-5.15.2
 * imath-3.1.3
-* openexr-3.1.1
-* oiio-2.3.7.2
+* openexr-3.1.3
+* oiio-2.3.9.1
 * ocio-2.1.0
 * partio-1.14.0
 * tbb-2020_U3
 * blosc-1.5.0
-* openvdb-8.1.0
+* openvdb-9.0.0
 * numpy-1.20
 * vfxplatform-2022
 
-## [aswf/ci-osl:2022-clang11.8](https://hub.docker.com/r/aswf/ci-osl/tags?page=1&name=2022-clang11.8)
+## [aswf/ci-osl:2022-clang11.9](https://hub.docker.com/r/aswf/ci-osl/tags?page=1&name=2022-clang11.9)
 
 Contains:
 * boost-1.76.0
-* cmake-3.20.5
+* cmake-3.22.0
 * python-3.9.7
 * qt-5.15.2
 * imath-3.1.3
-* openexr-3.1.1
-* oiio-2.3.7.2
+* openexr-3.1.3
+* oiio-2.3.9.1
 * ocio-2.1.0
 * partio-1.14.0
 * tbb-2020_U3
 * blosc-1.5.0
-* openvdb-8.1.0
+* openvdb-9.0.0
+* numpy-1.20
+* vfxplatform-2022
+
+## [aswf/ci-osl:2022-clang12.0](https://hub.docker.com/r/aswf/ci-osl/tags?page=1&name=2022-clang12.0)
+
+Contains:
+* boost-1.76.0
+* cmake-3.22.0
+* python-3.9.7
+* qt-5.15.2
+* imath-3.1.3
+* openexr-3.1.3
+* oiio-2.3.9.1
+* ocio-2.1.0
+* partio-1.14.0
+* tbb-2020_U3
+* blosc-1.5.0
+* openvdb-9.0.0
+* numpy-1.20
+* vfxplatform-2022
+
+## [aswf/ci-osl:2022-clang13.0](https://hub.docker.com/r/aswf/ci-osl/tags?page=1&name=2022-clang13.0)
+
+Contains:
+* boost-1.76.0
+* cmake-3.22.0
+* python-3.9.7
+* qt-5.15.2
+* imath-3.1.3
+* openexr-3.1.3
+* oiio-2.3.9.1
+* ocio-2.1.0
+* partio-1.14.0
+* tbb-2020_U3
+* blosc-1.5.0
+* openvdb-9.0.0
 * numpy-1.20
 * vfxplatform-2022
 
diff --git a/ci-otio/Dockerfile b/ci-otio/Dockerfile
index b25db3fd..1dbab72e 100644
--- a/ci-otio/Dockerfile
+++ b/ci-otio/Dockerfile
@@ -1,3 +1,4 @@
+# syntax=docker/dockerfile:1.3-labs
 # Copyright (c) Contributors to the aswf-docker Project. All rights reserved.
 # SPDX-License-Identifier: Apache-2.0
 
@@ -8,7 +9,6 @@ ARG ASWF_PKG_ORG
 ARG CI_COMMON_VERSION
 ARG ASWF_CLANG_MAJOR_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_VFXPLATFORM_VERSION
 
@@ -35,7 +35,6 @@ ARG ASWF_PKG_ORG
 ARG ASWF_VERSION
 ARG CI_COMMON_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_PYTHON_VERSION
 ARG ASWF_CMAKE_VERSION
@@ -98,17 +97,21 @@ ENV PYTHONPATH=/usr/local/lib/python${ASWF_PYTHON_MAJOR_MINOR_VERSION}/site-pack
 RUN conan config set general.default_profile=vfx${ASWF_VFXPLATFORM_VERSION}
 
 
+
+# conan-only packages
+COPY <<EOF /usr/local/conanfile.txt
+[generators]
+[imports]
+., * -> .
+[requires]
 # Uncomment to use Conan packages instead of Docker ones
-# 
-# RUN cd /usr/local/ && \
-#     echo $'[generators]\n\
-# cmake\n\
-# [imports]\n\
-# ., * -> .\n\
-# [requires]\n' >> /usr/local/conanfile.txt && \
-# #     echo "python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "qt/${ASWF_QT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "pyside/${ASWF_PYSIDE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     conan install . && \
-#     rm -rf ${CONAN_USER_DATA_FOLDER}/*
\ No newline at end of file
+# python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# qt/${ASWF_QT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# pyside/${ASWF_PYSIDE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+EOF
+
+RUN <<EOF
+cd /usr/local/
+conan install .
+EOF
\ No newline at end of file
diff --git a/ci-otio/README.md b/ci-otio/README.md
index f71f0f2c..09fd1208 100644
--- a/ci-otio/README.md
+++ b/ci-otio/README.md
@@ -52,7 +52,7 @@ Contains:
 
 Contains:
 * python-3.9.7
-* cmake-3.20.5
+* cmake-3.22.0
 * qt-5.15.2
 * pyside-5.15.2
 * numpy-1.20
diff --git a/ci-usd/Dockerfile b/ci-usd/Dockerfile
index 7f42d377..61fb9a3d 100644
--- a/ci-usd/Dockerfile
+++ b/ci-usd/Dockerfile
@@ -1,3 +1,4 @@
+# syntax=docker/dockerfile:1.3-labs
 # Copyright (c) Contributors to the aswf-docker Project. All rights reserved.
 # SPDX-License-Identifier: Apache-2.0
 
@@ -8,7 +9,6 @@ ARG ASWF_PKG_ORG
 ARG CI_COMMON_VERSION
 ARG ASWF_CLANG_MAJOR_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_VFXPLATFORM_VERSION
 
@@ -64,7 +64,6 @@ ARG ASWF_PKG_ORG
 ARG ASWF_VERSION
 ARG CI_COMMON_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_PYTHON_VERSION
 ARG ASWF_TBB_VERSION
@@ -185,31 +184,35 @@ ENV PYTHONPATH=/usr/local/lib/python${ASWF_PYTHON_MAJOR_MINOR_VERSION}/site-pack
 RUN conan config set general.default_profile=vfx${ASWF_VFXPLATFORM_VERSION}
 
 
+
+# conan-only packages
+COPY <<EOF /usr/local/conanfile.txt
+[generators]
+[imports]
+., * -> .
+[requires]
 # Uncomment to use Conan packages instead of Docker ones
-# 
-# RUN cd /usr/local/ && \
-#     echo $'[generators]\n\
-# cmake\n\
-# [imports]\n\
-# ., * -> .\n\
-# [requires]\n' >> /usr/local/conanfile.txt && \
-# #     echo "python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "tbb/${ASWF_TBB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "boost/${ASWF_BOOST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "glew/${ASWF_GLEW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "glfw/${ASWF_GLFW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "log4cplus/${ASWF_LOG4CPLUS_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "qt/${ASWF_QT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "pyside/${ASWF_PYSIDE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "imath/${ASWF_IMATH_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "openexr/${ASWF_OPENEXR_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "oiio/${ASWF_OIIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "ocio/${ASWF_OCIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "ptex/${ASWF_PTEX_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "opensubdiv/${ASWF_OPENSUBDIV_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "alembic/${ASWF_ALEMBIC_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "blosc/${ASWF_BLOSC_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "openvdb/${ASWF_OPENVDB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     conan install . && \
-#     rm -rf ${CONAN_USER_DATA_FOLDER}/*
\ No newline at end of file
+# python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# tbb/${ASWF_TBB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# boost/${ASWF_BOOST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# glew/${ASWF_GLEW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# glfw/${ASWF_GLFW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# log4cplus/${ASWF_LOG4CPLUS_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# qt/${ASWF_QT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# pyside/${ASWF_PYSIDE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# imath/${ASWF_IMATH_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# openexr/${ASWF_OPENEXR_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# oiio/${ASWF_OIIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# ocio/${ASWF_OCIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# ptex/${ASWF_PTEX_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# opensubdiv/${ASWF_OPENSUBDIV_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# alembic/${ASWF_ALEMBIC_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# blosc/${ASWF_BLOSC_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# openvdb/${ASWF_OPENVDB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+EOF
+
+RUN <<EOF
+cd /usr/local/
+conan install .
+EOF
\ No newline at end of file
diff --git a/ci-usd/README.md b/ci-usd/README.md
index a243ae11..7a127f2b 100644
--- a/ci-usd/README.md
+++ b/ci-usd/README.md
@@ -93,7 +93,7 @@ Contains:
 * hdf5-1.8.21
 * vfxplatform-2021
 
-## [aswf/ci-usd:2022.1](https://hub.docker.com/r/aswf/ci-usd/tags?page=1&name=2022.1)
+## [aswf/ci-usd:2022.2](https://hub.docker.com/r/aswf/ci-usd/tags?page=1&name=2022.2)
 
 Contains:
 * python-3.9.7
@@ -104,16 +104,16 @@ Contains:
 * log4cplus-1.1.2
 * qt-5.15.2
 * pyside-5.15.2
-* cmake-3.20.5
+* cmake-3.22.0
 * imath-3.1.3
-* openexr-3.1.1
-* oiio-2.3.7.2
+* openexr-3.1.3
+* oiio-2.3.9.1
 * ocio-2.1.0
 * ptex-2.4.0
 * opensubdiv-3_4_4
 * alembic-1.8.2
 * blosc-1.5.0
-* openvdb-8.1.0
+* openvdb-9.0.0
 * numpy-1.20
 * hdf5-1.8.21
 * vfxplatform-2022
diff --git a/ci-vfxall/Dockerfile b/ci-vfxall/Dockerfile
index 097b67f7..0494c7c5 100644
--- a/ci-vfxall/Dockerfile
+++ b/ci-vfxall/Dockerfile
@@ -1,3 +1,4 @@
+# syntax=docker/dockerfile:1.3-labs
 # Copyright (c) Contributors to the aswf-docker Project. All rights reserved.
 # SPDX-License-Identifier: Apache-2.0
 
@@ -8,7 +9,6 @@ ARG ASWF_PKG_ORG
 ARG CI_COMMON_VERSION
 ARG ASWF_CLANG_MAJOR_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_VFXPLATFORM_VERSION
 
@@ -74,7 +74,6 @@ ARG ASWF_PKG_ORG
 ARG ASWF_VERSION
 ARG CI_COMMON_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 ARG ASWF_PYTHON_VERSION
 ARG ASWF_TBB_VERSION
@@ -214,36 +213,40 @@ ENV PYTHONPATH=/usr/local/lib/python${ASWF_PYTHON_MAJOR_MINOR_VERSION}/site-pack
 RUN conan config set general.default_profile=vfx${ASWF_VFXPLATFORM_VERSION}
 
 
+
+# conan-only packages
+COPY <<EOF /usr/local/conanfile.txt
+[generators]
+[imports]
+., * -> .
+[requires]
 # Uncomment to use Conan packages instead of Docker ones
-# 
-# RUN cd /usr/local/ && \
-#     echo $'[generators]\n\
-# cmake\n\
-# [imports]\n\
-# ., * -> .\n\
-# [requires]\n' >> /usr/local/conanfile.txt && \
-# #     echo "python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "tbb/${ASWF_TBB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "boost/${ASWF_BOOST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "cppunit/${ASWF_CPPUNIT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "log4cplus/${ASWF_LOG4CPLUS_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "glew/${ASWF_GLEW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "glfw/${ASWF_GLFW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "qt/${ASWF_QT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "pyside/${ASWF_PYSIDE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "imath/${ASWF_IMATH_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "openexr/${ASWF_OPENEXR_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "blosc/${ASWF_BLOSC_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "alembic/${ASWF_ALEMBIC_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "oiio/${ASWF_OIIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "ocio/${ASWF_OCIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "opensubdiv/${ASWF_OPENSUBDIV_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "ptex/${ASWF_PTEX_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "openvdb/${ASWF_OPENVDB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "usd/${ASWF_USD_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "partio/${ASWF_PARTIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "osl/${ASWF_OSL_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     echo "otio/${ASWF_OTIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# #     conan install . && \
-#     rm -rf ${CONAN_USER_DATA_FOLDER}/*
\ No newline at end of file
+# python/${ASWF_PYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# tbb/${ASWF_TBB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# boost/${ASWF_BOOST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# cppunit/${ASWF_CPPUNIT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# log4cplus/${ASWF_LOG4CPLUS_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# glew/${ASWF_GLEW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# glfw/${ASWF_GLFW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# qt/${ASWF_QT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# pyside/${ASWF_PYSIDE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# cmake/${ASWF_CMAKE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# imath/${ASWF_IMATH_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# openexr/${ASWF_OPENEXR_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# blosc/${ASWF_BLOSC_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# alembic/${ASWF_ALEMBIC_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# oiio/${ASWF_OIIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# ocio/${ASWF_OCIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# opensubdiv/${ASWF_OPENSUBDIV_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# ptex/${ASWF_PTEX_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# openvdb/${ASWF_OPENVDB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# usd/${ASWF_USD_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# partio/${ASWF_PARTIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# osl/${ASWF_OSL_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+# otio/${ASWF_OTIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+EOF
+
+RUN <<EOF
+cd /usr/local/
+conan install .
+EOF
\ No newline at end of file
diff --git a/ci-vfxall/README.md b/ci-vfxall/README.md
index 15d68b6c..b72c2071 100644
--- a/ci-vfxall/README.md
+++ b/ci-vfxall/README.md
@@ -197,7 +197,7 @@ Contains:
 * hdf5-1.8.21
 * vfxplatform-2021
 
-## [aswf/ci-vfxall:2022-clang10.8](https://hub.docker.com/r/aswf/ci-vfxall/tags?page=1&name=2022-clang10.8)
+## [aswf/ci-vfxall:2022-clang10.9](https://hub.docker.com/r/aswf/ci-vfxall/tags?page=1&name=2022-clang10.9)
 
 Contains:
 * python-3.9.7
@@ -209,25 +209,25 @@ Contains:
 * glfw-3.1.2
 * qt-5.15.2
 * pyside-5.15.2
-* cmake-3.20.5
+* cmake-3.22.0
 * imath-3.1.3
-* openexr-3.1.1
+* openexr-3.1.3
 * blosc-1.5.0
 * alembic-1.8.2
-* oiio-2.3.7.2
+* oiio-2.3.9.1
 * ocio-2.1.0
 * opensubdiv-3_4_4
 * ptex-2.4.0
-* openvdb-8.1.0
-* usd-21.05
+* openvdb-9.0.0
+* usd-21.11
 * partio-1.14.0
-* osl-1.11.15.0
-* otio-0.13
+* osl-1.11.16.0
+* otio-0.14
 * numpy-1.20
 * hdf5-1.8.21
 * vfxplatform-2022
 
-## [aswf/ci-vfxall:2022-clang11.8](https://hub.docker.com/r/aswf/ci-vfxall/tags?page=1&name=2022-clang11.8)
+## [aswf/ci-vfxall:2022-clang11.9](https://hub.docker.com/r/aswf/ci-vfxall/tags?page=1&name=2022-clang11.9)
 
 Contains:
 * python-3.9.7
@@ -239,20 +239,80 @@ Contains:
 * glfw-3.1.2
 * qt-5.15.2
 * pyside-5.15.2
-* cmake-3.20.5
+* cmake-3.22.0
 * imath-3.1.3
-* openexr-3.1.1
+* openexr-3.1.3
 * blosc-1.5.0
 * alembic-1.8.2
-* oiio-2.3.7.2
+* oiio-2.3.9.1
 * ocio-2.1.0
 * opensubdiv-3_4_4
 * ptex-2.4.0
-* openvdb-8.1.0
-* usd-21.05
+* openvdb-9.0.0
+* usd-21.11
 * partio-1.14.0
-* osl-1.11.15.0
-* otio-0.13
+* osl-1.11.16.0
+* otio-0.14
+* numpy-1.20
+* hdf5-1.8.21
+* vfxplatform-2022
+
+## [aswf/ci-vfxall:2022-clang12.0](https://hub.docker.com/r/aswf/ci-vfxall/tags?page=1&name=2022-clang12.0)
+
+Contains:
+* python-3.9.7
+* tbb-2020_U3
+* boost-1.76.0
+* cppunit-1.15.1
+* log4cplus-1.1.2
+* glew-2.1.0
+* glfw-3.1.2
+* qt-5.15.2
+* pyside-5.15.2
+* cmake-3.22.0
+* imath-3.1.3
+* openexr-3.1.3
+* blosc-1.5.0
+* alembic-1.8.2
+* oiio-2.3.9.1
+* ocio-2.1.0
+* opensubdiv-3_4_4
+* ptex-2.4.0
+* openvdb-9.0.0
+* usd-21.11
+* partio-1.14.0
+* osl-1.11.16.0
+* otio-0.14
+* numpy-1.20
+* hdf5-1.8.21
+* vfxplatform-2022
+
+## [aswf/ci-vfxall:2022-clang13.0](https://hub.docker.com/r/aswf/ci-vfxall/tags?page=1&name=2022-clang13.0)
+
+Contains:
+* python-3.9.7
+* tbb-2020_U3
+* boost-1.76.0
+* cppunit-1.15.1
+* log4cplus-1.1.2
+* glew-2.1.0
+* glfw-3.1.2
+* qt-5.15.2
+* pyside-5.15.2
+* cmake-3.22.0
+* imath-3.1.3
+* openexr-3.1.3
+* blosc-1.5.0
+* alembic-1.8.2
+* oiio-2.3.9.1
+* ocio-2.1.0
+* opensubdiv-3_4_4
+* ptex-2.4.0
+* openvdb-9.0.0
+* usd-21.11
+* partio-1.14.0
+* osl-1.11.16.0
+* otio-0.14
 * numpy-1.20
 * hdf5-1.8.21
 * vfxplatform-2022
diff --git a/packages/conan/recipes/README.md b/packages/conan/recipes/README.md
index 83108534..00a87063 100644
--- a/packages/conan/recipes/README.md
+++ b/packages/conan/recipes/README.md
@@ -1,13 +1,11 @@
 # Conan Package Recipes
 
 Many of these recipes are borrowed from the [Conan Center Index](https://github.com/conan-io/conan-center-index/tree/master/recipes),
-but with quite a few modifications to allow the VFX versions to build, and with added settings to only allow Conan to resolve
-ASWF-made packages and avoid ABI mixes with the Conan Center packages.
+but a few modifications to allow all the VFX versions to build, avoid ABI mixes with the Conan Center packages.
+The `python` setting has been added to better separate packages by python minor version.
 
 As the Conan Center Index is MIT licensed the whole subfolder here is also MIT licensed for consistency.
 
 ## Adding new Conan packages
 
-Follow the great instructions there: [Conan Center Index - How to add Packages](https://github.com/conan-io/conan-center-index/blob/master/docs/how_to_add_packages.md).
-
-Then ensure the ASWF-specific settings are added in the `conanfile.py` such as: `python`, `devtoolset`, `ci_common` and `vfx_platform`.
+Follow the instructions in [CONTRIBUTING](../../../CONTRIBUTING.md#building-conan-packages)
diff --git a/packages/conan/recipes/pybind11/conandata.yml b/packages/conan/recipes/pybind11/conandata.yml
index 3c743f19..cba01f1b 100644
--- a/packages/conan/recipes/pybind11/conandata.yml
+++ b/packages/conan/recipes/pybind11/conandata.yml
@@ -14,4 +14,6 @@ sources:
   2.6.2:
     url: "https://github.com/pybind/pybind11/archive/v2.6.2.tar.gz"
     sha256: "8ff2fff22df038f5cd02cea8af56622bc67f5b64534f1b83b9f133b8366acff2"
-
+  2.8.1:
+    url: "https://github.com/pybind/pybind11/archive/v2.8.1.tar.gz"
+    sha256: "f1bcc07caa568eb312411dde5308b1e250bd0e1bc020fae855bf9f43209940cc"
diff --git a/packages/conan/settings/conan.conf b/packages/conan/settings/conan.conf
index eb3e7f70..ff71be9e 100644
--- a/packages/conan/settings/conan.conf
+++ b/packages/conan/settings/conan.conf
@@ -6,7 +6,7 @@ print_run_commands = False  # environment CONAN_PRINT_RUN_COMMANDS
 
 [general]
 revisions_enabled = 1
-default_profile = ci_common2
+default_profile = vfx2021
 compression_level = 9                 # environment CONAN_COMPRESSION_LEVEL
 sysrequires_sudo = True               # environment CONAN_SYSREQUIRES_SUDO
 request_timeout = 60                  # environment CONAN_REQUEST_TIMEOUT (seconds)
diff --git a/packages/vfx1/Dockerfile b/packages/vfx1/Dockerfile
index 5b21930d..f5bddad3 100644
--- a/packages/vfx1/Dockerfile
+++ b/packages/vfx1/Dockerfile
@@ -231,8 +231,59 @@ LABEL io.aswf.docker.versions.blosc="${ASWF_BLOSC_VERSION}"
 COPY --from=ci-blosc-builder /package/. /
 
 
+#################### ci-openvdb-builder ####################
+FROM ci-openexr-builder as ci-openvdb-builder
+
+ARG ASWF_OPENVDB_VERSION
+ENV ASWF_OPENVDB_VERSION=${ASWF_OPENVDB_VERSION}
+
+COPY ../scripts/vfx/build_openvdb.sh \
+     ../scripts/vfx/openvdb-imath.patch \
+     /tmp/
+
+COPY --from=ci-package-glew-external /. /usr/local/
+COPY --from=ci-package-tbb-external /. /usr/local/
+COPY --from=ci-package-cppunit-external /. /usr/local/
+COPY --from=ci-package-glfw-external /. /usr/local/
+
+COPY --from=ci-package-blosc /. /usr/local/
+
+RUN --mount=type=cache,target=/tmp/ccache \
+     --mount=type=cache,sharing=private,target=/tmp/downloads \
+     /tmp/before_build.sh && \
+     /tmp/build_openvdb.sh && \
+     /tmp/copy_new_files.sh && \
+     ccache --show-stats
+
+
+#################### ci-package-openvdb ####################
+FROM scratch as ci-package-openvdb
+
+ARG ASWF_ORG
+ARG CI_COMMON_VERSION
+ARG ASWF_DTS_VERSION
+ARG ASWF_OPENVDB_VERSION
+ARG ASWF_VFXPLATFORM_VERSION
+
+LABEL org.opencontainers.image.name="$ASWF_ORG/ci-package-openvdb"
+LABEL org.opencontainers.image.title="OpenVDB package built for ASWF Docker images"
+LABEL org.opencontainers.image.description="OpenVDB headers and binaries to be installed in ASWF Docker images"
+LABEL org.opencontainers.image.authors="Built by aswf.io CI Working Group"
+LABEL org.opencontainers.image.vendor="AcademySoftwareFoundation"
+LABEL org.opencontainers.image.url="https://github.com/AcademySoftwareFoundation/openvdb"
+LABEL org.opencontainers.image.source="https://github.com/AcademySoftwareFoundation/aswf-docker/blob/master/packages/Dockerfile"
+LABEL org.opencontainers.image.version="${ASWF_OPENVDB_VERSION}"
+LABEL org.opencontainers.image.licenses="MPL-2.0"
+LABEL io.aswf.docker.versions.ci-common="${CI_COMMON_VERSION}"
+LABEL io.aswf.docker.versions.vfx-platform="${ASWF_VFXPLATFORM_VERSION}"
+LABEL io.aswf.docker.versions.dts="${ASWF_DTS_VERSION}"
+LABEL io.aswf.docker.versions.openvdb="${ASWF_OPENVDB_VERSION}"
+
+COPY --from=ci-openvdb-builder /package/. /
+
+
 #################### ci-oiio-builder ####################
-FROM ci-openexr-builder as ci-oiio-builder
+FROM ci-openvdb-builder as ci-oiio-builder
 
 ARG ASWF_OIIO_VERSION
 ENV ASWF_OIIO_VERSION=${ASWF_OIIO_VERSION}
@@ -343,53 +394,3 @@ RUN --mount=type=cache,target=/tmp/ccache \
     /tmp/copy_new_files.sh && \
     ccache --show-stats
 
-
-#################### ci-openvdb-builder ####################
-FROM ci-openexr-builder as ci-openvdb-builder
-
-ARG ASWF_OPENVDB_VERSION
-ENV ASWF_OPENVDB_VERSION=${ASWF_OPENVDB_VERSION}
-
-COPY ../scripts/vfx/build_openvdb.sh \
-     ../scripts/vfx/openvdb-imath.patch \
-     /tmp/
-
-COPY --from=ci-package-glew-external /. /usr/local/
-COPY --from=ci-package-tbb-external /. /usr/local/
-COPY --from=ci-package-cppunit-external /. /usr/local/
-COPY --from=ci-package-glfw-external /. /usr/local/
-
-COPY --from=ci-package-blosc /. /usr/local/
-
-RUN --mount=type=cache,target=/tmp/ccache \
-     --mount=type=cache,sharing=private,target=/tmp/downloads \
-     /tmp/before_build.sh && \
-     /tmp/build_openvdb.sh && \
-     /tmp/copy_new_files.sh && \
-     ccache --show-stats
-
-
-#################### ci-package-openvdb ####################
-FROM scratch as ci-package-openvdb
-
-ARG ASWF_ORG
-ARG CI_COMMON_VERSION
-ARG ASWF_DTS_VERSION
-ARG ASWF_OPENVDB_VERSION
-ARG ASWF_VFXPLATFORM_VERSION
-
-LABEL org.opencontainers.image.name="$ASWF_ORG/ci-package-openvdb"
-LABEL org.opencontainers.image.title="OpenVDB package built for ASWF Docker images"
-LABEL org.opencontainers.image.description="OpenVDB headers and binaries to be installed in ASWF Docker images"
-LABEL org.opencontainers.image.authors="Built by aswf.io CI Working Group"
-LABEL org.opencontainers.image.vendor="AcademySoftwareFoundation"
-LABEL org.opencontainers.image.url="https://github.com/AcademySoftwareFoundation/openvdb"
-LABEL org.opencontainers.image.source="https://github.com/AcademySoftwareFoundation/aswf-docker/blob/master/packages/Dockerfile"
-LABEL org.opencontainers.image.version="${ASWF_OPENVDB_VERSION}"
-LABEL org.opencontainers.image.licenses="MPL-2.0"
-LABEL io.aswf.docker.versions.ci-common="${CI_COMMON_VERSION}"
-LABEL io.aswf.docker.versions.vfx-platform="${ASWF_VFXPLATFORM_VERSION}"
-LABEL io.aswf.docker.versions.dts="${ASWF_DTS_VERSION}"
-LABEL io.aswf.docker.versions.openvdb="${ASWF_OPENVDB_VERSION}"
-
-COPY --from=ci-openvdb-builder /package/. /
diff --git a/packages/vfx2/Dockerfile b/packages/vfx2/Dockerfile
index acf9bbec..9f4132a3 100644
--- a/packages/vfx2/Dockerfile
+++ b/packages/vfx2/Dockerfile
@@ -125,6 +125,9 @@ COPY --from=ci-package-imath-external /. /usr/local/
 COPY --from=ci-package-openexr-external /. /usr/local/
 COPY --from=ci-package-oiio-external /. /usr/local/
 COPY --from=ci-package-pybind11-external /. /usr/local/
+COPY --from=ci-package-openvdb-external /. /usr/local/
+COPY --from=ci-package-tbb-external /. /usr/local/
+COPY --from=ci-package-blosc-external /. /usr/local/
 
 COPY ../scripts/vfx/build_osl.sh \
      /tmp/
diff --git a/python/aswfdocker/builder.py b/python/aswfdocker/builder.py
index 444a7a4b..7912d8d9 100644
--- a/python/aswfdocker/builder.py
+++ b/python/aswfdocker/builder.py
@@ -36,6 +36,10 @@ def make_bake_dict(self) -> typing.Dict[str, dict]:
         root["target"] = {}
         versions_to_bake = set()
         for image, version in self.group_info.iter_images_versions():
+            use_conan = self.group_info.type == constants.ImageType.PACKAGE and (
+                self.use_conan
+                or self.index.is_conan_only_package(image.replace("ci-package-", ""))
+            )
             major_version = utils.get_major_version(version)
             version_info = self.index.version_info(major_version)
             if self.group_info.type == constants.ImageType.PACKAGE:
@@ -43,7 +47,7 @@ def make_bake_dict(self) -> typing.Dict[str, dict]:
                 group = self.index.get_group_from_image(
                     self.group_info.type, image_base
                 )
-                if self.use_conan:
+                if use_conan:
                     if version in versions_to_bake:
                         # Only one version per image needed
                         continue
@@ -79,7 +83,7 @@ def make_bake_dict(self) -> typing.Dict[str, dict]:
             if version_info.ci_common_version == major_version:
                 channel = f"ci_common{major_version}"
             else:
-                channel = f"vfx{major_version}"
+                channel = f"vfx{version_info.major_version}"
             args = {
                 "ASWF_ORG": self.build_info.docker_org,
                 "ASWF_PKG_ORG": self.build_info.package_org,
@@ -100,7 +104,7 @@ def make_bake_dict(self) -> typing.Dict[str, dict]:
                 "output": ["type=registry,push=true" if self.push else "type=docker"],
             }
             if self.group_info.type == constants.ImageType.PACKAGE:
-                if self.use_conan:
+                if use_conan:
                     target_dict["target"] = "ci-centos7-gl-conan"
                 else:
                     target_dict["target"] = image
@@ -140,7 +144,6 @@ def _get_conan_env_vars(self, version_info):
         envs = {
             "CONAN_USER_HOME": constants.CONAN_USER_HOME,
             "CCACHE_DIR": "/tmp/ccache",
-            "CONAN_USER_DATA_FOLDER": os.path.join(constants.CONAN_USER_HOME, "d"),
             "CONAN_NON_INTERACTIVE": "1",
         }
         if "CONAN_LOGIN_USERNAME" in os.environ:
@@ -294,6 +297,20 @@ def build(
         conan_login=False,
         build_missing=False,
     ) -> None:
+        images_and_versions = []
+        for image, version in self.group_info.iter_images_versions(get_image=True):
+            if (
+                self.group_info.type == constants.ImageType.PACKAGE
+                and not self.use_conan
+                and self.index.is_conan_only_package(image)
+            ):
+                logger.warning("Skipping %s as it is a conan-only package!", image)
+                continue
+            images_and_versions.append((image, version))
+
+        if not images_and_versions:
+            return
+
         path = self.make_bake_jsonfile()
         if path:
             self._run(
@@ -301,7 +318,13 @@ def build(
             )
         if not self.use_conan or self.group_info.type == constants.ImageType.IMAGE:
             return
-        for image, version in self.group_info.iter_images_versions(get_image=True):
+
+        conan_base = os.path.join(utils.get_git_top_level(), "packages", "conan")
+        for image, version in images_and_versions:
+            recipe_path = os.path.join(conan_base, "recipes", image)
+            if not os.path.exists(recipe_path):
+                logger.warning("Recipe for %s not found: skipping!", image)
+                continue
             self._build_conan_package(
                 image,
                 version,
diff --git a/python/aswfdocker/data/ci-image-dockerfile.jinja2 b/python/aswfdocker/data/ci-image-dockerfile.jinja2
index 22f5a94c..06e2385b 100644
--- a/python/aswfdocker/data/ci-image-dockerfile.jinja2
+++ b/python/aswfdocker/data/ci-image-dockerfile.jinja2
@@ -1,3 +1,4 @@
+# syntax=docker/dockerfile:1.3-labs
 # Copyright (c) Contributors to the aswf-docker Project. All rights reserved.
 # SPDX-License-Identifier: Apache-2.0
 
@@ -8,7 +9,6 @@ ARG ASWF_PKG_ORG
 ARG CI_COMMON_VERSION
 ARG ASWF_CLANG_MAJOR_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 {% if name != "common" %}
 ARG ASWF_VFXPLATFORM_VERSION
 {% endif %}
@@ -29,7 +29,9 @@ ARG {{ arg }}
 
 # Comment out this block to use Conan packages
 {% for package in packages -%}
+{% if not index.is_conan_only_package(package) -%}
 FROM ${ASWF_PKG_ORG}/ci-package-{{ package }}:{{docker_package_version}}-$ASWF_{{package.upper()}}_VERSION as ci-package-{{ package }}
+{% endif -%}
 {% endfor -%}
 
 
@@ -41,7 +43,6 @@ ARG ASWF_PKG_ORG
 ARG ASWF_VERSION
 ARG CI_COMMON_VERSION
 ARG ASWF_CONAN_CHANNEL
-ARG CONAN_USER_DATA_FOLDER
 
 {% for arg in docker_args -%}
 ARG {{ arg }}
@@ -96,7 +97,9 @@ ENV {{ arg }}=${{ arg }}
 
 # Comment out this block to use Conan packages
 {% for package in packages -%}
+{% if not index.is_conan_only_package(package) -%}
 COPY --from=ci-package-{{ package }} /. /usr/local/
+{% endif -%}
 {% endfor -%}
 
 COPY ci-{{name}}/README.md ci-{{name}}/image.yaml /usr/local/aswf/
@@ -113,16 +116,24 @@ RUN conan config set general.default_profile=vfx${ASWF_VFXPLATFORM_VERSION}
 RUN conan config set general.default_profile=ci_common${CI_COMMON_VERSION}
 {% endif %}
 
+
+# conan-only packages
+COPY <<EOF /usr/local/conanfile.txt
+[generators]
+[imports]
+., * -> .
+[requires]
 # Uncomment to use Conan packages instead of Docker ones
-# 
-# RUN cd /usr/local/ && \
-#     echo $'[generators]\n\
-# cmake\n\
-# [imports]\n\
-# ., * -> .\n\
-# [requires]\n' >> /usr/local/conanfile.txt && \
-# {% for package in packages -%}
-#     echo "{{package}}/${ASWF_{{package.upper()}}_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}" >> /usr/local/conanfile.txt && \
-# {% endfor -%}
-#     conan install . && \
-#     rm -rf ${CONAN_USER_DATA_FOLDER}/*
+{% for package in packages -%}
+{% if index.is_conan_only_package(package) -%}
+{{package}}/${ASWF_{{package.upper()}}_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+{% else -%}
+# {{package}}/${ASWF_{{package.upper()}}_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL}
+{% endif -%}
+{% endfor -%}
+EOF
+
+RUN <<EOF
+cd /usr/local/
+conan install .
+EOF
diff --git a/python/aswfdocker/data/versions.yaml b/python/aswfdocker/data/versions.yaml
index 5326c887..f97d0526 100644
--- a/python/aswfdocker/data/versions.yaml
+++ b/python/aswfdocker/data/versions.yaml
@@ -110,6 +110,7 @@ versions:
       ASWF_CPPUNIT_VERSION: "1.14.0"
       ASWF_GLEW_VERSION: "2.1.0"
       ASWF_GLFW_VERSION: "3.1.2"
+      ASWF_GTEST_VERSION: "1.8.1"
       ASWF_HDF5_VERSION: "1.8.21"
       ASWF_IMATH_VERSION: "2.3.0"
       ASWF_LOG4CPLUS_VERSION: "1.1.2"
@@ -167,6 +168,7 @@ versions:
       ASWF_CPPUNIT_VERSION: "1.15.1"
       ASWF_GLEW_VERSION: "2.1.0"
       ASWF_GLFW_VERSION: "3.1.2"
+      ASWF_GTEST_VERSION: "1.10.0"
       ASWF_HDF5_VERSION: "1.8.21"
       ASWF_IMATH_VERSION: "2.4.0"
       ASWF_LOG4CPLUS_VERSION: "1.1.2"
@@ -208,6 +210,7 @@ versions:
       ASWF_CPPUNIT_VERSION: "1.15.1"
       ASWF_GLEW_VERSION: "2.1.0"
       ASWF_GLFW_VERSION: "3.1.2"
+      ASWF_GTEST_VERSION: "1.11.0"
       ASWF_HDF5_VERSION: "1.8.21"
       ASWF_IMATH_VERSION: "2.5.5"
       ASWF_LOG4CPLUS_VERSION: "1.1.2"
@@ -251,38 +254,49 @@ versions:
       ASWF_ALEMBIC_VERSION: "1.8.2"
       ASWF_BLOSC_VERSION: "1.5.0"
       ASWF_BOOST_VERSION: "1.76.0"
-      ASWF_CMAKE_VERSION: "3.20.5"
+      ASWF_CMAKE_VERSION: "3.22.0"
       ASWF_CPPUNIT_VERSION: "1.15.1"
       ASWF_GLEW_VERSION: "2.1.0"
       ASWF_GLFW_VERSION: "3.1.2"
+      ASWF_GTEST_VERSION: "1.11.0"
       ASWF_HDF5_VERSION: "1.8.21"
       ASWF_IMATH_VERSION: "3.1.3"
       ASWF_LOG4CPLUS_VERSION: "1.1.2"
       ASWF_NUMPY_VERSION: "1.20"
       ASWF_OCIO_CONFIGS_VERSION: "1.0_r2"
       ASWF_OCIO_VERSION: "2.1.0"
-      ASWF_OIIO_VERSION: "2.3.7.2"
-      ASWF_OPENEXR_VERSION: "3.1.1"
+      ASWF_OIIO_VERSION: "2.3.9.1"
+      ASWF_OPENEXR_VERSION: "3.1.3"
       ASWF_OPENSUBDIV_VERSION: "3_4_4"
-      ASWF_OPENVDB_VERSION: "8.1.0"
-      ASWF_OSL_VERSION: "1.11.15.0"
-      ASWF_OTIO_VERSION: "0.13"
+      ASWF_OPENVDB_VERSION: "9.0.0"
+      ASWF_OSL_VERSION: "1.11.16.0"
+      ASWF_OTIO_VERSION: "0.14"
       ASWF_PARTIO_VERSION: "1.14.0"
       ASWF_PTEX_VERSION: "2.4.0"
-      ASWF_PYBIND11_VERSION: "2.6.2"
+      ASWF_PYBIND11_VERSION: "2.8.1"
       ASWF_PYSIDE_VERSION: "5.15.2"
       ASWF_PYTHON_VERSION: "3.9.7"
       ASWF_PYTHON_MAJOR_MINOR_VERSION: "3.9"
       ASWF_QT_VERSION: "5.15.2"
       ASWF_TBB_VERSION: "2020_U3"
-      ASWF_USD_VERSION: "21.05"
+      ASWF_USD_VERSION: "21.11"
       ASWF_VFXPLATFORM_VERSION: "2022"
   "2022-clang10":
     parent_versions: ["2", "2-clang10", "2022"]
+    major_version: "2022"
     use_major_version_as_tag: true
     ci_common_version: "2"
   "2022-clang11":
     parent_versions: ["2", "2-clang11", "2022"]
+    major_version: "2022"
+    ci_common_version: "2"
+  "2022-clang12":
+    parent_versions: ["2", "2-clang12", "2022"]
+    major_version: "2022"
+    ci_common_version: "2"
+  "2022-clang13":
+    parent_versions: ["2", "2-clang13", "2022"]
+    major_version: "2022"
     ci_common_version: "2"
 
 ci-packages:
@@ -303,7 +317,7 @@ ci-packages:
     - "2019.0"
     - "2020.0"
     - "2021.1"
-    - "2022.0"
+    - "2022.1"
   python:
     - "2019.2"
     - "2020.2"
@@ -313,7 +327,7 @@ ci-packages:
     - "2019.0"
     - "2020.0"
     - "2021.0"
-    - "2022.1"
+    - "2022.2"
   boost:
     - "2019.2"
     - "2020.2"
@@ -344,6 +358,11 @@ ci-packages:
     - "2020.2"
     - "2021.1"
     - "2022.0"
+  gtest:
+    - "2019.0"
+    - "2020.0"
+    - "2021.0"
+    - "2022.0"
   qt:
     - "2019.2"
     - "2020.2"
@@ -368,7 +387,7 @@ ci-packages:
     - "2019.2"
     - "2020.2"
     - "2021.3"
-    - "2022.1"
+    - "2022.2"
   alembic:
     - "2019.2"
     - "2020.2"
@@ -383,7 +402,7 @@ ci-packages:
     - "2019.2"
     - "2020.2"
     - "2021.4"
-    - "2022.1"
+    - "2022.2"
   opensubdiv:
     - "2019.2"
     - "2020.2"
@@ -398,12 +417,12 @@ ci-packages:
     - "2019.2"
     - "2020.2"
     - "2021.3"
-    - "2022.1"
+    - "2022.2"
   usd:
     - "2019.3"
     - "2020.2"
     - "2021.5"
-    - "2022.1"
+    - "2022.2"
   partio:
     - "2019.1"
     - "2020.1"
@@ -413,12 +432,12 @@ ci-packages:
     - "2019.1"
     - "2020.1"
     - "2021.3"
-    - "2022.1"
+    - "2022.2"
   otio:
     - "2019.1"
     - "2020.1"
     - "2021.3"
-    - "2022.1"
+    - "2022.2"
 
 ci-images:
   common:
@@ -432,15 +451,15 @@ ci-images:
     - "2-clang12.0"
     - "2-clang13.0"
   base:
-    - "2019.8"
-    - "2020.8"
-    - "2021.5"
-    - "2022.1"
+    - "2019.9"
+    - "2020.9"
+    - "2021.6"
+    - "2022.2"
   baseqt:
-    - "2019.1"
-    - "2020.1"
-    - "2021.2"
-    - "2022.1"
+    - "2019.2"
+    - "2020.2"
+    - "2021.3"
+    - "2022.2"
   openexr:
     - "2019.8"
     - "2020.8"
@@ -450,7 +469,7 @@ ci-images:
     - "2019.9"
     - "2020.8"
     - "2021.6"
-    - "2022.1"
+    - "2022.2"
   opencue:
     - "2019.10"
     - "2020.10"
@@ -460,7 +479,7 @@ ci-images:
     - "2019.9"
     - "2020.8"
     - "2021.6"
-    - "2022.1"
+    - "2022.2"
   otio:
     - "2019.3"
     - "2020.3"
@@ -475,8 +494,10 @@ ci-images:
     - "2020-clang7.5"
     - "2021-clang10.7"
     - "2021-clang11.7"
-    - "2022-clang10.8"
-    - "2022-clang11.8"
+    - "2022-clang10.9"
+    - "2022-clang11.9"
+    - "2022-clang12.0"
+    - "2022-clang13.0"
   openvdb:
     - "2019-clang6.8"
     - "2019-clang7.8"
@@ -484,8 +505,10 @@ ci-images:
     - "2019-clang9.8"
     - "2020-clang7.8"
     - "2021-clang10.6"
-    - "2022-clang10.8"
-    - "2022-clang11.8"
+    - "2022-clang10.9"
+    - "2022-clang11.9"
+    - "2022-clang12.0"
+    - "2022-clang13.0"
   vfxall:
     - "2019-clang6.12"
     - "2019-clang7.12"
@@ -493,8 +516,10 @@ ci-images:
     - "2019-clang9.12"
     - "2020-clang7.10"
     - "2021-clang10.7"
-    - "2022-clang10.8"
-    - "2022-clang11.8"
+    - "2022-clang10.9"
+    - "2022-clang11.9"
+    - "2022-clang12.0"
+    - "2022-clang13.0"
 
 groups:
   package:
@@ -511,6 +536,7 @@ groups:
         - glfw
         - log4cplus
         - tbb
+        - gtest
       base2:
         - qt
       base3:
@@ -557,3 +583,6 @@ package_data:
   conan:
     docker_args:
       - ASWF_CONAN_PYTHON_VERSION
+
+conan_only:
+  - gtest
diff --git a/python/aswfdocker/index.py b/python/aswfdocker/index.py
index 726a7a66..2add001c 100644
--- a/python/aswfdocker/index.py
+++ b/python/aswfdocker/index.py
@@ -89,3 +89,6 @@ def get_group_from_image(self, image_type: constants.ImageType, image: str):
                 if img == image:
                     return group
         raise RuntimeError(f"Cannot find group for image {image}")
+
+    def is_conan_only_package(self, package):
+        return package in self._versions["conan_only"]
diff --git a/scripts/vfx/build_openvdb.sh b/scripts/vfx/build_openvdb.sh
index 6091289c..23a54ae8 100755
--- a/scripts/vfx/build_openvdb.sh
+++ b/scripts/vfx/build_openvdb.sh
@@ -30,7 +30,7 @@ EOF
 
 fi
 
-if [[ $ASWF_IMATH_VERSION == 3* ]]; then
+if [[ $ASWF_IMATH_VERSION == 3* && $ASWF_OPENVDB_VERSION == 8* ]]; then
     patch -p1 < /tmp/openvdb-imath.patch
 fi
 


Test patch:
diff --git a/packages/conan/recipes/gtest/CMakeLists.txt b/packages/conan/recipes/gtest/CMakeLists.txt
new file mode 100644
index 00000000..936997bc
--- /dev/null
+++ b/packages/conan/recipes/gtest/CMakeLists.txt
@@ -0,0 +1,13 @@
+cmake_minimum_required(VERSION 2.8.11)
+project(cmake_wrapper)
+
+include("conanbuildinfo.cmake")
+conan_basic_setup()
+
+if(MSVC)
+  if(MSVC_VERSION AND (MSVC_VERSION EQUAL 1910 OR MSVC_VERSION GREATER 1910))
+    add_definitions(-DGTEST_LANG_CXX11=1 -DGTEST_HAS_TR1_TUPLE=0)
+  endif(MSVC_VERSION AND (MSVC_VERSION EQUAL 1910 OR MSVC_VERSION GREATER 1910))
+endif(MSVC)
+
+add_subdirectory("source_subfolder")
diff --git a/packages/conan/recipes/gtest/conandata.yml b/packages/conan/recipes/gtest/conandata.yml
new file mode 100644
index 00000000..97666235
--- /dev/null
+++ b/packages/conan/recipes/gtest/conandata.yml
@@ -0,0 +1,25 @@
+sources:
+  "1.8.1":
+    url: "https://github.com/google/googletest/archive/release-1.8.1.tar.gz"
+    sha256: "9bf1fe5182a604b4135edc1a425ae356c9ad15e9b23f9f12a02e80184c3a249c"
+  "1.10.0":
+    url: "https://github.com/google/googletest/archive/release-1.10.0.tar.gz"
+    sha256: "9dc9157a9a1551ec7a7e43daea9a694a0bb5fb8bec81235d8a1e6ef64c716dcb"
+  "cci.20210126":
+    url: "https://github.com/google/googletest/archive/273f8cb059a4e7b089731036392422b5ef489791.tar.gz"
+    sha256: "2937e96827aa44b291d42c4f0ffaa6a7637445822cf873d0fa6a889df84b8628"
+  "1.11.0":
+    url: "https://github.com/google/googletest/archive/release-1.11.0.tar.gz"
+    sha256: "b4870bf121ff7795ba20d20bcdd8627b8e088f2d1dab299a031c1034eddc93d5"
+patches:
+  "1.8.1":
+    - patch_file: "patches/gtest-1.8.1.patch"
+      base_path: "source_subfolder"
+  "1.10.0":
+    - patch_file: "patches/gtest-1.10.0.patch"
+      base_path: "source_subfolder"
+    - patch_file: "patches/gtest-1.10.0-override.patch"
+      base_path: "source_subfolder"
+  "cci.20210126":
+    - patch_file: "patches/gtest-1.10.0.patch"
+      base_path: "source_subfolder"
diff --git a/packages/conan/recipes/gtest/conanfile.py b/packages/conan/recipes/gtest/conanfile.py
new file mode 100644
index 00000000..957d5c37
--- /dev/null
+++ b/packages/conan/recipes/gtest/conanfile.py
@@ -0,0 +1,195 @@
+from conans import ConanFile, CMake, tools
+from conans.errors import ConanInvalidConfiguration
+import os
+
+required_conan_version = ">=1.33.0"
+
+
+class GTestConan(ConanFile):
+    name = "gtest"
+    description = "Google's C++ test framework"
+    url = "https://github.com/conan-io/conan-center-index"
+    homepage = "https://github.com/google/googletest"
+    license = "BSD-3-Clause"
+    topics = ("gtest", "testing", "google-testing", "unit-test")
+    exports_sources = ["CMakeLists.txt", "patches/*"]
+    generators = "cmake"
+    settings = "os", "arch", "compiler", "build_type"
+    options = {
+        "shared": [True, False],
+        "build_gmock": [True, False],
+        "fPIC": [True, False],
+        "no_main": [True, False],
+        "debug_postfix": "ANY",
+        "hide_symbols": [True, False],
+    }
+    default_options = {
+        "shared": False,
+        "build_gmock": True,
+        "fPIC": True,
+        "no_main": False,
+        "debug_postfix": "d",
+        "hide_symbols": False,
+    }
+    _cmake = None
+
+    @property
+    def _source_subfolder(self):
+        return "source_subfolder"
+
+    @property
+    def _build_subfolder(self):
+        return "build_subfolder"
+
+    @property
+    def _minimum_cpp_standard(self):
+        if self.version == "1.8.1":
+            return 98
+        else:
+            return 11
+
+    @property
+    def _minimum_compilers_version(self):
+        if self.version == "1.8.1":
+            return {"Visual Studio": "14"}
+        elif self.version == "1.10.0":
+            return {
+                "Visual Studio": "14",
+                "gcc": "4.8.1",
+                "clang": "3.3",
+                "apple-clang": "5.0",
+            }
+        else:
+            return {
+                "Visual Studio": "14",
+                "gcc": "5",
+                "clang": "5",
+                "apple-clang": "9.1",
+            }
+
+    @property
+    def _postfix(self):
+        return self.options.debug_postfix if self.settings.build_type == "Debug" else ""
+
+    def config_options(self):
+        if self.settings.os == "Windows":
+            del self.options.fPIC
+        if self.settings.build_type != "Debug":
+            del self.options.debug_postfix
+
+    def configure(self):
+        if self.options.shared:
+            del self.options.fPIC
+
+    def validate(self):
+        if self.settings.get_safe("compiler.cppstd"):
+            tools.check_min_cppstd(self, self._minimum_cpp_standard)
+        min_version = self._minimum_compilers_version.get(str(self.settings.compiler))
+
+        def lazy_lt_semver(v1, v2):
+            lv1 = [int(v) for v in v1.split(".")]
+            lv2 = [int(v) for v in v2.split(".")]
+            min_length = min(len(lv1), len(lv2))
+            return lv1[:min_length] < lv2[:min_length]
+
+        if not min_version:
+            self.output.warn(
+                "{} recipe lacks information about {} compiler support.".format(
+                    self.name, self.settings.compiler
+                )
+            )
+        else:
+            if lazy_lt_semver(str(self.settings.compiler.version), min_version):
+                raise ConanInvalidConfiguration(
+                    "{0} requires {1} {2}. The current compiler is {1} {3}.".format(
+                        self.name,
+                        self.settings.compiler,
+                        min_version,
+                        self.settings.compiler.version,
+                    )
+                )
+
+    def source(self):
+        tools.get(
+            **self.conan_data["sources"][self.version],
+            destination=self._source_subfolder,
+            strip_root=True,
+        )
+
+    def _configure_cmake(self):
+        if self._cmake:
+            return self._cmake
+        self._cmake = CMake(self)
+        if self.settings.build_type == "Debug":
+            self._cmake.definitions["CUSTOM_DEBUG_POSTFIX"] = self.options.debug_postfix
+        if self.settings.os == "Windows" and self.settings.get_safe("compiler.runtime"):
+            self._cmake.definitions["gtest_force_shared_crt"] = "MD" in str(
+                self.settings.compiler.runtime
+            )
+        self._cmake.definitions["BUILD_GMOCK"] = self.options.build_gmock
+        if self.settings.os == "Windows" and self.settings.compiler == "gcc":
+            self._cmake.definitions["gtest_disable_pthreads"] = True
+        self._cmake.definitions[
+            "gtest_hide_internal_symbols"
+        ] = self.options.hide_symbols
+        self._cmake.configure(build_folder=self._build_subfolder)
+        return self._cmake
+
+    def build(self):
+        for patch in self.conan_data.get("patches", {}).get(self.version, []):
+            tools.patch(**patch)
+        cmake = self._configure_cmake()
+        cmake.build()
+
+    def package(self):
+        self.copy("LICENSE", dst="licenses", src=self._source_subfolder)
+        cmake = self._configure_cmake()
+        cmake.install()
+        tools.rmdir(os.path.join(self.package_folder, "lib", "pkgconfig"))
+        tools.rmdir(os.path.join(self.package_folder, "lib", "cmake"))
+        tools.remove_files_by_mask(os.path.join(self.package_folder, "lib"), "*.pdb")
+
+    def package_id(self):
+        del self.info.options.no_main
+
+    def package_info(self):
+        self.cpp_info.names["cmake_find_package"] = "GTest"
+        self.cpp_info.names["cmake_find_package_multi"] = "GTest"
+        self.cpp_info.components["libgtest"].names["cmake_find_package"] = "gtest"
+        self.cpp_info.components["libgtest"].names["cmake_find_package_multi"] = "gtest"
+        self.cpp_info.components["libgtest"].libs = ["gtest{}".format(self._postfix)]
+        if self.settings.os == "Linux":
+            self.cpp_info.components["libgtest"].system_libs.append("pthread")
+
+        if self.settings.os == "Neutrino" and self.settings.os.version == "7.1":
+            self.cpp_info.components["libgtest"].system_libs.append("regex")
+
+        if self.options.shared:
+            self.cpp_info.components["libgtest"].defines.append(
+                "GTEST_LINKED_AS_SHARED_LIBRARY=1"
+            )
+
+        if self.version == "1.8.1":
+            if self.settings.compiler == "Visual Studio":
+                if tools.Version(self.settings.compiler.version) >= "15":
+                    self.cpp_info.components["libgtest"].defines.append(
+                        "GTEST_LANG_CXX11=1"
+                    )
+                    self.cpp_info.components["libgtest"].defines.append(
+                        "GTEST_HAS_TR1_TUPLE=0"
+                    )
+
+        if not self.options.no_main:
+            self.cpp_info.components["gtest_main"].libs = [
+                "gtest_main{}".format(self._postfix)
+            ]
+            self.cpp_info.components["gtest_main"].requires = ["libgtest"]
+
+        if self.options.build_gmock:
+            self.cpp_info.components["gmock"].libs = ["gmock{}".format(self._postfix)]
+            self.cpp_info.components["gmock"].requires = ["libgtest"]
+            if not self.options.no_main:
+                self.cpp_info.components["gmock_main"].libs = [
+                    "gmock_main{}".format(self._postfix)
+                ]
+                self.cpp_info.components["gmock_main"].requires = ["gmock"]
diff --git a/packages/conan/recipes/gtest/patches/gtest-1.10.0-override.patch b/packages/conan/recipes/gtest/patches/gtest-1.10.0-override.patch
new file mode 100644
index 00000000..1757bf31
--- /dev/null
+++ b/packages/conan/recipes/gtest/patches/gtest-1.10.0-override.patch
@@ -0,0 +1,450 @@
+From 3cddd56e195b516f449bea6dcd3edd4494195631 Mon Sep 17 00:00:00 2001
+From: Robert Luberda <robert@debian.org>
+Date: Wed, 9 Oct 2019 21:48:00 +0200
+Subject: [PATCH] Add more override keywords
+
+Mark more functions with "override" keyword, just like
+it was done in commit 2460f97152c.
+
+This should prevent compiler from complaining while compiling both
+user code, and the googletest code itself with the -Wsuggest-override
+option turned on; with the exception of:
+ * calls to new MOCK_METHOD() in test/gmock-function-mocker_test.cc
+ * calls to old MOCK_METHODx()/MOCK_CONST_METHODx() in other
+   unit test files.
+
+Closes #2493
+---
+ .../include/gmock/gmock-generated-actions.h   | 24 ++---
+ .../gmock/gmock-generated-actions.h.pump      |  4 +-
+ .../include/gmock/gmock-generated-matchers.h  | 88 +++++++++----------
+ .../gmock/gmock-generated-matchers.h.pump     |  8 +-
+ googletest/include/gtest/gtest-typed-test.h   |  4 +-
+ .../include/gtest/internal/gtest-port.h       |  4 +-
+ googletest/test/gtest_unittest.cc             |  4 +-
+ 7 files changed, 68 insertions(+), 68 deletions(-)
+
+diff --git a/googlemock/include/gmock/gmock-generated-actions.h b/googlemock/include/gmock/gmock-generated-actions.h
+index 981af78ff..cee96dae8 100644
+--- a/googlemock/include/gmock/gmock-generated-actions.h
++++ b/googlemock/include/gmock/gmock-generated-actions.h
+@@ -663,7 +663,7 @@ class ActionHelper {
+       typedef typename ::testing::internal::Function<F>::ArgumentTuple\
+           args_type;\
+       explicit gmock_Impl GMOCK_INTERNAL_INIT_##value_params {}\
+-      virtual return_type Perform(const args_type& args) {\
++      return_type Perform(const args_type& args) override {\
+         return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
+             Perform(this, args);\
+       }\
+@@ -726,7 +726,7 @@ class ActionHelper {
+       typedef typename ::testing::internal::Function<F>::ArgumentTuple\
+           args_type;\
+       gmock_Impl() {}\
+-      virtual return_type Perform(const args_type& args) {\
++      return_type Perform(const args_type& args) override {\
+         return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
+             Perform(this, args);\
+       }\
+@@ -776,7 +776,7 @@ class ActionHelper {
+           args_type;\
+       explicit gmock_Impl(p0##_type gmock_p0) : \
+           p0(::std::forward<p0##_type>(gmock_p0)) {}\
+-      virtual return_type Perform(const args_type& args) {\
++      return_type Perform(const args_type& args) override {\
+         return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
+             Perform(this, args);\
+       }\
+@@ -832,7 +832,7 @@ class ActionHelper {
+       gmock_Impl(p0##_type gmock_p0, \
+           p1##_type gmock_p1) : p0(::std::forward<p0##_type>(gmock_p0)), \
+           p1(::std::forward<p1##_type>(gmock_p1)) {}\
+-      virtual return_type Perform(const args_type& args) {\
++      return_type Perform(const args_type& args) override {\
+         return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
+             Perform(this, args);\
+       }\
+@@ -893,7 +893,7 @@ class ActionHelper {
+           p2##_type gmock_p2) : p0(::std::forward<p0##_type>(gmock_p0)), \
+           p1(::std::forward<p1##_type>(gmock_p1)), \
+           p2(::std::forward<p2##_type>(gmock_p2)) {}\
+-      virtual return_type Perform(const args_type& args) {\
++      return_type Perform(const args_type& args) override {\
+         return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
+             Perform(this, args);\
+       }\
+@@ -961,7 +961,7 @@ class ActionHelper {
+           p1(::std::forward<p1##_type>(gmock_p1)), \
+           p2(::std::forward<p2##_type>(gmock_p2)), \
+           p3(::std::forward<p3##_type>(gmock_p3)) {}\
+-      virtual return_type Perform(const args_type& args) {\
++      return_type Perform(const args_type& args) override {\
+         return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
+             Perform(this, args);\
+       }\
+@@ -1038,7 +1038,7 @@ class ActionHelper {
+           p2(::std::forward<p2##_type>(gmock_p2)), \
+           p3(::std::forward<p3##_type>(gmock_p3)), \
+           p4(::std::forward<p4##_type>(gmock_p4)) {}\
+-      virtual return_type Perform(const args_type& args) {\
++      return_type Perform(const args_type& args) override {\
+         return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
+             Perform(this, args);\
+       }\
+@@ -1119,7 +1119,7 @@ class ActionHelper {
+           p3(::std::forward<p3##_type>(gmock_p3)), \
+           p4(::std::forward<p4##_type>(gmock_p4)), \
+           p5(::std::forward<p5##_type>(gmock_p5)) {}\
+-      virtual return_type Perform(const args_type& args) {\
++      return_type Perform(const args_type& args) override {\
+         return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
+             Perform(this, args);\
+       }\
+@@ -1206,7 +1206,7 @@ class ActionHelper {
+           p4(::std::forward<p4##_type>(gmock_p4)), \
+           p5(::std::forward<p5##_type>(gmock_p5)), \
+           p6(::std::forward<p6##_type>(gmock_p6)) {}\
+-      virtual return_type Perform(const args_type& args) {\
++      return_type Perform(const args_type& args) override {\
+         return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
+             Perform(this, args);\
+       }\
+@@ -1302,7 +1302,7 @@ class ActionHelper {
+           p5(::std::forward<p5##_type>(gmock_p5)), \
+           p6(::std::forward<p6##_type>(gmock_p6)), \
+           p7(::std::forward<p7##_type>(gmock_p7)) {}\
+-      virtual return_type Perform(const args_type& args) {\
++      return_type Perform(const args_type& args) override {\
+         return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
+             Perform(this, args);\
+       }\
+@@ -1404,7 +1404,7 @@ class ActionHelper {
+           p6(::std::forward<p6##_type>(gmock_p6)), \
+           p7(::std::forward<p7##_type>(gmock_p7)), \
+           p8(::std::forward<p8##_type>(gmock_p8)) {}\
+-      virtual return_type Perform(const args_type& args) {\
++      return_type Perform(const args_type& args) override {\
+         return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
+             Perform(this, args);\
+       }\
+@@ -1513,7 +1513,7 @@ class ActionHelper {
+           p7(::std::forward<p7##_type>(gmock_p7)), \
+           p8(::std::forward<p8##_type>(gmock_p8)), \
+           p9(::std::forward<p9##_type>(gmock_p9)) {}\
+-      virtual return_type Perform(const args_type& args) {\
++      return_type Perform(const args_type& args) override {\
+         return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
+             Perform(this, args);\
+       }\
+diff --git a/googlemock/include/gmock/gmock-generated-actions.h.pump b/googlemock/include/gmock/gmock-generated-actions.h.pump
+index 209603c5a..283abcdc2 100644
+--- a/googlemock/include/gmock/gmock-generated-actions.h.pump
++++ b/googlemock/include/gmock/gmock-generated-actions.h.pump
+@@ -395,7 +395,7 @@ $range k 0..n-1
+       typedef typename ::testing::internal::Function<F>::ArgumentTuple\
+           args_type;\
+       explicit gmock_Impl GMOCK_INTERNAL_INIT_##value_params {}\
+-      virtual return_type Perform(const args_type& args) {\
++      return_type Perform(const args_type& args) override {\
+         return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
+             Perform(this, args);\
+       }\
+@@ -482,7 +482,7 @@ $var macro_name = [[$if i==0 [[ACTION]] $elif i==1 [[ACTION_P]]
+       typedef typename ::testing::internal::Function<F>::ArgumentTuple\
+           args_type;\
+       [[$if i==1 [[explicit ]]]]gmock_Impl($ctor_param_list)$inits {}\
+-      virtual return_type Perform(const args_type& args) {\
++      return_type Perform(const args_type& args) override {\
+         return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\
+             Perform(this, args);\
+       }\
+diff --git a/googlemock/include/gmock/gmock-generated-matchers.h b/googlemock/include/gmock/gmock-generated-matchers.h
+index 690a57f1c..61892380c 100644
+--- a/googlemock/include/gmock/gmock-generated-matchers.h
++++ b/googlemock/include/gmock/gmock-generated-matchers.h
+@@ -269,13 +269,13 @@
+      public:\
+       gmock_Impl()\
+            {}\
+-      virtual bool MatchAndExplain(\
++      bool MatchAndExplain(\
+           GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
+-          ::testing::MatchResultListener* result_listener) const;\
+-      virtual void DescribeTo(::std::ostream* gmock_os) const {\
++          ::testing::MatchResultListener* result_listener) const override;\
++      void DescribeTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(false);\
+       }\
+-      virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
++      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(true);\
+       }\
+      private:\
+@@ -318,13 +318,13 @@
+      public:\
+       explicit gmock_Impl(p0##_type gmock_p0)\
+            : p0(::std::move(gmock_p0)) {}\
+-      virtual bool MatchAndExplain(\
++      bool MatchAndExplain(\
+           GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
+-          ::testing::MatchResultListener* result_listener) const;\
+-      virtual void DescribeTo(::std::ostream* gmock_os) const {\
++          ::testing::MatchResultListener* result_listener) const override;\
++      void DescribeTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(false);\
+       }\
+-      virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
++      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(true);\
+       }\
+       p0##_type const p0;\
+@@ -371,13 +371,13 @@
+      public:\
+       gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1)\
+            : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)) {}\
+-      virtual bool MatchAndExplain(\
++      bool MatchAndExplain(\
+           GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
+-          ::testing::MatchResultListener* result_listener) const;\
+-      virtual void DescribeTo(::std::ostream* gmock_os) const {\
++          ::testing::MatchResultListener* result_listener) const override;\
++      void DescribeTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(false);\
+       }\
+-      virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
++      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(true);\
+       }\
+       p0##_type const p0;\
+@@ -431,13 +431,13 @@
+       gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2)\
+            : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \
+                p2(::std::move(gmock_p2)) {}\
+-      virtual bool MatchAndExplain(\
++      bool MatchAndExplain(\
+           GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
+-          ::testing::MatchResultListener* result_listener) const;\
+-      virtual void DescribeTo(::std::ostream* gmock_os) const {\
++          ::testing::MatchResultListener* result_listener) const override;\
++      void DescribeTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(false);\
+       }\
+-      virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
++      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(true);\
+       }\
+       p0##_type const p0;\
+@@ -495,13 +495,13 @@
+           p3##_type gmock_p3)\
+            : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \
+                p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)) {}\
+-      virtual bool MatchAndExplain(\
++      bool MatchAndExplain(\
+           GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
+-          ::testing::MatchResultListener* result_listener) const;\
+-      virtual void DescribeTo(::std::ostream* gmock_os) const {\
++          ::testing::MatchResultListener* result_listener) const override;\
++      void DescribeTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(false);\
+       }\
+-      virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
++      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(true);\
+       }\
+       p0##_type const p0;\
+@@ -568,13 +568,13 @@
+            : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \
+                p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \
+                p4(::std::move(gmock_p4)) {}\
+-      virtual bool MatchAndExplain(\
++      bool MatchAndExplain(\
+           GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
+-          ::testing::MatchResultListener* result_listener) const;\
+-      virtual void DescribeTo(::std::ostream* gmock_os) const {\
++          ::testing::MatchResultListener* result_listener) const override;\
++      void DescribeTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(false);\
+       }\
+-      virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
++      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(true);\
+       }\
+       p0##_type const p0;\
+@@ -644,13 +644,13 @@
+            : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \
+                p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \
+                p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)) {}\
+-      virtual bool MatchAndExplain(\
++      bool MatchAndExplain(\
+           GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
+-          ::testing::MatchResultListener* result_listener) const;\
+-      virtual void DescribeTo(::std::ostream* gmock_os) const {\
++          ::testing::MatchResultListener* result_listener) const override;\
++      void DescribeTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(false);\
+       }\
+-      virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
++      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(true);\
+       }\
+       p0##_type const p0;\
+@@ -726,13 +726,13 @@
+                p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \
+                p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)), \
+                p6(::std::move(gmock_p6)) {}\
+-      virtual bool MatchAndExplain(\
++      bool MatchAndExplain(\
+           GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
+-          ::testing::MatchResultListener* result_listener) const;\
+-      virtual void DescribeTo(::std::ostream* gmock_os) const {\
++          ::testing::MatchResultListener* result_listener) const override;\
++      void DescribeTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(false);\
+       }\
+-      virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
++      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(true);\
+       }\
+       p0##_type const p0;\
+@@ -814,13 +814,13 @@
+                p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \
+                p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)), \
+                p6(::std::move(gmock_p6)), p7(::std::move(gmock_p7)) {}\
+-      virtual bool MatchAndExplain(\
++      bool MatchAndExplain(\
+           GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
+-          ::testing::MatchResultListener* result_listener) const;\
+-      virtual void DescribeTo(::std::ostream* gmock_os) const {\
++          ::testing::MatchResultListener* result_listener) const override;\
++      void DescribeTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(false);\
+       }\
+-      virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
++      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(true);\
+       }\
+       p0##_type const p0;\
+@@ -909,13 +909,13 @@
+                p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)), \
+                p6(::std::move(gmock_p6)), p7(::std::move(gmock_p7)), \
+                p8(::std::move(gmock_p8)) {}\
+-      virtual bool MatchAndExplain(\
++      bool MatchAndExplain(\
+           GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
+-          ::testing::MatchResultListener* result_listener) const;\
+-      virtual void DescribeTo(::std::ostream* gmock_os) const {\
++          ::testing::MatchResultListener* result_listener) const override;\
++      void DescribeTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(false);\
+       }\
+-      virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
++      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(true);\
+       }\
+       p0##_type const p0;\
+@@ -1009,13 +1009,13 @@
+                p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)), \
+                p6(::std::move(gmock_p6)), p7(::std::move(gmock_p7)), \
+                p8(::std::move(gmock_p8)), p9(::std::move(gmock_p9)) {}\
+-      virtual bool MatchAndExplain(\
++      bool MatchAndExplain(\
+           GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
+-          ::testing::MatchResultListener* result_listener) const;\
+-      virtual void DescribeTo(::std::ostream* gmock_os) const {\
++          ::testing::MatchResultListener* result_listener) const override;\
++      void DescribeTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(false);\
+       }\
+-      virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
++      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(true);\
+       }\
+       p0##_type const p0;\
+diff --git a/googlemock/include/gmock/gmock-generated-matchers.h.pump b/googlemock/include/gmock/gmock-generated-matchers.h.pump
+index ae90917cc..69d2ae418 100644
+--- a/googlemock/include/gmock/gmock-generated-matchers.h.pump
++++ b/googlemock/include/gmock/gmock-generated-matchers.h.pump
+@@ -302,13 +302,13 @@ $var param_field_decls2 = [[$for j
+      public:\
+       [[$if i==1 [[explicit ]]]]gmock_Impl($impl_ctor_param_list)\
+           $impl_inits {}\
+-      virtual bool MatchAndExplain(\
++      bool MatchAndExplain(\
+           GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
+-          ::testing::MatchResultListener* result_listener) const;\
+-      virtual void DescribeTo(::std::ostream* gmock_os) const {\
++          ::testing::MatchResultListener* result_listener) const override;\
++      void DescribeTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(false);\
+       }\
+-      virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
++      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
+         *gmock_os << FormatDescription(true);\
+       }\$param_field_decls
+      private:\
+diff --git a/googletest/include/gtest/gtest-typed-test.h b/googletest/include/gtest/gtest-typed-test.h
+index 095ce0580..6b7c9c8a0 100644
+--- a/googletest/include/gtest/gtest-typed-test.h
++++ b/googletest/include/gtest/gtest-typed-test.h
+@@ -201,7 +201,7 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
+    private:                                                                   \
+     typedef CaseName<gtest_TypeParam_> TestFixture;                           \
+     typedef gtest_TypeParam_ TypeParam;                                       \
+-    virtual void TestBody();                                                  \
++    void TestBody() override;                                                 \
+   };                                                                          \
+   static bool gtest_##CaseName##_##TestName##_registered_                     \
+         GTEST_ATTRIBUTE_UNUSED_ =                                             \
+@@ -276,7 +276,7 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
+      private:                                                         \
+       typedef SuiteName<gtest_TypeParam_> TestFixture;                \
+       typedef gtest_TypeParam_ TypeParam;                             \
+-      virtual void TestBody();                                        \
++      void TestBody() override;                                       \
+     };                                                                \
+     static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \
+         GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).AddTestName(       \
+diff --git a/googletest/include/gtest/internal/gtest-port.h b/googletest/include/gtest/internal/gtest-port.h
+index f6433c58a..2b4770ff5 100644
+--- a/googletest/include/gtest/internal/gtest-port.h
++++ b/googletest/include/gtest/internal/gtest-port.h
+@@ -1599,7 +1599,7 @@ class ThreadLocal : public ThreadLocalBase {
+   class DefaultValueHolderFactory : public ValueHolderFactory {
+    public:
+     DefaultValueHolderFactory() {}
+-    virtual ValueHolder* MakeNewHolder() const { return new ValueHolder(); }
++    ValueHolder* MakeNewHolder() const override { return new ValueHolder(); }
+ 
+    private:
+     GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultValueHolderFactory);
+@@ -1608,7 +1608,7 @@ class ThreadLocal : public ThreadLocalBase {
+   class InstanceValueHolderFactory : public ValueHolderFactory {
+    public:
+     explicit InstanceValueHolderFactory(const T& value) : value_(value) {}
+-    virtual ValueHolder* MakeNewHolder() const {
++    ValueHolder* MakeNewHolder() const override {
+       return new ValueHolder(value_);
+     }
+ 
+diff --git a/googletest/test/gtest_unittest.cc b/googletest/test/gtest_unittest.cc
+index 8312bd10e..d17a15540 100644
+--- a/googletest/test/gtest_unittest.cc
++++ b/googletest/test/gtest_unittest.cc
+@@ -6170,7 +6170,7 @@ TEST_F(ParseFlagsTest, WideStrings) {
+ #if GTEST_USE_OWN_FLAGFILE_FLAG_
+ class FlagfileTest : public ParseFlagsTest {
+  public:
+-  virtual void SetUp() {
++  void SetUp() override {
+     ParseFlagsTest::SetUp();
+ 
+     testdata_path_.Set(internal::FilePath(
+@@ -6180,7 +6180,7 @@ class FlagfileTest : public ParseFlagsTest {
+     EXPECT_TRUE(testdata_path_.CreateFolder());
+   }
+ 
+-  virtual void TearDown() {
++  void TearDown() override {
+     testing::internal::posix::RmDir(testdata_path_.c_str());
+     ParseFlagsTest::TearDown();
+   }
diff --git a/packages/conan/recipes/gtest/patches/gtest-1.10.0.patch b/packages/conan/recipes/gtest/patches/gtest-1.10.0.patch
new file mode 100644
index 00000000..92d37990
--- /dev/null
+++ b/packages/conan/recipes/gtest/patches/gtest-1.10.0.patch
@@ -0,0 +1,13 @@
+diff --git a/googletest/cmake/internal_utils.cmake b/googletest/cmake/internal_utils.cmake
+index 2f70f0b0..8cd03693 100644
+--- a/googletest/cmake/internal_utils.cmake
++++ b/googletest/cmake/internal_utils.cmake
+@@ -154,7 +154,7 @@ function(cxx_library_with_type name type cxx_flags)
+   # Generate debug library name with a postfix.
+   set_target_properties(${name}
+     PROPERTIES
+-    DEBUG_POSTFIX "d")
++    DEBUG_POSTFIX "${CUSTOM_DEBUG_POSTFIX}")
+   # Set the output directory for build artifacts
+   set_target_properties(${name}
+     PROPERTIES
diff --git a/packages/conan/recipes/gtest/patches/gtest-1.8.1.patch b/packages/conan/recipes/gtest/patches/gtest-1.8.1.patch
new file mode 100644
index 00000000..838ab42c
--- /dev/null
+++ b/packages/conan/recipes/gtest/patches/gtest-1.8.1.patch
@@ -0,0 +1,13 @@
+diff --git a/googletest/cmake/internal_utils.cmake b/googletest/cmake/internal_utils.cmake
+index 8c1f9ba..2203d3c 100644
+--- a/googletest/cmake/internal_utils.cmake
++++ b/googletest/cmake/internal_utils.cmake
+@@ -166,7 +166,7 @@ function(cxx_library_with_type name type cxx_flags)
+   # Generate debug library name with a postfix.
+   set_target_properties(${name}
+     PROPERTIES
+-    DEBUG_POSTFIX "d")
++    DEBUG_POSTFIX "${CUSTOM_DEBUG_POSTFIX}")
+   if (BUILD_SHARED_LIBS OR type STREQUAL "SHARED")
+     set_target_properties(${name}
+       PROPERTIES
diff --git a/packages/conan/recipes/gtest/test_package/CMakeLists.txt b/packages/conan/recipes/gtest/test_package/CMakeLists.txt
new file mode 100644
index 00000000..22f7c7cc
--- /dev/null
+++ b/packages/conan/recipes/gtest/test_package/CMakeLists.txt
@@ -0,0 +1,30 @@
+cmake_minimum_required(VERSION 3.1.2)
+project(test_package CXX)
+
+include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
+conan_basic_setup()
+
+find_package(GTest REQUIRED)
+
+if(WITH_MAIN)
+    add_executable(${PROJECT_NAME} test_package.cpp)
+else()
+    add_executable(${PROJECT_NAME} main.cpp test_package.cpp)
+endif()
+
+if(WITH_MAIN)
+    target_link_libraries(${PROJECT_NAME} GTest::gtest GTest::gtest_main )
+    if(WITH_GMOCK)
+        target_link_libraries(${PROJECT_NAME} GTest::gmock GTest::gmock_main)
+    endif()
+else()
+    target_link_libraries(${PROJECT_NAME} GTest::gtest)
+    if(WITH_GMOCK)
+        target_link_libraries(${PROJECT_NAME} GTest::gmock)
+    endif()
+endif()
+
+set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 11)
+if(WITH_GMOCK)
+    target_compile_definitions(${PROJECT_NAME} PRIVATE WITH_GMOCK)
+endif()
diff --git a/packages/conan/recipes/gtest/test_package/conanfile.py b/packages/conan/recipes/gtest/test_package/conanfile.py
new file mode 100644
index 00000000..3897d412
--- /dev/null
+++ b/packages/conan/recipes/gtest/test_package/conanfile.py
@@ -0,0 +1,24 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+import os
+from conans import ConanFile, CMake, tools
+
+
+class TestPackageConan(ConanFile):
+    settings = "os", "compiler", "build_type", "arch"
+    generators = "cmake", "cmake_find_package"
+
+    def build(self):
+        cmake = CMake(self)
+        cmake.definitions["WITH_GMOCK"] = self.options["gtest"].build_gmock
+        cmake.definitions["WITH_MAIN"] = not self.options["gtest"].no_main
+        cmake.configure()
+        cmake.build()
+
+    def test(self):
+        assert os.path.isfile(
+            os.path.join(self.deps_cpp_info["gtest"].rootpath, "licenses", "LICENSE")
+        )
+        if not tools.cross_building(self.settings):
+            bin_path = os.path.join("bin", "test_package")
+            self.run(bin_path, run_environment=True)
diff --git a/packages/conan/recipes/gtest/test_package/main.cpp b/packages/conan/recipes/gtest/test_package/main.cpp
new file mode 100644
index 00000000..4483c91a
--- /dev/null
+++ b/packages/conan/recipes/gtest/test_package/main.cpp
@@ -0,0 +1,6 @@
+#include "gtest/gtest.h"
+
+int main(int argc, char **argv) {
+  ::testing::InitGoogleTest(&argc, argv);
+  return RUN_ALL_TESTS();
+}
diff --git a/packages/conan/recipes/gtest/test_package/prime_tables.h b/packages/conan/recipes/gtest/test_package/prime_tables.h
new file mode 100644
index 00000000..55a3b44e
--- /dev/null
+++ b/packages/conan/recipes/gtest/test_package/prime_tables.h
@@ -0,0 +1,127 @@
+// Copyright 2008 Google Inc.
+// All Rights Reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// Author: wan@google.com (Zhanyong Wan)
+// Author: vladl@google.com (Vlad Losev)
+
+// This provides interface PrimeTable that determines whether a number is a
+// prime and determines a next prime number. This interface is used
+// in Google Test samples demonstrating use of parameterized tests.
+
+#ifndef GTEST_SAMPLES_PRIME_TABLES_H_
+#define GTEST_SAMPLES_PRIME_TABLES_H_
+
+#include <algorithm>
+
+// The prime table interface.
+class PrimeTable {
+ public:
+  virtual ~PrimeTable() {}
+
+  // Returns true iff n is a prime number.
+  virtual bool IsPrime(int n) const = 0;
+
+  // Returns the smallest prime number greater than p; or returns -1
+  // if the next prime is beyond the capacity of the table.
+  virtual int GetNextPrime(int p) const = 0;
+};
+
+// Implementation #1 calculates the primes on-the-fly.
+class OnTheFlyPrimeTable : public PrimeTable {
+ public:
+  virtual bool IsPrime(int n) const {
+    if (n <= 1) return false;
+
+    for (int i = 2; i*i <= n; i++) {
+      // n is divisible by an integer other than 1 and itself.
+      if ((n % i) == 0) return false;
+    }
+
+    return true;
+  }
+
+  virtual int GetNextPrime(int p) const {
+    for (int n = p + 1; n > 0; n++) {
+      if (IsPrime(n)) return n;
+    }
+
+    return -1;
+  }
+};
+
+// Implementation #2 pre-calculates the primes and stores the result
+// in an array.
+class PreCalculatedPrimeTable : public PrimeTable {
+ public:
+  // 'max' specifies the maximum number the prime table holds.
+  explicit PreCalculatedPrimeTable(int max)
+      : is_prime_size_(max + 1), is_prime_(new bool[max + 1]) {
+    CalculatePrimesUpTo(max);
+  }
+  virtual ~PreCalculatedPrimeTable() { delete[] is_prime_; }
+
+  virtual bool IsPrime(int n) const {
+    return 0 <= n && n < is_prime_size_ && is_prime_[n];
+  }
+
+  virtual int GetNextPrime(int p) const {
+    for (int n = p + 1; n < is_prime_size_; n++) {
+      if (is_prime_[n]) return n;
+    }
+
+    return -1;
+  }
+
+ private:
+  void CalculatePrimesUpTo(int max) {
+    ::std::fill(is_prime_, is_prime_ + is_prime_size_, true);
+    is_prime_[0] = is_prime_[1] = false;
+
+    // Checks every candidate for prime number (we know that 2 is the only even
+    // prime).
+    for (int i = 2; i*i <= max; i += i%2+1) {
+      if (!is_prime_[i]) continue;
+
+      // Marks all multiples of i (except i itself) as non-prime.
+      // We are starting here from i-th multiplier, because all smaller
+      // complex numbers were already marked.
+      for (int j = i*i; j <= max; j += i) {
+        is_prime_[j] = false;
+      }
+    }
+  }
+
+  const int is_prime_size_;
+  bool* const is_prime_;
+
+  // Disables compiler warning "assignment operator could not be generated."
+  void operator=(const PreCalculatedPrimeTable& rhs);
+};
+
+#endif  // GTEST_SAMPLES_PRIME_TABLES_H_
diff --git a/packages/conan/recipes/gtest/test_package/test_package.cpp b/packages/conan/recipes/gtest/test_package/test_package.cpp
new file mode 100644
index 00000000..4a1f9d2a
--- /dev/null
+++ b/packages/conan/recipes/gtest/test_package/test_package.cpp
@@ -0,0 +1,187 @@
+// Thanks to http://joeyates.info/2010/05/26/googletest-hello-world/ for the example!
+
+/////////////////////////////
+// In the header file
+
+#include <sstream>
+using namespace std;
+
+class Salutation
+{
+public:
+  static string greet(const string& name);
+};
+
+///////////////////////////////////////
+// In the class implementation file
+
+string Salutation::greet(const string& name) {
+  ostringstream s;
+  s << "Hello " << name << "!";
+  return s.str();
+}
+
+///////////////////////////////////////////
+// In the test file
+#include <gtest/gtest.h>
+
+#ifdef WITH_GMOCK
+#include <gmock/gmock.h>
+
+class Example
+{
+public:
+    virtual void foo() = 0;
+};
+
+class MockExample : public Example
+{
+public:
+    MOCK_METHOD0(foo, void());
+};
+
+#endif
+
+TEST(SalutationTest, Static) {
+
+#ifdef WITH_GMOCK
+  MockExample m;
+#endif
+
+  EXPECT_EQ(string("Hello World!"), Salutation::greet("World"));
+}
+
+#if GTEST_HAS_COMBINE
+#include "prime_tables.h"
+
+// Suppose we want to introduce a new, improved implementation of PrimeTable
+// which combines speed of PrecalcPrimeTable and versatility of
+// OnTheFlyPrimeTable (see prime_tables.h). Inside it instantiates both
+// PrecalcPrimeTable and OnTheFlyPrimeTable and uses the one that is more
+// appropriate under the circumstances. But in low memory conditions, it can be
+// told to instantiate without PrecalcPrimeTable instance at all and use only
+// OnTheFlyPrimeTable.
+class HybridPrimeTable : public PrimeTable {
+ public:
+  HybridPrimeTable(bool force_on_the_fly, int max_precalculated)
+      : on_the_fly_impl_(new OnTheFlyPrimeTable),
+        precalc_impl_(force_on_the_fly ? NULL :
+                          new PreCalculatedPrimeTable(max_precalculated)),
+        max_precalculated_(max_precalculated) {}
+  virtual ~HybridPrimeTable() {
+    delete on_the_fly_impl_;
+    delete precalc_impl_;
+  }
+
+  virtual bool IsPrime(int n) const {
+    if (precalc_impl_ != NULL && n < max_precalculated_)
+      return precalc_impl_->IsPrime(n);
+    else
+      return on_the_fly_impl_->IsPrime(n);
+  }
+
+  virtual int GetNextPrime(int p) const {
+    int next_prime = -1;
+    if (precalc_impl_ != NULL && p < max_precalculated_)
+      next_prime = precalc_impl_->GetNextPrime(p);
+
+    return next_prime != -1 ? next_prime : on_the_fly_impl_->GetNextPrime(p);
+  }
+
+ private:
+  OnTheFlyPrimeTable* on_the_fly_impl_;
+  PreCalculatedPrimeTable* precalc_impl_;
+  int max_precalculated_;
+};
+
+using ::testing::TestWithParam;
+using ::testing::Bool;
+using ::testing::Values;
+using ::testing::Combine;
+
+// To test all code paths for HybridPrimeTable we must test it with numbers
+// both within and outside PreCalculatedPrimeTable's capacity and also with
+// PreCalculatedPrimeTable disabled. We do this by defining fixture which will
+// accept different combinations of parameters for instantiating a
+// HybridPrimeTable instance.
+class PrimeTableTest : public TestWithParam< ::testing::tuple<bool, int> > {
+ protected:
+  virtual void SetUp() {
+    // This can be written as
+    //
+    // bool force_on_the_fly;
+    // int max_precalculated;
+    // tie(force_on_the_fly, max_precalculated) = GetParam();
+    //
+    // once the Google C++ Style Guide allows use of ::std::tr1::tie.
+    //
+    bool force_on_the_fly = ::testing::get<0>(GetParam());
+    int max_precalculated = ::testing::get<1>(GetParam());
+    table_ = new HybridPrimeTable(force_on_the_fly, max_precalculated);
+  }
+  virtual void TearDown() {
+    delete table_;
+    table_ = NULL;
+  }
+  HybridPrimeTable* table_;
+};
+
+TEST_P(PrimeTableTest, ReturnsFalseForNonPrimes) {
+  // Inside the test body, you can refer to the test parameter by GetParam().
+  // In this case, the test parameter is a PrimeTable interface pointer which
+  // we can use directly.
+  // Please note that you can also save it in the fixture's SetUp() method
+  // or constructor and use saved copy in the tests.
+
+  EXPECT_FALSE(table_->IsPrime(-5));
+  EXPECT_FALSE(table_->IsPrime(0));
+  EXPECT_FALSE(table_->IsPrime(1));
+  EXPECT_FALSE(table_->IsPrime(4));
+  EXPECT_FALSE(table_->IsPrime(6));
+  EXPECT_FALSE(table_->IsPrime(100));
+}
+
+TEST_P(PrimeTableTest, ReturnsTrueForPrimes) {
+  EXPECT_TRUE(table_->IsPrime(2));
+  EXPECT_TRUE(table_->IsPrime(3));
+  EXPECT_TRUE(table_->IsPrime(5));
+  EXPECT_TRUE(table_->IsPrime(7));
+  EXPECT_TRUE(table_->IsPrime(11));
+  EXPECT_TRUE(table_->IsPrime(131));
+}
+
+TEST_P(PrimeTableTest, CanGetNextPrime) {
+  EXPECT_EQ(2, table_->GetNextPrime(0));
+  EXPECT_EQ(3, table_->GetNextPrime(2));
+  EXPECT_EQ(5, table_->GetNextPrime(3));
+  EXPECT_EQ(7, table_->GetNextPrime(5));
+  EXPECT_EQ(11, table_->GetNextPrime(7));
+  EXPECT_EQ(131, table_->GetNextPrime(128));
+}
+
+// In order to run value-parameterized tests, you need to instantiate them,
+// or bind them to a list of values which will be used as test parameters.
+// You can instantiate them in a different translation module, or even
+// instantiate them several times.
+//
+// Here, we instantiate our tests with a list of parameters. We must combine
+// all variations of the boolean flag suppressing PrecalcPrimeTable and some
+// meaningful values for tests. We choose a small value (1), and a value that
+// will put some of the tested numbers beyond the capability of the
+// PrecalcPrimeTable instance and some inside it (10). Combine will produce all
+// possible combinations.
+INSTANTIATE_TEST_CASE_P(MeaningfulTestParameters,
+                        PrimeTableTest,
+                        Combine(Bool(), Values(1, 10)));
+
+#else
+
+// Google Test may not support Combine() with some compilers. If we
+// use conditional compilation to compile out all code referring to
+// the gtest_main library, MSVC linker will not link that library at
+// all and consequently complain about missing entry point defined in
+// that library (fatal error LNK1561: entry point must be
+// defined). This dummy test keeps gtest_main linked in.
+TEST(DummyTest, CombineIsNotSupportedOnThisPlatform) {}
+
+#endif  // GTEST_HAS_COMBINE
diff --git a/python/aswfdocker/tests/test_builder.py b/python/aswfdocker/tests/test_builder.py
index 99d0a208..f754437b 100644
--- a/python/aswfdocker/tests/test_builder.py
+++ b/python/aswfdocker/tests/test_builder.py
@@ -141,13 +141,14 @@ def test_image_base_2019clang_dict(self):
                             "ASWF_CLANG_VERSION": "9.0.1",
                             "ASWF_CMAKE_VERSION": "3.12.4",
                             "ASWF_CPPUNIT_VERSION": "1.14.0",
-                            "ASWF_CONAN_CHANNEL": "vfx2019-clang9",
+                            "ASWF_CONAN_CHANNEL": "vfx2019",
                             "ASWF_CONAN_PYTHON_VERSION": "3.9.5",
                             "ASWF_CONAN_VERSION": "1.42.0",
                             "ASWF_CUDA_VERSION": "10.2",
                             "ASWF_DTS_VERSION": "6",
                             "ASWF_GLEW_VERSION": "2.1.0",
                             "ASWF_GLFW_VERSION": "3.1.2",
+                            "ASWF_GTEST_VERSION": "1.8.1",
                             "ASWF_HDF5_VERSION": "1.8.21",
                             "ASWF_IMATH_VERSION": "2.3.0",
                             "ASWF_LOG4CPLUS_VERSION": "1.1.2",
@@ -228,6 +229,7 @@ def test_image_base_2019_2020_dict(self):
                             "ASWF_DTS_VERSION": "6",
                             "ASWF_GLEW_VERSION": "2.1.0",
                             "ASWF_GLFW_VERSION": "3.1.2",
+                            "ASWF_GTEST_VERSION": "1.10.0",
                             "ASWF_HDF5_VERSION": "1.8.21",
                             "ASWF_IMATH_VERSION": "2.4.0",
                             "ASWF_LOG4CPLUS_VERSION": "1.1.2",
@@ -286,6 +288,7 @@ def test_image_base_2019_2020_dict(self):
                             "ASWF_DTS_VERSION": "6",
                             "ASWF_GLEW_VERSION": "2.1.0",
                             "ASWF_GLFW_VERSION": "3.1.2",
+                            "ASWF_GTEST_VERSION": "1.8.1",
                             "ASWF_HDF5_VERSION": "1.8.21",
                             "ASWF_IMATH_VERSION": "2.3.0",
                             "ASWF_LOG4CPLUS_VERSION": "1.1.2",
diff --git a/python/aswfdocker/tests/test_index.py b/python/aswfdocker/tests/test_index.py
index 4c263c43..269c0c51 100644
--- a/python/aswfdocker/tests/test_index.py
+++ b/python/aswfdocker/tests/test_index.py
@@ -36,3 +36,6 @@ def test_group_from_image(self):
             self.index.get_group_from_image(constants.ImageType.PACKAGE, "clang"),
             "common",
         )
+
+    def test_conan_only(self):
+        self.assertTrue(self.index.is_conan_only_package("gtest"))