axmol/build/winrt/scripts/converterutils.ps1

158 lines
3.9 KiB
PowerShell
Raw Normal View History

2014-03-29 02:33:09 +08:00
. ".\scripts\createsln.ps1"
#use MSBuild namespace
$ms = 'http://schemas.microsoft.com/developer/msbuild/2003'
$ns = @{ ms = $ms }
Function GetDirectoryName($path)
{
return [System.IO.Path]::GetFileName($path)
}
Function GetFileName($path)
{
return [System.IO.Path]::GetFileName($path)
}
Function Get-RelativePath($Folder, $FilePath)
{
Write-Verbose "Resolving paths relative to '$Folder'"
$from = $Folder = split-path $Folder -NoQualifier -Resolve:$Resolve
$to = $filePath = split-path $filePath -NoQualifier -Resolve:$Resolve
while($from -and $to -and ($from -ne $to)) {
if($from.Length -gt $to.Length) {
$from = split-path $from
} else {
$to = split-path $to
}
}
$filepath = $filepath -replace "^"+[regex]::Escape($to)+"\\"
$from = $Folder
while($from -and $to -and $from -gt $to ) {
$from = split-path $from
$filepath = join-path ".." $filepath
}
return $filepath
}
Function ReplaceText($path, $text, $replace)
{
(Get-Content $path) |
Foreach-Object {$_ -replace $text, $replace} |
Set-Content $path
}
Function LoadXmlFile($path)
{
$xml = New-Object -TypeName XML
$xml.Load($path)
return $xml
}
Function AddElement($xml, $root, $name, $value, $namespace)
{
$newEl = $xml.CreateElement($name, $namespace)
$xmlText = $xml.CreateTextNode($value)
$newEl.AppendChild($xmlText)
$root.AppendChild($newEl)
return $newEl
}
Function GetProjectGlobals($path, $namespace)
{
$xml = LoadXmlFile($path)
$globals = Select-XML -Xml $xml -XPath '//ms:PropertyGroup[@Label="Globals"]' -Namespace $namespace
return $globals
}
Function AddProjectReference($toProject, $projects)
{
$xml = LoadXmlFile($toProject)
$xdNS = $xml.DocumentElement.NamespaceURI
foreach($fromProject in $projects)
{
$globals = GetProjectGlobals $fromProject $ns
$itemGroup = $xml.CreateElement("ItemGroup", $xdNS)
$projectReference = $xml.CreateElement("ProjectReference", $xdNS)
$project = $xml.CreateElement("Project", $xdNS)
$xmlText = $xml.CreateTextNode($globals.Node.ProjectGuid)
$project.AppendChild($xmlText)
$projectReference.AppendChild($project)
$include = $xml.CreateAttribute("Include")
$dir = Split-Path -parent $toProject
$include.Value = Get-RelativePath $dir $fromProject
$projectReference.Attributes.Append($include)
$itemGroup.AppendChild($projectReference)
$root = Select-XML -Xml $xml -XPath '//ms:Project[@DefaultTargets="Build"]' -Namespace $ns
$root.Node.AppendChild($itemGroup)
}
$xml.Save($toProject)
}
Function AddPreprocessorDefine($xml, $define)
{
foreach($item in (Select-XML -Xml $xml -XPath '//ms:ItemDefinitionGroup' -Namespace $ns))
{
if(!($item.Node.ClCompile.PreprocessorDefinitions -match ($define + ';')))
{
$item.Node.ClCompile.PreprocessorDefinitions = $define + ";" + $item.Node.ClCompile.PreprocessorDefinitions
}
}
}
<#
<ItemGroup>
<ProjectReference Include="..\..\3rdparty\zlib\zlib.vcxproj">
<Project>{c38fab57-9dec-4546-bd9a-6c1dbba6c077}</Project>
</ProjectReference>
</ItemGroup>
#>
Function RemoveNode($xml, $xpath)
{
$item = Select-XML -Xml $xml -XPath $xpath -Namespace $ns
if($item)
{
$item.Node.ParentNode.RemoveChild($item.node)
}
}
Function RemoveProjectFile($path, $filename)
{
$xml = LoadXmlFile($path)
$xpath = '//ms:ClCompile [@Include="' + $filename + '"]'
RemoveNode $xml $xpath
$xml.Save($path)
$xml = LoadXmlFile($path + ".filters")
RemoveNode $xml $xpath
$xml.Save($path + ".filters")
}
Function CreateSolutionFile($path, $platform, $projects)
{
$solution = CreateSolution
$solution.solutionDir = Split-Path -parent $path
foreach($project in $projects)
{
$solution.AddProject($project)
}
$solution.Save($path, $platform)
}