[core] Use 'cdialect' and 'cppdialect' instead of 'language'.

This commit is contained in:
Tom van Dijck 2017-05-03 17:01:33 -07:00
parent 347c9c418d
commit 7af2817869
21 changed files with 243 additions and 162 deletions

View File

@ -22,13 +22,10 @@
-- The capabilities of this action -- The capabilities of this action
valid_kinds = { "ConsoleApp", "WindowedApp", "Makefile", "SharedLib", "StaticLib", "Utility" }, valid_kinds = { "ConsoleApp", "WindowedApp", "Makefile", "SharedLib", "StaticLib", "Utility" },
valid_languages = { "C", "C++" },
valid_tools = { valid_tools = {
cc = { "gcc", "clang", "msc" } cc = { "gcc", "clang", "msc" }
}, },
supports_language = function(lang)
return p.languages.isc(lang) or
p.languages.iscpp(lang)
end,
-- Workspace and project generation logic -- Workspace and project generation logic

View File

@ -355,11 +355,11 @@
end end
function m.isCpp11(cfg) function m.isCpp11(cfg)
return (cfg.language == 'gnu++11') or (cfg.language == 'C++11') or cfg.flags["C++11"] return (cfg.cppdialect == 'gnu++11') or (cfg.cppdialect == 'C++11')
end end
function m.isCpp14(cfg) function m.isCpp14(cfg)
return (cfg.language == 'gnu++14') or (cfg.language == 'C++14') or cfg.flags["C++14"] return (cfg.cppdialect == 'gnu++14') or (cfg.cppdialect == 'C++14')
end end
function m.completion(cfg) function m.completion(cfg)

View File

