Mercurial > octave-nkf
annotate scripts/pkg/private/fix_depends.m @ 18214:442bca7dea44 stable
Fix installing packages where dependency name contains '-' (bug #41087).
* scripts/pkg/private/fix_depends.m: Add '-' to list of allowed
characters in a name.
author | Olaf Till <i7tiol@t-online.de> |
---|---|
date | Fri, 03 Jan 2014 15:34:33 +0100 |
parents | d63878346099 |
children | 446c46af4b42 |
rev | line source |
---|---|
17744
d63878346099
maint: Update copyright notices for release.
John W. Eaton <jwe@octave.org>
parents:
17028
diff
changeset
|
1 ## Copyright (C) 2005-2013 Søren Hauberg |
14466
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
2 ## Copyright (C) 2010 VZLU Prague, a.s. |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
3 ## |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
4 ## This file is part of Octave. |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
5 ## |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
6 ## Octave is free software; you can redistribute it and/or modify it |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
7 ## under the terms of the GNU General Public License as published by |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
8 ## the Free Software Foundation; either version 3 of the License, or (at |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
9 ## your option) any later version. |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
10 ## |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
11 ## Octave is distributed in the hope that it will be useful, but |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
12 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
13 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
14 ## General Public License for more details. |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
15 ## |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
16 ## You should have received a copy of the GNU General Public License |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
17 ## along with Octave; see the file COPYING. If not, see |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
18 ## <http://www.gnu.org/licenses/>. |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
19 |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
20 ## -*- texinfo -*- |
14479
05b59be209ed
doc: grammarcheck new pkg/private functions
Rik <octave@nomad.inbox5.com>
parents:
14473
diff
changeset
|
21 ## @deftypefn {Function File} {@var{deps_cell} =} fix_depends (@var{depends}) |
14466
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
22 ## Undocumented internal function. |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
23 ## @end deftypefn |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
24 |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
25 ## Make sure the depends field is of the right format. |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
26 ## This function returns a cell of structures with the following fields: |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
27 ## package, version, operator |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
28 function deps_cell = fix_depends (depends) |
16724
b7667fcb9fbc
Substitute ostrsplit() for strsplit().
Ben Abbott <bpabbott@mac.com>
parents:
16403
diff
changeset
|
29 deps = strtrim (ostrsplit (tolower (depends), ",")); |
14466
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
30 deps_cell = cell (1, length (deps)); |
17028
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
31 dep_pat = ... |
18214
442bca7dea44
Fix installing packages where dependency name contains '-' (bug #41087).
Olaf Till <i7tiol@t-online.de>
parents:
17744
diff
changeset
|
32 '\s*(?<name>[-\w]+)\s*(\(\s*(?<op>[<>=]+)\s*(?<ver>\d+\.\d+(\.\d+)*)\s*\))*\s*'; |
14466
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
33 |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
34 ## For each dependency. |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
35 for i = 1:length (deps) |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
36 dep = deps{i}; |
17028
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
37 [start, nm] = regexp (dep, dep_pat, 'start', 'names'); |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
38 ## Is the dependency specified |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
39 ## in the correct format? |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
40 if (! isempty (start)) |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
41 package = tolower (strtrim (nm.name)); |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
42 ## Does the dependency specify a version |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
43 ## Example: package(>= version). |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
44 if (! isempty (nm.ver)) |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
45 operator = nm.op; |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
46 if (! any (strcmp (operator, {">", ">=", "<=", "<", "=="}))) |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
47 error ("unsupported operator: %s", operator); |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
48 endif |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
49 version = fix_version (nm.ver); |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
50 ## If no version is specified for the dependency |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
51 ## we say that the version should be greater than |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
52 ## or equal to "0.0.0". |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
53 else |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
54 package = tolower (strtrim (dep)); |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
55 operator = ">="; |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
56 version = "0.0.0"; |
14466
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
57 endif |
17028
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
58 deps_cell{i} = struct ("package", package, |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
59 "operator", operator, |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
60 "version", version); |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
61 else |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
62 error ("incorrect syntax for dependency '%s' in the DESCRIPTION file\n", |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
63 dep); |
89acf2cd9149
Simplify the way pkg checks for dependencies.
Carlo de Falco <cdf@users.sourceforge.net>
parents:
16724
diff
changeset
|
64 endif |
14466
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
65 endfor |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
66 endfunction |
cfb0173fe1ca
maint: Refactor pkg.m and move subfunctions to private/ directory.
Carlo de Falco <kingcrimson@tiscali.it>
parents:
diff
changeset
|
67 |