summaryrefslogtreecommitdiff
path: root/xmake/plugins/show/info/basic.lua
blob: 8a29dc2c0e973dc502ac2461a845edf95e494dca (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
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
--!A cross-platform build utility based on Lua
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
--     http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-- Copyright (C) 2015-present, Xmake Open Source Community.
--
-- @author      ruki
-- @file        basic.lua
--

-- imports
import("core.base.option")
import("core.base.global")
import("core.base.json")
import("core.project.config")
import("core.project.project")
import("core.package.package")

function _show_xmake_info(opt, result)
    local json_enabled = opt and opt.json
    local info = {
        version = tostring(xmake.version()),
        host = {os = os.host(), arch = os.arch()},
        programdir = xmake.programdir(),
        programfile = xmake.programfile(),
        globaldir = global.directory(),
        tmpdir = os.tmpdir(),
        workingdir = os.workingdir(),
        packagedir = package.installdir(),
        packagedir_cache = package.cachedir()
    }
    if json_enabled then
        result = result or {}
        result.xmake = info
    else
        print("The information of xmake:")
        cprint("    ${color.dump.string}version${clear}: %s", info.version)
        cprint("    ${color.dump.string}host${clear}: %s/%s", info.host.os, info.host.arch)
        cprint("    ${color.dump.string}programdir${clear}: %s", info.programdir)
        cprint("    ${color.dump.string}programfile${clear}: %s", info.programfile)
        cprint("    ${color.dump.string}globaldir${clear}: %s", info.globaldir)
        cprint("    ${color.dump.string}tmpdir${clear}: %s", info.tmpdir)
        cprint("    ${color.dump.string}workingdir${clear}: %s", info.workingdir)
        cprint("    ${color.dump.string}packagedir${clear}: %s", info.packagedir)
        cprint("    ${color.dump.string}packagedir(cache)${clear}: %s", info.packagedir_cache)
        print("")
    end
    return result
end

function _show_project_info(opt, result)
    local json_enabled = opt and opt.json
    local projectfile = os.projectfile()
    if not os.isfile(projectfile) then
        return result
    end

    local info = {
        configdir = config.directory(),
        projectdir = os.projectdir(),
        projectfile = projectfile
    }
    local name = project.name()
    if name then
        info.name = name
    end
    local project_version = project.version()
    if project_version ~= nil then
        info.version = tostring(project_version)
    end
    local plat = config.plat()
    if plat then
        info.plat = plat
    end
    local arch = config.arch()
    if arch then
        info.arch = arch
    end
    local mode = config.mode()
    if mode then
        info.mode = mode
    end
    local builddir = config.builddir()
    if builddir then
        info.builddir = builddir
    end

    if json_enabled then
        result = result or {}
        result.project = info
    else
        print("The information of project: %s", info.name or "")
        if info.version then
            cprint("    ${color.dump.string}version${clear}: %s", info.version)
        end
        if info.plat then
            cprint("    ${color.dump.string}plat${clear}: %s", info.plat)
        end
        if info.arch then
            cprint("    ${color.dump.string}arch${clear}: %s", info.arch)
        end
        if info.mode then
            cprint("    ${color.dump.string}mode${clear}: %s", info.mode)
        end
        if info.builddir then
            cprint("    ${color.dump.string}builddir${clear}: %s", info.builddir)
        end
        cprint("    ${color.dump.string}configdir${clear}: %s", info.configdir)
        cprint("    ${color.dump.string}projectdir${clear}: %s", info.projectdir)
        cprint("    ${color.dump.string}projectfile${clear}: %s", info.projectfile)
        print("")
    end
    return result
end

-- show basic info
function main()

    config.load()

    -- support --format=json, with --json/--pretty backward compatibility
    local format = option.get("format") or "plain"
    if format == "plain" and option.get("json") then
        format = "json"
    end
    local opt = {
        json = format == "json",
        pretty = option.get("pretty")
    }
    local result = opt.json and {} or nil

    result = _show_xmake_info(opt, result)
    result = _show_project_info(opt, result)

    if opt.json then
        local json_opt = {pretty = true, orderkeys = true}
        if option.get("json") and not option.get("pretty") then
            json_opt = nil
        end
        print(json.encode(result or {}, json_opt))
    end
end