azure-sdk-for-cpp/eng/scripts/Get-ApiViewCommandLine.ps1
2022-06-30 21:19:11 +00:00

59 lines
2.0 KiB
PowerShell

# Copyright (c) Microsoft Corporation. All rights reserved.
# SPDX-License-Identifier: MIT
# Usage: Get-ApiViewCommandLine.ps1 .\azure-sdk-for-cpp azure-identity
# Or: ..\Get-ApiViewCommandLine.ps1 . azure-core
# Or: Get-ApiViewCommandLine.ps1 ..\.. azure-security-attestation
# Or: c:\src\azure-sdk-for-cpp\eng\scripts\Get-ApiViewCommandLine.ps1 c:\src\azure-sdk-for-cpp azure-identity
param([String]$RepoPath, [String]$LibName)
[String]$SdkRoot = Resolve-Path ($RepoPath + "\sdk")
[String[]]$AllIncDirs = Get-ChildItem -Directory -Filter "inc" -Recurse $SdkRoot | Select-Object -ExpandProperty FullName
[String[]]$AllIncDirsWithoutInc = $AllIncDirs | Select-Object @{ Label="Substr"; Expression = { $_.Substring(0, $_.Length - "inc".Length) } } | Select-Object -ExpandProperty Substr
[String[]]$AllLibIncDirs = @()
for($i = 0; $i -lt $AllIncDirsWithoutInc.Length; $i++) {
$isLibDir = $true
$libDir = $AllIncDirsWithoutInc[$i]
for($j = 0; $j -lt $AllIncDirsWithoutInc.Length; $j++) {
if ($i -eq $j) {
continue
}
$StartsWith = $AllIncDirsWithoutInc[$j] + "*"
if ($libDir -Like $StartsWith) {
$isLibDir = $false
break
}
}
if ($isLibDir){
$AllLibIncDirs += $libDir + "inc"
}
}
[String]$LibIncDir = $AllLibIncDirs | Where-Object {$_ -Match ("\\" + $LibName + "\\inc") } | Select-Object -First 1
[String[]]$LibHeaders = Get-ChildItem -File -Recurse $LibIncDir | Select-Object -ExpandProperty FullName
$CmdLine = "clang++"
foreach ($header in $LibHeaders) {
$CmdLine += " " + $header
}
$CmdLine += " -Xclang -ast-dump"
foreach ($incDir in $AllLibIncDirs) {
$CmdLine += " -I " + $incDir
}
# Define an _azure_APIVIEW macro so that the public headers that depend on 3rd party headers apply a work around
# for declaring 3rd party dependencies in a minimalistic way that is sufficient for the ApiView generation.
# Otherwise, ApiView would've been including 3rd party types for review, which is not what we want.
$CmdLine += " -D_azure_APIVIEW"
$CmdLine