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
|
--!The Make-like Build Utility based on Lua
--
-- 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 vs200x_solution.lua
--
-- imports
import("core.project.project")
import("vsfile")
-- make header
function _make_header(slnfile, vsinfo)
slnfile:print("Microsoft Visual Studio Solution File, Format Version %s.00", vsinfo.solution_version)
slnfile:print("# Visual Studio %s", vsinfo.vstudio_version)
end
-- make projects
function _make_projects(slnfile, vsinfo)
-- the vstudio tool uuid for vc project
local vctool = "8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942"
-- make all targets
for targetname, target in pairs(project.targets()) do
-- the project suffix
local suffix = "vcproj"
if tonumber(vsinfo.vstudio_version) >= 2010 then
suffix = "vcxproj"
end
-- enter project
slnfile:enter("Project(\"{%s}\") = \"%s\", \"%s\\%s.%s\", \"{%s}\"", vctool, targetname, targetname, targetname, suffix, os.uuid(targetname))
-- add dependences
for _, dep in ipairs(target:get("deps")) do
slnfile:enter("ProjectSection(ProjectDependencies) = postProject")
slnfile:print("{%s} = {%s}", os.uuid(dep), os.uuid(dep))
slnfile:leave("EndProjectSection")
end
-- leave project
slnfile:leave("EndProject")
end
end
-- make global
function _make_global(slnfile, vsinfo)
-- enter global
slnfile:enter("Global")
-- add solution configuration platforms
slnfile:enter("GlobalSection(SolutionConfigurationPlatforms) = preSolution")
slnfile:print("$(mode)|Win32 = $(mode)|Win32")
slnfile:leave("EndGlobalSection")
-- add project configuration platforms
slnfile:enter("GlobalSection(ProjectConfigurationPlatforms) = postSolution")
for targetname, _ in pairs(project.targets()) do
slnfile:print("{%s}.$(mode)|Win32.ActiveCfg = $(mode)|Win32", os.uuid(targetname))
slnfile:print("{%s}.$(mode)|Win32.Build.0 = $(mode)|Win32", os.uuid(targetname))
end
slnfile:leave("EndGlobalSection")
-- add solution properties
slnfile:enter("GlobalSection(SolutionProperties) = preSolution")
slnfile:print("HideSolutionNode = FALSE")
slnfile:leave("EndGlobalSection")
-- leave global
slnfile:leave("EndGlobal")
end
-- make solution
function make(vsinfo)
-- init solution name
vsinfo.solution_name = project.name() or "vs" .. vsinfo.vstudio_version
-- open solution file
local slnfile = vsfile.open(path.join(vsinfo.solution_dir, vsinfo.solution_name .. ".sln"), "w")
-- init indent character
vsfile.indentchar('\t')
-- make header
_make_header(slnfile, vsinfo)
-- make projects
_make_projects(slnfile, vsinfo)
-- make global
_make_global(slnfile, vsinfo)
-- exit solution file
slnfile:close()
end
|