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
path: root/src/base
diff options
context:
space:
mode:
authorJason Perkins <starkos@industriousone.com>2013-04-26 00:00:18 +0400
committerJason Perkins <starkos@industriousone.com>2013-04-26 00:00:18 +0400
commite1478cbb172cfb7bcb6220d154fc6f12d5e04bc6 (patch)
treeac1391a6b995b9ecc7805a12171c6a109c5ec2f2 /src/base
parent826b24e1b01d969ba7206b7e1b38176bf639649a (diff)
Add support for Visual Studio 2012 (Oliver Schneider)
Diffstat (limited to 'src/base')
-rw-r--r--src/base/api.lua225
1 files changed, 113 insertions, 112 deletions
diff --git a/src/base/api.lua b/src/base/api.lua
index 86e8fb2..c11056f 100644
--- a/src/base/api.lua
+++ b/src/base/api.lua
@@ -9,15 +9,15 @@
-- Here I define all of the getter/setter functions as metadata. The actual
-- functions are built programmatically below.
--
-
- premake.fields =
+
+ premake.fields =
{
basedir =
{
kind = "path",
scope = "container",
},
-
+
buildaction =
{
kind = "string",
@@ -29,14 +29,14 @@
"None"
}
},
-
+
buildoptions =
{
kind = "list",
scope = "config",
},
- configurations =
+ configurations =
{
kind = "list",
scope = "solution",
@@ -47,44 +47,44 @@
kind = "list",
scope = "config",
},
-
+
debugdir =
{
kind = "path",
scope = "config",
},
- debugenvs =
+ debugenvs =
{
kind = "list",
scope = "config",
},
-
+
defines =
{
kind = "list",
scope = "config",
},
-
+
deploymentoptions =
{
kind = "list",
scope = "config",
usagecopy = true,
},
-
+
excludes =
{
kind = "filelist",
scope = "config",
},
-
+
files =
{
kind = "filelist",
scope = "config",
},
-
+
flags =
{
kind = "list",
@@ -92,7 +92,7 @@
isflags = true,
usagecopy = true,
allowed = function(value)
-
+
local allowed_flags = {
ATL = 1,
DebugEnvsDontMerge = 1,
@@ -128,12 +128,12 @@
Unsafe = 1,
WinMain = 1
}
-
+
local englishToAmericanSpelling =
{
optimise = 'optimize',
optimisesize = 'optimizesize',
- optimisespeed = 'optimizespeed',
+ optimisespeed = 'optimizespeed',
}
local lowervalue = value:lower()
@@ -141,12 +141,12 @@
for v, _ in pairs(allowed_flags) do
if v:lower() == lowervalue then
return v
- end
+ end
end
return nil, "invalid flag"
end,
},
-
+
framework =
{
kind = "string",
@@ -157,59 +157,60 @@
"2.0",
"3.0",
"3.5",
- "4.0"
+ "4.0",
+ "4.5",
}
},
-
- imagepath =
+
+ imagepath =
{
kind = "path",
scope = "config",
},
-
+
imageoptions =
{
kind = "list",
scope = "config",
},
-
+
implibdir =
{
kind = "path",
scope = "config",
},
-
+
implibextension =
{
kind = "string",
scope = "config",
},
-
+
implibname =
{
kind = "string",
scope = "config",
},
-
+
implibprefix =
{
kind = "string",
scope = "config",
},
-
+
implibsuffix =
{
kind = "string",
scope = "config",
},
-
+
includedirs =
{
kind = "dirlist",
scope = "config",
usagecopy = true,
},
-
+
kind =
{
kind = "string",
@@ -221,7 +222,7 @@
"SharedLib"
}
},
-
+
language =
{
kind = "string",
@@ -232,20 +233,20 @@
"C#"
}
},
-
+
libdirs =
{
kind = "dirlist",
scope = "config",
linkagecopy = true,
},
-
+
linkoptions =
{
kind = "list",
scope = "config",
},
-
+
links =
{
kind = "list",
@@ -259,116 +260,116 @@
end,
linkagecopy = true,
},
-
+
location =
{
kind = "path",
scope = "container",
},
-
+
makesettings =
{
kind = "list",
scope = "config",
},
-
+
objdir =
{
kind = "path",
scope = "config",
},
-
+
pchheader =
{
kind = "string",
scope = "config",
},
-
+
pchsource =
{
kind = "path",
scope = "config",
},
- platforms =
+ platforms =
{
kind = "list",
scope = "solution",
allowed = table.keys(premake.platforms),
},
-
+
postbuildcommands =
{
kind = "list",
scope = "config",
},
-
+
prebuildcommands =
{
kind = "list",
scope = "config",
},
-
+
prelinkcommands =
{
kind = "list",
scope = "config",
},
-
+
resdefines =
{
kind = "list",
scope = "config",
},
-
+
resincludedirs =
{
kind = "dirlist",
scope = "config",
},
-
+
resoptions =
{
kind = "list",
scope = "config",
},
-
+
targetdir =
{
kind = "path",
scope = "config",
},
-
+
targetextension =
{
kind = "string",
scope = "config",
},
-
+
targetname =
{
kind = "string",
scope = "config",
},
-
+
targetprefix =
{
kind = "string",
scope = "config",
},
-
+
targetsuffix =
{
kind = "string",
scope = "config",
},
-
+
trimpaths =
{
kind = "dirlist",
scope = "config",
},
-
+
uuid =
{
kind = "string",
@@ -390,14 +391,14 @@
return value:upper()
end
},
-
+
uses =
{
kind = "list",
scope = "config",
},
-
- vpaths =
+
+ vpaths =
{
kind = "keypath",
scope = "container",
@@ -409,11 +410,11 @@
--
-- End of metadata
--
-
-
-
+
+
+
--
--- Check to see if a value exists in a list of values, using a
+-- Check to see if a value exists in a list of values, using a
-- case-insensitive match. If the value does exist, the canonical
-- version contained in the list is returned, so future tests can
-- use case-sensitive comparisions.
@@ -447,13 +448,13 @@
function premake.getobject(t)
local container
-
+
if (t == "container" or t == "solution") then
container = premake.CurrentContainer
else
container = premake.CurrentConfiguration
end
-
+
if t == "solution" then
if type(container) == "project" then
container = container.solution
@@ -462,7 +463,7 @@
container = nil
end
end
-
+
local msg
if (not container) then
if (t == "container") then
@@ -473,12 +474,12 @@
msg = "no active solution, project, or configuration"
end
end
-
+
return container, msg
end
-
+
--
-- Adds values to an array field of a solution/project/configuration. `ctype`
-- specifies the container type (see premake.getobject) for the field.
@@ -511,21 +512,21 @@
if (value) then
doinsert(value, 5)
end
-
+
return container[fieldname]
end
-
+
--
--- Adds values to an array-of-directories field of a solution/project/configuration.
+-- Adds values to an array-of-directories field of a solution/project/configuration.
-- `ctype` specifies the container type (see premake.getobject) for the field. All
-- values are converted to absolute paths before being stored.
--
local function domatchedarray(ctype, fieldname, value, matchfunc)
local result = { }
-
+
function makeabsolute(value, depth)
if (type(value) == "table") then
for _, item in ipairs(value) do
@@ -541,20 +542,20 @@
error("Invalid value in list: expected string, got " .. type(value), depth)
end
end
-
+
makeabsolute(value, 3)
return premake.setarray(ctype, fieldname, result)
end
-
+
function premake.setdirarray(ctype, fieldname, value)
return domatchedarray(ctype, fieldname, value, os.matchdirs)
end
-
+
function premake.setfilearray(ctype, fieldname, value)
return domatchedarray(ctype, fieldname, value, os.matchfiles)
end
-
-
+
+
--
-- Adds values to a key-value field of a solution/project/configuration. `ctype`
-- specifies the container type (see premake.getobject) for the field.
@@ -565,7 +566,7 @@
if not container then
error(err, 4)
end
-
+
if not container[fieldname] then
container[fieldname] = {}
end
@@ -573,9 +574,9 @@
if type(values) ~= "table" then
error("invalid value; table expected", 4)
end
-
+
local field = container[fieldname]
-
+
for key,value in pairs(values) do
if not field[key] then
field[key] = {}
@@ -586,7 +587,7 @@
return field
end
-
+
--
-- Set a new value for a string field of a solution/project/configuration. `ctype`
-- specifies the container type (see premake.getobject) for the field.
@@ -598,37 +599,37 @@
if (not container) then
error(err, 4)
end
-
+
-- if a value was provided, set it
if (value) then
value, err = premake.checkvalue(value, allowed)
- if (not value) then
+ if (not value) then
error(err, 4)
end
-
+
container[fieldname] = value
end
-
- return container[fieldname]
+
+ return container[fieldname]
end
-
-
-
+
+
+
--
-- The getter/setter implemention.
--
- local function accessor(name, value)
+ local function accessor(name, value)
local kind = premake.fields[name].kind
local scope = premake.fields[name].scope
local allowed = premake.fields[name].allowed
-
+
if (kind == "string" or kind == "path") and value then
if type(value) ~= "string" then
error("string value expected", 3)
end
end
-
+
if kind == "string" then
return premake.setstring(scope, name, value, allowed)
elseif kind == "path" then
@@ -650,13 +651,13 @@
--
-- Build all of the getter/setter functions from the metadata above.
--
-
+
for name,_ in pairs(premake.fields) do
_G[name] = function(value)
return accessor(name, value)
end
end
-
+
--
@@ -667,18 +668,18 @@
if not terms then
return premake.CurrentConfiguration
end
-
+
local container, err = premake.getobject("container")
if (not container) then
error(err, 2)
end
-
+
local cfg = { }
cfg.terms = table.flatten({terms})
-
+
table.insert(container.blocks, cfg)
premake.CurrentConfiguration = cfg
-
+
-- create a keyword list using just the indexed keyword items. This is a little
-- confusing: "terms" are what the user specifies in the script, "keywords" are
-- the Lua patterns that result. I'll refactor to better names.
@@ -693,18 +694,18 @@
cfg[name] = { }
end
end
-
+
return cfg
end
-
+
local function createproject(name, sln, isUsage)
local prj = {}
-
+
-- attach a type
setmetatable(prj, {
__type = "project",
})
-
+
-- add to master list keyed by both name and index
table.insert(sln.projects, prj)
if(isUsage) then
@@ -726,17 +727,17 @@
sln.projects[name] = prj
end
-
+
prj.solution = sln
prj.name = name
prj.basedir = os.getcwd()
prj.uuid = os.uuid()
prj.blocks = { }
prj.usage = isUsage;
-
+
return prj;
end
-
+
function usage(name)
if (not name) then
--Only return usage projects.
@@ -744,14 +745,14 @@
if(not premake.CurrentContainer.usage) then return nil end
return premake.CurrentContainer
end
-
+
-- identify the parent solution
local sln
if (type(premake.CurrentContainer) == "project") then
sln = premake.CurrentContainer.solution
else
sln = premake.CurrentContainer
- end
+ end
if (type(sln) ~= "solution") then
error("no active solution", 2)
end
@@ -764,13 +765,13 @@
premake.CurrentContainer = iff(sln.projects[name].usage,
sln.projects[name], sln.projects[name].usageProj)
end
-
+
-- add an empty, global configuration to the project
configuration { }
-
+
return premake.CurrentContainer
end
-
+
function project(name)
if (not name) then
--Only return non-usage projects
@@ -778,28 +779,28 @@
if(premake.CurrentContainer.usage) then return nil end
return premake.CurrentContainer
end
-
+
-- identify the parent solution
local sln
if (type(premake.CurrentContainer) == "project") then
sln = premake.CurrentContainer.solution
else
sln = premake.CurrentContainer
- end
+ end
if (type(sln) ~= "solution") then
error("no active solution", 2)
end
-
+
-- if this is a new project, or the old project is a usage project, create it
if((not sln.projects[name]) or sln.projects[name].usage) then
premake.CurrentContainer = createproject(name, sln)
else
premake.CurrentContainer = sln.projects[name];
end
-
+
-- add an empty, global configuration to the project
configuration { }
-
+
return premake.CurrentContainer
end
@@ -812,7 +813,7 @@
return premake.CurrentContainer
end
end
-
+
premake.CurrentContainer = premake.solution.get(name)
if (not premake.CurrentContainer) then
premake.CurrentContainer = premake.solution.new(name)
@@ -820,7 +821,7 @@
-- add an empty, global configuration
configuration { }
-
+
return premake.CurrentContainer
end