From b320248d7b2587e99ed3155a39e94cfc47a17727 Mon Sep 17 00:00:00 2001 From: Jason Perkins Date: Tue, 11 Feb 2014 11:11:46 -0500 Subject: [PATCH] A bit of clean-up work over the recently modified call array code --- src/actions/vstudio/vs200x_vcproj.lua | 226 ++++++++++---------------- src/base/config.lua | 23 +++ 2 files changed, 113 insertions(+), 136 deletions(-) diff --git a/src/actions/vstudio/vs200x_vcproj.lua b/src/actions/vstudio/vs200x_vcproj.lua index 4f108bbf..2ccca36e 100644 --- a/src/actions/vstudio/vs200x_vcproj.lua +++ b/src/actions/vstudio/vs200x_vcproj.lua @@ -43,10 +43,10 @@ --- +--- -- Write the opening element of the project file. -- In this case, the call list is for XML attributes rather than elements. --- +--- m.elements.visualStudioProject = function(prj) return { @@ -68,10 +68,10 @@ --- +--- -- Write out the element group, enumerating each of the -- configuration-architecture pairings. --- +--- function m.configurations(prj) -- Visual Studio requires each configuration to be paired up with each @@ -126,10 +126,10 @@ --- +--- -- Write out the element, describing a specific Premake -- build configuration/platform pairing. --- +--- m.elements.configuration = function(cfg) return { @@ -151,29 +151,9 @@ --- --- Write an empty, placehold configuration for those build configuration --- and architecture pairs that aren't valid build targets in the solution. --- - - function m.emptyConfiguration(cfg, arch) - p.push('') - - local tools = m.toolsForConfig(cfg, true) - for i, tool in ipairs(tools) do - m.tool(tool) - end - end - - - --- +--- -- Write out the element group. --- +--- m.elements.references = function(prj) return { @@ -190,10 +170,10 @@ --- +--- -- I don't do anything with globals yet, but here it is if you want to -- extend it. --- +--- m.elements.globals = function(prj) return {} @@ -258,6 +238,7 @@ end + m.elements.VCBscMakeTool = function(cfg) return {} end @@ -268,6 +249,60 @@ + m.elements.VCCLCompilerTool = function(cfg, toolset) + if not toolset then + -- no, use the standard set of attributes + return { + m.compilerToolName, + m.VCCLCompilerTool_additionalOptions, + m.optimization, + m.additionalIncludeDirectories, + m.wholeProgramOptimization, + m.preprocessorDefinitions, + m.minimalRebuild, + m.basicRuntimeChecks, + m.bufferSecurityCheck, + m.stringPooling, + m.exceptionHandling, + m.runtimeLibrary, + m.enableFunctionLevelLinking, + m.enableEnhancedInstructionSet, + m.floatingPointModel, + m.runtimeTypeInfo, + m.treatWChar_tAsBuiltInType, + m.usePrecompiledHeader, + m.programDatabaseFileName, + m.warnings, + m.debugInformationFormat, + m.compileAs, + m.forcedIncludeFiles, + m.omitDefaultLib, + } + else + -- yes, use the custom tool attributes + return { + m.compilerToolName, + m.VCCLExternalCompilerTool_additionalOptions, + m.additionalIncludeDirectories, + m.preprocessorDefinitions, + m.usePrecompiledHeader, + m.programDatabaseFileName, + m.debugInformationFormat, + m.compileAs, + m.forcedIncludeFiles, + } + end + + end + + function m.VCCLCompilerTool(cfg) + p.push('') + end + + + m.elements.VCCustomBuildTool = function(cfg) return {} end @@ -464,59 +499,6 @@ end - m.elements.VCCLCompilerTool = function(cfg, toolset) - if not toolset then - -- no, use the standard set of attributes - return { - m.compilerToolName, - m.VCCLCompilerTool_additionalOptions, - m.optimization, - m.additionalIncludeDirectories, - m.wholeProgramOptimization, - m.preprocessorDefinitions, - m.minimalRebuild, - m.basicRuntimeChecks, - m.bufferSecurityCheck, - m.stringPooling, - m.exceptionHandling, - m.runtimeLibrary, - m.enableFunctionLevelLinking, - m.enableEnhancedInstructionSet, - m.floatingPointModel, - m.runtimeTypeInfo, - m.treatWChar_tAsBuiltInType, - m.usePrecompiledHeader, - m.programDatabaseFileName, - m.warnings, - m.debugInformationFormat, - m.compileAs, - m.forcedIncludeFiles, - m.omitDefaultLib, - } - else - -- yes, use the custom tool attributes - return { - m.compilerToolName, - m.VCCLExternalCompilerTool_additionalOptions, - m.additionalIncludeDirectories, - m.preprocessorDefinitions, - m.usePrecompiledHeader, - m.programDatabaseFileName, - m.debugInformationFormat, - m.compileAs, - m.forcedIncludeFiles, - } - end - - end - - function m.VCCLCompilerTool(cfg) - p.push('') - end - - function m.DebuggerTool(cfg) p.w('') @@ -1109,19 +1091,12 @@ function m.compileAs(cfg, toolset) - local prjcfg, filecfg - if cfg.config then - prjcfg = cfg.config - filecfg = cfg - else - prjcfg = cfg - filecfg = nil - end - - if filecfg then - if path.iscfile(filecfg.name) ~= project.isc(filecfg.project) then - if path.iscppfile(filecfg.name) then - local value = iif(filecfg.project.language == p.CPP, 1, 2) + local prj, file = config.normalize(cfg) + local c = project.isc(prj) + if file then + if path.iscfile(file.name) ~= c then + if path.iscppfile(file.name) then + local value = iif(c, 2, 1) p.w('CompileAs="%s"', value) end end @@ -1129,7 +1104,7 @@ local compileAs if toolset then compileAs = "0" - elseif prjcfg.project.language == "C" then + elseif c then compileAs = "1" end if compileAs then @@ -1139,26 +1114,20 @@ end - function m.compilerToolName(cfg) - local prjcfg, filecfg - if cfg.config then - prjcfg = cfg.config - filecfg = cfg - else - prjcfg = cfg - filecfg = nil - end + function m.compilerToolName(cfg) local name - if filecfg and fileconfig.hasCustomBuildRule(filecfg) then + local prj, file = config.normalize(cfg) + if file and fileconfig.hasCustomBuildRule(file) then name = "VCCustomBuildTool" else - name = iif(prjcfg.system == p.XBOX360, "VCCLX360CompilerTool", "VCCLCompilerTool") + name = iif(prj.system == p.XBOX360, "VCCLX360CompilerTool", "VCCLCompilerTool") end p.w('Name="%s"', name) end + function m.configurationType(cfg) local cfgtypes = { Makefile = 0, @@ -1511,38 +1480,23 @@ end + function m.usePrecompiledHeader(cfg) - -- TODO: make a generic way to get both the project and, if - -- applicable, the file configuration from an object that might - -- be either. Then I can write more generic code. - - local prjcfg, filecfg - if cfg.config then - prjcfg = cfg.config - filecfg = cfg - else - prjcfg = cfg - filecfg = nil - end - - -- AND THEN simplify this block; I can merge some of this logic. - - if not filecfg then - -- project configuration - if not prjcfg.flags.NoPCH and prjcfg.pchheader then - p.w('UsePrecompiledHeader="%s"', iif(_ACTION < "vs2005", 3, 2)) - p.x('PrecompiledHeaderThrough="%s"', prjcfg.pchheader) - else - p.w('UsePrecompiledHeader="%s"', iif(_ACTION > "vs2003" or prjcfg.flags.NoPCH, 0, 2)) - end - else - -- file configuration - if prjcfg.pchsource == filecfg.abspath and - not prjcfg.flags.NoPCH and - prjcfg.system ~= p.PS3 + local prj, file = config.normalize(cfg) + if file then + if prj.pchsource == file.abspath and + not prj.flags.NoPCH and + prj.system ~= p.PS3 then p.w('UsePrecompiledHeader="1"') end + else + if not prj.flags.NoPCH and prj.pchheader then + p.w('UsePrecompiledHeader="%s"', iif(_ACTION < "vs2005", 3, 2)) + p.x('PrecompiledHeaderThrough="%s"', prj.pchheader) + else + p.w('UsePrecompiledHeader="%s"', iif(_ACTION > "vs2003" or prj.flags.NoPCH, 0, 2)) + end end end diff --git a/src/base/config.lua b/src/base/config.lua index b83fedac..b858d121 100755 --- a/src/base/config.lua +++ b/src/base/config.lua @@ -540,3 +540,26 @@ return flags end + + +--- +-- Returns both a project configuration and a file configuration from a +-- configuration argument that could be either. +-- +-- @param cfg +-- A project or file configuration object. +-- @return +-- Both a project configuration and a file configuration. If the input +-- argument is a project configuration, the file configuration value is +-- returned as nil. +--- + + function config.normalize(cfg) + if cfg.config ~= nil then + return cfg.config, cfg + else + return cfg, nil + end + end + +