On Don, 2017-03-02 at 01:03 -0300, Alexandre Torres Porres wrote:
Howdy, I worked on a howto load and install externals tutorial and put it up in here: https://puredata.info/docs/tutorials/FrontPage
Also find it in here https://sites.google.com/site/porres/Using%20Pd% 20Externals.pdf?attredirects=0&d=1
feel free to comment and give some feedbacks
Good work! Great coverage of aspects. Do you plan to convert the final draft into a wikipage? I guess this would ease collaboration on the long run.
My notes:
The global and application specific paths are dependent on how Pd and externals were installed. Everything that comes from the distribution/package manager goes to /usr/, while all self-compiled stuff goes to /usr/local (when intalled system-wide). As a user, you shouldn't never ever touch /usr/ directly.
Application-specific: /usr/lib/puredata/extra if installed via a package manager (apt-get) /usr/local/lib/pd/extra if compiled by yourself.
User-specific (needs to be created): ~/.local/lib/pd/extra (preferred since version Pd-0.47-1) ~/pd-externals (deprecated but still usable). - Global: /usr/lib/pd-externals (searched by Pd from package manager) /usr/local/lib/pd-externals (searched by used-installed Pd)
Different library layouts require different ways of loading. I'll try to put together a summary of the different layouts I found "in the wild".
How to load them:
[declare -stdpath libraryname]
Examples: * virtually anything from Pd-extended * iemnet * all abstractions libraries
Notes: It works for both, abstractions and externals, as long as each object has its own file and they're in a folder libraryname. Supposedly, the majority of libraries uses this layout.
How to load them:
[declare -stdlib libraryname]
Examples: * (can't think of any right now)
How to load them:
[declare -stdpath libraryname -stdlib libraryname]
Examples: * zexy (not from Pd-extended) * Gem
Notes: You can test above with zexy. You need both declarations so that you can load both [nop] and [dirac~]. Gem is a special animal again. It uses a trick internally and adds the path automatically. Even if it is a mix of abstractions and a multi- object external, you stil can load it with [declare -stdlib Gem].
[declare -stdpath libname -stdlib libname/lib1 -stdlib/lib2 [...]]
Examples: * iemlib
Note: If the multi-object external doesn't have the same name as the parent folder, you need to add libname/ prefix to -stdlib. If you, for instance, only [declare -stdpath iemlib], you can successfully load [hp4_butt~] because it is an abstraction of iemlib, but it throws an error to the Pd-console:
filter~ hp2c $1 $2 $3 $4 ... couldn't create
because it uses [filter~] from iemlib1 internally. So, the proper way to make [hp4_butt~] work is to use:
[declare -stdpath iemlib -stdlib iemlib/iemlib1]
Roman