Comparison

util/dependencies.lua @ 2510:97b5ea975cb9

util.dependencies, prosody, prosodyctl: Give util.dependencies a check_dependencies() function so the caller can decide what to do when dependencies aren't met - update prosody/prosodyctl for this change
author Matthew Wild <mwild1@gmail.com>
date Thu, 28 Jan 2010 14:56:47 +0000
parent 2299:b7d25e1ac716
child 2513:a8aa7616b154
comparison
equal deleted inserted replaced
2509:e8a0f2368cde 2510:97b5ea975cb9
4 -- 4 --
5 -- This project is MIT/X11 licensed. Please see the 5 -- This project is MIT/X11 licensed. Please see the
6 -- COPYING file in the source package for more information. 6 -- COPYING file in the source package for more information.
7 -- 7 --
8 8
9 module("dependencies", package.seeall)
9 10
10 local fatal; 11 function softreq(...) local ok, lib = pcall(require, ...); if ok then return lib; else return nil, lib; end end
11 12
12 local function softreq(...) local ok, lib = pcall(require, ...); if ok then return lib; else return nil, lib; end end 13 function missingdep(name, sources, msg)
13
14 local function missingdep(name, sources, msg)
15 print(""); 14 print("");
16 print("**************************"); 15 print("**************************");
17 print("Prosody was unable to find "..tostring(name)); 16 print("Prosody was unable to find "..tostring(name));
18 print("This package can be obtained in the following ways:"); 17 print("This package can be obtained in the following ways:");
19 print(""); 18 print("");
29 print("More help can be found on our website, at http://prosody.im/doc/depends"); 28 print("More help can be found on our website, at http://prosody.im/doc/depends");
30 print("**************************"); 29 print("**************************");
31 print(""); 30 print("");
32 end 31 end
33 32
34 local lxp = softreq "lxp" 33 function check_dependencies()
34 local fatal;
35
36 local lxp = softreq "lxp"
37
38 if not lxp then
39 missingdep("luaexpat", {
40 ["Debian/Ubuntu"] = "sudo apt-get install liblua5.1-expat0";
41 ["luarocks"] = "luarocks install luaexpat";
42 ["Source"] = "http://www.keplerproject.org/luaexpat/";
43 });
44 fatal = true;
45 end
46
47 local socket = softreq "socket"
48
49 if not socket then
50 missingdep("luasocket", {
51 ["Debian/Ubuntu"] = "sudo apt-get install liblua5.1-socket2";
52 ["luarocks"] = "luarocks install luasocket";
53 ["Source"] = "http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/";
54 });
55 fatal = true;
56 end
57
58 local lfs, err = softreq "lfs"
59 if not lfs then
60 missingdep("luafilesystem", {
61 ["luarocks"] = "luarocks install luafilesystem";
62 ["Debian/Ubuntu"] = "sudo apt-get install liblua5.1-filesystem0";
63 ["Source"] = "http://www.keplerproject.org/luafilesystem/";
64 });
65 fatal = true;
66 end
67
68 local ssl = softreq "ssl"
69
70 if not ssl then
71 if config.get("*", "core", "run_without_ssl") then
72 log("warn", "Running without SSL support because run_without_ssl is defined in the config");
73 else
74 missingdep("LuaSec", {
75 ["Debian/Ubuntu"] = "http://prosody.im/download/start#debian_and_ubuntu";
76 ["luarocks"] = "luarocks install luasec";
77 ["Source"] = "http://www.inf.puc-rio.br/~brunoos/luasec/";
78 }, "SSL/TLS support will not be available");
79 end
80 else
81 local major, minor, veryminor, patched = ssl._VERSION:match("(%d+)%.(%d+)%.?(%d*)(M?)");
82 if not major or ((tonumber(major) == 0 and (tonumber(minor) or 0) <= 3 and (tonumber(veryminor) or 0) <= 2) and patched ~= "M") then
83 log("error", "This version of LuaSec contains a known bug that causes disconnects, see http://prosody.im/doc/depends");
84 end
85 end
86
87 local encodings, err = softreq "util.encodings"
88 if not encodings then
89 if err:match("not found") then
90 missingdep("util.encodings", { ["Windows"] = "Make sure you have encodings.dll from the Prosody distribution in util/";
91 ["GNU/Linux"] = "Run './configure' and 'make' in the Prosody source directory to build util/encodings.so";
92 });
93 else
94 print "***********************************"
95 print("util/encodings couldn't be loaded. Check that you have a recent version of libidn");
96 print ""
97 print("The full error was:");
98 print(err)
99 print "***********************************"
100 end
101 fatal = true;
102 end
35 103
36 if not lxp then 104 local hashes, err = softreq "util.hashes"
37 missingdep("luaexpat", { 105 if not hashes then
38 ["Debian/Ubuntu"] = "sudo apt-get install liblua5.1-expat0"; 106 if err:match("not found") then
39 ["luarocks"] = "luarocks install luaexpat"; 107 missingdep("util.hashes", { ["Windows"] = "Make sure you have hashes.dll from the Prosody distribution in util/";
40 ["Source"] = "http://www.keplerproject.org/luaexpat/"; 108 ["GNU/Linux"] = "Run './configure' and 'make' in the Prosody source directory to build util/hashes.so";
41 }); 109 });
42 fatal = true; 110 else
111 print "***********************************"
112 print("util/hashes couldn't be loaded. Check that you have a recent version of OpenSSL (libcrypto in particular)");
113 print ""
114 print("The full error was:");
115 print(err)
116 print "***********************************"
117 end
118 fatal = true;
119 end
120 return not fatal;
43 end 121 end
44 122
45 local socket = softreq "socket"
46 123
47 if not socket then 124 return _M;
48 missingdep("luasocket", {
49 ["Debian/Ubuntu"] = "sudo apt-get install liblua5.1-socket2";
50 ["luarocks"] = "luarocks install luasocket";
51 ["Source"] = "http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/";
52 });
53 fatal = true;
54 end
55
56 local lfs, err = softreq "lfs"
57 if not lfs then
58 missingdep("luafilesystem", {
59 ["luarocks"] = "luarocks install luafilesystem";
60 ["Debian/Ubuntu"] = "sudo apt-get install liblua5.1-filesystem0";
61 ["Source"] = "http://www.keplerproject.org/luafilesystem/";
62 });
63 fatal = true;
64 end
65
66 local ssl = softreq "ssl"
67
68 if not ssl then
69 if config.get("*", "core", "run_without_ssl") then
70 log("warn", "Running without SSL support because run_without_ssl is defined in the config");
71 else
72 missingdep("LuaSec", {
73 ["Debian/Ubuntu"] = "http://prosody.im/download/start#debian_and_ubuntu";
74 ["luarocks"] = "luarocks install luasec";
75 ["Source"] = "http://www.inf.puc-rio.br/~brunoos/luasec/";
76 }, "SSL/TLS support will not be available");
77 end
78 else
79 local major, minor, veryminor, patched = ssl._VERSION:match("(%d+)%.(%d+)%.?(%d*)(M?)");
80 if not major or ((tonumber(major) == 0 and (tonumber(minor) or 0) <= 3 and (tonumber(veryminor) or 0) <= 2) and patched ~= "M") then
81 log("error", "This version of LuaSec contains a known bug that causes disconnects, see http://prosody.im/doc/depends");
82 end
83 end
84
85 local encodings, err = softreq "util.encodings"
86 if not encodings then
87 if err:match("not found") then
88 missingdep("util.encodings", { ["Windows"] = "Make sure you have encodings.dll from the Prosody distribution in util/";
89 ["GNU/Linux"] = "Run './configure' and 'make' in the Prosody source directory to build util/encodings.so";
90 });
91 else
92 print "***********************************"
93 print("util/encodings couldn't be loaded. Check that you have a recent version of libidn");
94 print ""
95 print("The full error was:");
96 print(err)
97 print "***********************************"
98 end
99 fatal = true;
100 end
101
102 local hashes, err = softreq "util.hashes"
103 if not hashes then
104 if err:match("not found") then
105 missingdep("util.hashes", { ["Windows"] = "Make sure you have hashes.dll from the Prosody distribution in util/";
106 ["GNU/Linux"] = "Run './configure' and 'make' in the Prosody source directory to build util/hashes.so";
107 });
108 else
109 print "***********************************"
110 print("util/hashes couldn't be loaded. Check that you have a recent version of OpenSSL (libcrypto in particular)");
111 print ""
112 print("The full error was:");
113 print(err)
114 print "***********************************"
115 end
116 fatal = true;
117 end
118
119 if fatal then os.exit(1); end