diff options
| author | ruki <[email protected]> | 2016-08-07 12:55:29 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2016-08-07 12:55:29 +0800 |
| commit | 8aadd86d566ef6e0c9d1e8ed33d46647c71a8edf (patch) | |
| tree | d6465a9f9a9368fa5715f50642d83f7a5ebcdf73 /xmake/plugins | |
| parent | d9f5c18a8f80dad25589f8fe9992ecfcc469e75d (diff) | |
make vs200x solution file
Diffstat (limited to 'xmake/plugins')
| -rwxr-xr-x | xmake/plugins/project/vstudio/impl/vs200x.lua | 39 | ||||
| -rwxr-xr-x | xmake/plugins/project/vstudio/impl/vs200x_solution.lua | 105 | ||||
| -rwxr-xr-x | xmake/plugins/project/vstudio/vs2005.lua | 9 | ||||
| -rwxr-xr-x | xmake/plugins/project/vstudio/vs2008.lua | 9 |
4 files changed, 126 insertions, 36 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 diff --git a/xmake/plugins/project/vstudio/vs2005.lua b/xmake/plugins/project/vstudio/vs2005.lua index da87a4454..6a537ece7 100755 --- a/xmake/plugins/project/vstudio/vs2005.lua +++ b/xmake/plugins/project/vstudio/vs2005.lua @@ -26,6 +26,13 @@ import("impl.vs200x") -- make function make(outputdir) + -- init vstudio info + local vsinfo = + { + vstudio_version = "2005" + , solution_version = "9" + } + -- make project - vs200x.make(outputdir) + vs200x.make(outputdir, vsinfo) end diff --git a/xmake/plugins/project/vstudio/vs2008.lua b/xmake/plugins/project/vstudio/vs2008.lua index 289581148..2a8f93d2d 100755 --- a/xmake/plugins/project/vstudio/vs2008.lua +++ b/xmake/plugins/project/vstudio/vs2008.lua @@ -26,6 +26,13 @@ import("impl.vs200x") -- make function make(outputdir) + -- init vstudio info + local vsinfo = + { + vstudio_version = "2008" + , solution_version = "10" + } + -- make project - vs200x.make(outputdir) + vs200x.make(outputdir, vsinfo) end |
