rpms/octave/devel octave-2.9.14-pkg.patch, NONE, 1.1 octave.spec, 1.58, 1.59

Orion Poplawski (orion) fedora-extras-commits at redhat.com
Tue Sep 25 21:01:27 UTC 2007


Author: orion

Update of /cvs/pkgs/rpms/octave/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv1187

Modified Files:
	octave.spec 
Added Files:
	octave-2.9.14-pkg.patch 
Log Message:
* Tue Sep 25 2007 Orion Poplawski <orion at ora.nwra.com> 2.9.14-2
- 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


octave-2.9.14-pkg.patch:

--- NEW FILE octave-2.9.14-pkg.patch ---
*** ./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


Index: octave.spec
===================================================================
RCS file: /cvs/pkgs/rpms/octave/devel/octave.spec,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -r1.58 -r1.59
--- octave.spec	18 Sep 2007 16:20:31 -0000	1.58
+++ octave.spec	25 Sep 2007 21:00:54 -0000	1.59
@@ -3,13 +3,14 @@
 
 Name:           octave
 Version:        2.9.14
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        A high-level language for numerical computations
 Epoch:          6
 
 Group:          Applications/Engineering
 License:        GPLv2+
 Source:         ftp://ftp.octave.org/pub/octave/bleeding-edge/octave-%{version}.tar.bz2
+Patch0:         octave-2.9.14-pkg.patch
 URL:            http://www.octave.org
 Requires:       gnuplot less info texinfo 
 Requires(post): /sbin/install-info
@@ -53,6 +54,7 @@
 
 %prep
 %setup -q
+%patch -p1 -b .pkg
 # Check that octave_api is set correctly
 if ! grep -q '^#define OCTAVE_API_VERSION "%{octave_api}"' src/version.h
 then
@@ -96,6 +98,7 @@
 HOST_TYPE=`$RPM_BUILD_ROOT%{_bindir}/octave-config -p CANONICAL_HOST_TYPE`
 mkdir -p $RPM_BUILD_ROOT%{_libexecdir}/%{name}/site/oct/%{octave_api}/$HOST_TYPE
 mkdir -p $RPM_BUILD_ROOT%{_libexecdir}/%{name}/site/oct/$HOST_TYPE
+mkdir -p $RPM_BUILD_ROOT%{_datadir}/%{name}/packages
 
 
 %clean
@@ -123,6 +126,7 @@
 %config(noreplace) /etc/ld.so.conf.d/*
 %{_libdir}/octave*
 %{_datadir}/octave
+%ghost %{_datadir}/octave/octave_packages
 %{_libexecdir}/octave
 %{_mandir}/man*/octave*
 %{_infodir}/octave.info*
@@ -137,6 +141,11 @@
 
 
 %changelog
+* Tue Sep 25 2007 Orion Poplawski <orion at ora.nwra.com> 2.9.14-2
+- 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
+
 * Tue Sep 18 2007 Quentin Spencer <qspencer at users.sourceforge.net> 2.9.14-1
 - New release.
 - Remove redundant menu category in desktop file (bug 274431).




More information about the fedora-extras-commits mailing list