1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
local init = {}
local cfg = require("luarocks.core.cfg")
local fs = require("luarocks.fs")
local path = require("luarocks.path")
local deps = require("luarocks.deps")
local dir = require("luarocks.dir")
local util = require("luarocks.util")
local write_rockspec = require("luarocks.cmd.write_rockspec")
init.help_summary = "Initialize a directory for a Lua project using LuaRocks."
init.help_arguments = "[<name> [<version>]]"
init.help = [[
<name> is the project name.
<version> is an optional project version.
--license="<string>" A license string, such as "MIT/X11" or "GNU GPL v3".
--summary="<txt>" A short one-line description summary.
--detailed="<txt>" A longer description string.
--homepage=<url> Project homepage.
--lua-versions=<ver> Supported Lua versions. Accepted values are "5.1", "5.2",
"5.3", "5.1,5.2", "5.2,5.3", or "5.1,5.2,5.3".
--rockspec-format=<ver> Rockspec format version, such as "1.0" or "1.1".
--lib=<lib>[,<lib>] A comma-separated list of libraries that C files need to
link to.
]]
local function write_gitignore()
local gitignore = ""
local fd = io.open(".gitignore", "r")
if fd then
gitignore = fd:read("*a")
fd:close()
gitignore = "\n" .. gitignore .. "\n"
end
fd = io.open(".gitignore", gitignore and "a" or "w")
for _, entry in ipairs({"/lua", "/lua_modules"}) do
if not gitignore:find("\n"..entry.."\n", 1, true) then
fd:write(entry.."\n")
end
end
fd:close()
end
--- Driver function for "init" command.
-- @return boolean: True if succeeded, nil on errors.
function init.command(flags, name, version)
local pwd = fs.current_dir()
if not name then
name = dir.base_name(pwd)
end
util.printout("Initializing project " .. name .. " ...")
local has_rockspec = false
for file in fs.dir() do
if file:match("%.rockspec$") then
has_rockspec = true
break
end
end
if not has_rockspec then
local ok, err = write_rockspec.command(flags, name, version or "dev", pwd)
if not ok then
util.printerr(err)
end
end
util.printout("Checking your Lua installation ...")
local ok, err = deps.check_lua(cfg.variables)
if not ok then
util.warning(err)
end
util.printout("Adding entries to .gitignore ...")
write_gitignore()
util.printout("Preparing ./.luarocks/ ...")
fs.make_dir(".luarocks")
local config_file = ".luarocks/config-" .. cfg.lua_version .. ".lua"
if not fs.exists(config_file) then
local fd = io.open(config_file, "w")
fd:write("-- LuaRocks configuration for use with Lua " .. cfg.lua_version .. "\n")
if cfg.lua_interpreter then
fd:write(("lua_interpreter = %q\n"):format(cfg.lua_interpreter))
end
if cfg.luajit_version then
fd:write(("luajit_version = %q\n"):format(cfg.luajit_version))
end
fd:write("variables = {\n")
local varnames = {
"LUA_DIR",
"LUA_INCDIR",
"LUA_LIBDIR",
"LUA_BINDIR",
"LUA_INTERPRETER",
}
for _, varname in ipairs(varnames) do
if cfg.variables[varname] then
fd:write((" %s = %q,\n"):format(varname, cfg.variables[varname]))
end
end
fd:write("}\n")
fd:close()
else
util.printout(config_file .. " already exists. Not overwriting it!")
end
util.printout("Preparing ./lua_modules/ ...")
fs.make_dir("lua_modules/lib/luarocks/rocks-" .. cfg.lua_version)
local tree = dir.path(pwd, "lua_modules")
local ext = cfg.wrapper_suffix
local luarocks_wrapper = "./luarocks" .. ext
if not fs.exists(luarocks_wrapper) then
util.printout("Preparing " .. luarocks_wrapper .. " ...")
fs.wrap_script(arg[0], "luarocks", "none", nil, nil, "--project-tree", tree)
else
util.printout(luarocks_wrapper .. " already exists. Not overwriting it!")
end
local lua_wrapper = "./lua" .. ext
if not fs.exists(lua_wrapper) then
util.printout("Preparing " .. lua_wrapper .. " ...")
path.use_tree(tree)
fs.wrap_script(nil, "lua", "all")
else
util.printout(lua_wrapper .. " already exists. Not overwriting it!")
end
return true
end
return init
|