summaryrefslogtreecommitdiff
path: root/xmake/scripts/base/project.lua
blob: a85941b78a00923ace5b77bbb8f04e72841b8c38 (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
--!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        project.lua
--

-- define module: config
local project = project or {}

-- load modules
local utils         = require("base/utils")
local config        = require("base/config")
local preprocessor  = require("base/preprocessor")

-- preprocess value
function _preprocess(value)

    -- the value is string?
    if type(value) == "string" then

        -- replace $(variable)
        value = value:gsub("%$%((.*)%)",    function (v) 
                                                if v == "buildir" then
                                                    local target = config.getarget()
                                                    return utils.ifelse(target, target.output, nil);
                                                elseif v == "projectdir" then
                                                    return xmake._OPTIONS.project
                                                end
                                                return v 
                                            end)
    end

    -- ok
    return value
end

-- load xproj
function project.loadxproj(file)

    -- check
    assert(file)

    -- init configures
    local configures = {   "kind"
                        ,   "deps"
                        ,   "files"
                        ,   "links" 
                        ,   "mflags" 
                        ,   "headers" 
                        ,   "headerdir" 
                        ,   "targetdir" 
                        ,   "objectdir" 
                        ,   "linkdirs" 
                        ,   "includedirs" 
                        ,   "cflags" 
                        ,   "cxxflags" 
                        ,   "ldflags" 
                        ,   "mxflags" 
                        ,   "defines"} 

    -- load and execute the xmake.xproj
    local configs, errors = preprocessor.loadfile(file, "project", configures, {"target", "platforms"})
    if configs then
        -- ok
        project._CONFIGS = configs
    elseif errors then
        -- error
        return errors
    else
        -- error
        return string.format("load %s failed!", file)
    end
end

-- dump configs
function project.dump()
    
    -- check
    assert(project._CONFIGS)

    -- dump
    if xmake._OPTIONS.verbose then
        utils.dump(project._CONFIGS, "_PARENT")
    end
   
end

-- return module: project
return project