== Abstract ==
This OEP refers to Octave's design of the pkg system. The purpose of this system
See the user cases section below for several examples.
== Available vs Loaded ==
associated file just like the db files for the local installs. To load an external
package, the path for the db file needs to be passed to pkg and the db named (because
there may be more than
These are most like the less used type of packages and will require a bit more
If the user decides to make a global package install (install the package using pkg while
runnig Octave with sudo), then he's trying to act as system administrator and should know
what he's doing. If he breaks it, its his own fault. Installation of system-wide software
is meant to be handled by the system packaging tool. It is just not possible to make pkg
Also, supporting multiple packages versions means that the word "all" to refer to all
packages has new limitations. Should we load only the latest version of each package?
And if there's multiple packages with the same version on
varios db, which one should
be loaded? I'd propose the default to be:
- load the latest version
- load the local install of the package
- load the global install of the package
For package names, the proposal is to limit package names to the same as variable
names (makes it even easier to check
validaity with isvarname). So package name
must start with a letter, and otherwise be comprised of alphanumeric and underscores
characters. Unlike variable names, package names will not be case sensitive since
sensitive (creating directories named Image and image would not be possible in FAT
== User cases ==
tests in the package (using the cached package to run the tests in the .cc files).
=== different package versions ====
Later, Denise installs Octave 3.6.2 but keeps the previous version of Octave on the
system since some of her old code no longer runs correctly. Loading the financial
While using Octave 3.6.2, Denise installs the new version of the package
"pkg install -forge financial". The files for the previous version of the package
altough "pkg load financial" will only load the latest version. However, when
Denise is using Octave 3.4.3, as financial 1.2.0 requires Octave 3.6.0, pkg load
will only load financial 1.0.4.
=== User case #3 ===
Owen is stuck using the financial package 1.0.4 because some of his code no
longer works in the latest versions. However the latest version of financial
while "pkg load financial" always loads the latest version of the package.
=== User case #4 ===
Lisa is using Octave in a remote machine on the biochemistry department. The
system administrator installed Octave 3.6.2, signal package 1.2.0, and
Lisas uses all of them but she also requires the image package.
However, the system administrator does not have time to access security issues
with the package and tells her to install that package locally. She runs "pkg
When Octave 3.6.3 is released, Lisa wants to use the new version since it fixes
one bug that has been
aanoying her for a long time but the system administrator
does not want to make the update and tells her to build it herself locally
=== User case #5 ===
Diana is a student that wants to run her code in the departmental cluster. However,
the system does not have an installation of Octave and she needs to install it on
to her own list of available packages. which she can load.
=== User case #6 ===
John is a professor of biomechanics and uses Octave on his classes. Most of the
exercises he gives to the class require the use of multiple packages in Octave
metapackage for his student listing all required packages. The students install
it with "pkg install -url path-to-his-metapackage". The metapackage has no file
it simply lists a bunch of package
has dependencies. Since pkg solves this
dependencies automatically, a message showing which packages will be installed
is displayed before doing it.
= == Where to install things
These should not be hardcoded and taken from octave_config_info. There's many paths there whose purpose is explained on octave sources [http://hg.savannah.gnu.org/hgweb/octave/file/default/build-aux/common.mk buil-aux/common.mk] (see the ''Where To Install Things'' and ''Octave-specific directories'' sections on that file.)