[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Issues with build Fedora RPMs of octave packages
From: |
David Bateman |
Subject: |
Re: Issues with build Fedora RPMs of octave packages |
Date: |
Sat, 22 Sep 2007 02:47:33 +0200 |
User-agent: |
Thunderbird 1.5.0.7 (X11/20060921) |
David Bateman wrote:
>
> The comes to the same thing as the "-global" flag. However, thinking
> about it a bit more there are other issues. Consider the case of having
> a system installed octave package with some oct-files and at the same
> time having a different user installed package with some oct-files. The
> base name for the install directory will be different, but the user
> should expect that both sets of oct-files will be available if the
> packages are loaded. To me this means that the information to find the
> directories containing the oct-files must be code in the "descriptions"
> structure saved to the "octave_packages" file...
>
> This then begs a new question, what exactly is the goal of having
> architecture dependent and independent directories at all? The logic
> seems to be that you can have one copy of the independent files and
> multiple copies of the architecture dependent files, one for each
> installation of which the version of octave is run. Therefore, I see
> three solutions
>
> 1) The "octave-packages" file contains only the prefix for the location
> of the oct-files and getarch() is added to the end. In this case a
> better hierarchy would be
>
> $(DESTDIR)/<libexec>/octave/packages/<package>/getarch()
>
> though does that meet the FHS? This is my preferred solution as make the
> multiple architecture dependent installation would just involve copying
> the architecture dependent directory to the appropriate location.
>
> 2) We have different "octave-package" files per architecture. with the
> paths to the oct-files hard-coded. I don't like this as it goes against
> the logic of having a single installation with mutliple architecture
> dependent directories.
>
> 3) Have the "octave-packages" file contain multiple entries for the
> location of the architecture dependent files for each package; One for
> each architecture supported. This is not fundamentally different from
> 1), except that the installation process of mutliple architecture would
> need to have "octave_packages" modified and that should be done by
> "pkg", when in fact this stuff would better be dealt with by the
> distributions package manager...
>
> I've not had much time to try and implement case 1), but will try over
> the weekend.. Any comments?
>
>> would be sufficient for RPM packaging (assuming that the octave-forge
>> makefiles are changed to pass in this parameter).
>
> If the next octave-forge is for 2.9.14 then we shouldn't change the
> octave-forge makefiles yet... Should we wait for an octave-forge release
> till this is settled?
What about the attached patch that implements 1) above. For the case of
Fedora in the build process, you'd specific the prefix to the
architecture dependent directory something like
pkg ("prefix",%prefix, %archprefix)
where archprefix is something like $(DESTDIR)/<libexec>/octave/packages,
the package name and architecture dependent directory name are added by
Octave. You can then proceed with the install as before.. This might
need a few changes to the octave-forge Makefiles to allow the ARCHDIR to
be passed to the Makefile, but it should be minor.
Orion if you are happy enough with this change then I can offer to
change write an appropriate rpm template and Makefile for the
octave-forge packages...
D.
>
>
*** ./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
2007-09-21 David Bateman <address@hidden>
* pkg/pkg.m: Add second argument to setting for prefix for
architecture dependent files. Use throughout.
(pkg:issuperuser): New function, use through to check for
root user.
(pkg:getarchprefix): function to give the archiecture dependent
prefix for a package.
(pkg:getarchdir): New function giving location of architetcure
dependent directory. Use through out.
(pkg:install): Treat architecture dependent directory separately
as in might not be a sub-directory of the package directory.
(pkg:uninstall): ditto.
(pkg:create_pkgadddel): Check for global or local install for
architecture dependent directory.
(pkg:finish_installation): ditto.
(pkg:write_INDEX): ditto.
(pkg:load_packages_and_dependencies): ditto.
(pkg:copy_files): ditto. Add step to copy architecture dependent
files to a new location if user is root.
(pkg:rm_rf): Check if file or directory exists before removing.
(pkg:dirempty): Check if directory exists before checking.
- Re: Issues with build Fedora RPMs of octave packages, (continued)
- Re: Issues with build Fedora RPMs of octave packages, David Bateman, 2007/09/21
- Re: Issues with build Fedora RPMs of octave packages, Michael Goffioul, 2007/09/21
- Re: Issues with build Fedora RPMs of octave packages, David Bateman, 2007/09/21
- Re: Issues with build Fedora RPMs of octave packages, Michael Goffioul, 2007/09/21
- Re: Issues with build Fedora RPMs of octave packages, David Bateman, 2007/09/21
- Re: Issues with build Fedora RPMs of octave packages, Orion Poplawski, 2007/09/21
- Re: Issues with build Fedora RPMs of octave packages, David Bateman, 2007/09/21
- Re: Issues with build Fedora RPMs of octave packages,
David Bateman <=
Re: Issues with build Fedora RPMs of octave packages, David Bateman, 2007/09/21