- initial import of revision 374 from cnc
[apt.git] / contrib / guess / guess.lua
1 -- This script will try to change the requested names in a few
2 -- ways, trying to guess an available package. It must be plugged
3 -- in the slot Scripts::AptGet::Install::TranslateArg
4 --
5 -- Author: Gustavo Niemeyer <niemeyer@conectiva.com>
6
7 -- Allow someone to disable this without removing the script.
8 if confget("APT::Get::Guess/b", "true") == "false" then
9         return
10 end
11
12 -- Don't fiddle with filenames.
13 if string.sub(argument, 1, 1) == "/" then
14         return
15 end
16
17 -- First, check for something with a 'lib' prefix
18 name = "lib"..argument
19 if pkgfind(name) then
20         translated = name
21         return
22 end
23
24 -- Now check for something with a number 0-99 suffix ...
25 for n = 0, 99 do
26         name = argument..n
27         if pkgfind(name) then
28                 translated = name
29                 return
30         end
31         -- ... and a lib prefix.
32         name = "lib"..argument
33         if pkgfind(name) then
34                 translated = name
35                 return
36         end
37 end
38
39 -- Now go through the package list doing the same tests with a
40 -- normalized case.
41 lower = string.lower(argument)
42 liblower = "lib"..lower
43 for i, pkg in pairs(pkglist()) do
44         realname = pkgname(pkg)
45         name = string.lower(realname)
46         if lower == name or liblower == name then
47                 translated = realname
48                 return
49         end
50         -- But instead of trying every possible number suffix,
51         -- extract the numbers from the real package name.
52         while string.gfind(string.sub(name, -1), "[%d.]")() do
53                 name = string.sub(name, 1, -2)
54                 if (lower == name or liblower == name) then
55                         translated = realname
56                         return
57                 end
58         end
59 end