summaryrefslogtreecommitdiff
path: root/xmake/core/action/create.lua
blob: eb420959e6877fc87e7b0078c2363958f64aa6d2 (plain)
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
--!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) 2015 - 2016, ruki All rights reserved.
--
-- @author      ruki
-- @file        create.lua
--

-- define module: action_create
local action_create = action_create or {}

-- load modules
local path      = require("base/path")
local utils     = require("base/utils")
local option    = require("base/option")
local template  = require("base/template")
    
-- need access to the given file?
function action_create.need(name)

    -- no accessors
    return false
end

-- done 
function action_create.done()

    -- the options
    local options = option.options()
    assert(options)

    -- the target name
    local targetname = options.target or options.name or path.basename(xmake._PROJECT_DIR) or "demo"

    -- trace
    utils.printf("create %s ...", targetname)

    -- create project from template
    local ok, errors = template.create(options.language, options.template, targetname)
    if not ok then
        utils.error(errors)
        return false
    end

    -- trace
    utils.printf("create %s ok!", targetname)

    -- ok
    return true
end

-- the menu
function action_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.templates(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: action_create
return action_create