diff scripts/pkg/private/copy_files.m @ 14466:cfb0173fe1ca

maint: Refactor pkg.m and move subfunctions to private/ directory. * pkg.m: move all sub-functions to private/ * pkg/private/absolute_pathname.m * pkg/private/build.m * pkg/private/configure_make.m * pkg/private/copy_files.m * pkg/private/create_pkgadddel.m * pkg/private/describe.m * pkg/private/dirempty.m * pkg/private/extract_pkg.m * pkg/private/finish_installation.m * pkg/private/fix_depends.m * pkg/private/fix_version.m * pkg/private/generate_lookfor_cache.m * pkg/private/get_description.m * pkg/private/get_forge_download.m * pkg/private/get_forge_pkg.m * pkg/private/getarch.m * pkg/private/getarchdir.m * pkg/private/getarchprefix.m * pkg/private/get_unsatisfied_deps.m * pkg/private/install.m * pkg/private/installed_packages.m * pkg/private/is_architecture_dependent.m * pkg/private/isautoload.m * pkg/private/issuperuser.m * pkg/private/list_forge_packages.m * pkg/private/load_package_dirs.m * pkg/private/load_packages.m * pkg/private/load_packages_and_dependencies.m * pkg/private/packinfo_copy_file.m * pkg/private/parse_pkg_idx.m * pkg/private/prepare_installation.m * pkg/private/print_package_description.m * pkg/private/rebuild.m * pkg/private/repackage.m * pkg/private/rm_rf.m * pkg/private/rstrip.m * pkg/private/save_order.m * pkg/private/shell.m * pkg/private/split_by.m * pkg/private/strip.m * pkg/private/uninstall.m * pkg/private/unload_packages.m * pkg/private/verify_directory.m * pkg/private/write_index.m
author Carlo de Falco <kingcrimson@tiscali.it>
date Thu, 15 Mar 2012 19:41:24 +0100
parents
children d2c095e45196
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/scripts/pkg/private/copy_files.m
@@ -0,0 +1,144 @@
+## Copyright (C) 2005-2012 S�ren Hauberg
+## Copyright (C) 2010 VZLU Prague, a.s.
+##
+## This file is part of Octave.
+##
+## Octave is free software; you can redistribute it and/or modify it
+## under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 3 of the License, or (at
+## your option) any later version.
+##
+## Octave is distributed in the hope that it will be useful, but
+## WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+## General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn  {Function File} {} copy_files (@var{desc}, @var{packdir},@
+## @var{global_install})
+## Undocumented internal function.
+## @end deftypefn
+
+function copy_files (desc, packdir, global_install)
+  ## Create the installation directory.
+  if (! exist (desc.dir, "dir"))
+    [status, output] = mkdir (desc.dir);
+    if (status != 1)
+      error ("couldn't create installation directory %s : %s",
+      desc.dir, output);
+    endif
+  endif
+
+  octfiledir = getarchdir (desc);
+
+  ## Copy the files from "inst" to installdir.
+  instdir = fullfile (packdir, "inst");
+  if (! dirempty (instdir))
+    [status, output] = copyfile (fullfile (instdir, "*"), desc.dir);
+    if (status != 1)
+      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.
+  packinfo = fullfile (desc.dir, "packinfo");
+  [status, msg] = mkdir (packinfo);
+  if (status != 1)
+    rm_rf (desc.dir);
+    rm_rf (octfiledir);
+    error ("couldn't create packinfo directory: %s", msg);
+  endif
+
+  packinfo_copy_file ("DESCRIPTION", "required", packdir, packinfo, desc, octfiledir);
+  packinfo_copy_file ("COPYING", "required", packdir, packinfo, desc, octfiledir);
+
+  packinfo_copy_file ("NEWS", "optional", packdir, packinfo, desc, octfiledir);
+  packinfo_copy_file ("ONEWS", "optional", packdir, packinfo, desc, octfiledir);
+  packinfo_copy_file ("ChangeLog", "optional", packdir, packinfo, desc, octfiledir);
+
+  ## Is there an INDEX file to copy or should we generate one?
+  index_file = fullfile (packdir, "INDEX");
+  if (exist(index_file, "file"))
+    packinfo_copy_file ("INDEX", "required", packdir, packinfo, desc, octfiledir);
+  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
+
+  ## Is there an 'on_uninstall.m' to install?
+  packinfo_copy_file ("on_uninstall.m", "optional", packdir, packinfo, desc, octfiledir);
+
+  ## 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?
+  ## FIXME: Need to treat architecture dependent files in bin/
+  bindir = fullfile (packdir, "bin");
+  if (exist (bindir, "dir") && ! dirempty (bindir))
+    [status, output] = copyfile (bindir, desc.dir);
+  endif
+endfunction
+