octave/octave-2.9.14-pkg.patch
Orion Poplawski e776380251 - Add /usr/share/octave/packages for add on packages and %ghost
/usr/share/octave/packages/octave_packages
- Add patch for octave package manager that will be going upstream
2007-09-25 21:00:54 +00:00

978 lines
29 KiB
Diff

*** ./scripts/pkg/pkg.m.orig2 2007-08-23 18:14:51.000000000 +0200
--- ./scripts/pkg/pkg.m 2007-09-22 02:36:01.022097578 +0200
***************
*** 116,121 ****
--- 116,128 ----
## @example
## p = pkg prefix
## @end example
+ ##
+ ## The location in which to install the architecture dependent files can be
+ ## independent specified with an addition argument. For example
+ ##
+ ## @example
+ ## pkg prefix ~/my_octave_packages ~/my_octave_packages_for_my_pc
+ ## @end example
## @item local_list
## Set the file in which to look for information on the locally
## installed packages. Locally installed packages are those that are
***************
*** 173,196 ****
## Installation prefix (XXX: what should these be on windows?)
persistent user_prefix = false;
persistent prefix = -1;
persistent local_list = tilde_expand (fullfile("~", ".octave_packages"));
persistent global_list = fullfile (OCTAVE_HOME (), "share", "octave",
"octave_packages");
mlock ();
! if (ispc () && ! isunix ())
! global_install = 1;
! else
! global_install = (geteuid() == 0);
! endif
if (prefix == -1)
if (global_install)
prefix = fullfile (OCTAVE_HOME (), "share", "octave", "packages");
else
prefix = fullfile ("~", "octave");
endif
prefix = tilde_expand (prefix);
endif
## Handle input
--- 180,203 ----
## Installation prefix (XXX: what should these be on windows?)
persistent user_prefix = false;
persistent prefix = -1;
+ persistent archprefix = -1;
persistent local_list = tilde_expand (fullfile("~", ".octave_packages"));
persistent global_list = fullfile (OCTAVE_HOME (), "share", "octave",
"octave_packages");
mlock ();
! global_install = issuperuser ();
if (prefix == -1)
if (global_install)
prefix = fullfile (OCTAVE_HOME (), "share", "octave", "packages");
+ archprefix = fullfile (OCTAVE_HOME (), "libexec", "octave", "packages");
else
prefix = fullfile ("~", "octave");
+ archprefix = prefix;
endif
prefix = tilde_expand (prefix);
+ archprefix = tilde_expand (archprefix);
endif
## Handle input
***************
*** 222,230 ****
if (! user_prefix)
prefix = fullfile (OCTAVE_HOME (), "share", "octave", "packages");
endif
! case {"list", "install", "uninstall", "load", "unload", ...
! "prefix", "local_list", "global_list", "rebuild", "build"}
! if (strcmp (action,"none"))
action = varargin{i};
else
error ("more than one action specified");
--- 229,237 ----
if (! user_prefix)
prefix = fullfile (OCTAVE_HOME (), "share", "octave", "packages");
endif
! case {"list", "install", "uninstall", "load", "unload", "prefix", ...
! "local_list", "global_list", "rebuild", "build"}
! if (strcmp (action, "none"))
action = varargin{i};
else
error ("more than one action specified");
***************
*** 252,258 ****
if (length (files) == 0)
error ("you must specify at least one filename when calling 'pkg install'");
endif
! install (files, deps, auto, prefix, verbose, local_list,
global_list, global_install);
case "uninstall"
--- 259,265 ----
if (length (files) == 0)
error ("you must specify at least one filename when calling 'pkg install'");
endif
! install (files, deps, auto, prefix, archprefix, verbose, local_list,
global_list, global_install);
case "uninstall"
***************
*** 276,292 ****
case "prefix"
if (length (files) == 0 && nargout == 0)
! disp (prefix);
! elseif (length (files) == 0 && nargout == 1)
local_packages = prefix;
! elseif (length (files) == 1 && nargout <= 1 && ischar (files{1}))
prefix = files{1};
- ## if (!strcmp(prefix(end), filesep))
- ## prefix(end+1) = filesep;
- ## endif
prefix = absolute_pathname (prefix);
local_packages = prefix;
user_prefix = true;
else
error ("you must specify a prefix directory, or request an output argument");
endif
--- 283,309 ----
case "prefix"
if (length (files) == 0 && nargout == 0)
! printf ("Installation prefix: %s\n", prefix);
! printf ("Architecture dependent prefix: %s\n", archprefix);
! elseif (length (files) == 0 && nargout >= 1)
local_packages = prefix;
! global_packages = archprefix;
! elseif (length (files) >= 1 && nargout <= 2 && ischar (files{1}))
prefix = files{1};
prefix = absolute_pathname (prefix);
local_packages = prefix;
user_prefix = true;
+ if (length (files) >= 2 && ischar (files{2}))
+ archprefix = files{2};
+ try
+ archprefix = absolute_pathname (archprefix);
+ catch
+ mkdir (archprefix);
+ warning ("creating the directory %s\n", archprefix);
+ archprefix = absolute_pathname (archprefix);
+ end_try_catch
+ global_packages = archprefix;
+ endif
else
error ("you must specify a prefix directory, or request an output argument");
endif
***************
*** 327,340 ****
case "rebuild"
if (global_install)
! global_packages = rebuild (prefix, global_list, files, auto, verbose);
global_packages = save_order (global_packages);
save (global_list, "global_packages");
if (nargout > 0)
local_packages = global_packages;
endif
else
! local_packages = rebuild (prefix, local_list, files, auto, verbose);
local_packages = save_order (local_packages);
save (local_list, "local_packages");
if (nargout == 0)
--- 344,359 ----
case "rebuild"
if (global_install)
! global_packages = rebuild (prefix, archprefix, global_list, files,
! auto, verbose);
global_packages = save_order (global_packages);
save (global_list, "global_packages");
if (nargout > 0)
local_packages = global_packages;
endif
else
! local_packages = rebuild (prefix, archprefix, local_list, files, auto,
! verbose);
local_packages = save_order (local_packages);
save (local_list, "local_packages");
if (nargout == 0)
***************
*** 353,359 ****
endswitch
endfunction
! function descriptions = rebuild (prefix, list, files, auto, verbose)
if (isempty (files))
[dirlist, err, msg] = readdir (prefix);
if (err)
--- 372,378 ----
endswitch
endfunction
! function descriptions = rebuild (prefix, archprefix, list, files, auto, verbose)
if (isempty (files))
[dirlist, err, msg] = readdir (prefix);
if (err)
***************
*** 380,385 ****
--- 399,406 ----
if (exist (descfile, "file"))
desc = get_description (descfile);
desc.dir = fullfile (prefix, dirlist{k});
+ desc.archprefix = fullfile (archprefix, strcat (desc.name, "-",
+ desc.version));
if (auto != 0)
if (exist (fullfile (desc.dir, "packinfo", ".autoload"), "file"))
unlink (fullfile (desc.dir, "packinfo", ".autoload"));
***************
*** 450,456 ****
endif
files(1) = [];
buildlist = fullfile (builddir, "octave_packages");
! install (files, handle_deps, autoload, installdir, verbose,
buildlist, "", false);
unwind_protect
repackage (builddir, buildlist);
--- 471,477 ----
endif
files(1) = [];
buildlist = fullfile (builddir, "octave_packages");
! install (files, handle_deps, autoload, installdir, installdir, verbose,
buildlist, "", false);
unwind_protect
repackage (builddir, buildlist);
***************
*** 465,471 ****
end_unwind_protect
endfunction
! function install (files, handle_deps, autoload, prefix, verbose, local_list, global_list, global_install)
# Check that the directory in prefix exist. If it doesn't: create it!
if (! exist (prefix, "dir"))
--- 486,493 ----
end_unwind_protect
endfunction
! function install (files, handle_deps, autoload, prefix, archprefix, verbose,
! local_list, global_list, global_install)
# Check that the directory in prefix exist. If it doesn't: create it!
if (! exist (prefix, "dir"))
***************
*** 491,497 ****
## Uncompress the packages and read the DESCRIPTION files
tmpdirs = packdirs = descriptions = {};
try
-
## Warn about non existent files
for i = 1:length (files)
if (isempty (glob(files{i})))
--- 513,518 ----
***************
*** 549,560 ****
[dummy, nm] = fileparts (tgz);
if ((length (nm) >= length (desc.name))
&& ! strcmp (desc.name, nm(1:length(desc.name))))
! error ("package name '%s' doesn't correspond to its filename '%s'", desc.name, nm);
endif
## Set default installation directory
desc.dir = fullfile (prefix, strcat (desc.name, "-", desc.version));
## Save desc
descriptions{end+1} = desc;
--- 570,586 ----
[dummy, nm] = fileparts (tgz);
if ((length (nm) >= length (desc.name))
&& ! strcmp (desc.name, nm(1:length(desc.name))))
! error ("package name '%s' doesn't correspond to its filename '%s'",
! desc.name, nm);
endif
## Set default installation directory
desc.dir = fullfile (prefix, strcat (desc.name, "-", desc.version));
+ ## Set default architectire dependent installation directory
+ desc.archprefix = fullfile (archprefix, strcat (desc.name, "-",
+ desc.version));
+
## Save desc
descriptions{end+1} = desc;
***************
*** 656,665 ****
for i = 1:length (descriptions)
desc = descriptions{i};
pdir = packdirs{i};
! copy_files (desc, pdir);
! create_pkgadddel (desc, pdir, "PKG_ADD");
! create_pkgadddel (desc, pdir, "PKG_DEL");
! finish_installation (desc, pdir)
endfor
catch
## Something went wrong, delete tmpdirs
--- 682,691 ----
for i = 1:length (descriptions)
desc = descriptions{i};
pdir = packdirs{i};
! copy_files (desc, pdir, global_install);
! create_pkgadddel (desc, pdir, "PKG_ADD", global_install);
! create_pkgadddel (desc, pdir, "PKG_DEL", global_install);
! finish_installation (desc, pdir, global_install)
endfor
catch
## Something went wrong, delete tmpdirs
***************
*** 668,673 ****
--- 694,700 ----
endfor
for i = 1:length (descriptions)
rm_rf (descriptions{i}.dir);
+ rm_rf (getarchdir (descriptions{i}));
endfor
rethrow (lasterror ());
end_try_catch
***************
*** 675,683 ****
## Check if the installed directory is empty. If it is remove it
## from the list
for i = length (descriptions):-1:1
! if (dirempty (descriptions{i}.dir, {"packinfo", "doc"}))
warning ("package %s is empty\n", descriptions{i}.name);
rm_rf (descriptions{i}.dir);
descriptions(i) = [];
endif
endfor
--- 702,712 ----
## Check if the installed directory is empty. If it is remove it
## from the list
for i = length (descriptions):-1:1
! if (dirempty (descriptions{i}.dir, {"packinfo", "doc"}) &&
! dirempty (getarchdir (descriptions{i})))
warning ("package %s is empty\n", descriptions{i}.name);
rm_rf (descriptions{i}.dir);
+ rm_rf (getarchdir (descriptions{i}));
descriptions(i) = [];
endif
endfor
***************
*** 738,744 ****
idx (end + 1) = i;
endif
endfor
! load_packages_and_dependencies (idx, handle_deps, installed_pkgs_lst);
endif
endfunction
--- 767,774 ----
idx (end + 1) = i;
endif
endfor
! load_packages_and_dependencies (idx, handle_deps, installed_pkgs_lst,
! global_install);
endif
endfunction
***************
*** 826,833 ****
## Do the actual deletion
if (desc.loaded)
rmpath (desc.dir);
! if (exist (fullfile (desc.dir, getarch()), "dir"))
! rmpath (fullfile (desc.dir, getarch ()));
endif
endif
if (exist (desc.dir, "dir"))
--- 856,863 ----
## Do the actual deletion
if (desc.loaded)
rmpath (desc.dir);
! if (exist (getarchdir (desc)))
! rmpath (getarchdir (desc));
endif
endif
if (exist (desc.dir, "dir"))
***************
*** 835,840 ****
--- 865,877 ----
if (status != 1)
error ("couldn't delete directory %s: %s", desc.dir, msg);
endif
+ [status, msg] = rm_rf (getarchdir (desc));
+ if (status != 1)
+ error ("couldn't delete directory %s: %s", getarchdir (desc), msg);
+ endif
+ if (dirempty (desc.archprefix))
+ rm_rf (desc.archprefix);
+ endif
else
warning ("directory %s previously lost", desc.dir);
endif
***************
*** 894,900 ****
if (exist (fullfile (pack.name, "inst", "bin"), "dir"))
movefile (fullfile (pack.name, "inst", "bin"), pack.name);
endif
! archdir = fullfile (pack.name, "inst", getarch ());
if (exist (archdir, "dir"))
if (exist (fullfile (pack.name, "inst", "PKG_ADD"), "file"))
unlink (fullfile (pack.name, "inst", "PKG_ADD"));
--- 931,938 ----
if (exist (fullfile (pack.name, "inst", "bin"), "dir"))
movefile (fullfile (pack.name, "inst", "bin"), pack.name);
endif
! archdir = fullfile (pack.archprefix, strcat (pack.name, "-",
! pack.version), getarch ());
if (exist (archdir, "dir"))
if (exist (fullfile (pack.name, "inst", "PKG_ADD"), "file"))
unlink (fullfile (pack.name, "inst", "PKG_ADD"));
***************
*** 1123,1138 ****
endif
endfunction
! function create_pkgadddel (desc, packdir, nm)
instpkg = fullfile (desc.dir, nm);
instfid = fopen (instpkg, "wt");
## If it is exists, most of the PKG_* file should go into the
## architecture dependent directory so that the autoload/mfilename
## commands work as expected. The only part that doesn't is the
## part in the main directory.
! if (exist (fullfile (desc.dir, getarch ()), "dir"))
! archpkg = fullfile (desc.dir, getarch (), nm);
! archfid = fopen (archpkg, "wt");
else
archpkg = instpkg;
archfid = instfid;
--- 1161,1178 ----
endif
endfunction
! function create_pkgadddel (desc, packdir, nm, global_install)
instpkg = fullfile (desc.dir, nm);
instfid = fopen (instpkg, "wt");
## If it is exists, most of the PKG_* file should go into the
## architecture dependent directory so that the autoload/mfilename
## commands work as expected. The only part that doesn't is the
## part in the main directory.
! archdir = fullfile (getarchprefix (desc), strcat (desc.name, "-",
! desc.version), getarch ());
! if (exist (getarchdir (desc, global_install), "dir"))
! archpkg = fullfile (getarchdir (desc, global_install), nm);
! archfid = fopen (archpkg, "at");
else
archpkg = instpkg;
archfid = instfid;
***************
*** 1186,1192 ****
endif
endfunction
! function copy_files (desc, packdir, bindir)
## Create the installation directory
if (! exist (desc.dir, "dir"))
[status, output] = mkdir (desc.dir);
--- 1226,1232 ----
endif
endfunction
! function copy_files (desc, packdir, global_install)
## Create the installation directory
if (! exist (desc.dir, "dir"))
[status, output] = mkdir (desc.dir);
***************
*** 1196,1201 ****
--- 1236,1243 ----
endif
endif
+ octfiledir = getarchdir (desc);
+
## Copy the files from "inst" to installdir
instdir = fullfile (packdir, "inst");
if (! dirempty (instdir))
***************
*** 1204,1209 ****
--- 1246,1300 ----
rm_rf (desc.dir);
error ("couldn't copy files to the installation directory");
endif
+ if (exist (fullfile (desc.dir, getarch ()), "dir") &&
+ ! strcmp (fullfile (desc.dir, getarch ()), octfiledir))
+ if (! exist (octfiledir, "dir"))
+ ## Can be required to create upto three levels of dirs
+ octm1 = fileparts (octfiledir);
+ if (! exist (octm1, "dir"))
+ octm2 = fileparts (octm1);
+ if (! exist (octm2, "dir"))
+ octm3 = fileparts (octm2);
+ if (! exist (octm3, "dir"))
+ [status, output] = mkdir (octm3);
+ if (status != 1)
+ rm_rf (desc.dir);
+ error ("couldn't create installation directory %s : %s",
+ octm3, output);
+ endif
+ endif
+ [status, output] = mkdir (octm2);
+ if (status != 1)
+ rm_rf (desc.dir);
+ error ("couldn't create installation directory %s : %s",
+ octm2, output);
+ endif
+ endif
+ [status, output] = mkdir (octm1);
+ if (status != 1)
+ rm_rf (desc.dir);
+ error ("couldn't create installation directory %s : %s",
+ octm1, output);
+ endif
+ endif
+ [status, output] = mkdir (octfiledir);
+ if (status != 1)
+ rm_rf (desc.dir);
+ error ("couldn't create installation directory %s : %s",
+ octfiledir, output);
+ endif
+ endif
+ [status, output] = movefile (fullfile (desc.dir, getarch (), "*"),
+ octfiledir);
+ rm_rf (fullfile (desc.dir, getarch ()));
+
+ if (status != 1)
+ rm_rf (desc.dir);
+ rm_rf (octfiledir);
+ error ("couldn't copy files to the installation directory");
+ endif
+ endif
+
endif
## Create the "packinfo" directory
***************
*** 1211,1231 ****
[status, msg] = mkdir (packinfo);
if (status != 1)
rm_rf (desc.dir);
error ("couldn't create packinfo directory: %s", msg);
endif
## Copy DESCRIPTION
[status, output] = copyfile (fullfile (packdir, "DESCRIPTION"), packinfo);
if (status != 1)
! rm_rf (desc.dir);
! error ("couldn't copy DESCRIPTION: %s", output);
endif
## Copy COPYING
[status, output] = copyfile (fullfile (packdir, "COPYING"), packinfo);
if (status != 1)
! rm_rf (desc.dir);
! error ("couldn't copy COPYING: %s", output);
endif
## If the file ChangeLog exists, copy it
--- 1302,1325 ----
[status, msg] = mkdir (packinfo);
if (status != 1)
rm_rf (desc.dir);
+ rm_rf (octfiledir);
error ("couldn't create packinfo directory: %s", msg);
endif
## Copy DESCRIPTION
[status, output] = copyfile (fullfile (packdir, "DESCRIPTION"), packinfo);
if (status != 1)
! rm_rf (desc.dir);
! rm_rf (octfiledir);
! error ("couldn't copy DESCRIPTION: %s", output);
endif
## Copy COPYING
[status, output] = copyfile (fullfile (packdir, "COPYING"), packinfo);
if (status != 1)
! rm_rf (desc.dir);
! rm_rf (octfiledir);
! error ("couldn't copy COPYING: %s", output);
endif
## If the file ChangeLog exists, copy it
***************
*** 1234,1239 ****
--- 1328,1334 ----
[status, output] = copyfile (fChangeLog, packinfo);
if (status != 1)
rm_rf (desc.dir);
+ rm_rf (octfiledir);
error ("couldn't copy ChangeLog file: %s", output);
endif
endif
***************
*** 1244,1257 ****
[status, output] = copyfile (fINDEX, packinfo);
if (status != 1)
rm_rf (desc.dir);
error ("couldn't copy INDEX file: %s", output);
endif
else
try
write_INDEX (desc, fullfile (packdir, "inst"),
! fullfile (packinfo, "INDEX"));
catch
rm_rf (desc.dir);
rethrow (lasterror ());
end_try_catch
endif
--- 1339,1354 ----
[status, output] = copyfile (fINDEX, packinfo);
if (status != 1)
rm_rf (desc.dir);
+ rm_rf (octfiledir);
error ("couldn't copy INDEX file: %s", output);
endif
else
try
write_INDEX (desc, fullfile (packdir, "inst"),
! fullfile (packinfo, "INDEX"), global_install);
catch
rm_rf (desc.dir);
+ rm_rf (octfiledir);
rethrow (lasterror ());
end_try_catch
endif
***************
*** 1262,1267 ****
--- 1359,1365 ----
[status, output] = copyfile (fon_uninstall, packinfo);
if (status != 1)
rm_rf (desc.dir);
+ rm_rf (octfiledir);
error ("couldn't copy on_uninstall.m: %s", output);
endif
endif
***************
*** 1269,1285 ****
## Is there a doc/ directory that needs to be installed
docdir = fullfile (packdir, "doc");
if (exist (docdir, "dir") && ! dirempty (docdir))
! [status, output] = copyfile (docdir, desc.dir);
endif
## Is there a bin/ directory that needs to be installed
bindir = fullfile (packdir, "bin");
if (exist (bindir, "dir") && ! dirempty (bindir))
! [status, output] = copyfile (bindir, desc.dir);
endif
endfunction
! function finish_installation (desc, packdir)
## Is there a post-install to call?
if (exist (fullfile (packdir, "post_install.m"), "file"))
wd = pwd ();
--- 1367,1383 ----
## Is there a doc/ directory that needs to be installed
docdir = fullfile (packdir, "doc");
if (exist (docdir, "dir") && ! dirempty (docdir))
! [status, output] = copyfile (docdir, desc.dir);
endif
## Is there a bin/ directory that needs to be installed
bindir = fullfile (packdir, "bin");
if (exist (bindir, "dir") && ! dirempty (bindir))
! [status, output] = copyfile (bindir, desc.dir);
endif
endfunction
! function finish_installation (desc, packdir, global_install)
## Is there a post-install to call?
if (exist (fullfile (packdir, "post_install.m"), "file"))
wd = pwd ();
***************
*** 1290,1295 ****
--- 1388,1394 ----
catch
cd (wd);
rm_rf (desc.dir);
+ rm_rf (getarchdir (desc), global_install);
rethrow (lasterror ());
end_try_catch
endif
***************
*** 1470,1476 ****
## 'desc' describes the package.
## 'dir' is the 'inst' direcotyr in temporary directory.
## 'INDEX' is the name (including path) of resulting INDEX file.
! function write_INDEX (desc, dir, INDEX)
## Get names of functions in dir
[files, err, msg] = readdir (dir);
if (err)
--- 1569,1575 ----
## 'desc' describes the package.
## 'dir' is the 'inst' direcotyr in temporary directory.
## 'INDEX' is the name (including path) of resulting INDEX file.
! function write_INDEX (desc, dir, INDEX, global_install)
## Get names of functions in dir
[files, err, msg] = readdir (dir);
if (err)
***************
*** 1478,1485 ****
endif
## Check for architecture dependent files
! arch = getarch();
! tmpdir = fullfile (dir, arch);
if (exist (tmpdir, "dir"))
[files2, err, msg] = readdir (tmpdir);
if (err)
--- 1577,1583 ----
endif
## Check for architecture dependent files
! tmpdir = getarchdir (desc);
if (exist (tmpdir, "dir"))
[files2, err, msg] = readdir (tmpdir);
if (err)
***************
*** 1718,1724 ****
endif
## Load the packages, but take care of the ordering of dependencies
! load_packages_and_dependencies (idx, handle_deps, installed_pkgs_lst);
endfunction
function unload_packages (files, handle_deps, local_list, global_list)
--- 1816,1822 ----
endif
## Load the packages, but take care of the ordering of dependencies
! load_packages_and_dependencies (idx, handle_deps, installed_pkgs_lst, true);
endfunction
function unload_packages (files, handle_deps, local_list, global_list)
***************
*** 1739,1773 ****
## unload all
if (length (files) == 1 && strcmp (files{1}, "all"))
dirs = pdirs;
## unload package_name1 ...
else
dirs = {};
for i = 1:length (files)
! idx = strcmp (pnames, files{i});
if (! any (idx))
error ("package %s is not installed", files{i});
endif
! dirs{end+1} = pdirs{idx};
endfor
endif
## Check for architecture dependent directories
- arch = getarch();
archdirs = {};
for i = 1:length (dirs)
! tmpdir = fullfile (dirs{i}, arch);
if (exist (tmpdir, "dir"))
archdirs{end + 1} = dirs{i};
archdirs{end + 1} = tmpdir;
endif
endfor
- if (length (archdirs) > 0)
- dirs = archdirs;
- endif
## Unload the packages
! for i = 1:length (dirs)
! d = dirs{i};
idx = strcmp (p, d);
if (any (idx))
rmpath (d);
--- 1837,1872 ----
## unload all
if (length (files) == 1 && strcmp (files{1}, "all"))
dirs = pdirs;
+ desc = installed_pkgs_lst;
## unload package_name1 ...
else
dirs = {};
+ desc = {};
for i = 1:length (files)
! idx = strcmp (pnames, files {i});
if (! any (idx))
error ("package %s is not installed", files{i});
endif
! dirs {end + 1} = pdirs {idx};
! desc {end + 1} = installed_pkgs_lst {idx};
endfor
endif
## Check for architecture dependent directories
archdirs = {};
for i = 1:length (dirs)
! tmpdir = getarchdir (desc {i});
if (exist (tmpdir, "dir"))
archdirs{end + 1} = dirs{i};
archdirs{end + 1} = tmpdir;
+ else
+ archdirs{end+ 1} = dirs {i};
endif
endfor
## Unload the packages
! for i = 1:length (archdirs)
! d = archdirs{i};
idx = strcmp (p, d);
if (any (idx))
rmpath (d);
***************
*** 1777,1789 ****
endfunction
function [status_out, msg_out] = rm_rf (dir)
! crr = confirm_recursive_rmdir ();
! unwind_protect
! confirm_recursive_rmdir (false);
! [status, msg] = rmdir (dir, "s");
! unwind_protect_cleanup
! confirm_recursive_rmdir (crr);
! end_unwind_protect
if (nargout > 0)
status_out = status;
endif
--- 1876,1893 ----
endfunction
function [status_out, msg_out] = rm_rf (dir)
! if (exist (dir))
! crr = confirm_recursive_rmdir ();
! unwind_protect
! confirm_recursive_rmdir (false);
! [status, msg] = rmdir (dir, "s");
! unwind_protect_cleanup
! confirm_recursive_rmdir (crr);
! end_unwind_protect
! else
! status = 1;
! msg = "";
! endif
if (nargout > 0)
status_out = status;
endif
***************
*** 1793,1818 ****
endfunction
function emp = dirempty (nm, ign)
! if (nargin < 2)
! ign = {".", ".."};
! else
! ign = [{".", ".."}, ign];
! endif
! l = dir (nm);
! for i = 1:length (l)
! found = false;
! for j = 1:length (ign)
! if (strcmp (l(i).name, ign{j}))
! found = true;
! break;
endif
endfor
! if (! found)
! emp = false;
! return
! endif
! endfor
! emp = true;
endfunction
function arch = getarch ()
--- 1897,1926 ----
endfunction
function emp = dirempty (nm, ign)
! if (exist (nm, "dir"))
! if (nargin < 2)
! ign = {".", ".."};
! else
! ign = [{".", ".."}, ign];
! endif
! l = dir (nm);
! for i = 1:length (l)
! found = false;
! for j = 1:length (ign)
! if (strcmp (l(i).name, ign{j}))
! found = true;
! break;
! endif
! endfor
! if (! found)
! emp = false;
! return
endif
endfor
! emp = true;
! else
! emp = true;
! endif
endfunction
function arch = getarch ()
***************
*** 1821,1826 ****
--- 1929,1955 ----
arch = _arch;
endfunction
+ function archprefix = getarchprefix (desc, global_install)
+ if ((nargin == 2 && global_install) || (nargin < 2 && issuperuser ()))
+ archprefix = fullfile (octave_config_info ("libexecdir"), "octave",
+ "packages", strcat(desc.name, "-", desc.version));
+ else
+ archprefix = desc.dir;
+ endif
+ endfunction
+
+ function archdir = getarchdir (desc)
+ archdir = fullfile (desc.archprefix, getarch());
+ endfunction
+
+ function s = issuperuser ()
+ if ((ispc () && ! isunix ()) || (geteuid() == 0))
+ s = true;
+ else
+ s = false;
+ endif
+ endfunction
+
function [status, output] = shell (cmd)
persistent have_sh;
***************
*** 1879,1887 ****
newdesc(idx) = [];
endfunction
! function load_packages_and_dependencies (idx, handle_deps, installed_pkgs_lst)
idx = load_package_dirs (idx, [], handle_deps, installed_pkgs_lst);
- arch = getarch ();
dirs = {};
execpath = EXEC_PATH ();
for i = idx;
--- 2008,2016 ----
newdesc(idx) = [];
endfunction
! function load_packages_and_dependencies (idx, handle_deps, installed_pkgs_lst,
! global_install)
idx = load_package_dirs (idx, [], handle_deps, installed_pkgs_lst);
dirs = {};
execpath = EXEC_PATH ();
for i = idx;
***************
*** 1890,1896 ****
if (exist (fullfile (dirs{end}, "bin"), "dir"))
execpath = strcat (fullfile(dirs{end}, "bin"), ":", execpath);
endif
! tmpdir = fullfile (ndir, arch);
if (exist (tmpdir, "dir"))
dirs{end + 1} = tmpdir;
endif
--- 2019,2025 ----
if (exist (fullfile (dirs{end}, "bin"), "dir"))
execpath = strcat (fullfile(dirs{end}, "bin"), ":", execpath);
endif
! tmpdir = getarchdir (installed_pkgs_lst {i});
if (exist (tmpdir, "dir"))
dirs{end + 1} = tmpdir;
endif