aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2014-01-04 00:47:36 -0200
committerHisham Muhammad <hisham@gobolinux.org>2014-01-04 00:47:36 -0200
commit16c2c973b0a1e6c8e94a4ba904c122cfd355f082 (patch)
treefa421dd526f309054f3726e3073401411930976a
parentf4b271c51c1c05db92a9a12ca39c2ec5208937e0 (diff)
downloadluarocks-16c2c973b0a1e6c8e94a4ba904c122cfd355f082.tar.gz
luarocks-16c2c973b0a1e6c8e94a4ba904c122cfd355f082.tar.bz2
luarocks-16c2c973b0a1e6c8e94a4ba904c122cfd355f082.zip
Improvements to the write_rockspec command.
Let's make this more and more automagical over time. :)
-rw-r--r--src/luarocks/write_rockspec.lua66
1 files changed, 52 insertions, 14 deletions
diff --git a/src/luarocks/write_rockspec.lua b/src/luarocks/write_rockspec.lua
index f8035b8d..a27f0b63 100644
--- a/src/luarocks/write_rockspec.lua
+++ b/src/luarocks/write_rockspec.lua
@@ -31,10 +31,14 @@ rockspec, and is not guaranteed to be complete or correct.
31--homepage=<url> Project homepage. 31--homepage=<url> Project homepage.
32--lua-version=<ver> Supported Lua versions. Accepted values are "5.1", "5.2" 32--lua-version=<ver> Supported Lua versions. Accepted values are "5.1", "5.2"
33 or "5.1,5.2". 33 or "5.1,5.2".
34--tag=<tag> Tag to use. Will attempt to extract version number from it.
34--lib=<lib>[,<lib>] A comma-separated list of libraries that C files need to 35--lib=<lib>[,<lib>] A comma-separated list of libraries that C files need to
35 link to. 36 link to.
36]] 37]]
37 38
39local function open_file(name)
40 return io.open(dir.path(fs.current_dir(), name), "r")
41end
38 42
39local function get_url(rockspec) 43local function get_url(rockspec)
40 local url = rockspec.source.url 44 local url = rockspec.source.url
@@ -79,12 +83,11 @@ local function configure_lua_version(rockspec, luaver)
79end 83end
80 84
81local function detect_description(rockspec) 85local function detect_description(rockspec)
82 local fd = io.open("README.md", "r") 86 local fd = open_file("README.md") or open_file("README")
83 if not fd then fd = io.open("README", "r") end
84 if not fd then return end 87 if not fd then return end
85 local data = fd:read("*a") 88 local data = fd:read("*a")
86 fd:close() 89 fd:close()
87 local paragraph = data:match("\n\n(.-)\n\n") 90 local paragraph = data:match("\n\n([^%[].-)\n\n")
88 if not paragraph then paragraph = data:match("\n\n(.*)") end 91 if not paragraph then paragraph = data:match("\n\n(.*)") end
89 if paragraph then 92 if paragraph then
90 if #paragraph < 80 then 93 if #paragraph < 80 then
@@ -100,19 +103,32 @@ local function detect_description(rockspec)
100 end 103 end
101end 104end
102 105
106local function detect_mit_license(data)
107 local strip_copyright = (data:gsub("Copyright [^\n]*\n", ""))
108 local sum = 0
109 for i = 1, #strip_copyright do
110 local num = string.byte(strip_copyright:sub(i,i))
111 if num > 32 and num <= 128 then
112 sum = sum + num
113 end
114 end
115 return sum == 78656
116end
117
103local function show_license(rockspec) 118local function show_license(rockspec)
104 local fd = io.open("COPYING", "r") 119 local fd = open_file("COPYING") or open_file("LICENSE") or open_file("MIT-LICENSE.txt")
105 if not fd then fd = io.open("LICENSE", "r") end 120 if not fd then return nil end
106 if not fd then return end
107 local data = fd:read("*a") 121 local data = fd:read("*a")
108 fd:close() 122 fd:close()
123 local is_mit = detect_mit_license(data)
109 util.title("License for "..rockspec.package..":") 124 util.title("License for "..rockspec.package..":")
110 util.printout(data) 125 util.printout(data)
111 util.printout() 126 util.printout()
127 return is_mit
112end 128end
113 129
114local function get_cmod_name(file) 130local function get_cmod_name(file)
115 local fd = io.open(file, "r") 131 local fd = open_file(file)
116 if not fd then return nil end 132 if not fd then return nil end
117 local data = fd:read("*a") 133 local data = fd:read("*a")
118 fd:close() 134 fd:close()
@@ -199,22 +215,35 @@ function run(...)
199 elseif not url_or_dir then 215 elseif not url_or_dir then
200 url_or_dir = version 216 url_or_dir = version
201 end 217 end
218
219 if flags["tag"] == true then
220 return nil, "Incorrect usage: --tag requires an argument. "..util.see_help("write_rockspec")
221 end
222
223 if flags["tag"] then
224 if not version then
225 version = flags["tag"]:gsub("^v", "")
226 end
227 end
202 228
203 local protocol, pathname = dir.split_url(url_or_dir) 229 local protocol, pathname = dir.split_url(url_or_dir)
204 if not fetch.is_basic_protocol(protocol) then 230 if not fetch.is_basic_protocol(protocol) then
205 version = "scm"
206 if not name then 231 if not name then
207 name = dir.base_name(url_or_dir):gsub("%.[^.]+$", "") 232 name = dir.base_name(url_or_dir):gsub("%.[^.]+$", "")
208 end 233 end
234 if not version then
235 version = "scm"
236 end
209 elseif protocol ~= "file" then 237 elseif protocol ~= "file" then
210 local filename = dir.base_name(url_or_dir) 238 local filename = dir.base_name(url_or_dir)
211 local newname, newversion = filename:match("(.*)-([^-]+)") 239 local newname, newversion = filename:match("(.*)-([^-]+)")
212 if not name then 240 if (not name) and newname then
213 name = newname 241 name = newname
214 end 242 end
215 if newversion then 243 if (not version) and newversion then
216 version = newversion:gsub(".[a-z]+$", ""):gsub(".tar$", "") 244 version = newversion:gsub(".[a-z]+$", ""):gsub(".tar$", "")
217 else 245 end
246 if not (name and version) then
218 return nil, "Missing name and version arguments. "..util.see_help("write_rockspec") 247 return nil, "Missing name and version arguments. "..util.see_help("write_rockspec")
219 end 248 end
220 elseif not version then 249 elseif not version then
@@ -222,13 +251,18 @@ function run(...)
222 end 251 end
223 252
224 local filename = flags["output"] or dir.path(fs.current_dir(), name:lower().."-"..version.."-1.rockspec") 253 local filename = flags["output"] or dir.path(fs.current_dir(), name:lower().."-"..version.."-1.rockspec")
254
255 if not flags["homepage"] and url_or_dir:match("^git://github.com") then
256 flags["homepage"] = "http://"..url_or_dir:match("^[^:]+://(.*)")
257 end
225 258
226 local rockspec = { 259 local rockspec = {
227 package = name, 260 package = name,
228 name = name:lower(), 261 name = name:lower(),
229 version = version.."-1", 262 version = version.."-1",
230 source = { 263 source = {
231 url = "*** please add URL for source tarball, zip or repository here ***" 264 url = "*** please add URL for source tarball, zip or repository here ***",
265 tag = flags["tag"],
232 }, 266 },
233 description = { 267 description = {
234 summary = flags["summary"] or "*** please specify description summary ***", 268 summary = flags["summary"] or "*** please specify description summary ***",
@@ -252,7 +286,7 @@ function run(...)
252 rockspec.source.dir = "dummy" 286 rockspec.source.dir = "dummy"
253 if not fetch.is_basic_protocol(rockspec.source.protocol) then 287 if not fetch.is_basic_protocol(rockspec.source.protocol) then
254 if version ~= "scm" then 288 if version ~= "scm" then
255 rockspec.source.tag = "v" .. version 289 rockspec.source.tag = flags["tag"] or "v" .. version
256 end 290 end
257 end 291 end
258 rockspec.source.dir = nil 292 rockspec.source.dir = nil
@@ -290,7 +324,11 @@ function run(...)
290 324
291 detect_description(rockspec) 325 detect_description(rockspec)
292 326
293 show_license(rockspec) 327 local is_mit = show_license(rockspec)
328
329 if is_mit and not flags["license"] then
330 rockspec.description.license = "MIT"
331 end
294 332
295 fill_as_builtin(rockspec, libs) 333 fill_as_builtin(rockspec, libs)
296 334