diff options
Diffstat (limited to 'src/luarocks/cfg.lua')
-rw-r--r-- | src/luarocks/cfg.lua | 98 |
1 files changed, 55 insertions, 43 deletions
diff --git a/src/luarocks/cfg.lua b/src/luarocks/cfg.lua index f74c40ad..d4bcbfb6 100644 --- a/src/luarocks/cfg.lua +++ b/src/luarocks/cfg.lua | |||
@@ -10,6 +10,7 @@ local rawset, next, table, pairs, print, require, io, os, setmetatable, pcall = | |||
10 | module("luarocks.cfg") | 10 | module("luarocks.cfg") |
11 | 11 | ||
12 | program_version = "1.1" | 12 | program_version = "1.1" |
13 | user_agent = "LuaRocks/"..program_version | ||
13 | 14 | ||
14 | local persist = require("luarocks.persist") | 15 | local persist = require("luarocks.persist") |
15 | 16 | ||
@@ -24,6 +25,8 @@ else | |||
24 | os.exit(1) | 25 | os.exit(1) |
25 | end | 26 | end |
26 | 27 | ||
28 | -- System detection: | ||
29 | |||
27 | local detected = {} | 30 | local detected = {} |
28 | local system,proc | 31 | local system,proc |
29 | 32 | ||
@@ -61,6 +64,8 @@ else | |||
61 | -- Fall back to Unix in unknown systems. | 64 | -- Fall back to Unix in unknown systems. |
62 | end | 65 | end |
63 | 66 | ||
67 | -- Path configuration: | ||
68 | |||
64 | local sys_config_file, home_config_file, home_tree | 69 | local sys_config_file, home_config_file, home_tree |
65 | if detected.windows then | 70 | if detected.windows then |
66 | home = os.getenv("APPDATA") or "c:" | 71 | home = os.getenv("APPDATA") or "c:" |
@@ -88,46 +93,65 @@ if not LUAROCKS_FORCE_CONFIG then | |||
88 | end | 93 | end |
89 | end | 94 | end |
90 | 95 | ||
96 | if not next(rocks_trees) then | ||
97 | if home_tree then | ||
98 | table.insert(rocks_trees, home_tree) | ||
99 | end | ||
100 | if LUAROCKS_ROCKS_TREE then | ||
101 | table.insert(rocks_trees, LUAROCKS_ROCKS_TREE) | ||
102 | end | ||
103 | end | ||
104 | |||
105 | -- Configure defaults: | ||
106 | |||
107 | local root = LUAROCKS_ROCKS_TREE or home_tree | ||
91 | local defaults = { | 108 | local defaults = { |
109 | root_dir = root, | ||
110 | rocks_dir = root.."/lib/luarocks/rocks", | ||
111 | scripts_dir = root.."/bin/", | ||
112 | lua_modules_dir = root.."/share/lua/5.1/", | ||
113 | bin_modules_dir = root.."/lib/lua/5.1/", | ||
114 | |||
92 | arch = "unknown", | 115 | arch = "unknown", |
93 | lib_extension = "unknown", | 116 | lib_extension = "unknown", |
94 | obj_extension = "unknown", | 117 | obj_extension = "unknown", |
118 | |||
95 | rocks_servers = { | 119 | rocks_servers = { |
96 | "http://luarocks.luaforge.net/rocks" | 120 | "http://luarocks.luaforge.net/rocks" |
97 | }, | 121 | }, |
122 | |||
98 | lua_extension = "lua", | 123 | lua_extension = "lua", |
99 | lua_interpreter = LUA_INTERPRETER or "lua", | 124 | lua_interpreter = LUA_INTERPRETER or "lua", |
100 | downloader = LUAROCKS_DOWNLOADER or "wget", | 125 | downloader = LUAROCKS_DOWNLOADER or "wget", |
101 | md5checker = LUAROCKS_MD5CHECKER or "md5sum", | 126 | md5checker = LUAROCKS_MD5CHECKER or "md5sum", |
102 | variables = {} | ||
103 | } | ||
104 | 127 | ||
105 | defaults.external_deps_subdirs = { | 128 | variables = {}, |
106 | bin = "bin", | 129 | |
107 | lib = "lib", | 130 | external_deps_subdirs = { |
108 | include = "include" | 131 | bin = "bin", |
132 | lib = "lib", | ||
133 | include = "include" | ||
134 | }, | ||
135 | runtime_external_deps_subdirs = { | ||
136 | bin = "bin", | ||
137 | lib = "lib", | ||
138 | include = "include" | ||
139 | }, | ||
109 | } | 140 | } |
110 | defaults.runtime_external_deps_subdirs = defaults.external_deps_subdirs | ||
111 | 141 | ||
112 | if detected.windows then | 142 | if detected.windows then |
113 | home_config_file = home_config_file:gsub("\\","/") | 143 | home_config_file = home_config_file:gsub("\\","/") |
144 | defaults.arch = "win32-"..proc | ||
145 | defaults.platforms = {"win32", "windows" } | ||
114 | defaults.lib_extension = "dll" | 146 | defaults.lib_extension = "dll" |
147 | defaults.external_lib_extension = "dll" | ||
115 | defaults.obj_extension = "obj" | 148 | defaults.obj_extension = "obj" |
116 | local rootdir = LUAROCKS_ROCKS_TREE or home_tree | ||
117 | defaults.root_dir = rootdir | ||
118 | defaults.rocks_dir = rootdir.."/rocks/" | ||
119 | defaults.scripts_dir = rootdir.."/bin/" | ||
120 | defaults.external_deps_dirs = { "c:/external/" } | 149 | defaults.external_deps_dirs = { "c:/external/" } |
121 | defaults.variables.LUA_BINDIR = LUA_BINDIR and LUA_BINDIR:gsub("\\", "/") or "c:/lua5.1/bin" | 150 | defaults.variables.LUA_BINDIR = LUA_BINDIR and LUA_BINDIR:gsub("\\", "/") or "c:/lua5.1/bin" |
122 | defaults.variables.LUA_INCDIR = LUA_INCDIR and LUA_INCDIR:gsub("\\", "/") or "c:/lua5.1/include" | 151 | defaults.variables.LUA_INCDIR = LUA_INCDIR and LUA_INCDIR:gsub("\\", "/") or "c:/lua5.1/include" |
123 | defaults.variables.LUA_LIBDIR = LUA_LIBDIR and LUA_LIBDIR:gsub("\\", "/") or "c:/lua5.1/lib" | 152 | defaults.variables.LUA_LIBDIR = LUA_LIBDIR and LUA_LIBDIR:gsub("\\", "/") or "c:/lua5.1/lib" |
124 | defaults.arch = "win32-"..proc | ||
125 | defaults.platforms = {"win32", "windows" } | ||
126 | defaults.cmake_generator = "MinGW Makefiles" | 153 | defaults.cmake_generator = "MinGW Makefiles" |
127 | -- TODO: Split Windows flavors between mingw and msvc | 154 | defaults.make = "nmake" -- TODO: Split Windows flavors between mingw and msvc |
128 | -- defaults.make = "make" | ||
129 | -- defaults.makefile = "Makefile" | ||
130 | defaults.make = "nmake" | ||
131 | defaults.makefile = "Makefile.win" | 155 | defaults.makefile = "Makefile.win" |
132 | defaults.variables.CC = "cl" | 156 | defaults.variables.CC = "cl" |
133 | defaults.variables.LD = "link" | 157 | defaults.variables.LD = "link" |
@@ -148,11 +172,8 @@ end | |||
148 | 172 | ||
149 | if detected.unix then | 173 | if detected.unix then |
150 | defaults.lib_extension = "so" | 174 | defaults.lib_extension = "so" |
175 | defaults.external_lib_extension = "so" | ||
151 | defaults.obj_extension = "o" | 176 | defaults.obj_extension = "o" |
152 | local rootdir = LUAROCKS_ROCKS_TREE or home_tree | ||
153 | defaults.root_dir = rootdir | ||
154 | defaults.rocks_dir = rootdir.."/rocks/" | ||
155 | defaults.scripts_dir = rootdir.."/bin/" | ||
156 | defaults.external_deps_dirs = { "/usr/local", "/usr" } | 177 | defaults.external_deps_dirs = { "/usr/local", "/usr" } |
157 | defaults.variables.LUA_BINDIR = LUA_BINDIR or "/usr/local/bin" | 178 | defaults.variables.LUA_BINDIR = LUA_BINDIR or "/usr/local/bin" |
158 | defaults.variables.LUA_INCDIR = LUA_INCDIR or "/usr/local/include" | 179 | defaults.variables.LUA_INCDIR = LUA_INCDIR or "/usr/local/include" |
@@ -186,8 +207,6 @@ if detected.cygwin then | |||
186 | defaults.variables.LIBFLAG = "-shared" | 207 | defaults.variables.LIBFLAG = "-shared" |
187 | end | 208 | end |
188 | 209 | ||
189 | defaults.external_lib_extension = defaults.lib_extension | ||
190 | |||
191 | if detected.macosx then | 210 | if detected.macosx then |
192 | defaults.external_lib_extension = "dylib" | 211 | defaults.external_lib_extension = "dylib" |
193 | defaults.arch = "macosx-"..proc | 212 | defaults.arch = "macosx-"..proc |
@@ -224,16 +243,10 @@ defaults.variables.LIB_EXTENSION = defaults.lib_extension | |||
224 | defaults.variables.OBJ_EXTENSION = defaults.obj_extension | 243 | defaults.variables.OBJ_EXTENSION = defaults.obj_extension |
225 | defaults.variables.LUAROCKS_PREFIX = LUAROCKS_PREFIX | 244 | defaults.variables.LUAROCKS_PREFIX = LUAROCKS_PREFIX |
226 | 245 | ||
227 | local cfg_mt = { | 246 | -- Use defaults: |
228 | __index = function(t, k) | ||
229 | local default = defaults[k] | ||
230 | if default then | ||
231 | rawset(t, k, default) | ||
232 | end | ||
233 | return default | ||
234 | end | ||
235 | } | ||
236 | 247 | ||
248 | -- Populate values from 'defaults.variables' in 'variables' if they were not | ||
249 | -- already set by user. | ||
237 | if not _M.variables then | 250 | if not _M.variables then |
238 | _M.variables = {} | 251 | _M.variables = {} |
239 | end | 252 | end |
@@ -243,15 +256,14 @@ for k,v in pairs(defaults.variables) do | |||
243 | end | 256 | end |
244 | end | 257 | end |
245 | 258 | ||
246 | setmetatable(_M, cfg_mt) | 259 | -- For values not set in the config file, use values from the 'defaults' table. |
247 | 260 | local cfg_mt = { | |
248 | if not next(rocks_trees) then | 261 | __index = function(t, k) |
249 | if home_tree then | 262 | local default = defaults[k] |
250 | table.insert(rocks_trees, home_tree) | 263 | if default then |
251 | end | 264 | rawset(t, k, default) |
252 | if LUAROCKS_ROCKS_TREE then | 265 | end |
253 | table.insert(rocks_trees, LUAROCKS_ROCKS_TREE) | 266 | return default |
254 | end | 267 | end |
255 | end | 268 | } |
256 | 269 | setmetatable(_M, cfg_mt) | |
257 | user_agent = "LuaRocks/"..program_version | ||