1{
2 alembic,
3 bison,
4 boost,
5 buildPythonPackage,
6 cmake,
7 distutils,
8 doxygen,
9 draco,
10 embree,
11 fetchFromGitHub,
12 fetchpatch,
13 flex,
14 git,
15 graphviz-nox,
16 imath,
17 jinja2,
18 lib,
19 libGL,
20 libX11,
21 libXt,
22 materialx,
23 ninja,
24 numpy,
25 opencolorio,
26 openimageio_2,
27 opensubdiv,
28 osl,
29 ptex,
30 pyopengl,
31 pyqt6,
32 pyside6,
33 python,
34 qt6,
35 setuptools,
36 tbb,
37 withDocs ? false,
38 withOsl ? true,
39 withTools ? false,
40 withUsdView ? false,
41 writeShellScriptBin,
42}:
43
44let
45 # Matches the pyside6-uic implementation
46 # https://code.qt.io/cgit/pyside/pyside-setup.git/tree/sources/pyside-tools/pyside_tool.py?id=e501cad66146a49c7a259579c7bb94bc93a67a08#n82
47 pyside-tools-uic = writeShellScriptBin "pyside6-uic" ''
48 exec ${qt6.qtbase}/libexec/uic -g python "$@"
49 '';
50in
51
52buildPythonPackage rec {
53 pname = "openusd";
54 version = "25.02a";
55 pyproject = false;
56
57 src = fetchFromGitHub {
58 owner = "PixarAnimationStudios";
59 repo = "OpenUSD";
60 tag = "v${version}";
61 hash = "sha256-QFwG6kOLM+R+QIAozk/Dbldj8LRt9kCJv0W/EGHkq6Q=";
62 };
63
64 stdenv = python.stdenv;
65
66 outputs = [ "out" ] ++ lib.optional withDocs "doc";
67
68 patches = [
69 (fetchpatch {
70 name = "port-to-embree-4.patch";
71 # https://github.com/PixarAnimationStudios/OpenUSD/pull/2266
72 url = "https://github.com/PixarAnimationStudios/OpenUSD/commit/a07a6b4d1da19bfc499db49641d74fb7c1a71e9b.patch?full_index=1";
73 hash = "sha256-Gww6Ll2nKwpcxMY9lnf5BZ3eqUWz1rik9P3mPKDOf+Y=";
74 })
75 ];
76
77 env.OSL_LOCATION = "${osl}";
78
79 cmakeFlags = [
80 "-DPXR_BUILD_ALEMBIC_PLUGIN=ON"
81 "-DPXR_BUILD_DRACO_PLUGIN=ON"
82 "-DPXR_BUILD_EMBREE_PLUGIN=ON"
83 "-DPXR_BUILD_EXAMPLES=OFF"
84 "-DPXR_BUILD_IMAGING=ON"
85 "-DPXR_BUILD_MONOLITHIC=ON" # Seems to be commonly linked to monolithically
86 "-DPXR_BUILD_TESTS=OFF"
87 "-DPXR_BUILD_TUTORIALS=OFF"
88 "-DPXR_BUILD_USD_IMAGING=ON"
89 "-DPYSIDE_BIN_DIR=${pyside-tools-uic}/bin"
90 (lib.cmakeBool "PXR_BUILD_DOCUMENTATION" withDocs)
91 (lib.cmakeBool "PXR_BUILD_PYTHON_DOCUMENTATION" withDocs)
92 (lib.cmakeBool "PXR_BUILD_USDVIEW" withUsdView)
93 (lib.cmakeBool "PXR_BUILD_USD_TOOLS" withTools)
94 (lib.cmakeBool "PXR_ENABLE_MATERIALX_SUPPORT" true)
95 (lib.cmakeBool "PXR_ENABLE_OSL_SUPPORT" (!stdenv.hostPlatform.isDarwin && withOsl))
96 ];
97
98 nativeBuildInputs =
99 [
100 cmake
101 ninja
102 setuptools
103 ]
104 ++ lib.optionals withDocs [
105 git
106 graphviz-nox
107 doxygen
108 ]
109 ++ lib.optionals withUsdView [ qt6.wrapQtAppsHook ];
110
111 buildInputs =
112 [
113 alembic.dev
114 bison
115 draco
116 embree
117 flex
118 imath
119 materialx
120 opencolorio
121 openimageio_2
122 opensubdiv
123 ptex
124 tbb
125 ]
126 ++ lib.optionals stdenv.hostPlatform.isLinux [
127 libGL
128 libX11
129 libXt
130 ]
131 ++ lib.optionals withOsl [ osl ]
132 ++ lib.optionals withUsdView [ qt6.qtbase ]
133 ++ lib.optionals (withUsdView && stdenv.hostPlatform.isLinux) [ qt6.qtwayland ];
134
135 propagatedBuildInputs =
136 [
137 boost
138 jinja2
139 numpy
140 pyopengl
141 distutils
142 ]
143 ++ lib.optionals (withTools || withUsdView) [
144 pyside-tools-uic
145 pyside6
146 ]
147 ++ lib.optionals withUsdView [ pyqt6 ];
148
149 pythonImportsCheck = [
150 "pxr"
151 "pxr.Usd"
152 ];
153
154 postInstall =
155 ''
156 # Make python lib properly accessible
157 target_dir=$out/${python.sitePackages}
158 mkdir -p $(dirname $target_dir)
159 mv $out/lib/python $target_dir
160 ''
161 + lib.optionalString withDocs ''
162 mv $out/docs $doc
163 '';
164
165 meta = {
166 description = "Universal Scene Description";
167 longDescription = ''
168 Universal Scene Description (USD) is an efficient, scalable system
169 for authoring, reading, and streaming time-sampled scene description
170 for interchange between graphics applications.
171 '';
172 homepage = "https://openusd.org/";
173 changelog = "https://github.com/PixarAnimationStudios/OpenUSD/${src.tag}/CHANGELOG.md";
174 license = lib.licenses.tost;
175 maintainers = with lib.maintainers; [
176 shaddydc
177 gador
178 ];
179 };
180}