# HG changeset patch # User Thomas Weber # Date 1206397640 14400 # Node ID 86bbba911de8d129e9a9145ed7fbc36db2796e1a # Parent ed3315995d3ca3655cf7dfd0cccf719c3bd91fb3 Allow installation of already extracted packages * * * * * * diff -r ed3315995d3c -r 86bbba911de8 scripts/ChangeLog --- a/scripts/ChangeLog Mon Mar 24 18:25:09 2008 -0400 +++ b/scripts/ChangeLog Mon Mar 24 18:27:20 2008 -0400 @@ -1,3 +1,7 @@ +2008-03-24 Thomas Weber + + * pkg/pkg.m: Allow installation of already extracted packages. + 2008-03-24 Michael Goffioul * pkg/pkg.m (pkg:configure_make): Make it work with recent changes in diff -r ed3315995d3c -r 86bbba911de8 scripts/pkg/pkg.m --- a/scripts/pkg/pkg.m Mon Mar 24 18:25:09 2008 -0400 +++ b/scripts/pkg/pkg.m Mon Mar 24 18:27:20 2008 -0400 @@ -599,45 +599,54 @@ if (length (dirlist) > 3) error ("bundles of packages are not allowed") endif + endif - ## the two first entries of dirlist are "." and ".." - for k = 3:length (dirlist) - packdir = fullfile (tmpdir, dirlist{k}); - packdirs{end+1} = packdir; - - ## Make sure the package contains necessary files - verify_directory (packdir); + ## The filename pointed to an uncompressed package to begin with + if (exist (tgz, "dir")) + dirlist = {".", "..", tgz}; + endif - ## Read the DESCRIPTION file - filename = fullfile (packdir, "DESCRIPTION"); - desc = get_description (filename); - - ## Verify that package name corresponds with filename - [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); + if (exist (tgz, "file") || exist (tgz, "dir")) + ## the two first entries of dirlist are "." and ".." + if (exist (tgz, "file")) + packdir = fullfile (tmpdir, dirlist{3}); + else + packdir = fullfile (pwd(), dirlist{3}); + endif + packdirs{end+1} = packdir; + + ## Make sure the package contains necessary files + verify_directory (packdir); + + ## Read the DESCRIPTION file + filename = fullfile (packdir, "DESCRIPTION"); + desc = get_description (filename); + + ## Verify that package name corresponds with filename + [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; + + ## Are any of the new packages already installed? + ## If so we'll remove the old version. + for j = 1:length (packages) + if (strcmp (packages{j}.name, desc.name)) + packages_to_uninstall(end+1) = j; 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; - - ## Are any of the new packages already installed? - ## If so we'll remove the old version. - for j = 1:length (packages) - if (strcmp (packages{j}.name, desc.name)) - packages_to_uninstall(end+1) = j; - endif - endfor - endfor + endfor endif endfor catch