Help packaging complex project

I’m trying to package a project that provides all kind of things: libs, a number of cli tools, a python module and a graphical Qt app (built with PySide as it seems). It all builds with at the same time.

So i’m a bit lost how to do that.
I’ve managed to build it all together, so cli tools and libs are fine, but

  • what to do with python module at all, how should i present it so it can be used in somewhat usual way in nix?
  • how to wrap that Qt PySide2 python app? I’ve added libsForQt5.wrapQtAppHook to native build inputs, and wrapped it manually with wrapQtApp "$out/bin/usdview" --prefix PYTHONPATH : $out/lib/python so it has qt platforms, and sees the built python module.
    BUT - it does not see PySide2 (and other python dependencies), even if I add them to propagatedBuildInputs
1 Like

trying to answer my own question:
i’ve added python input with python version to be provided, for qt using explicitly libsForQt5 (though manual discourages it) as I need PySide2 python module, which uses qt5.

then nativeBuildInputs = [ cmake libsForQt5.wrapQtAppHook python.pkgs.wrapPython ]

disable qt autowrapping: dontWrapQtApps = true;

then on post fixup stage:
first do the python wrapping, then do qt wrapping

postFixup = ''
    wrapPythonProgramsIn "$out/bin" "$out $pythonPath"
    wrapQtApp "$out/bin/usdview"
  '';

as I figure out, wrapPythonProgramsIn will look for default site-packages subpath based on python version in path list provided, AND it will look in nix-support/propagated-build-inputs, so I need to put my python dependencies in propagatedBuildInputs for them to be used by wrapper (and that’s why $out is needed in path list)

so, wrapPythonProgramsIn will wrap all python scripts in $out/bin so that they have access to python modules at the moment of wrapping, and then wrapQtApp will wrap the PySide using script once more with all the Qt related crap

Please, oh wise wizards, correct my mistakes

P.S.
there are several packages that could be found (including boost), that optionally provide python bindings and can be used (I used) as an example, you can find them in the list here: top-level/python-packages.nix (anything that uses toPythonModule function)