diff options
author | Jason Perkins <starkos@industriousone.com> | 2013-04-26 00:00:18 +0400 |
---|---|---|
committer | Jason Perkins <starkos@industriousone.com> | 2013-04-26 00:00:18 +0400 |
commit | e1478cbb172cfb7bcb6220d154fc6f12d5e04bc6 (patch) | |
tree | ac1391a6b995b9ecc7805a12171c6a109c5ec2f2 /src/base | |
parent | 826b24e1b01d969ba7206b7e1b38176bf639649a (diff) |
Add support for Visual Studio 2012 (Oliver Schneider)
Diffstat (limited to 'src/base')
-rw-r--r-- | src/base/api.lua | 225 |
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 |