diff options
| author | Hisham Muhammad <hisham@gobolinux.org> | 2014-01-04 00:47:36 -0200 |
|---|---|---|
| committer | Hisham Muhammad <hisham@gobolinux.org> | 2014-01-04 00:47:36 -0200 |
| commit | 16c2c973b0a1e6c8e94a4ba904c122cfd355f082 (patch) | |
| tree | fa421dd526f309054f3726e3073401411930976a /src | |
| parent | f4b271c51c1c05db92a9a12ca39c2ec5208937e0 (diff) | |
| download | luarocks-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. :)
Diffstat (limited to 'src')
| -rw-r--r-- | src/luarocks/write_rockspec.lua | 66 |
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 | ||
| 39 | local function open_file(name) | ||
| 40 | return io.open(dir.path(fs.current_dir(), name), "r") | ||
| 41 | end | ||
| 38 | 42 | ||
| 39 | local function get_url(rockspec) | 43 | local 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) | |||
| 79 | end | 83 | end |
| 80 | 84 | ||
| 81 | local function detect_description(rockspec) | 85 | local 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 |
| 101 | end | 104 | end |
| 102 | 105 | ||
| 106 | local 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 | ||
| 116 | end | ||
| 117 | |||
| 103 | local function show_license(rockspec) | 118 | local 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 | ||
| 112 | end | 128 | end |
| 113 | 129 | ||
| 114 | local function get_cmod_name(file) | 130 | local 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 | ||
