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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
--!The Automatic Cross-platform Build Tool
--
-- XMake is free software; you can redistribute it and/or modify
-- it under the terms of the GNU Lesser General Public License as published by
-- the Free Software Foundation; either version 2.1 of the License, or
-- (at your option) any later version.
--
-- XMake is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU Lesser General Public License for more details.
--
-- You should have received a copy of the GNU Lesser General Public License
-- along with XMake;
-- If not, see <a href="http://www.gnu.org/licenses/"> http://www.gnu.org/licenses/</a>
--
-- Copyright (C) 2009 - 2015, ruki All rights reserved.
--
-- @author ruki
-- @file _create.lua
--
-- define module: _create
local _create = _create or {}
-- load modules
local utils = require("base/utils")
local template = require("base/template")
-- need access to the given file?
function _create.need(name)
-- no accessors
return false
end
-- done
function _create.done()
-- the options
local options = xmake._OPTIONS
assert(options)
-- the target name
local targetname = options.target or path.basename(xmake._PROJECT_DIR) or "demo"
-- trace
utils.printf("create %s ...", targetname)
-- the language
local language = options.language
if not language then
utils.error("no language!")
return false
end
-- the template id
local templateid = tonumber(options.template)
if type(templateid) ~= "number" then
utils.error("invalid template id: %s!", options.template)
return false
end
-- load all templates for the given language
local templates = template.loadall(language)
-- load the template module
local module = nil
if templates then module = templates[templateid] end
if not module then
utils.error("invalid template id: %s!", options.template)
return false
end
-- enter the template directory
if not module._DIRECTORY or not os.cd(module._DIRECTORY) then
-- error
utils.error("not found template id: %s!", options.template)
return false
end
-- check the template project
if not os.isdir("project") then
-- errors
utils.error("the template project not exists!")
return false
end
-- ensure the project directory
if not os.isdir(xmake._PROJECT_DIR) then
os.mkdir(xmake._PROJECT_DIR)
end
-- copy the project files
if not os.cp("project/*", xmake._PROJECT_DIR) then
-- errors
utils.error("copy files failed!")
return false
end
-- done the template files
if not module.done(targetname, xmake._PROJECT_DIR) then
utils.error("update the template failed!")
return false
end
-- trace
utils.printf("create %s ok!", targetname)
-- ok
return true
end
-- the menu
function _create.menu()
return {
-- usage
usage = "xmake create [options] [target]"
-- description
, description = "Create a new project."
-- options
, options =
{
{'n', "name", "kv", nil, "The project name." }
, {'f', "file", "kv", "xmake.lua", "Create a given xmake.lua file." }
, {'P', "project", "kv", nil, "Create from the given project directory."
, "Search priority:"
, " 1. The Given Command Argument"
, " 2. The Envirnoment Variable: XMAKE_PROJECT_DIR"
, " 3. The Current Directory" }
, {'l', "language", "kv", "c", "The project language"
, function ()
local descriptions = {}
local languages = template.languages()
for _, language in ipairs(languages) do
table.insert(descriptions, " - " .. language)
end
return descriptions
end }
, {'t', "template", "kv", "1", "Select the project template id of the given language."
, function ()
local descriptions = {}
local languages = template.languages()
for _, language in ipairs(languages) do
table.insert(descriptions, string.format(" - language: %s", language))
local templates = template.loadall(language)
if templates then
for i, template in ipairs(templates) do
table.insert(descriptions, string.format(" %d. %s", i, utils.ifelse(template.description, template.description, "The Unknown Project")))
end
end
end
return descriptions
end }
, {}
, {'v', "verbose", "k", nil, "Print lots of verbose information." }
, {nil, "version", "k", nil, "Print the version number and exit." }
, {'h', "help", "k", nil, "Print this help message and exit." }
, {}
, {nil, "target", "v", nil, "Create the given target."
, "Uses the project name as target if not exists." }
}
}
end
-- return module: _create
return _create
|