Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/windirstat/premake-4.x-stable.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.hgignore2
-rw-r--r--CHANGES.txt1
-rwxr-xr-x[-rw-r--r--]samples/project/premake40
-rw-r--r--src/_manifest.lua3
-rw-r--r--src/actions/codeblocks/codeblocks_cbp.lua5
-rw-r--r--src/actions/codelite/codelite_project.lua5
-rw-r--r--src/actions/vstudio/_vstudio.lua12
-rw-r--r--src/actions/vstudio/vs200x_vcproj.lua37
-rw-r--r--src/actions/vstudio/vs200x_vcproj_user.lua61
-rw-r--r--src/actions/vstudio/vs2010_vcxproxj.lua20
-rw-r--r--src/base/api.lua14
-rw-r--r--tests/actions/vstudio/vc200x/debugdir.lua60
-rw-r--r--tests/actions/vstudio/vc200x/header.lua55
-rwxr-xr-xtests/actions/vstudio/vc2010/debugdir.lua55
-rw-r--r--tests/premake4.lua7
15 files changed, 314 insertions, 23 deletions
diff --git a/.hgignore b/.hgignore
index 16fbad5..ed3dd9c 100644
--- a/.hgignore
+++ b/.hgignore
@@ -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")