summaryrefslogtreecommitdiff
path: root/xmake/plugins/project/vstudio/impl
diff options
context:
space:
mode:
authorruki <[email protected]>2016-08-07 12:55:29 +0800
committerruki <[email protected]>2016-08-07 12:55:29 +0800
commit8aadd86d566ef6e0c9d1e8ed33d46647c71a8edf (patch)
treed6465a9f9a9368fa5715f50642d83f7a5ebcdf73 /xmake/plugins/project/vstudio/impl
parentd9f5c18a8f80dad25589f8fe9992ecfcc469e75d (diff)
make vs200x solution file
Diffstat (limited to 'xmake/plugins/project/vstudio/impl')
-rwxr-xr-xxmake/plugins/project/vstudio/impl/vs200x.lua39
-rwxr-xr-xxmake/plugins/project/vstudio/impl/vs200x_solution.lua105
2 files changed, 110 insertions, 34 deletions
diff --git a/xmake/plugins/project/vstudio/impl/vs200x.lua b/xmake/plugins/project/vstudio/impl/vs200x.lua
index 63e236062..ebe28baaf 100755
--- a/xmake/plugins/project/vstudio/impl/vs200x.lua
+++ b/xmake/plugins/project/vstudio/impl/vs200x.lua
@@ -22,45 +22,16 @@
-- imports
import("core.project.project")
-import("vsfile")
+import("vs200x_solution")
--- make
-function make(outputdir)
+-- make vstudio project
+function make(outputdir, vsinfo)
-- enter project directory
local olddir = os.cd(project.directory())
- --[[
- local slnfile = vsfile.open(path.join(outputdir, "vs2008.sln"), "w")
- if slnfile then
-
- slnfile:print("Microsoft Visual Studio Solution File, Format Version 10.00")
- slnfile:print("# Visual Studio 2008")
- slnfile:enter("Project")
- slnfile:enter("ProjectSection(ProjectDependencies) = postProject")
- slnfile:print("{ED657C29-5162-4124-AF9D-0F5889E7868A} = {ED657C29-5162-4124-AF9D-0F5889E7868A}")
- slnfile:leave("EndProjectSection")
- slnfile:leave("EndProject")
- slnfile:enter("Project")
- slnfile:leave("EndProject")
- slnfile:enter("Global")
- slnfile:enter("ProjectSection(ProjectDependencies) = postProject")
- slnfile:enter("ProjectSection(ProjectDependencies) = postProject")
- slnfile:print("1111")
- slnfile:print("1111")
- slnfile:print("1111")
- slnfile:print("1111")
- slnfile:leave("EndProjectSection")
- slnfile:leave("EndProjectSection")
-
- slnfile:enter("ProjectSection(ProjectDependencies) = postProject")
- slnfile:print("1111")
- slnfile:leave("EndProjectSection")
- slnfile:leave("EndGlobal")
-
- slnfile:close()
- end
- ]]
+ -- make solution
+ vs200x_solution.make(outputdir, vsinfo)
-- leave project directory
os.cd(olddir)
diff --git a/xmake/plugins/project/vstudio/impl/vs200x_solution.lua b/xmake/plugins/project/vstudio/impl/vs200x_solution.lua
new file mode 100755
index 000000000..c0dccebd1
--- /dev/null
+++ b/xmake/plugins/project/vstudio/impl/vs200x_solution.lua
@@ -0,0 +1,105 @@
+--!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
+
+ -- enter project
+ slnfile:enter("Project(\"{%s}\") = \"%s\", \"%s\\%s.vcproj\", \"{%s}\"", vctool, targetname, targetname, targetname, 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(outputdir, vsinfo)
+
+ -- init solution name
+ vsinfo.solution_name = project.name() or "vs" .. vsinfo.vstudio_version
+
+ -- open solution file
+ local slnfile = vsfile.open(format("%s/vs%s/%s.sln", outputdir, vsinfo.vstudio_version, vsinfo.solution_name), "w")
+
+ -- make header
+ _make_header(slnfile, vsinfo)
+
+ -- make projects
+ _make_projects(slnfile, vsinfo)
+
+ -- make global
+ _make_global(slnfile, vsinfo)
+
+ -- exit solution file
+ slnfile:close()
+end