@ -41,13 +41,14 @@
rtti "Off" rtti "Off"
pic "On" pic "On"
symbols "On" symbols "On"
language "C++11" language "C++"
cppdialect "C++11"
flags { "NoBufferSecurityCheck" } flags { "NoBufferSecurityCheck" }
buildoptions { "-opt1", "-opt2" } buildoptions { "-opt1", "-opt2" }
prepare() prepare()
codelite.project.compiler(cfg) codelite.project.compiler(cfg)
test.capture [[ test.capture [[
<Compiler Options="-O0;-fPIC;-g;-fno-exceptions;-fno-stack-protector;-std=c++11;-fno-rtti;-opt1;-opt2" C_Options="-O0;-fPIC;-g;-opt1;-opt2" Assembler="" Required="yes" PreCompiledHeader="" PCHInCommandLine="no" UseDifferentPCHFlags="no" PCHFlags=""> <Compiler Options="-O0;-fPIC;-g;-std=c++11;-fno-exceptions;-fno-stack-protector;-fno-rtti;-opt1;-opt2" C_Options="-O0;-fPIC;-g;-opt1;-opt2" Assembler="" Required="yes" PreCompiledHeader="" PCHInCommandLine="no" UseDifferentPCHFlags="no" PCHFlags="">
</Compiler> </Compiler>
]] ]]
end end
@ -219,7 +220,8 @@ cmd2</StartupCommands>
end end
function suite.OnProject_Completion() function suite.OnProject_Completion()
language "C++11" language "C++"
cppdialect "C++11"
prepare() prepare()
codelite.project.completion(prj) codelite.project.completion(prj)
test.capture [[ test.capture [[

View File

@ -19,8 +19,6 @@
-- --
p.D = "D" p.D = "D"
table.insert(p.languages.all, p.D)
api.addAllowed("language", p.D) api.addAllowed("language", p.D)
api.addAllowed("floatingpoint", "None") api.addAllowed("floatingpoint", "None")

View File

@ -28,12 +28,9 @@
-- --
-- Patch the gmake action with the allowed tools... -- Patch the gmake action with the allowed tools...
-- --
gmake.valid_languages = table.join(gmake.valid_languages, { p.D } )
gmake.valid_tools.dc = { "dmd", "gdc", "ldc" } gmake.valid_tools.dc = { "dmd", "gdc", "ldc" }
p.override(gmake, "supports_language", function(oldfn, lang)
return oldfn(lang) or lang == p.D;
end)
function m.make.separateCompilation(prj) function m.make.separateCompilation(prj)
local some = false local some = false
local all = true local all = true

View File

@ -19,12 +19,10 @@
-- Patch the vstudio actions with D support... -- Patch the vstudio actions with D support...
-- --
for k,v in pairs({ "vs2005", "vs2008", "vs2010", "vs2012", "vs2013", "vs2015" }) do for k,v in pairs({ "vs2005", "vs2008", "vs2010", "vs2012", "vs2013", "vs2015", "vs2017" }) do
local vs = p.action.get(v) local vs = p.action.get(v)
if vs ~= nil then if vs ~= nil then
p.override(vs, "supports_language", function(oldfn, lang) table.insert( vs.valid_languages, p.D )
return oldfn(lang) or lang == p.D;
end)
vs.valid_tools.dc = { "dmd", "gdc", "ldc" } vs.valid_tools.dc = { "dmd", "gdc", "ldc" }
p.override(vs, "onProject", function(oldfn, prj) p.override(vs, "onProject", function(oldfn, prj)

View File

@ -40,13 +40,11 @@
-- The capabilities of this action -- The capabilities of this action
valid_kinds = { "ConsoleApp", "WindowedApp", "SharedLib", "StaticLib", "Makefile", "None" }, valid_kinds = { "ConsoleApp", "WindowedApp", "SharedLib", "StaticLib", "Makefile", "None" },
valid_languages = { "C", "C++" },
valid_tools = { valid_tools = {
cc = { "gcc", "clang" }, cc = { "gcc", "clang" },
}, },
supports_language = function(lang)
return p.languages.isc(lang) or
p.languages.iscpp(lang)
end,
-- Workspace and project generation logic -- Workspace and project generation logic

View File

@ -960,18 +960,8 @@
function xcode.XCBuildConfiguration_CLanguageStandard(settings, cfg) function xcode.XCBuildConfiguration_CLanguageStandard(settings, cfg)
if (p.languages.isc(cfg.language)) then if cfg.cdialect and cfg.cdialect ~= "Default" then
if cfg.language ~= "C" then settings['GCC_C_LANGUAGE_STANDARD'] = cfg.cdialect
settings['GCC_C_LANGUAGE_STANDARD'] = cfg.language:lower()
else
if cfg.flags['C99'] then
settings['GCC_C_LANGUAGE_STANDARD'] = 'C99'
elseif cfg.flags['C11'] then
settings['GCC_C_LANGUAGE_STANDARD'] = 'C11'
else
settings['GCC_C_LANGUAGE_STANDARD'] = 'C90'
end
end
else else
settings['GCC_C_LANGUAGE_STANDARD'] = 'gnu99' settings['GCC_C_LANGUAGE_STANDARD'] = 'gnu99'
end end
@ -979,16 +969,8 @@
function xcode.XCBuildConfiguration_CppLanguageStandard(settings, cfg) function xcode.XCBuildConfiguration_CppLanguageStandard(settings, cfg)
if (p.languages.iscpp(cfg.language)) then if cfg.cppdialect and cfg.cppdialect ~= "Default" then
if cfg.language ~= "C++" then settings['CLANG_CXX_LANGUAGE_STANDARD'] = cfg.cppdialect
settings['CLANG_CXX_LANGUAGE_STANDARD'] = cfg.language:lower()
else
if cfg.flags['C++11'] then
settings['CLANG_CXX_LANGUAGE_STANDARD'] = 'c++11'
elseif cfg.flags['C++14'] then
settings['CLANG_CXX_LANGUAGE_STANDARD'] = 'c++14'
end
end
end end
end end

View File

@ -696,9 +696,47 @@
api.register { api.register {
name = "language", name = "language",
scope = "project",
kind = "string",
allowed = {
"C",
"C++",
"C#"
}
}
api.register {
name = "cdialect",
scope = "config", scope = "config",
kind = "string", kind = "string",
allowed = p.languages.all allowed = {
"Default",
"C89",
"C90",
"C99",
"C11",
"gnu89",
"gnu90",
"gnu99",
"gnu11",
}
}
api.register {
name = "cppdialect",
scope = "config",
kind = "string",
allowed = {
"Default",
"C++98",
"C++11",
"C++14",
"C++17",
"gnu++98",
"gnu++11",
"gnu++14",
"gnu++17",
}
} }
api.register { api.register {
@ -1368,11 +1406,45 @@
-- 31 January 2017 -- 31 January 2017
api.deprecateValue("flags", "C++11", 'Use `language "C++11"` instead', function(value) end, function(value) end) api.deprecateValue("flags", "C++11", 'Use `cppdialect "C++11"` instead',
api.deprecateValue("flags", "C++14", 'Use `language "C++14"` instead', function(value) end, function(value) end) function(value)
api.deprecateValue("flags", "C90", 'Use `language "C90"` instead', function(value) end, function(value) end) cppdialect "C++11"
api.deprecateValue("flags", "C99", 'Use `language "C99"` instead', function(value) end, function(value) end) end,
api.deprecateValue("flags", "C11", 'Use `language "C11"` instead', function(value) end, function(value) end) function(value)
cppdialect "Default"
end)
api.deprecateValue("flags", "C++14", 'Use `cppdialect "C++14"` instead',
function(value)
cppdialect "C++14"
end,
function(value)
cppdialect "Default"
end)
api.deprecateValue("flags", "C90", 'Use `cdialect "gnu90"` instead',
function(value)
cdialect "gnu90"
end,
function(value)
cdialect "Default"
end)
api.deprecateValue("flags", "C99", 'Use `cdialect "gnu99"` instead',
function(value)
cdialect "gnu99"
end,
function(value)
cdialect "Default"
end)
api.deprecateValue("flags", "C11", 'Use `cdialect "gnu11"` instead',
function(value)
cdialect "gnu11"
end,
function(value)
cdialect "Default"
end)
-- 13 April 2017 -- 13 April 2017

View File

@ -21,18 +21,12 @@
description = "Generate GNU makefiles for POSIX, MinGW, and Cygwin", description = "Generate GNU makefiles for POSIX, MinGW, and Cygwin",
valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib", "Utility", "Makefile" }, valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib", "Utility", "Makefile" },
valid_languages = { "C", "C++", "C#" },
valid_tools = { valid_tools = {
cc = { "clang", "gcc" }, cc = { "clang", "gcc" },
dotnet = { "mono", "msnet", "pnet" } dotnet = { "mono", "msnet", "pnet" }
}, },
supports_language = function(lang)
return p.languages.isc(lang) or
p.languages.iscpp(lang) or
p.languages.isdotnet(lang)
end,
onWorkspace = function(wks) onWorkspace = function(wks)
p.escaper(make.esc) p.escaper(make.esc)
p.generate(wks, make.getmakefilename(wks, false), make.generate_workspace) p.generate(wks, make.getmakefilename(wks, false), make.generate_workspace)

View File

@ -86,15 +86,11 @@
-- The capabilities of this action -- The capabilities of this action
valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib", "Makefile", "None" }, valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib", "Makefile", "None" },
valid_languages = { "C", "C++", "C#" },
valid_tools = { valid_tools = {
cc = { "msc" }, cc = { "msc" },
dotnet = { "msnet" }, dotnet = { "msnet" },
}, },
supports_language = function(lang)
return p.languages.isc(lang) or
p.languages.iscpp(lang) or
p.languages.isdotnet(lang)
end,
-- Workspace and project generation logic -- Workspace and project generation logic

View File

@ -28,15 +28,11 @@
-- The capabilities of this action -- The capabilities of this action
valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib", "Makefile", "None" }, valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib", "Makefile", "None" },
valid_languages = { "C", "C++", "C#" },
valid_tools = { valid_tools = {
cc = { "msc" }, cc = { "msc" },
dotnet = { "msnet" }, dotnet = { "msnet" },
}, },
supports_language = function(lang)
return p.languages.isc(lang) or
p.languages.iscpp(lang) or
p.languages.isdotnet(lang)
end,
-- Workspace and project generation logic -- Workspace and project generation logic

View File

@ -135,15 +135,11 @@
-- The capabilities of this action -- The capabilities of this action
valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib", "Makefile", "None", "Utility" }, valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib", "Makefile", "None", "Utility" },
valid_languages = { "C", "C++", "C#" },
valid_tools = { valid_tools = {
cc = { "msc" }, cc = { "msc" },
dotnet = { "msnet" }, dotnet = { "msnet" },
}, },
supports_language = function(lang)
return p.languages.isc(lang) or
p.languages.iscpp(lang) or
p.languages.isdotnet(lang)
end,
-- Workspace and project generation logic -- Workspace and project generation logic

View File

@ -28,15 +28,11 @@
-- The capabilities of this action -- The capabilities of this action
valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib", "Makefile", "None", "Utility" }, valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib", "Makefile", "None", "Utility" },
valid_languages = { "C", "C++", "C#" },
valid_tools = { valid_tools = {
cc = { "msc" }, cc = { "msc" },
dotnet = { "msnet" }, dotnet = { "msnet" },
}, },
supports_language = function(lang)
return p.languages.isc(lang) or
p.languages.iscpp(lang) or
p.languages.isdotnet(lang)
end,
-- Workspace and project generation logic -- Workspace and project generation logic

View File

@ -31,15 +31,11 @@
-- The capabilities of this action -- The capabilities of this action
valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib", "Makefile", "None", "Utility" }, valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib", "Makefile", "None", "Utility" },
valid_languages = { "C", "C++", "C#" },
valid_tools = { valid_tools = {
cc = { "msc" }, cc = { "msc" },
dotnet = { "msnet" }, dotnet = { "msnet" },
}, },
supports_language = function(lang)
return p.languages.isc(lang) or
p.languages.iscpp(lang) or
p.languages.isdotnet(lang)
end,
-- Workspace and project generation logic -- Workspace and project generation logic

View File

@ -31,15 +31,11 @@
-- The capabilities of this action -- The capabilities of this action
valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib", "Makefile", "None", "Utility" }, valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib", "Makefile", "None", "Utility" },
valid_languages = { "C", "C++", "C#" },
valid_tools = { valid_tools = {
cc = { "msc" }, cc = { "msc" },
dotnet = { "msnet" }, dotnet = { "msnet" },
}, },
supports_language = function(lang)
return p.languages.isc(lang) or
p.languages.iscpp(lang) or
p.languages.isdotnet(lang)
end,
-- Workspace and project generation logic -- Workspace and project generation logic

View File

@ -31,15 +31,11 @@
-- The capabilities of this action -- The capabilities of this action
valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib", "Makefile", "None", "Utility", "Installer" }, valid_kinds = { "ConsoleApp", "WindowedApp", "StaticLib", "SharedLib", "Makefile", "None", "Utility", "Installer" },
valid_languages = { "C", "C++", "C#" },
valid_tools = { valid_tools = {
cc = { "msc" }, cc = { "msc" },
dotnet = { "msnet" }, dotnet = { "msnet" },
}, },
supports_language = function(lang)
return p.languages.isc(lang) or
p.languages.iscpp(lang) or
p.languages.isdotnet(lang)
end,
-- Workspace and project generation logic -- Workspace and project generation logic

View File

@ -246,7 +246,7 @@
return false return false
end end
if not self.valid_languages and not self.valid_kinds and not self.supports_language then if not self.valid_languages and not self.valid_kinds then
return true return true
end end
@ -258,11 +258,6 @@
return true return true
end end
if self.supports_language and self.supports_language(feature) then
return true
end
return false return false
end end

View File

@ -6,63 +6,15 @@
local p = premake local p = premake
p.languages = {} p.languages = {}
local languages = p.languages
function p.languages.isc(value)
--- return value == "C";
-- List of supported C languages.
---
languages.c = {
"C",
"C89",
"C90",
"C99",
"C11",
"gnu89",
"gnu90",
"gnu99",
"gnu11",
}
function languages.isc(value)
return table.contains(languages.c, value)
end end
--- function p.languages.iscpp(value)
-- List of supported C++ languages. return value == "C++";
---
languages.cpp = {
"C++",
"C++98",
"C++11",
"C++14",
"C++17",
"gnu++98",
"gnu++11",
"gnu++14",
"gnu++17",
}
function languages.iscpp(value)
return table.contains(languages.cpp, value)
end end
--- function p.languages.isdotnet(value)
-- List of supported dotnet languages. return value == "C#";
---
languages.dotnet = {
"C#"
}
function languages.isdotnet(value)
return table.contains(languages.dotnet, value)
end end
---
-- Combined list of all supported languages.
---
languages.all = table.join(
languages.c,
languages.cpp,
languages.dotnet
)

View File

@ -86,12 +86,7 @@
} }
gcc.cflags = { gcc.cflags = {
flags = { cdialect = {
["C90"] = "-std=gnu90",
["C99"] = "-std=gnu99",
["C11"] = "-std=gnu11",
},
language = {
["C89"] = "-std=c89", ["C89"] = "-std=c89",
["C90"] = "-std=c90", ["C90"] = "-std=c90",
["C99"] = "-std=c99", ["C99"] = "-std=c99",
@ -136,10 +131,8 @@
}, },
flags = { flags = {
NoBufferSecurityCheck = "-fno-stack-protector", NoBufferSecurityCheck = "-fno-stack-protector",
["C++11"] = "-std=c++11",
["C++14"] = "-std=c++14",
}, },
language = { cppdialect = {
["C++98"] = "-std=c++98", ["C++98"] = "-std=c++98",
["C++11"] = "-std=c++11", ["C++11"] = "-std=c++11",
["C++14"] = "-std=c++14", ["C++14"] = "-std=c++14",

View File

@ -555,3 +555,134 @@
prepare() prepare()
test.excludes({ "-Wl,-Bstatic" }, gcc.getlinks(cfg)) test.excludes({ "-Wl,-Bstatic" }, gcc.getlinks(cfg))
end end
--
-- Test language flags are added properly.
--
function suite.cflags_onCDefault()
cdialect "Default"
prepare()
test.contains({ }, gcc.getcflags(cfg))
test.contains({ }, gcc.getcxxflags(cfg))
end
function suite.cflags_onC89()
cdialect "C89"
prepare()
test.contains({ "-std=c89" }, gcc.getcflags(cfg))
test.contains({ }, gcc.getcxxflags(cfg))
end
function suite.cflags_onC90()
cdialect "C90"
prepare()
test.contains({ "-std=c90" }, gcc.getcflags(cfg))
test.contains({ }, gcc.getcxxflags(cfg))
end
function suite.cflags_onC99()
cdialect "C99"
prepare()
test.contains({ "-std=c99" }, gcc.getcflags(cfg))
test.contains({ }, gcc.getcxxflags(cfg))
end
function suite.cflags_onC11()
cdialect "C11"
prepare()
test.contains({ "-std=c11" }, gcc.getcflags(cfg))
test.contains({ }, gcc.getcxxflags(cfg))
end
function suite.cflags_ongnu89()
cdialect "gnu89"
prepare()
test.contains({ "-std=gnu89" }, gcc.getcflags(cfg))
test.contains({ }, gcc.getcxxflags(cfg))
end
function suite.cflags_ongnu90()
cdialect "gnu90"
prepare()
test.contains({ "-std=gnu90" }, gcc.getcflags(cfg))
test.contains({ }, gcc.getcxxflags(cfg))
end
function suite.cflags_ongnu99()
cdialect "gnu99"
prepare()
test.contains({ "-std=gnu99" }, gcc.getcflags(cfg))
test.contains({ }, gcc.getcxxflags(cfg))
end
function suite.cflags_ongnu11()
cdialect "gnu11"
prepare()
test.contains({ "-std=gnu11" }, gcc.getcflags(cfg))
test.contains({ }, gcc.getcxxflags(cfg))
end
function suite.cxxflags_onCppDefault()
cppdialect "Default"
prepare()
test.contains({ }, gcc.getcxxflags(cfg))
test.contains({ }, gcc.getcflags(cfg))
end
function suite.cxxflags_onCpp98()
cppdialect "C++98"
prepare()
test.contains({ "-std=c++98" }, gcc.getcxxflags(cfg))
test.contains({ }, gcc.getcflags(cfg))
end
function suite.cxxflags_onCpp11()
cppdialect "C++11"
prepare()
test.contains({ "-std=c++11" }, gcc.getcxxflags(cfg))
test.contains({ }, gcc.getcflags(cfg))
end
function suite.cxxflags_onCpp14()
cppdialect "C++14"
prepare()
test.contains({ "-std=c++14" }, gcc.getcxxflags(cfg))
test.contains({ }, gcc.getcflags(cfg))
end
function suite.cxxflags_onCpp17()
cppdialect "C++17"
prepare()
test.contains({ "-std=c++17" }, gcc.getcxxflags(cfg))
test.contains({ }, gcc.getcflags(cfg))
end
function suite.cxxflags_onCppGnu98()
cppdialect "gnu++98"
prepare()
test.contains({ "-std=gnu++98" }, gcc.getcxxflags(cfg))
test.contains({ }, gcc.getcflags(cfg))
end
function suite.cxxflags_onCppGnu11()
cppdialect "gnu++11"
prepare()
test.contains({ "-std=gnu++11" }, gcc.getcxxflags(cfg))
test.contains({ }, gcc.getcflags(cfg))
end
function suite.cxxflags_onCppGnu14()
cppdialect "gnu++14"
prepare()
test.contains({ "-std=gnu++14" }, gcc.getcxxflags(cfg))
test.contains({ }, gcc.getcflags(cfg))
end
function suite.cxxflags_onCppGnu17()
cppdialect "gnu++17"
prepare()
test.contains({ "-std=gnu++17" }, gcc.getcxxflags(cfg))
test.contains({ }, gcc.getcflags(cfg))
end