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
|
--!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 windows.lua
--
-- define module: windows
local windows = windows or {}
-- load modules
local os = require("base/os")
local config = require("base/config")
-- init host
windows._HOST = "windows"
-- init os
windows._OS = "windows"
-- init architectures
windows._ARCHS = {"i386", "x86_64"}
-- enter the given environment
function windows._enter(name)
-- check
assert(name)
-- get the pathes for the vs environment
local old = nil
local new = config.get("__vsenv_" .. name)
if new then
-- get the current pathes
old = os.getenv(name) or ""
-- append the current pathes
new = new .. ";" .. old
-- update the pathes for the environment
os.setenv(name, new)
end
-- return the previous environment
return old;
end
-- leave the given environment
function windows._leave(name, old)
-- check
assert(name)
-- restore the previous environment
if old then
os.setenv(name, old)
end
end
-- enter environment
function windows.enter()
-- enter the vs environment
windows._pathes = windows._enter("path")
windows._libs = windows._enter("lib")
windows._includes = windows._enter("include")
windows._libpathes = windows._enter("libpath")
end
-- leave environment
function windows.leave()
-- leave the vs environment
windows._leave("path", windows._pathes)
windows._leave("lib", windows._libs)
windows._leave("include", windows._includes)
windows._leave("libpath", windows._libpathes)
end
-- make configure
function windows.make(configs)
-- init the file formats
configs.formats = {}
configs.formats.static = {"", ".lib"}
configs.formats.object = {"", ".obj"}
configs.formats.shared = {"", ".dll"}
configs.formats.binary = {"", ".exe"}
-- init the toolchains
configs.tools = {}
configs.tools.make = config.get("make")
configs.tools.cc = config.get("cc")
configs.tools.cxx = config.get("cxx")
configs.tools.ld = config.get("ld")
configs.tools.ar = config.get("ar")
configs.tools.sh = config.get("sh")
end
-- get the option menu for action: xmake config or global
function windows.menu(action)
-- init config option menu
windows._MENU_CONFIG = windows._MENU_CONFIG or
{ {}
, {nil, "vs", "kv", "auto", "The Microsoft Visual Studio" }
, }
-- init global option menu
windows._MENU_GLOBAL = windows._MENU_GLOBAL or
{ {}
, {nil, "vs", "kv", "auto", "The Microsoft Visual Studio" }
, }
-- get the option menu
if action == "config" then
return windows._MENU_CONFIG
elseif action == "global" then
return windows._MENU_GLOBAL
end
end
-- return module: windows
return windows
|