diff options
-rw-r--r-- | .hgignore | 2 | ||||
-rw-r--r-- | CHANGES.txt | 1 | ||||
-rwxr-xr-x[-rw-r--r--] | samples/project/premake4 | 0 | ||||
-rw-r--r-- | src/_manifest.lua | 3 | ||||
-rw-r--r-- | src/actions/codeblocks/codeblocks_cbp.lua | 5 | ||||
-rw-r--r-- | src/actions/codelite/codelite_project.lua | 5 | ||||
-rw-r--r-- | src/actions/vstudio/_vstudio.lua | 12 | ||||
-rw-r--r-- | src/actions/vstudio/vs200x_vcproj.lua | 37 | ||||
-rw-r--r-- | src/actions/vstudio/vs200x_vcproj_user.lua | 61 | ||||
-rw-r--r-- | src/actions/vstudio/vs2010_vcxproxj.lua | 20 | ||||
-rw-r--r-- | src/base/api.lua | 14 | ||||
-rw-r--r-- | tests/actions/vstudio/vc200x/debugdir.lua | 60 | ||||
-rw-r--r-- | tests/actions/vstudio/vc200x/header.lua | 55 | ||||
-rwxr-xr-x | tests/actions/vstudio/vc2010/debugdir.lua | 55 | ||||
-rw-r--r-- | tests/premake4.lua | 7 |
15 files changed, 314 insertions, 23 deletions
@@ -2,6 +2,8 @@ syntax: glob .DS_Store +*.orig + build bin obj diff --git a/CHANGES.txt b/CHANGES.txt index a4fa841..b8b13b7 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -3,6 +3,7 @@ ------- * Feature 3100379: C# support for Visual Studio 2010 +* Feature 1657833: Set working directory for debugging * Added support for Haiku OS (Yuriy O'Donnell) * Patch 2963313: Enable setting .NET framework version (Justen Hyde) * Switched PS3 builds from GCC to SNC diff --git a/samples/project/premake4 b/samples/project/premake4 index 872817e..872817e 100644..100755 --- a/samples/project/premake4 +++ b/samples/project/premake4 diff --git a/src/_manifest.lua b/src/_manifest.lua index dbfe02e..18cec47 100644 --- a/src/_manifest.lua +++ b/src/_manifest.lua @@ -1,7 +1,7 @@ -- -- _manifest.lua -- Manage the list of built-in Premake scripts. --- Copyright (c) 2002-2010 Jason Perkins and the Premake project +-- Copyright (c) 2002-2011 Jason Perkins and the Premake project -- -- The master list of built-in scripts. Order is important! If you want to @@ -55,6 +55,7 @@ "actions/vstudio/vs2002_csproj.lua", "actions/vstudio/vs2002_csproj_user.lua", "actions/vstudio/vs200x_vcproj.lua", + "actions/vstudio/vs200x_vcproj_user.lua", "actions/vstudio/vs2003_solution.lua", "actions/vstudio/vs2005_solution.lua", "actions/vstudio/vs2005_csproj.lua", diff --git a/src/actions/codeblocks/codeblocks_cbp.lua b/src/actions/codeblocks/codeblocks_cbp.lua index a4d1e0f..00d494d 100644 --- a/src/actions/codeblocks/codeblocks_cbp.lua +++ b/src/actions/codeblocks/codeblocks_cbp.lua @@ -33,6 +33,11 @@ _p(3,'<Target title="%s">', premake.esc(cfg.longname)) _p(4,'<Option output="%s" prefix_auto="0" extension_auto="0" />', premake.esc(cfg.buildtarget.fullpath)) + + if cfg.debugdir then + _p(4,'<Option working_dir="%s" />', premake.esc(cfg.debugdir)) + end + _p(4,'<Option object_output="%s" />', premake.esc(cfg.objectsdir)) -- identify the type of binary diff --git a/src/actions/codelite/codelite_project.lua b/src/actions/codelite/codelite_project.lua index 76777e4..b662b59 100644 --- a/src/actions/codelite/codelite_project.lua +++ b/src/actions/codelite/codelite_project.lua @@ -35,9 +35,10 @@ local fname = premake.esc(cfg.buildtarget.fullpath) local objdir = premake.esc(cfg.objectsdir) local runcmd = cfg.buildtarget.name - local rundir = cfg.buildtarget.directory + local rundir = cfg.debugdir or cfg.buildtarget.directory + local runargs = table.concat(cfg.debugargs, " ") local pause = iif(cfg.kind == "WindowedApp", "no", "yes") - _p(' <General OutputFile="%s" IntermediateDirectory="%s" Command="./%s" CommandArguments="" WorkingDirectory="%s" PauseExecWhenProcTerminates="%s"/>', fname, objdir, runcmd, rundir, pause) + _p(' <General OutputFile="%s" IntermediateDirectory="%s" Command="./%s" CommandArguments="%s" WorkingDirectory="%s" PauseExecWhenProcTerminates="%s"/>', fname, objdir, runcmd, runargs, rundir, pause) -- begin compiler block -- local flags = premake.esc(table.join(premake.gcc.getcflags(cfg), premake.gcc.getcxxflags(cfg), cfg.buildoptions)) diff --git a/src/actions/vstudio/_vstudio.lua b/src/actions/vstudio/_vstudio.lua index 4117fa4..c8c2a2f 100644 --- a/src/actions/vstudio/_vstudio.lua +++ b/src/actions/vstudio/_vstudio.lua @@ -222,6 +222,7 @@ premake.generate(prj, "%%.csproj.user", vstudio.cs2002.generate_user) else premake.generate(prj, "%%.vcproj", vstudio.vc200x.generate) + premake.generate(prj, "%%.vcproj.user", vstudio.vc200x.generate_user) end end, @@ -232,7 +233,7 @@ -- --- Register Visual Studio 2002 +-- Register Visual Studio 2003 -- newaction { @@ -260,6 +261,7 @@ premake.generate(prj, "%%.csproj.user", vstudio.cs2002.generate_user) else premake.generate(prj, "%%.vcproj", vstudio.vc200x.generate) + premake.generate(prj, "%%.vcproj.user", vstudio.vc200x.generate_user) end end, @@ -270,7 +272,7 @@ -- --- Register Visual Studio 2002 +-- Register Visual Studio 2005 -- newaction { @@ -298,6 +300,7 @@ premake.generate(prj, "%%.csproj.user", vstudio.cs2005.generate_user) else premake.generate(prj, "%%.vcproj", vstudio.vc200x.generate) + premake.generate(prj, "%%.vcproj.user", vstudio.vc200x.generate_user) end end, @@ -308,7 +311,7 @@ -- --- Register Visual Studio 2002 +-- Register Visual Studio 2008 -- newaction { @@ -336,6 +339,7 @@ premake.generate(prj, "%%.csproj.user", vstudio.cs2005.generate_user) else premake.generate(prj, "%%.vcproj", vstudio.vc200x.generate) + premake.generate(prj, "%%.vcproj.user", vstudio.vc200x.generate_user) end end, @@ -346,7 +350,7 @@ -- --- Register Visual Studio 2002 +-- Register Visual Studio 2010 -- newaction diff --git a/src/actions/vstudio/vs200x_vcproj.lua b/src/actions/vstudio/vs200x_vcproj.lua index 2f76bf0..a9ddee5 100644 --- a/src/actions/vstudio/vs200x_vcproj.lua +++ b/src/actions/vstudio/vs200x_vcproj.lua @@ -49,6 +49,28 @@ -- +-- Write the project file header +-- + + function vc200x.header(element) + io.eol = "\r\n" + _p('<?xml version="1.0" encoding="Windows-1252"?>') + _p('<%s', element) + _p(1,'ProjectType="Visual C++"') + + if _ACTION == "vs2002" then + _p(1,'Version="7.00"') + elseif _ACTION == "vs2003" then + _p(1,'Version="7.10"') + elseif _ACTION == "vs2005" then + _p(1,'Version="8.00"') + elseif _ACTION == "vs2008" then + _p(1,'Version="9.00"') + end + end + + +-- -- Write out the <Configuration> element. -- @@ -664,21 +686,8 @@ -- function vc200x.generate(prj) - io.eol = "\r\n" - _p('<?xml version="1.0" encoding="Windows-1252"?>') + vc200x.header('VisualStudioProject') - -- Write opening project block - _p('<VisualStudioProject') - _p(1,'ProjectType="Visual C++"') - if _ACTION == "vs2002" then - _p(1,'Version="7.00"') - elseif _ACTION == "vs2003" then - _p(1,'Version="7.10"') - elseif _ACTION == "vs2005" then - _p(1,'Version="8.00"') - elseif _ACTION == "vs2008" then - _p(1,'Version="9.00"') - end _p(1,'Name="%s"', premake.esc(prj.name)) _p(1,'ProjectGUID="{%s}"', prj.uuid) if _ACTION > "vs2003" then diff --git a/src/actions/vstudio/vs200x_vcproj_user.lua b/src/actions/vstudio/vs200x_vcproj_user.lua new file mode 100644 index 0000000..7a51a79 --- /dev/null +++ b/src/actions/vstudio/vs200x_vcproj_user.lua @@ -0,0 +1,61 @@ +-- +-- vs200x_vcproj_user.lua +-- Generate a Visual Studio 2002-2008 C/C++ project .user file +-- Copyright (c) 2011 Jason Perkins and the Premake project +-- + + +-- +-- Set up namespaces +-- + + local vc200x = premake.vstudio.vc200x + + +-- +-- Generate the .vcproj.user file +-- + + function vc200x.generate_user(prj) + vc200x.header('VisualStudioUserFile') + + _p(1,'ShowAllFiles="false"') + _p(1,'>') + _p(1,'<Configurations>') + + for _, cfginfo in ipairs(prj.solution.vstudio_configs) do + if cfginfo.isreal then + local cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform) + + _p(2,'<Configuration') + _p(3,'Name="%s"', premake.esc(cfginfo.name)) + _p(3,'>') + + vc200x.debugdir(cfg) + + _p(2,'</Configuration>') + end + end + + _p(1,'</Configurations>') + _p('</VisualStudioUserFile>') + end + + +-- +-- Output the debug settings element +-- + + function vc200x.debugdir(cfg) + _p(3,'<DebugSettings') + + if cfg.debugdir then + _p(4,'WorkingDirectory="%s"', path.translate(cfg.debugdir, '\\')) + end + + if #cfg.debugargs > 0 then + _p(4,'CommandArguments="%s"', table.concat(cfg.debugargs, " ")) + end + + _p(3,'/>') + end diff --git a/src/actions/vstudio/vs2010_vcxproxj.lua b/src/actions/vstudio/vs2010_vcxproxj.lua index 1c9d0b3..df91d06 100644 --- a/src/actions/vstudio/vs2010_vcxproxj.lua +++ b/src/actions/vstudio/vs2010_vcxproxj.lua @@ -676,9 +676,29 @@ end +-- +-- Generate the .vcxproj.user file +-- + + function vc2010.debugdir(cfg) + if cfg.debugdir then + _p(' <LocalDebuggerWorkingDirectory>%s</LocalDebuggerWorkingDirectory>', path.translate(cfg.debugdir, '\\')) + _p(' <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>') + end + if cfg.debugargs then + _p(' <LocalDebuggerCommandArguments>%s</LocalDebuggerCommandArguments>', table.concat(cfg.debugargs, " ")) + end + end + function premake.vs2010_vcxproj_user(prj) _p(xml_version_and_encoding) _p('<Project ' ..tool_version_and_xmlns ..'>') + for _, cfginfo in ipairs(prj.solution.vstudio_configs) do + local cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform) + _p(' <PropertyGroup '.. if_config_and_platform() ..'>', premake.esc(cfginfo.name)) + vc2010.debugdir(cfg) + _p(' </PropertyGroup>') + end _p('</Project>') end diff --git a/src/base/api.lua b/src/base/api.lua index c1dd2ba..8d8eeea 100644 --- a/src/base/api.lua +++ b/src/base/api.lua @@ -1,7 +1,7 @@ -- -- api.lua -- Implementation of the solution, project, and configuration APIs. --- Copyright (c) 2002-2008 Jason Perkins and the Premake project +-- Copyright (c) 2002-2011 Jason Perkins and the Premake project -- @@ -41,7 +41,19 @@ kind = "list", scope = "solution", }, + + debugargs = + { + kind = "list", + scope = "config", + }, + debugdir = + { + kind = "path", + scope = "config", + }, + defines = { kind = "list", diff --git a/tests/actions/vstudio/vc200x/debugdir.lua b/tests/actions/vstudio/vc200x/debugdir.lua new file mode 100644 index 0000000..a35e115 --- /dev/null +++ b/tests/actions/vstudio/vc200x/debugdir.lua @@ -0,0 +1,60 @@ +-- +-- tests/actions/vstudio/vc200x/debugdir.lua +-- Validate handling of the working directory for debugging. +-- Copyright (c) 2011 Jason Perkins and the Premake project +-- + + T.vstudio_vs200x_debugdir = { } + local suite = T.vstudio_vs200x_debugdir + local vc200x = premake.vstudio.vc200x + + +-- +-- Setup +-- + + local sln, prj + + function suite.setup() + sln = test.createsolution() + end + + local function prepare() + premake.buildconfigs() + prj = premake.solution.getproject(sln, 1) + sln.vstudio_configs = premake.vstudio.buildconfigs(sln) + vc200x.debugdir(prj) + end + + +-- +-- Tests +-- + + function suite.EmptyBlock_OnNoDebugSettings() + prepare() + test.capture [[ + <DebugSettings + /> + ]] + end + + function suite.WorkingDirectory_OnRelativePath() + debugdir "bin/debug" + prepare() + test.capture [[ + <DebugSettings + WorkingDirectory="bin\debug" + /> + ]] + end + + function suite.Arguments() + debugargs { "arg1", "arg2" } + prepare() + test.capture [[ + <DebugSettings + CommandArguments="arg1 arg2" + /> + ]] + end diff --git a/tests/actions/vstudio/vc200x/header.lua b/tests/actions/vstudio/vc200x/header.lua new file mode 100644 index 0000000..3e6cbd8 --- /dev/null +++ b/tests/actions/vstudio/vc200x/header.lua @@ -0,0 +1,55 @@ +-- +-- tests/actions/vstudio/vc200x/header.lua +-- Validate generation of the project file header block. +-- Copyright (c) 2011 Jason Perkins and the Premake project +-- + + T.vstudio_vs200x_header = { } + local suite = T.vstudio_vs200x_header + local vc200x = premake.vstudio.vc200x + + +-- +-- Setup +-- + + local sln, prj + + function suite.setup() + sln = test.createsolution() + end + + local function prepare() + premake.buildconfigs() + prj = premake.solution.getproject(sln, 1) + sln.vstudio_configs = premake.vstudio.buildconfigs(sln) + vc200x.header('VisualStudioProject') + end + + +-- +-- Tests +-- + + function suite.On2002() + _ACTION = 'vs2002' + prepare() + test.capture [[ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.00" + ]] + end + + + function suite.On2008() + _ACTION = 'vs2008' + prepare() + test.capture [[ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="9.00" + ]] + end diff --git a/tests/actions/vstudio/vc2010/debugdir.lua b/tests/actions/vstudio/vc2010/debugdir.lua new file mode 100755 index 0000000..ae9dfe2 --- /dev/null +++ b/tests/actions/vstudio/vc2010/debugdir.lua @@ -0,0 +1,55 @@ +--
+-- tests/actions/vstudio/vc2010/debugdir.lua
+-- Validate handling of the working directory for debugging.
+-- Copyright (c) 2011 Jason Perkins and the Premake project
+--
+
+ T.vstudio_vs2010_debugdir = { }
+ local suite = T.vstudio_vs2010_debugdir
+ local vc2010 = premake.vstudio.vc2010
+
+
+--
+-- Setup
+--
+
+ local sln, prj
+
+ function suite.setup()
+ sln = test.createsolution()
+ end
+
+ local function prepare()
+ premake.buildconfigs()
+ prj = premake.solution.getproject(sln, 1)
+ sln.vstudio_configs = premake.vstudio.buildconfigs(sln)
+ vc2010.debugdir(prj)
+ end
+
+
+--
+-- Tests
+--
+
+ function suite.PrintsNothing_OnDebugDirSet()
+ prepare()
+ test.capture [[
+ ]]
+ end
+
+ function suite.IsFormattedCorrectly_OnRelativePath()
+ debugdir "bin/debug"
+ prepare()
+ test.capture [[
+ <LocalDebuggerWorkingDirectory>bin\debug</LocalDebuggerWorkingDirectory>
+ <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
+ ]]
+ end
+
+ function suite.Arguments()
+ debugargs { "arg1", "arg2" }
+ prepare()
+ test.capture [[
+ <LocalDebuggerCommandArguments>arg1 arg2</LocalDebuggerCommandArguments>
+ ]]
+ end
diff --git a/tests/premake4.lua b/tests/premake4.lua index 60d51e0..c1fae46 100644 --- a/tests/premake4.lua +++ b/tests/premake4.lua @@ -88,8 +88,13 @@ dofile("actions/vstudio/sln2005/projectplatforms.lua") dofile("actions/vstudio/sln2005/projects.lua") - -- Visual Studio 2002-2008 C/++ projects + -- Visual Studio 2002-2008 C/C++ projects + dofile("actions/vstudio/vc200x/debugdir.lua") + dofile("actions/vstudio/vc200x/header.lua") dofile("actions/vstudio/vc200x/files.lua") + + -- Visual Studio 2010 C/C++ projects + dofile("actions/vstudio/vc2010/debugdir.lua") -- Makefile tests dofile("actions/make/test_make_escaping.lua") |