Files
gtav-src/tools_ng/lib/pipeline/coding/projbuild/generators/vs2010.rb
T
2025-09-29 00:52:08 +02:00

340 lines
9.6 KiB
Ruby
Executable File

require 'active_support/ordered_hash'
require 'xml'
require 'pipeline/os/path'
require 'pipeline/os/file'
require 'pipeline/coding/projbuild/project'
require 'pipeline/coding/projbuild/generators/vsutility'
require 'pipeline/coding/projbuild/generators/vs2010_sln'
require 'pipeline/coding/projbuild/generators/vs2010_generator'
require 'pipeline/coding/projbuild/generators/vs2010_projloader'
require 'pipeline/coding/projbuild/generators/vs2010_projgenerator'
module Pipeline
module ProjBuild
class ItemGroup
# Used for creating XML such as:
# <ItemGroup Label="ProjectConfigurations">
#
attr_reader :label_name
ITEM_GROUP = "ItemGroup"
def initialize(label_name = nil)
@label_name = label_name
end
def create_node()
xml_node = XML::Node.new(ITEM_GROUP)
xml_node.attributes["Label"] = label_name if label_name != nil
xml_node
end
end
class PropertyGroup
# Used for creating XML such as:
# <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RscDebug|Win32'" Label="Configuration">
# ...
# </PropertyGroup>
attr_reader :label, :condition
PROPERTY_GROUP = "PropertyGroup"
def initialize(label, condition = nil)
@label = label
@condition = condition
end
def create_node()
xml_node = XML::Node.new(PROPERTY_GROUP)
xml_node.attributes["Label"] = @label if @label != nil
xml_node.attributes["Condition"] = @condition if @condition != nil
xml_node
end
end
class ProjectConfiguration
# Used for creating XML such as:
# <ProjectConfiguration Include="BankRelease|Win32">
# <Configuration>BankRelease</Configuration>
# <Platform>Win32</Platform>
# </ProjectConfiguration>
attr_reader :configuration, :platform, :name
def initialize(configuration, platform, name)
@configuration = configuration
@platform = platform
@name = name
end
def create_node()
projconfig_node = XML::Node.new("ProjectConfiguration")
projconfig_node.attributes["Include"] = "#{@name}"
configuration_node = XML::Node.new("Configuration")
configuration_node << @configuration.to_s
projconfig_node << configuration_node
platform_node = XML::Node.new("Platform")
platform_node << @platform
projconfig_node << platform_node
projconfig_node
end
end
class GlobalProperties
# Used for creating XML such as:
# <PropertyGroup Label="Globals">
# <ProjectName>RageCore</ProjectName>
# <ProjectGuid>{A332A45A-30D2-4007-96DD-E20799ED8CC6}</ProjectGuid>
# </PropertyGroup>
attr_reader :project_name, :project_guid
GLOBALS = "Globals"
def initialize(name, guid)
@project_name = name
@project_guid = guid.gsub(/\s+/, "")
end
def create_node()
property_group = PropertyGroup.new(GLOBALS)
property_group_node = property_group.create_node()
project_name_node = XML::Node.new("ProjectName")
project_name_node << @project_name
property_group_node << project_name_node
project_guid_node = XML::Node.new("ProjectGuid")
project_guid_node << @project_guid
property_group_node << project_guid_node
property_group_node
end
end
class ImportProject
# Used for creating XML such as:
# <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
attr_reader :project_file, :label, :condition
def initialize(project_file, label = nil, condition = nil)
@project_file = project_file
@label = label
@condition = condition
end
def create_node()
default_node = XML::Node.new("Import")
default_node.attributes["Project"] = @project_file if @project_file != nil
default_node.attributes["Label"] = @label if @label != nil
default_node.attributes["Condition"] = @condition if @condition != nil
default_node
end
end
class ImportGroup
#Used for creating XML such as:
#<ImportGroup Condition="'$(Configuration)|$(Platform)'=='RscDebug|Win32'" Label="PropertySheets">
# <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
# <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
#</ImportGroup>
attr_reader :condition, :label
def initialize(label, condition = nil, projects = nil)
@label = label
@condition = condition
@projects = projects #An array of projects to be imported.
end
def create_node
group_node = XML::Node.new("ImportGroup")
group_node.attributes["Label"] = @label
group_node.attributes["Condition"] = @condition if @condition != nil
if @projects != nil
@projects.each do |project|
import_project_node = project.create_node()
group_node << import_project_node
end
end
group_node
end
end
class ConfigurationInfo
#Used to create XML such as:
# <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RscDebug|Win32'" Label="Configuration">
# <ConfigurationType>StaticLibrary</ConfigurationType>
# <CharacterSet>MultiByte</CharacterSet>
# </PropertyGroup>
attr_reader :configuration, :config_type, :character_set
CONFIGURATION = "Configuration"
CONFIGURATION_TYPE = "ConfigurationType"
CHARACTER_SET = "CharacterSet"
PLATFORM_TOOLSET = "PlatformToolset"
EXCEPTIONS_AND_RTTI = "ExceptionsAndRtti"
def initialize(configuration_name, config_type, character_set, platform_toolset = nil, exceptions_and_rtti = nil )
@configuration_name = configuration_name
@config_type = config_type
@character_set = character_set
@platform_toolset = platform_toolset
@exceptions_and_rtti = exceptions_and_rtti
end
def create_node()
configuration_condition = "'$(Configuration)|$(Platform)'=='#{@configuration_name}'"
property_group = PropertyGroup.new(CONFIGURATION, configuration_condition)
property_group_node = property_group.create_node()
config_type_node = XML::Node.new(CONFIGURATION_TYPE)
config_type_node << @config_type
property_group_node << config_type_node
character_set_node = XML::Node.new(CHARACTER_SET)
character_set_node << @character_set
property_group_node << character_set_node
if (@platform_toolset)
platform_toolset = XML::Node.new(PLATFORM_TOOLSET)
platform_toolset << @platform_toolset
property_group_node << platform_toolset
end
if @exceptions_and_rtti
exceptions_and_rtti = XML::Node.new(EXCEPTIONS_AND_RTTI)
exceptions_and_rtti << @exceptions_and_rtti
property_group_node << exceptions_and_rtti
end
property_group_node
end
end
class ProjectFileVersion
PROJECT_FILE_VERSION_NODE = "_ProjectFileVersion"
PROJECT_VERSION = "10.0.30319.1"
def initialize()
@version = PROJECT_VERSION
end
def create_node()
xml_node = XML::Node.new(PROJECT_FILE_VERSION_NODE)
xml_node << @version
xml_node
end
end
class ItemDefinitionGroup
ITEM_DEFINITION_GROUP = "ItemDefinitionGroup"
def initialize(condition)
@condition = condition
end
def create_node()
xml_node = XML::Node.new(ITEM_DEFINITION_GROUP)
xml_node.attributes["Condition"] = @condition
xml_node
end
end
class VisualStudioFilter
def initialize(path, guid)
@path = path
@unique_identifier = guid
end
def create_node()
xml_node = XML::Node.new("Filter")
xml_node.attributes["Include"] = @path
id_node = XML::Node.new("UniqueIdentifier")
id_node << @unique_identifier
xml_node << id_node
xml_node
end
end
# -----------------------------------------
# -------- DW : DEBUGGING SUPPORT ---------
# debugging stages - gives a hierarchical feel to a program along with trace info
# - I find this required when code is not modular.
class DebugTracer
attr_accessor :enabled
MAX_STAGES = 6
def initialize(max_stages = MAX_STAGES)
@max_stages = max_stages
@enabled = true # switch this shit off if you like.
@s=[]
clear_stages(0)
end
def clear_stages(stage)
stage.upto(@max_stages-1) { |i| @s[i] = 0 }
end
def next_stage(stage)
@s[stage-1] += 1
clear_stages(stage)
stage_str()
end
def stage_str()
str = ""
1.upto(@max_stages-1) { |i| str += " " if @s[i] != 0 } # padding
str += @s[0].to_s
1.upto(@max_stages-1) { |i| str += ".#{@s[i]}" if @s[i] != 0 } # each number
str
end
end
# -------- END DEBUGGING SUPPORT ---------
# ----------------------------------------
end #module ProjBuild
end #module Pipeline