[Bf-blender-cvs] [c455e55b552] temp-sybren-usd-patch-02: USD: Check location of USD JSON files in unit tests

Sybren A. Stüvel noreply at git.blender.org
Fri Nov 29 11:20:51 CET 2019


Commit: c455e55b5524fdc0e011f17ff2a1a726802453f1
Author: Sybren A. Stüvel
Date:   Fri Nov 29 11:18:30 2019 +0100
Branches: temp-sybren-usd-patch-02
https://developer.blender.org/rBc455e55b5524fdc0e011f17ff2a1a726802453f1

USD: Check location of USD JSON files in unit tests

This commit adds a test to see whether the USD JSON files can be found
and loaded. Simply the ability to create a USD Stage for a specific
filename means that the extension has been recognised by the USD
library, and that a USD plugin has been loaded to write such files.

USD has been patched to not only look in `{exe_directory}/lib/usd`, but
also in `{exe_directory}/../lib/usd`; the latter is required to resolve
the path for test executables in `bin/tests/`.

===================================================================

M	build_files/build_environment/patches/usd.diff
M	source/creator/CMakeLists.txt
M	tests/gtests/usd/CMakeLists.txt
A	tests/gtests/usd/usd_stage_creation_test.cc

===================================================================

diff --git a/build_files/build_environment/patches/usd.diff b/build_files/build_environment/patches/usd.diff
index d5a4d286e5e..edc0815f414 100644
--- a/build_files/build_environment/patches/usd.diff
+++ b/build_files/build_environment/patches/usd.diff
@@ -24,7 +24,7 @@ index 9be215b36..0ce6e6fd5 100644
  
  # --math
 diff --git a/pxr/base/lib/plug/initConfig.cpp b/pxr/base/lib/plug/initConfig.cpp
-index 91d01cadc..8b29aa493 100644
+index 91d01cadc..61bb6de84 100644
 --- a/pxr/base/lib/plug/initConfig.cpp
 +++ b/pxr/base/lib/plug/initConfig.cpp
 @@ -33,6 +33,7 @@
@@ -35,21 +35,41 @@ index 91d01cadc..8b29aa493 100644
  
  PXR_NAMESPACE_OPEN_SCOPE
  
-@@ -83,6 +84,14 @@ ARCH_CONSTRUCTOR(Plug_InitConfig, 2, void)
+@@ -83,6 +84,20 @@ ARCH_CONSTRUCTOR(Plug_InitConfig, 2, void)
  
      sharedLibPath = TfGetPathName(sharedLibPath);
  
 +    // Executable location, which is relevant when using static linking.
 +    boost::filesystem::path executablePath = boost::dll::program_location();
 +    if (!executablePath.empty()) {
++        boost::filesystem::path pluginPath;
++
 +        // The path MUST end in a slash, or symlinks will not be treated as directory.
-+        boost::filesystem::path pluginPath = executablePath.parent_path() / "usd/";
++        // Two paths are added, one for relative to Blender, one for relative to unit tests.
++        pluginPath = executablePath.parent_path() / "lib/usd/";
++        result.push_back(pluginPath.string());
++
++        pluginPath = executablePath.parent_path().parent_path() / "lib/usd/";
 +        result.push_back(pluginPath.string());
 +    }
 +
      // Environment locations.
      _AppendPathList(&result, TfGetenv(pathEnvVarName), sharedLibPath);
  
+@@ -94,6 +109,13 @@ ARCH_CONSTRUCTOR(Plug_InitConfig, 2, void)
+     _AppendPathList(&result, installLocation, sharedLibPath);
+ #endif // PXR_INSTALL_LOCATION
+ 
++    if (!TfGetenv("PXR_PATH_DEBUG").empty()) {
++        printf("USD Plugin paths: (%zu in total):\n", result.size());
++        for(const std::string &path : result) {
++            printf("    %s\n", path.c_str());
++        }
++    }
++
+     Plug_SetPaths(result);
+ }
+ 
 diff --git a/pxr/usd/CMakeLists.txt b/pxr/usd/CMakeLists.txt
 index c894cca37..df087a418 100644
 --- a/pxr/usd/CMakeLists.txt
diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt
index 1975eee2ef0..252c66201d3 100644
--- a/source/creator/CMakeLists.txt
+++ b/source/creator/CMakeLists.txt
@@ -1064,11 +1064,12 @@ setup_liblinks(blender)
 # -----------------------------------------------------------------------------
 # USD registry.
 # USD requires a set of JSON files that define the standard schemas. These
-# files are required at runtime.
+# files are required at runtime, and will be installed into 'lib/usd' next
+# to the Blender executable.
 if (WITH_USD)
   install(DIRECTORY
     ${LIBDIR}/usd/lib/usd
-    DESTINATION "."
+    DESTINATION "lib"
   )
 endif()
 
diff --git a/tests/gtests/usd/CMakeLists.txt b/tests/gtests/usd/CMakeLists.txt
index a0416c80b64..60f2f0e6477 100644
--- a/tests/gtests/usd/CMakeLists.txt
+++ b/tests/gtests/usd/CMakeLists.txt
@@ -18,6 +18,12 @@
 # All rights reserved.
 # ***** END GPL LICENSE BLOCK *****
 
+# This suppresses the warning "This file includes at least one deprecated or antiquated header which
+# may be removed without further notice at a future date", which is caused by the USD library
+# including <ext/hash_set>. Nothing we can do about that until they change what
+# they include, so this just suppresses it.
+add_definitions(-D_GLIBCXX_PERMIT_BACKWARD_HASH)
+
 set(INC
   .
   ..
@@ -34,8 +40,11 @@ set(INC
 set(LIB
   bf_blenloader_test
   bf_blenloader
-  bf_intern_opencolorio # Should not be needed but gives windows linker errors if the ocio libs are linked before this
-  bf_gpu # Should not be needed but gives windows linker errors if the ocio libs are linked before this
+
+  # Should not be needed but gives windows linker errors if the ocio libs are linked before this:
+  bf_intern_opencolorio
+  bf_gpu
+
   bf_usd
 )
 
@@ -47,6 +56,7 @@ get_property(BLENDER_SORTED_LIBS GLOBAL PROPERTY BLENDER_SORTED_LIBS_PROP)
 set(SRC
   abstract_hierarchy_iterator_test.cc
   hierarchy_context_order_test.cc
+  usd_stage_creation_test.cc
 )
 
 if(WITH_BUILDINFO)
diff --git a/tests/gtests/usd/usd_stage_creation_test.cc b/tests/gtests/usd/usd_stage_creation_test.cc
new file mode 100644
index 00000000000..8c8d0271449
--- /dev/null
+++ b/tests/gtests/usd/usd_stage_creation_test.cc
@@ -0,0 +1,40 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2019 Blender Foundation.
+ * All rights reserved.
+ */
+#include "testing/testing.h"
+#include <pxr/usd/usd/stage.h>
+
+#include <string>
+
+extern "C" {
+#include "BLI_utildefines.h"
+}
+
+class USDStageCreationTest : public testing::Test {
+};
+
+TEST_F(USDStageCreationTest, JSONFileLoadingTest)
+{
+  std::string filename = "usd-stage-creation-test.usdc";
+
+  /* Simply the ability to create a USD Stage for a specific filename means that the extension has
+   * been recognised by the USD library, and that a USD plugin has been loaded to write such files.
+   * Practically, this is a test to see whether the USD JSON files can be found and loaded. */
+  pxr::UsdStageRefPtr usd_stage = pxr::UsdStage::CreateNew(filename);
+  EXPECT_TRUE(usd_stage) << "unable to find suitable USD plugin to write " << filename;
+}



More information about the Bf-blender-cvs mailing list